Skip to content

investigate: rendering and projecting chant Ops and lifecycles — what are the views? #284

Description

@lex00

Synth rendering (graph/estate/carve lenses) keeps getting better and stays the higher priority. This issue begins the thinking on the other two chant surfaces behold barely draws: Ops and lifecycles. It is an investigation, not a build commitment.

What chant exposes today

Ops — declared in source (*.op.ts: phased activities like flociUpawsApplyhttpCheckflociDown), run on Temporal, driven by op-run / op-signal <gate> / op-status, which behold already shells for the delegated-write surface. An op has two lives: the declared DAG (phases and their order — synth-side, renderable with zero new chant surface) and the run (phase-by-phase status, gates awaiting signals — event-shaped, temporal).

Lifecycleslifecycle plan (change-set: create/update/delete/adopt per entity), lifecycle diff --live (declared vs observed, the walkthrough's observe position), lifecycle snapshot (+ deep). behold already consumes lifecyclePlan/summarizePlan for the reconcile pending view and lifecycleDiffLive for the overlay — but as data feeding existing views, not as first-class pictures.

The question this issue answers: are these separate views?

Working hypothesis to test: they are two temporal projections of one estate, and only one of them is a new view.

  • Lifecycle is the state axis — diff-shaped, "declared vs live", per-entity verdicts. That is what the drift palette and the reconcile pending panel already speak. Likely an overlay + panel refinement on the existing graph, not a separate view: change-set actions as pending badges, diff verdicts as card status, snapshot age as staleness. The join key is the entity id behold already has.
  • Ops are the action axis — run-shaped, ordered phases, gates, signals. That is lanes-shaped (/lanes already renders time as a filmstrip), not graph-shaped. Likely a view of its own: the declared op DAG as a small graph (an op is chant source; behold renders chant source), the run as a playhead over it, gates as the pending cards design: behold as the face of the operating loop — gates, ticks, symptoms, the status join (chant#1487) #234 describes — linking back to the estate nodes each phase touches.

If the hypothesis holds, the answer is: lifecycle = deepen the estate view; ops = one new view (op DAG + run state) that cross-links into it.

What the investigation should produce

  1. An inventory of exactly what each CLI surface emits (JSON shapes, what carries entity ids, what doesn't — anything without an IR-joinable id needs an ask into chant now, same lesson as design: behold as the face of the operating loop — gates, ticks, symptoms, the status join (chant#1487) #234's symptom record).
  2. A decision on the view split (the hypothesis above, confirmed or corrected), with one mock per surface.
  3. The smallest spike worth shipping — candidate: render a declared *.op.ts DAG in the existing graph pane, since it needs no run, no Temporal, no new chant surface.

Relationship to #234

#234 is the far end of this: the operating loop (chant#1487) turns ops+lifecycle into gates-as-facts, ticks, and symptom records. Nothing there starts until chant lands those. This issue is the near-term half — what can be drawn from the surfaces chant ships today — and whatever view split it decides becomes the frame #234's cards and ticks land in.

🤖 Filed by Claude Code from the 2026-08-10 session

https://claude.ai/code/session_01UXwApfRA4Pvoou5Ajj8qHV

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions