Repository navigation
feat(turn-close): π± bootstrap seeds Γ3 β detect a missing ING board / ARCHITECTURE.json by store check and ask for it - #438
Merged
Conversation
β¦ 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
turn-close injectnow checks each governance STORE for absence and emits one seed line permissing one (was: the arch tree only):
ARCHITECTURE.json/.mdat all (designSsot) β author the current-state tree (existing).ARCHITECTURE.mdonly βlegs.archis armed butlegs.convis not, so the 𧬠recurrencestore (
convergence.records[], JSON-only) stays silent-dead β ask to promote toARCHITECTURE.json. β β‘ share the shippedarchSeedknob.refs/heads/ing(ingBoardActive) β say the π ING leg is OFF and name the armingaction (
sidecar ing add). New opt-OUT knobingSeed(default true, likearchSeed).WHY the ING seed: 1d627be assumed ING self-starts β store = a git ref
ing addcreates on thespot, demand = engine-shipped commons
ing-board. Only half holds. Zero creation friction is anecessary condition, not a sufficient one: commons is generic, board-state-blind text, and
ing injectis silent with no items, so nothing ever says "THIS repo has no board and the π legis 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 injectalready rides hooks.json + setup.ts + pi/sidecar.ts everyturn. 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:falsesilence eachindependently Β· after
sidecar ing addthe 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-1updated in place β the "ING self-starts" clause was the wrong half of the lesson.
Follow-up (not in this PR): commons
ing-boardstill says "repo-rootING.jsonl", pre-refwording 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