Skip to content

feat(dispatcher): FRS S1 — §2.7 advance derives the stage from the frontier (consumer binding, never a fork) - #1488

Merged
artyhoo merged 4 commits into
stagingfrom
feature/frontier-residue-sweep-s1-eb3104
Aug 19, 2026
Merged

feat(dispatcher): FRS S1 — §2.7 advance derives the stage from the frontier (consumer binding, never a fork)#1488
artyhoo merged 4 commits into
stagingfrom
feature/frontier-residue-sweep-s1-eb3104

Conversation

@artyhoo

@artyhoo artyhoo commented Aug 19, 2026

Copy link
Copy Markdown
Owner

What

S1 of the frontier-residue-sweep umbrella: /dispatcher §2.7 «Advance» now derives the next stage from the dependency-frontier emitter — advance-frontier.sh is a pure CONSUMER of /pipeline's frontier.sh (never a fork), night-mode delegates its advance step through §2.7, and a 14-arm vitest suite makes the no-fork / no-marker-trust constraints executable. Install-sh baselines regenerated for the shipped night-mode edit (one hash row ×8 lanes; dispatcher files are not on the consumer install surface — 0 fingerprint rows, verified not an omission).

Commits: dd75881dc0 (helper + suite, Prior-art: REUSE) · c3555e45d1 (dispatcher §2.7 + night-mode bindings) · 2e3357b98d (snapshot regen) · c250bffc90 (cold-review riders: §2.6→§2.7 MO_FRONTIER_DONE feed-forward clause + ADVANCE-DEGRADE unverified-done clause).

Live proof (T-FRS1-A)

Recorded dispatcher-path run on the PR head (c250bffc90), host checkout, real umbrella — stage choice traceable to a FRONTIER: line, per the kickoff's live-proof requirement:

=== frontier: frontier-residue-sweep ===
kickoff: .claude/orchestrator-prompts/frontier-residue-sweep/kickoff.md (104 lines)
done-md: no
depends-column: present (header line 31)
stages: 5
STAGE S1 done=no deps=- unmet=- unresolved=no label="S1 executors" raw="—"
STAGE S2 done=no deps=- unmet=- unresolved=no label="S2 spellings" raw="—"
STAGE S3 done=no deps=- unmet=- unresolved=no label="S3 stale claims" raw="—"
STAGE S4 done=no deps=- unmet=- unresolved=no label="S4 registry gate" raw="—"
STAGE S5 done=no deps=S1 unmet=S1 unresolved=no label="S5 evals" raw="S1 (its output shape is what an eval would grade)" residue="output shape what an eval would grade"
FRONTIER: S1 S2 S3 S4
BLOCKED: S5(unmet:S1)
DONE: (none)
UNRESOLVED: (none)
RESIDUE: S5
ADVANCE: S1
FRONTIER-SET: S1 S2 S3 S4

Independently reproduced by the aif review pass in-container (same FRONTIER: S1 S2 S3 S4ADVANCE: S1).

§1.7: forward-check: packages/core/skills/dispatcher/advance-frontier.test.ts:162 marker-lies HALT arm (T-FRS1-B) — a basis=marker-unverified advance never passes, paired DONE/OPEN confirmation arms at :178/:196; advance-frontier.test.ts:281 delegation arm trips on any own done-marker parser or gh call in the helper body; advance-frontier.test.ts:299 and :312 wiring arms verified RED at base 845cb9c (0 verdict-token / §2.7 / frontier-read occurrences there); backward: 12-file diff is fully inside the kickoff §2 allowlist (git diff --name-only origin/staging...HEAD), 0 new .md files, baseline deltas touch only the night-mode hash row ×8 lanes with dispatcher rows verified absent from baselines

Provenance

  • aif task eb31049b (frontier-residue-sweep-s1): autonomous implement, /aif-review (verdict: no blockers, 4 advisories), /aif-security-checklist (0 blocking, 2 advisories).
  • Egress: /harvest §1 Channel A — bundle out of the container, host fetch, sha verified 2e3357b98d, host-side rider c250bffc90, host push through .husky/pre-push (no Git-Data-API land, no --no-verify).
  • Base currency: fork-base == live staging tip 845cb9cb83 — no rebase, clobber check vacuous by construction.
  • Cross-stage (§2): sibling S2/S3 branches share only the 8 baseline files (no code/skill-file overlap); S1 lands first, S2/S3 harvests rebase onto post-S1 staging and regenerate their own baseline rows.
  • Local CI-equivalent sweep on final head: meta-all-wired / format / shipped-rules-drift / typecheck / byte-identical / synth-bundle-drift / agnosticism / dispatcher-tests PASS; vitest principles 438 pass, render pass, dispatcher suite 14/14; SNAPSHOT_MODE=compare 15/15; check-skill-drift.sh PASS. Red gates attributed against pristine base 845cb9cb83 — see Parked questions.

