Skip to content

Reference — the discovery sidecar, plan-tree, and roster

Look up discovery state slots, statuses, plan-tree shape, verdicts, specialist roster, gates, and bounds.

The discovery loop keeps its working state in a typed sidecar. There is one plan-tree per initiative (a forest, not one master tree); initiatives cross-link by stable id.

  • Tier 1 — _state/ (the working store, durable while active): blackboard, open-questions, traceability, decision-log, meta, plan-tree.
  • Tier 2 — committed artifacts (durable beyond the run): domain-framing, scope-boundary, journey-map, service-blueprint, screens/, decision-brief, backlog.

Layout (paths resolved config → default → discover-by-marker; dirs created lazily): <discovery-root>/<initiative-slug>/_state/… with the committed artifacts beside it.

Every instance carries a schema_version stamp (0.1 today). Downstream consumers — the traceability lint, work-loop, the release loop — read instances by convention + the stamp, never importing the definition.

SlotShape (key fields)
blackboardtyped artifact slots: {id, type, status, version, produced_by, lens, path?, round_last_touched, parent_id?} + a meta block
open-questions{id, raised_by, target_discipline, question, status, resolution, round} — the queue lenses answer each other through (never chat)
traceabilitythe lint-authoritative JSON: {root, leaf_kind, nodes:[{id, kind, backed_by}], edges:[{from, to}]} — an orphan is a defect
decision-log{ts, gate, decision, ratified_by, reversibility_class, rationale, prev_hash, hash} — append-only, hash-chained, actor-attested
meta{round, round_cap, cost_budget, cost_spent, gate, status, saturation} — counters the controller increments (no runtime)

Two extension slots: a validation-plan (assumption → kill-condition → activity → validation-status) and the decision-brief’s required success_metrics slot (a brief cannot reach G3 without it).

NamespaceValues
slot statusdraft | proposed | ratified | stale | rejected
node lifecycledraft → diverging → converging → ratified | stale, plus parked / abandoned
node validation statushypothesis → validating → validated | refuted
meta gate-stateawaiting-human / paused-at-bound / stalled-at-cap

A node = an intent slot + parent_id + the four per-node namespaces above + a sub-idea index (open / parked / done) + the divergence shapes (a candidate set + a selection, not-chosen retained) + a validation hook (kill-condition + real-world activity). The controller copies the template per initiative; the traceability lint walks it. No planner engine — the template is the mechanism.

approve / approve-with-constraint / redirect (steer) / explore-alternatives / abandon / park (defer) / extend (override). Every blackboard-changing verdict reuses one cascade mechanism (walk traceability out-edges → mark stale → re-run only the affected lenses), bound by two guards: impact-before-blast and no-jumping-ahead.

RoleAgent / skillRequired?
Controllerdiscovery-lead (agent)the loop
Divergenceexplore-options (skill)the loop
Validationplan-validation (skill)the loop
Threat / compliance lensdiscovery-threat-reviewer (agent)required at G2
Reliability / operability lensdiscovery-reliability-reviewer (agent)required at G2
UX/design lensexperience pack (+ experience-reviewer)optional, detect-and-degrade
Architecture lensarchitect pack (+ design-reviewer)optional, detect-and-degrade
Research lensresearch packoptional, detect-and-degrade

The two discovery reviewers are distinct agents from work-loop’s code security-reviewer / quality-engineer and degrade only in depth, never to nothing. The CHARTER’s “three reviewers is the ceiling” stays a work-loop/code-review cap; the discovery roster is a tracked exception.

GatePhaseHuman acts?
G0Intakeconsent — ratify the value seed
G1Strategyauto unless a risk trigger fires
G1.5Domain & MVP (after divergence)consent — ratify the altitude/MVP bet
G2Convergence (after self-coverage + reviewers)consent — ratify the “what”; adjudicate value conflict
G3Handoffhand off to work-loop

Bounds (round / cost / concentration ~40% / depth / breadth) are pause-and-confirm gates, never auto-terminals: hitting one sets paused-at-bound and surfaces the verdict set.