Skip to content

feat(turn-close): 🌱 bootstrap seeds Γ—3 β€” detect a missing ING board / ARCHITECTURE.json by store check and ask for it - #438

Merged
dancinlife merged 1 commit into
mainfrom
feat/ing-bootstrap-seed
Jul 28, 2026
Merged

dancinlife merged 1 commit into
mainfrom
feat/ing-bootstrap-seed

Conversation

@dancinlife

Copy link
Copy Markdown
Contributor

turn-close inject now checks each governance STORE for absence and emits one seed line per
missing one (was: the arch tree only):

  • β‘  no ARCHITECTURE.json/.md at all (designSsot) β†’ author the current-state tree (existing).
  • β‘‘ ARCHITECTURE.md only β†’ legs.arch is armed but legs.conv is not, so the 🧬 recurrence
    store (convergence.records[], JSON-only) stays silent-dead β†’ ask to promote to
    ARCHITECTURE.json. β‘ β‘‘ share the shipped archSeed knob.
  • β‘’ no refs/heads/ing (ingBoardActive) β†’ say the πŸ”„ ING leg is OFF and name the arming
    action (sidecar ing add). New opt-OUT knob ingSeed (default true, like archSeed).

WHY the ING seed: 1d627be assumed ING self-starts β€” store = a git ref ing add creates on the
spot, demand = engine-shipped commons ing-board. Only half holds. Zero creation friction is a
necessary condition, not a sufficient one: commons is generic, board-state-blind text, and
ing inject is silent with no items, so nothing ever says "THIS repo has no board and the πŸ”„ leg
is disarmed". The seed is that repo-specific "leg OFF + here is the arming action" signal.

CONDITIONAL imperative, deliberately: the line asks for a board only when the turn actually has
multi-step/handoff work, and says in so many words not to add an empty/fake item to silence it.
An unconditional "create a board" would let a one-shot repo buy silence with a fabricated board,
arming the Stop gate against fiction β€” the ARCH-PLACEHOLDER failure mode, with no lint to catch
it. There is no deterministic "this turn is multi-step" signal inside UserPromptSubmit (and Pi
passes a synthesized payload), so this is solved by wording, not by a firing condition.

No hook rewiring: turn-close inject already rides hooks.json + setup.ts + pi/sidecar.ts every
turn. Seeds are rendered whole or not at all (never truncated Β· inject-lint) and are dead
branches once the store exists (0B/turn).

QA (all pass): fresh repo β†’ 2 seeds, no trio Β· ARCHITECTURE.md-only repo β†’ trio(arch leg) +
promote seed + ING seed Β· fully-armed repo β†’ 0B Β· archSeed:false/ingSeed:false silence each
independently Β· after sidecar ing add the ING seed disappears and the ref exists.

Design delegated to fable+sol. They split on whether an ING seed should exist at all (sol: commons
already covers it); taken fable's call, backed by the user's request and by commons being
board-state-blind. Sol's ARCHITECTURE.md-only gap is adopted as β‘‘. Convergence turn-close-ts-1
updated in place β€” the "ING self-starts" clause was the wrong half of the lesson.

Follow-up (not in this PR): commons ing-board still says "repo-root ING.jsonl", pre-ref
wording that nudges the hand-written worktree file the seed warns against. Correcting it trips
COMMONS-OVERSIZED (config/commons.md is 11486B vs the 10300B cap, already over on main), so the
wording fix belongs with the commons trim it needs.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

… ARCHITECTURE.json by store check and ask for it

`turn-close inject` now checks each governance STORE for absence and emits one seed line per
missing one (was: the arch tree only):

- β‘  no `ARCHITECTURE.json`/`.md` at all (`designSsot`) β†’ author the current-state tree (existing).
- β‘‘ `ARCHITECTURE.md` only β†’ `legs.arch` is armed but `legs.conv` is not, so the 🧬 recurrence
  store (`convergence.records[]`, JSON-only) stays silent-dead β†’ ask to promote to
  `ARCHITECTURE.json`. β‘ β‘‘ share the shipped `archSeed` knob.
- β‘’ no `refs/heads/ing` (`ingBoardActive`) β†’ say the πŸ”„ ING leg is OFF and name the arming
  action (`sidecar ing add`). New opt-OUT knob `ingSeed` (default true, like `archSeed`).

WHY the ING seed: 1d627be assumed ING self-starts β€” store = a git ref `ing add` creates on the
spot, demand = engine-shipped commons `ing-board`. Only half holds. Zero creation friction is a
necessary condition, not a sufficient one: commons is generic, board-state-blind text, and
`ing inject` is silent with no items, so nothing ever says "THIS repo has no board and the πŸ”„ leg
is disarmed". The seed is that repo-specific "leg OFF + here is the arming action" signal.

CONDITIONAL imperative, deliberately: the line asks for a board only when the turn actually has
multi-step/handoff work, and says in so many words not to add an empty/fake item to silence it.
An unconditional "create a board" would let a one-shot repo buy silence with a fabricated board,
arming the Stop gate against fiction β€” the ARCH-PLACEHOLDER failure mode, with no lint to catch
it. There is no deterministic "this turn is multi-step" signal inside UserPromptSubmit (and Pi
passes a synthesized payload), so this is solved by wording, not by a firing condition.

No hook rewiring: `turn-close inject` already rides hooks.json + setup.ts + pi/sidecar.ts every
turn. Seeds are rendered whole or not at all (never truncated Β· inject-lint) and are dead
branches once the store exists (0B/turn).

QA (all pass): fresh repo β†’ 2 seeds, no trio Β· `ARCHITECTURE.md`-only repo β†’ trio(arch leg) +
promote seed + ING seed Β· fully-armed repo β†’ 0B Β· `archSeed:false`/`ingSeed:false` silence each
independently Β· after `sidecar ing add` the ING seed disappears and the ref exists.

Design delegated to fable+sol. They split on whether an ING seed should exist at all (sol: commons
already covers it); taken fable's call, backed by the user's request and by commons being
board-state-blind. Sol's `ARCHITECTURE.md`-only gap is adopted as β‘‘. Convergence turn-close-ts-1
updated in place β€” the "ING self-starts" clause was the wrong half of the lesson.

Follow-up (not in this PR): commons `ing-board` still says "repo-root `ING.jsonl`", pre-ref
wording that nudges the hand-written worktree file the seed warns against. Correcting it trips
COMMONS-OVERSIZED (config/commons.md is 11486B vs the 10300B cap, already over on main), so the
wording fix belongs with the commons trim it needs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@dancinlife
dancinlife merged commit 1e02e8f into main Jul 28, 2026
@dancinlife
dancinlife deleted the feat/ing-bootstrap-seed branch July 28, 2026 11:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant