You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
orchestrate(v3.0): partition FAIL #3 closed — the receipt had no producer
Round 3 found four judgment-layer defects the validator cannot see, and one of
them would have deadlocked every run:
- The gate receipt had a home (task-6's schema) and a consumer (task-17's
postcondition) and NO PRODUCER. With no writer, every receipt is missing, the
authority re-derives for every job, and integration never completes. task-9's
Gate stage now emits the six fields and Record persists them.
- task-17's own acceptance contradicted itself on the missing case -- 're-derive
and that verdict wins' beside 'refuse until every job has a valid receipt'.
MISSING now means RE-DERIVE (derived verdict authoritative); only a PRESENT
receipt whose digests disagree is refused outright, because that is a forged
claim rather than an absent one.
- The declared waves lied: round 2 added task-16 depends_on task-4 without
moving task-16 out of wave 2, ahead of its own prerequisite. Recomputed to
seven waves.
- Manifest AC-02 still demanded the mode-scoped default the spec had deleted,
and two jobs explicitly disclaim it -- the reviewer would have been asked to
rule on a deliberately unimplemented requirement.
- AC-06's repo-wide sweep was contradicted by task-14, which correctly leaves
the unamended invariant in CHANGELOG history. Scoped to live files.
Also: task-17 drops write access to scope-check.py (invoking needs none, and
task-15 consumes that matcher one wave earlier); AC-24 and AC-25 give the
integration authority and the cross-vendor path feature-level criteria they
lacked; task-0 names the third target its CI glob activates; the plan's
partition map is refreshed for tasks 15-17.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/superpowers/execution/2026-09-01-v3.0-triage-tests-orchestration/manifest.yaml
+16-10Lines changed: 16 additions & 10 deletions
Original file line number
Diff line number
Diff line change
@@ -24,11 +24,11 @@ audits:
24
24
25
25
acceptance_criteria:
26
26
- "AC-01: `compound-v-preeval.py` emits three decision values; a selftest covers all 9 matrix cells, the unknown/fail-closed case, and that **any fired override forces FULL** even when the bands read `low`/`low`."
27
-
- "AC-02: `compound-v-validate-manifest.py` FAILS on a missing or malformed `triage` block and on a `taxonomy_digest` mismatch. The flag ships default-off in every mode (turning it on before the materializer emits the block would red the e2e suite inside the task that adds it), is flipped on for `--mode pre-dispatch` only once the materializer lands, and **`/v:dispatch` passes it in every mode** so no future run repeats 3.0's bootstrap exemption. A planted violation is shown to fail."
27
+
- "AC-02: `compound-v-validate-manifest.py` FAILS on a missing or malformed `triage` block and on a `taxonomy_digest` mismatch. The flag ships default-off in every mode (turning it on before the materializer emits the block would red the e2e suite inside the task that adds it), **`/v:dispatch` passes it in every mode** so no future run repeats 3.0's bootstrap exemption. A planted violation is shown to fail."
28
28
- "AC-03: `compound-v-fastpath-materialize.py` emits a `triage` block and its own selftest passes; the 11 historical files are allowlisted by id, never back-filled."
29
29
- "AC-04: `/v:triage` exists, writes and commits a record, and `/v:orchestrate` obtains one when absent."
30
30
- "AC-05: The auto-route class implements all nine predicates of A4, including floor-passed and full post-diff re-validation of predicates 2/5/6/line-budget. A test proves a change that outgrows the class is demoted and the demotion recorded. The `sensitive` set is read from the taxonomy, never hardcoded, and this repo's taxonomy lists `skills|agents|commands` markdown. A selftest proves the circuit breaker disarms auto-route once the rolling demotion rate exceeds the threshold, and that it never delays the first decision."
31
-
- "AC-06: `phase-preeval.md`, `SKILL.md`, `rationalization-table.md` and `routing-policy.md` all carry the amended Iron Invariant #4; no file still asserts the unamended form."
31
+
- "AC-06: `phase-preeval.md`, `SKILL.md`, `rationalization-table.md` and `routing-policy.md` all carry the amended Iron Invariant #4; no LIVE file still asserts the unamended form — the four prose files plus `preeval.py`, the record schema and `pre-eval-config.md`. CHANGELOG history and archived run artifacts under `docs/superpowers/execution/**/jobs/` are history and are NOT rewritten."
32
32
- "AC-07: `triage-outcomes.jsonl` receives `predicted` and `actual` events, and SCOPED is its own cohort in `compound-v-triage-outcomes.py`."
33
33
- "AC-08: `.claude/compound-v-impact-taxonomy.yaml` exists here, produced by `/v:onboard draft-taxonomy`, and a live `--score-only` probe returns a non-`unknown` band."
34
34
- "AC-09: `run_test_floor` gains a producer, returns below the `changed_paths` computation, and runs impacted ∪ previously-failing ∪ newly-added. No second floor is introduced."
@@ -45,6 +45,8 @@ acceptance_criteria:
45
45
- "AC-20: `hooks/lane-guard.sh` denies a `Write`/`Edit`/`Bash` write outside the acting job's `write_allowed`, resolving the job from `agent_id` with a `cwd`-to-worktree fallback, and reusing `compound-v-scope-check.py`'s matcher rather than a second glob engine. A test proves a planted out-of-lane write is denied, and a second proves a shell write via `sed -i` is caught by the `Bash` matcher."
46
46
- "AC-21: The git-derived verdict is retained and still authoritative; no document claims the deny replaces it."
47
47
- "AC-22: `UserPromptSubmit` invokes triage, and `PostCompact` supplies resume context using the summary it receives."
48
+
- "AC-24: the D1 integration authority exists as code — every job carries exactly one gate receipt bound to baseline commit, realised commit and diff digest; a forged receipt is rejected and a missing one triggers re-derivation, both proven on planted cases."
49
+
- "AC-25: the cross-vendor path survives the engine swap — a non-`claude` job's clamp admits its worker script, the lane guard does not deny that invocation, and its workflow agent runs `isolation: direct` so the worker owns its own worktree."
48
50
- "AC-23: README, CHANGELOG and `AGENTS.md` state the Claude Code ≥ 2.1.219 floor and that Feature B's defaults are principle-derived, the '20,000 tests' observation being unreproduced."
49
51
50
52
routing_stance: balanced
@@ -57,9 +59,12 @@ max_parallel: 5
57
59
# in wave 2 -- see its acceptance line about preserving the commit-before-dependent rule.
# wave 4 : task-16 (needs task-4 — added in round 2, which is
65
+
# what moved it out of wave 2)
66
+
# wave 5 : task-13-review (serial)
67
+
# wave 6 : task-14-release (serial)
63
68
64
69
jobs:
65
70
- id: task-0-contract
@@ -88,7 +93,7 @@ jobs:
88
93
- "the historical 11 manifests are allowlisted by id, never back-filled"
89
94
- "test_contract and per-job test_scope validated; floor_only never empty"
90
95
- "CI executes tests/ RECURSIVELY and for both extensions — a flat tests/*.sh glob misses tests/v2.9-e2e/*.py, which has never run in CI"
91
-
- "the two tests the glob newly activates (test-codex-review-schema-default.sh, test-session-banner-staleness.sh) are verified green BEFORE wiring it — neither is in this lane and a red one would fail this job for reasons it cannot fix"
96
+
- "the THREE targets the recursive glob newly activates (test-codex-review-schema-default.sh, test-session-banner-staleness.sh, and tests/v2.9-e2e/test_fastpath_and_escalation.py — the last is task-3 lane, concurrently modified) are verified green BEFORE wiring it — neither is in this lane and a red one would fail this job for reasons it cannot fix"
92
97
- "the new step is proven to fail on a planted violation"
93
98
94
99
- id: task-1-preeval
@@ -323,6 +328,7 @@ jobs:
323
328
- "the emitted script USES the native budget global: it guards its fan-out on budget.remaining() and stops spawning rather than running past the ceiling. We are handing execution to a runtime that HAS a spend ceiling; not taking it would be leaving the only real cost control on the table"
324
329
- "the emitted script USES phase() and log() so the native progress tree and narrator line are populated — progress visibility stops being something we render from our own state after the fact"
325
330
- "whatever replaces the deleted batching prose PRESERVES the commit-before-dependent rule — a prerequisite merge-back only STAGES, so a dependent worktree created at HEAD would not see it. Deleting that rule mid-run breaks the very ordering this run depends on"
331
+
- "the Gate stage PRODUCES the receipt: it returns baseline_commit, realised_commit, diff_digest, verdict, raw_stdout and exit_code, and Record persists them into the job result. With no producer every receipt is missing, task-17 re-derives for every job, and integration never completes for any run"
326
332
- "compound-v-emit-workflow.py carries --selftest and is found by the CI sweep over scripts/*.py"
327
333
- "/v:dispatch invokes the validator WITH --require-triage in EVERY mode — this is the mechanism that stops a future run repeating 3.0 own bootstrap exemption"
328
334
- "task-6 job_spec test_contract slice propagated into the dispatcher canonical field list"
@@ -462,7 +468,6 @@ jobs:
462
468
timeout_sec: 5400
463
469
write_allowed:
464
470
- "scripts/compound-v-integration-gate.py"
465
-
- "scripts/compound-v-scope-check.py"
466
471
- "tests/test-integration-gate.sh"
467
472
read_allowed:
468
473
- "docs/superpowers/specs/**"
@@ -474,10 +479,11 @@ jobs:
474
479
acceptance:
475
480
- "implements spec D1: every original job must have exactly ONE gate receipt bound to its baseline commit, its realised commit and a diff digest"
476
481
- "where a receipt is MISSING, null, or its digests disagree with the tree, this gate runs compound-v-scope-check.py ITSELF and that verdict wins — a workflow Gate agent returns a schema-valid verdict that proves JSON shape, never that the check ran"
477
-
- "integration is REFUSED until every job has a valid receipt; a job that vanished to null is treated exactly like a failed one"
482
+
- "MISSING is not INVALID: a missing or null receipt makes this gate RE-DERIVE from git, and the derived verdict is authoritative — a clean re-derivation lets integration proceed, a violation BLOCKS it. Only a PRESENT receipt whose digests disagree with the tree is refused outright, because that is a forged claim rather than an absent one"
483
+
- "INVOKES scripts/compound-v-scope-check.py as a subprocess and does NOT modify it — that matcher is consumed by task-15's lane guard, which merges first, and re-derivation needs no write access to it"
478
484
- "carries --selftest and is picked up by the CI sweep over scripts/*.py"
479
485
- "a planted forged receipt (valid shape, wrong digest) is REJECTED — proven, not asserted"
480
-
- "a planted missing receipt causes the gate to re-derive and BLOCK — proven, not asserted"
486
+
- "a planted missing receipt causes RE-DERIVATION, and a BLOCK only where that re-derivation finds a real violation. Both branches proven, not asserted"
481
487
482
488
- id: task-13-review
483
489
title: "Three-pass Review Gate over the composite"
@@ -508,7 +514,7 @@ jobs:
508
514
read_allowed:
509
515
- "**"
510
516
acceptance:
511
-
- "reports a verdict for EVERY criterion by its AC-NN id, ALL TWENTY-THREE, not a blanket 'criteria met' — the ids are copied verbatim from the spec so the two lists cannot drift"
517
+
- "reports a verdict for EVERY criterion by its AC-NN id, ALL TWENTY-FIVE, not a blanket 'criteria met' — the ids are copied verbatim from the spec so the two lists cannot drift"
| Z |`CHANGELOG.md`, `plugin.json`, `marketplace.json`, `README.md`, `AGENTS.md`| everything |
174
-
175
-
**Disjointness:** every write path appears exactly once. `compound-v-validate-manifest.py` and `validate.yml` are the only genuine shared resources and belong to Task 0 alone, which runs serially first. Tasks 2, 3 and 4 depend on Task 1's new decision constant but do not write its file — they consume it as a documented interface.
176
-
177
-
**Ordering:** 0 → {1, 5, 6, 8, 9, 10, 11, 12} in parallel → {2, 3, 7} (need 1 or 6) → 4 (needs 0–3) → Review Gate → Z.
158
+
> **The manifest is dispatch authority.** This map is kept for readers; where it and
0 commit comments