feat patch flow feat/flow-projection-pilot #14 / 18
aaronrene · 2 days ago · Jun 20, 2026 · Diff

feat(flow): anti-drift diff demo evidence + config.flow.visible_scopes (7A-12)

Run the FLOW-PROJECTION-GENERATOR-CONTRACT-7A-11 §10 acceptance bar end-to-end on our own repo guidance via the real `knowtation flow project` CLI (project-scoped flow_overseer_handover). All six criteria PASS: generate; edit canonical + bump 0.1.0->0.2.0 -> diff carries only the canonical change + marker version; delete -> regenerate byte-identical; hand-edit caught (drift:edited, exit 1); staleness 0.1.0<0.2.0 (exit 1); honest per-harness fidelity. No secrets in any rendered byte.

Closes a contract-specified wiring gap: lib/config.mjs now surfaces flow.visible_scopes (the local-config identity channel the CLI passes as visibleScopes; deny-by-default; empty/malformed -> undefined) + 5 test/config.test.mjs cases. The operator grant lives in the muse/git-ignored config/local.yaml.

Evidence + reproducible driver under docs/evidence/7A-12/ (README, run-demo.sh, both harness projections, clean diffs, hand-edited artifact, full transcript). Demo only: shipped flows/starter, live store, real AGENTS.md, and .cursor/rules untouched.

Store finding (follow-up, not fixed here): the 7A-10b store keys step bodies by step_id only (not (step_id, version)), so step-field edits cannot diverge across versions in one store -> recommend a 7A-10c versioned-step-keying slice. Does not block 7A-13.