Review findings

aif review (no blockers): advisories carried in the task record include the regex-fragile field() grep at advance-frontier.sh:78, the HALT-VERIFY <ids> trust assumption at advance-frontier.sh:111 (maintainer-authored repo text — borderline noise, recorded to make the trust explicit), and an output-contract call (task contract's three-section format followed over the skill's default JSON block — the machine-parsed contract wins).

aif security audit (0 blocking): shell safety verified at advance-frontier.sh:55-144 (set -euo pipefail, quoted expansions, no eval/secrets/network/writes); test harness verified (spawnSync array args, mkdtempSync sandboxes, ambient MO_FRONTIER_* deleted).

Harvest cold code review (superpowers:requesting-code-review, verdict «with fixes»): both Important findings fixed in c250bffc90

  1. §2.6→§2.7 feedback was wired only on the marker (HALT-VERIFY) path; a just-merged stage could re-enter the frontier and be re-dispatched in unattended runs (probe-inflight counts only OPEN PRs). Fix: §2.7 now feeds §2.6 CLEARs forward via MO_FRONTIER_DONE accumulation (.claude/skills/dispatcher/SKILL.md:318-321).
  2. ADVANCE-DEGRADE corner: degraded rows carry no basis= field, so done= reads were unverified yet skip-able. Fix: verdict line + SKILL bullet route them through §2.6 before any skip (advance-frontier.sh:100, .claude/skills/dispatcher/SKILL.md:331-333).

Minor (recorded, not fixed): ATTN-UNRESOLVED satellite arm untested (advance-frontier.sh:141-144); emitter-crash empty-output branch and multi-id HALT-VERIFY sed untested; §5 host-acceptance list omits the new suite path (it runs via the default skills glob and the diff-aware sweep); delegation body-filter strips only full-line comments (inline trailing comments could evade tripwires — contrived).

Implementer deviation, review-concurred: MO_FRONTIER_OPEN=S1 yields ADVANCE: S1 rather than the plan-sketched HALT-BLOCKED — frontier.sh:319 demotes OPEN stages to not-done, so forcing HALT-BLOCKED would require the consumer to re-derive blocked-ness (the forbidden fork). Reasoning guarded in the test arm + plan annotations.

Watch-list

id criterion why defect site reintroduction tell
W-1 kickoff §1 T-FRS1-A — PR body carries the recorded dispatcher-path run traceable to a FRONTIER: line the proof-of-fix is the recorded run, not the binding paragraph; egress without it re-opens the executor-never-reads-the-frontier failure invisibly none in diff — PR body at egress (pending) the live-proof section holds narrative («the helper now derives…») with no verbatim FRONTIER:/ADVANCE: output block
W-2 kickoff §3 c1 — frontier.sh stays the single emitter; bindings only a second dependency/marker parser reintroduces the dual-implementation drift the emitter was centralized to kill .claude/skills/dispatcher/helpers/advance-frontier.sh:59, guarded by advance-frontier.test.ts:281 marker words (MERGED/RETIRED/CLOSED) or a gh pr call in the helper's executable body; any hunk on pipeline/helpers/frontier.sh outside a /pipeline-owned stage
W-3 kickoff §3 c2 — §2.6 is:merged stays merge authority; HALT-VERIFY + MO_FRONTIER_DONE/MO_FRONTIER_OPEN feedback intact dispatching on basis=marker-unverified row text alone is the false-green class this stage exists to close .claude/skills/dispatcher/SKILL.md:334-339 + helpers/advance-frontier.sh:114, guarded by test:162 HALT-VERIFY bullet or MO_FRONTIER_* mentions gone from §2.7; MARKER-LIES-HALT going green on a marker-unverified advance
W-4 kickoff §3 c3+c4 — degrade never reads as permission; pipeline/SKILL.md untouched (599/600-line ceiling) the degrade rider is the only thing keeping unverified done= rows in degraded tables on the §2.6 path; the pipeline ceiling is a hard pre-commit gate .claude/skills/dispatcher/SKILL.md:331-333 + helpers/advance-frontier.sh:100; pipeline/SKILL.md — none, preventive ADVANCE-DEGRADE text losing the «run the §2.6 check» clause; any hunk on .claude/skills/pipeline/SKILL.md

