Gap
The painter already reads a reserved _status attr and colours nodes (good/warn/accent/selected/neutral — paint/render.ts). chant graph --live --overlay (and chant #821's source-anchored overlay) tags nodes with exactly this: good=managed, warn=foreign, accent=pending. So the colours already appear — but there's no drift semantics: no legend, no managed/foreign/pending labelling, no treatment that reads foreign as "outside the declared set."
Want
First-class overlay rendering when the IR carries overlay status:
- A legend mapping colour → managed / foreign / pending.
- Distinct styling for foreign (provisioned, undeclared) — e.g. dashed/outside — vs pending (declared, not yet live).
- Keep the generic
_status fallback for concept diagrams (accent/warn as today).
Acceptance
- Feeding an overlay IR (
chant graph --live --overlay, or chant #821) renders managed/foreign/pending with a legend.
- Foreign vs pending are visually distinguishable, not just both "not-green".
- Non-overlay IRs render unchanged.
Context
Directly on the behold path: behold feeds pinhole the source-anchored overlay IR (chant #821) and expects legible drift. The colours are wired; this adds the meaning.
Gap
The painter already reads a reserved
_statusattr and colours nodes (good/warn/accent/selected/neutral—paint/render.ts).chant graph --live --overlay(and chant #821's source-anchored overlay) tags nodes with exactly this:good=managed,warn=foreign,accent=pending. So the colours already appear — but there's no drift semantics: no legend, no managed/foreign/pending labelling, no treatment that reads foreign as "outside the declared set."Want
First-class overlay rendering when the IR carries overlay status:
_statusfallback for concept diagrams (accent/warn as today).Acceptance
chant graph --live --overlay, or chant #821) renders managed/foreign/pending with a legend.Context
Directly on the behold path: behold feeds pinhole the source-anchored overlay IR (chant #821) and expects legible drift. The colours are wired; this adds the meaning.