sha256:aec0c7713d0e039300bbb6190f14cc053bfdff9f77a2b545baded99ed972ee57 sha
+84 ~1 symbols
sha256:e1365f84220c2aa4bc566411037589f910006a913735526f6b314766a80625cd snapshot
+84
symbols added
~1
symbol modified
0
dead code introduced
Semantic Changes 85 symbols
~ docs/evidence/7A-12/README.md .md 14 symbols added
+ Anti-drift diff demo — acceptance evidence (Phase 7A, Step 7A-12) section Anti-drift diff demo — acceptance evidence (Phase 7A, Step 7A-12) L1–132
+ Acceptance criteria — results section Acceptance criteria — results L37–75
+ Security checks section Security checks L62–75
+ The clean diff (criterion 2) — the keystone proof section The clean diff (criterion 2) — the keystone proof L48–62
+ code[diff] variable variable code[diff] L55–61
+ table section table L39–47
+ Files section Files L121–132
+ table section table L123–132
+ Reproduce section Reproduce L110–121
+ code[bash] variable variable code[bash] L112–116
+ Simple summary (plain language) section Simple summary (plain language) L14–24
+ Store finding (follow-up, not fixed here — scope fence: demo only) section Store finding (follow-up, not fixed here — scope fence: demo only) L90–110
+ Technical summary section Technical summary L24–37
+ What this demo required (and the one wiring gap it closed) section What this demo required (and the one wiring gap it closed) L75–90
+ Overseer handover section Overseer handover L1–94
+ Step 1 section Step 1 L7–23
+ Step 2 section Step 2 L23–37
+ Step 3 section Step 3 L37–50
+ Step 4 section Step 4 L50–64
+ Step 5 section Step 5 L64–79
+ Step 6 section Step 6 L79–94
+ Overseer handover section Overseer handover L1–92
+ Step 1 section Step 1 L7–23
+ Step 2 section Step 2 L23–37
+ Step 3 section Step 3 L37–50
+ Step 4 section Step 4 L50–64
+ Step 5 section Step 5 L64–79
+ Step 6 section Step 6 L79–92
+ Overseer handover section Overseer handover L1–92
+ Step 1 section Step 1 L7–23
+ Step 2 section Step 2 L23–37
+ Step 3 section Step 3 L37–50
+ Step 4 section Step 4 L50–64
+ Step 5 section Step 5 L64–79
+ Step 6 section Step 6 L79–92
+ 0 section 1a. generate cursor_rule @ v0.1.0 L5–15
+ Overseer handover section Overseer handover L108–315
+ Step 1 section Step 1 L114–130
+ section Step 1: Snapshot truth per repo, confirmed via muse -C (not ambient). L222–239
+ Step 2 section Step 2 L130–144
+ section Step 2: Record the current step, next action, and open gates/blockers. L239–252
+ Step 3 section Step 3 L144–157
+ section Step 3: List the boundaries and the cross-repo wiring touched this session. L252–265
+ Step 4 section Step 4 L157–171
+ section Step 4: Update the durable docs FIRST. L265–279
+ Step 5 section Step 5 L171–186
+ section Step 5: Regenerate the handover block into the living file from the now-current docs. L279–293
+ Step 6 section Step 6 L186–222
+ --check baseline cli_runbook (expect drift=false, exit 0) section 1c. --check baseline cli_runbook (expect drift=false, exit 0) L205–212
+ 0) section 2a. regenerate cursor_rule @ latest (v0.2.0) L212–222
+ section Step 6: Emit the block as the first message of the next chat. L293–315
+ 0) section 2b. regenerate cli_runbook @ latest (v0.2.0) L313–315
+ Overseer handover@L315 section Overseer handover L315–434
+ Step 1 section Step 1 L321–337
+ section Step 1: Snapshot truth per repo, confirmed via muse -C (not ambient). L426–434
+ 0 (cli_runbook) — expect only marker version + verification line section 2d. diff v0.1.0 -> v0.2.0 (cli_runbook) — expect only marker version + verification line L430–434
+ Step 2 section Step 2 L337–351
+ Step 3 section Step 3 L351–364
+ Step 4 section Step 4 L364–378
+ Step 5 section Step 5 L378–393
+ Step 6 section Step 6 L393–426
+ 0 (cursor_rule) — expect only marker version + verification line section 2c. diff v0.1.0 -> v0.2.0 (cursor_rule) — expect only marker version + verification line L412–426
+ Overseer handover@L434 section Overseer handover L434–574
+ Step 1 section Step 1 L442–456
+ 0 section 3a. regenerate deleted cursor_rule @ v0.2.0 L446–456
+ section Step 1: Snapshot truth per repo, confirmed via muse -C (not ambient). L456–473
+ section Step 2: Record the current step, next action, and open gates/blockers. L473–486
+ section Step 3: List the boundaries and the cross-repo wiring touched this session. L486–499
+ section Step 4: Update the durable docs FIRST. L499–513
+ section Step 5: Regenerate the handover block into the living file from the now-current docs. L513–527
+ section Step 6: Emit the block as the first message of the next chat. L527–574
+ byte-identical after delete+regenerate (expect no output / identical) section 3b. byte-identical after delete+regenerate (expect no output / identical) L547–550
+ --check hand-edited cli_runbook (expect drift=true edited, exit 1) section 4. --check hand-edited cli_runbook (expect drift=true edited, exit 1) L550–556
+ 0 (expect stale=true, exit 1) section 5. --check pinned v0.1.0 vs latest v0.2.0 (expect stale=true, exit 1) L556–563
+ cursorrule fidelity (expect whennottorun dropped) section 6a. cursorrule fidelity (expect whennottorun dropped) L563–568
+ clirunbook fidelity (expect whennottorun expressed, not dropped) section 6b. clirunbook fidelity (expect whennottorun expressed, not dropped) L568–574
+ section Step 1: Snapshot truth per repo, confirmed via muse -C (not ambient). L15–32
+ section Step 2: Record the current step, next action, and open gates/blockers. L32–45
+ section Step 3: List the boundaries and the cross-repo wiring touched this session. L45–58
+ section Step 4: Update the durable docs FIRST. L58–72
+ section Step 5: Regenerate the handover block into the living file from the now-current docs. L72–86
+ section Step 6: Emit the block as the first message of the next chat. L86–108
+ 0 section 1b. generate cli_runbook @ v0.1.0 L106–108
~ lib/config.mjs .mjs 1 symbol modified
~ test/config.test.mjs .mjs 1 symbol added
+ loadFlowConfig function function loadFlowConfig L247–271

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:aec0c7713d0e039300bbb6190f14cc053bfdff9f77a2b545baded99ed972ee57 --body "your comment"