Round 1: W-1 N/A (no stage PR exists at audit time — check lands with the egress body) · W-2 CLEAN · W-3 CLEAN · W-4 CLEAN

Fidelity verdict

FIDELITY: GO
Basis: stage kickoff «frontier-residue-sweep S1» (inlined verbatim in dispatch; §1 scope verbatim from ../frontier-residue-sweep/kickoff.md row S1)
Round: 1
Audited-SHA: c250bff
Evidence: .claude/skills/dispatcher/SKILL.md:308-352 (§2.7 rewrite: helper invocation :311, "consumer, never a fork" :320, HALT-VERIFY + gh authority + MO_FRONTIER_DONE/OPEN feedback :334-339, feed-forward rider :318) · .claude/skills/dispatcher/helpers/advance-frontier.sh:59 (EMITTER binding to pipeline/helpers/frontier.sh), :114 (HALT-VERIFY recipe), :100 (degrade-not-permission + unverified-done rider), :141/:145 (FRONTIER-SET / ATTN-UNRESOLVED satellites) · .claude/skills/night-mode/SKILL.md:35 ("advance (§2.7 frontier read)" added to the delegation chain) · packages/core/skills/dispatcher/advance-frontier.test.ts:162-176 (MARKER-LIES-HALT, T-FRS1-B), :178-195 (OPEN/DONE seam arms), :281-297 (DELEGATION no-fork arm), :299-310 (SKILL-WIRING), :312-317 (NIGHT-WIRING) · 8 × tests/install-sh/baselines/** (night-mode/SKILL.md hash only — verified consistent: baselines carry no dispatcher/ entries)
Findings:

  • MINOR — T-FRS1-A's required artifact («a dispatcher-path run whose stage choice is traceable to a FRONTIER: line — recorded output in the PR body») is absent from the diff and not yet checkable: no stage PR exists for this head at audit time (only merged kickoff-doc PRs docs(kickoff): frontier-residue-sweep umbrella — the 7 routed observations (operator handoff) #1471/docs(kickoff): FRS S1-S3 stage kickoffs + PMCB F5 ratified — parallel aif dispatch prep #1480). The diff carries the enabling mechanism (helper tees full emitter output; test:139-149 shows FRONTIER: → ADVANCE traceability in a real spawned run) but a vitest run is not a dispatcher-path run. Non-round-triggering: the remediation site is the PR body composed at egress — the same body this verdict lands in — not the diff. Tracked as W-1; its absence at egress is the round-2 trigger.
    Failure-scenario: the stage PR merges with prose claiming the wiring («§2.7 now derives the stage from the frontier») and no verbatim FRONTIER:/ADVANCE: output block — exactly the T-FRS1-A trap (done-by-paragraph), leaving «the executor never reads the frontier» unfixed and undetected.

Parked questions

  • P1 — pre-existing python-rules-lock.test.sh red (identical at base 845cb9cb83, exit 1): line 188 references a variable whose name carries a stray carriage-return byte (fpA\r: unbound variable) — the test aborts after check (9). Verified failing on pristine staging in a clean worktree, so mechanically not attributable to this diff. Propose a separate small fix task (one-byte edit + rationale), per the atomic-umbrella discipline.
  • P2 — pre-existing hooks/end-of-turn-reminder.test.ts reds (7 failed / 62 passed, identical at base): all F10-autonomy-arm tests in that one file fail on pristine staging on this host. Same attribution logic — separate task / owner decision, not this PR.
  • P3 — emitter-side degrade-corner root cause (route to /pipeline owner): frontier.sh:288-293 (no-column fallback) emits done=yes rows without a basis= field and without the ATTN: marker-unverified line, so marker-lies protection cannot reach the degrade path at the emitter level. This PR mitigates in-scope (the ADVANCE-DEGRADE rider routes done= rows through §2.6); the emitter fix is outside S1's owner boundary (kickoff §3 c1 forbids editing frontier.sh here).

Test added 4 commits August 18, 2026 19:46
…m the dependency frontier (consumer of frontier.sh, never a fork)

Pure consumer of the /pipeline-owned emitter: tees its full recorded output, then
emits ONE verdict line (ADVANCE / ADVANCE-INCOMPLETE / ADVANCE-DEGRADE / HALT-VERIFY /
HALT-BLOCKED / COMPLETE) + FRONTIER-SET / ATTN-UNRESOLVED satellites. HALT-VERIFY
encodes T-FRS1-B: basis=marker-unverified done never advances a consumer — §2.6
is:merged stays the authority, verdict fed back via MO_FRONTIER_DONE/OPEN.
14-arm paired-negative test (marker-lies triple, delegation anti-fork arm,
SKILL-wiring arms red-by-design until the binding commits).

Prior-art: REUSE — consumer binding over .claude/skills/pipeline/helpers/frontier.sh
(ratified emitter, skill-harmonization spec §5.4 / D-H13); helper+test pattern follows
probe-inflight.sh §2.0. No new capability (umbrella kickoff §0).
…to the frontier read

§2.7 «Advance» rewritten from two narration lines to the executed helper call with the
full verdict table (§2.0 probe-inflight pattern): branch on the verdict, never pick the
next stage by eye, never re-derive the frontier by hand. §2.6 is:merged check retained
as the merge authority inside HALT-VERIFY's re-entry recipe. §6 gains the stage note.
night-mode's substrate-choice clause now routes advance through §2.7 — one clause, no
second stage-picker. SKILL-wiring test arms go green with this commit.

Prior-art: REUSE — consumer binding over .claude/skills/pipeline/helpers/frontier.sh
(ratified emitter, skill-harmonization spec §5.4 / D-H13); helper+test pattern follows
probe-inflight.sh §2.0. No new capability (umbrella kickoff §0).
…edits

SNAPSHOT_MODE=capture fallout of the night-mode/SKILL.md clause extension (the one
edited file on the consumer install surface — hash updated in all 8 lanes). Dispatcher
skill files carry 0 fingerprint rows: repo-internal orchestration, not shipped.
Diff reviewed before commit; SNAPSHOT_MODE=compare passes 15/15.

Prior-art: skipped — snapshot regen after shipped-skill edit, no new capability
…ner unverified-done clause

- §2.7: §2.6 CLEARs feed forward — invoke the helper with MO_FRONTIER_DONE
  accumulating confirmed-merged ids, so a just-merged stage cannot re-enter
  the frontier because its row still reads done=no
- ADVANCE-DEGRADE verdict + SKILL bullet: rows reading done= in degraded
  output carry no basis= — unverified row text, §2.6 clears them before any
  stage is skipped

Both from the /harvest §4 cold code review (Important #1/#2); T-FRS1-B does
not stop at the verdict path.
@artyhoo
artyhoo enabled auto-merge (squash) August 19, 2026 20:39
@artyhoo
artyhoo merged commit 8aec1a6 into staging Aug 19, 2026
44 of 46 checks passed
@artyhoo
artyhoo deleted the feature/frontier-residue-sweep-s1-eb3104 branch August 19, 2026 20:45
artyhoo added a commit that referenced this pull request Aug 19, 2026
…reset lane runners (seven lanes) + F5 narrowing (#1492)

* feat(audit-self): pre-merge-carrier-build B2 — python/go/cargo + UI-preset lane runners

Six lane runners added to the shipped opt-in carrier (ts-server landed in B1;
seven shipped lanes total, re-derived via template census): python + go + cargo
install lanes and the react-next/react-spa/react-native UI-preset extension of
the npm lane. Per-lane gate sets are derived from the merge tree's wired
workflow files (both `- run:` and `- name:`+bare `run:` shapes tolerated);
tool pins are checked and a mismatch exits 3 naming the pin (F2 semantics,
three-sha contract unchanged — verified sha is always the merge sha).

- python: ast-grep scan + ruff check gates incl. the ruff-bans config gate;
  both ruff invocations run --no-cache (§b.1).
- go: golangci-lint forbidigo gate; GOLANGCI_LINT_CACHE pointed at a
  throwaway dir under `git rev-parse --git-path` (§b.1). Cache-staleness
  experiment outcome: INCONCLUSIVE — no golangci-lint/go binary reachable in
  the build container to probe with; the conservative isolation ships anyway.
- cargo: clippy gate with -D flags derived from the wired run line;
  CARGO_TARGET_DIR/RUSTC_WRAPPER unset-then-restored around the run (§b.1).
- UI presets: ci-success.needs-driven extension; browser legs (test-storybook,
  test-e2e) are named NOT COVERED per the F3 report-only policy — never
  CANNOT-RUN; build leg runs locally.
- severity aggregation 3 > 90 > 1 > 0; multi-lane runs report lane-qualified
  gates and an aggregated NOT-COVERED list.
- self-test arms 11-20 appended to the existing pre-merge-local.test.sh (no
  new test files — principle 41 population untouched): honest shims logging
  invocations + reporting pinned versions; arms cover green/pin-mismatch/
  seeded-red/vacuity/absent-tool/multi-lane per lane, all asserting the
  carrier's OUTPUT and exit code on fixture repos (T-PMC-D). 84 pass / 0 fail.

Prior-art: prior-art-evaluations.md#259-#263 (S0 BFR consult, SPENT — lane runners extend the carrier scoped by that consult; reference implementation timeliner PR 229 read, never vendored, SSOT #263).

* docs(pre-merge-carrier-build): B2 F5 claim-narrowing + snapshot regen

F5 (operator, 2026-08-18, chip task_a1cd3b11): python/go/cargo installs ship
no scripts/ by construction (measured greenfield fingerprints 38/3/5 lines,
zero scripts/ entries vs 184-196 for npm lanes), so the "at every profile"
install-coverage claim was false on those lanes. Narrowed in both shipped
docs to name npm-lane installs (ts-server + UI presets):

- INSTALL-FOR-AI.md:520-525 — "ship to scripts/ on npm-lane installs" +
  "runs every detected lane's gates on the merge result"; net-zero line
  delta (594/600, hard markdown gate respected).
- packages/core/templates/shared/AI-USAGE-GUIDE.md §3.5 — same narrowing,
  header untouched.

Snapshot baselines regenerated deliberately (shipped-file edit): the delta is
exactly scripts/pre-merge-local.sh fingerprints on the seven npm-lane
baselines + the AI-USAGE-GUIDE.md delivery fingerprint on all eleven; thin
lanes' scripts/ rows unchanged (they ship none). SNAPSHOT_MODE=compare green
15/0. Tripwires green: principle 41 8/8, refresh-covers-full-delivery 21/0,
meta-all-wired 2/0, pre-merge-local-delivery 12/0, carrier self-test 84/0.

Known deviation: the kickoff §5 append (B2 lane arms below the B1 block) is
prepared but permission-blocked in the autonomous session (sensitive path,
no approver) — recorded in the plan for operator application at merge.

Prior-art: prior-art-evaluations.md#259-#263 (F5 narrowing is the docs half of the same ratified build the S0 consult scoped; no new capability — claim edit + fingerprint regen only).

* fix(audit-self): pre-merge-carrier-build B2 rework r1 — vacuity guards + anchored parses + SC1007

Harvest-audit rework round 1 (task 62462592), on the two audit-self files only:

- BLOCKER 1: SC1007 at the cargo lane local decl — `_ctd_val= _rw_val=`
  → `_ctd_val='' _rw_val=''` (unquoted space-after-= reddens the CI
  shellcheck gate; exclude set does not cover SC1007).
- MAJOR 2: zero-gate vacuity guards for the stack lanes — a DETECTED lane
  whose workflow parses to zero gate lines (python), an unparsable
  golangci-lint invocation (go), or unparsable clippy denial flags (cargo)
  now adds a lane-qualified CANNOT-RUN entry naming lane + workflow file
  (aggregate exit 3) instead of contributing a silent nothing to a PASS;
  unparsed pins likewise fail named ("never a silent unpinned run") instead
  of silently skipping the pin check.
- Parse blockers from the round-1 review (rework comment asserted all seven
  shapes parsed; measurement against the live templates showed three
  broken): python pin greps picked up header-comment prose (pins with
  trailing ',' / ')'), go args derived '(getff bans)' from the step-NAME
  line, the go-version pin grep matched a comment first and silently died.
  All pin/args/flags parses re-anchored to run:/input/command lines; the
  PYWF/GOWF self-test fixtures replaced with the measured template shapes
  so the traps stay armored (T-PMC-A: fixtures mirror measured shapes, not
  idealized ones).
- MINOR 3: (a) arm 21 covers the UI BLOCK needs: shape (production form of
  all three real UI templates) + asserts the new unmapped-job WARN; (b) go
  seeded-red (arm 28) + go absent-tool (arm 29) arms close the per-lane
  claim gap; (c) the ci-success.needs case gains a *) default arm that
  WARNs on unmapped job names instead of silently treating them as covered.

Self-test: 122 pass / 0 fail (84 pre-existing assertions + 38 new across
arms 21-29). shellcheck is ABSENT in this build container — the SC1007 fix
is verified by token-shape scan + bash -n only; the host CI shellcheck gate
(audit-self.yml:878-880) is the authoritative check at harvest.

Prior-art: skipped — bug-fix/guard round on an existing shipped capability, no new capability.

* chore(snapshot): regen install baselines for the B2 rework carrier edits

Operator-side harvest regen (task 62462592), post-rebase onto staging
#1488-#1490. One row folded: scripts/pre-merge-local.sh on the 8
npm-family baselines — rework r1 (f9534d3c85) changed the carrier after
the worker's regen in b7510d05b7, and the #1490 line-level auto-merge
left these 8 compare-RED on the merged tree. Captured on the rebased
tree; SNAPSHOT_MODE=compare is 15/0.

* docs(kickoff): pre-merge-carrier-build §5 — B2 lane arms appended below the B1 block

Operator-applied at harvest (task 62462592) per the recorded Task-10
deviation: the autonomous worker's Edit to this file was
permission-blocked (sensitive path, HANDOFF_MODE=1), and the kickoff's
own §5 contract requires the B2 lane commands to land in the same PR
that adds them. B1 lines untouched (append-only history). Six B2 lines:
seven-lane template census, the three stack-lane runners, the zero-gate
guard arms (rework r1), the pin-unparsed named-failure guard, and the
F5-narrowed install-coverage claim in both shipped docs.

* test(audit-self): arm15 cache-path expectation — canonicalize like the carrier

Host-run finding (operator harvest, 2026-08-20): arm15 red on macOS while
the carrier behavior is correct. The carrier cd's to
$(git rev-parse --show-toplevel), which canonicalizes symlinked roots
(mktemp /var/folders/... -> /private/var/...), and logs the git-dir path
in that canonical form; the arm grepped for the UN-canonicalized mktemp
$T literal — match impossible on macOS, always true on the linux
container (/tmp carries no symlink). Fix: derive the expectation with
cd $T && pwd -P (same canonicalization). Verified on host: self-test
122/0 (was 121/1); container semantics unchanged.

* test(audit-self): ci-tool-pin escape hatch on arm-25 fixture install lines

The pre-push ci-tool-pinning scanner is line-based over repo shell
scripts, so the deliberately-UNPINNED consumer-workflow fixture inside
the PYWF_NP heredoc (arm 25 — the unparsed-pins guard) pattern-matched
Rule A exactly like a real bare install. Annotate the two fixture run:
lines with the rule's own escape hatch; the fixture keeps feeding the
carrier an unpinned workflow either way (no version token added).
Self-test re-run on host after the edit: 122 pass / 0 fail.

---------

Co-authored-by: Test <test@example.com>
@artyhoo

artyhoo commented Aug 20, 2026

Copy link
Copy Markdown
Owner Author

Tracking issues for the Parked questions (operator decision 2026-08-20: merge green only — auto-merge stays armed and will fire once CI is green after the fixes land):

artyhoo added a commit that referenced this pull request Sep 5, 2026
…#1609)

## Summary

Records an explicit PARK of frontier-residue-sweep stages S4 (registry gate) and S5 (evals) until after the beta release. S1-S3 are merged (#1488, #1491, #1490); S4/S5 are factory-internal judgment calls that sit on no release-frame phase-1 exit criterion (`docs/superpowers/specs/2026-07-23-beta-program-design.md` §7), so leaving them undispatched-but-silent would let `/pipeline` keep ranking a stage nobody intends to run before the release. One Status block in the umbrella kickoff header; no other file.

## Changes

- `.claude/orchestrator-prompts/frontier-residue-sweep/kickoff.md:10-15` — Status block: merged PRs per stage, the park with its reason, and the re-open instruction (delete the block, dispatch per §4). The umbrella stays open — no `done.md` is written, because a park is not a close (CLAUDE.md umbrella-closure convention).

## Prior-art consult

- [x] Not a capability commit (kickoff prose).
- [x] No new capability area.
- [x] No SSOT entry matched.
- [x] context7 not applicable.

## Test plan

- [x] `npx prettier --check` + markdownlint on the kickoff (pre-commit).
- [x] `bash .claude/hooks/check-kickoff-traps.sh` unaffected — the kickoff keeps its §3 T-enumeration; only the header block grew.

## Provenance

n/a

## Review findings

n/a

## Fidelity verdict

FIDELITY: skipped — kickoff status annotation only; no worker output, no stage audited.

## Parked questions

n/a

## §1.7 Self-discipline check (REQUIRED if PR touches discipline-bearing files)

### §1.7 Skipped: one kickoff status block under .claude/orchestrator-prompts/ — a dispatch input, not a discipline artefact; no rule, principle or convention is introduced or extended
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant