Skip to content

Operating-layer release: AGENTS.md front door, freeform intake, mid-flight amend, release-hygiene guard (v1.6.0)#8

Merged
tieubao merged 56 commits into
masterfrom
feat/release-hygiene-guard
May 22, 2026
Merged

Operating-layer release: AGENTS.md front door, freeform intake, mid-flight amend, release-hygiene guard (v1.6.0)#8
tieubao merged 56 commits into
masterfrom
feat/release-hygiene-guard

Conversation

@tieubao

@tieubao tieubao commented May 22, 2026

Copy link
Copy Markdown
Member

What

The accumulated operating-layer work since v1.5.1, cut as v1.6.0. Carries four specs (the linear stack tip contains all of them):

  • SPEC-024: kit-root AGENTS.md, the tool-agnostic operate-contract front door + the backfill brownfield lane + six-section goal projection + the observable ## After state spec section. (This is what PR AGENTS.md tool-agnostic operating layer + backfill lane #7 covered; this PR supersedes it.)
  • SPEC-026: the freeform front door for /user:assign (accept freeform intent, delegate crystallize to /user:think, approve-before-allocate, then route ID-first).
  • SPEC-027: mid-flight spec amend, the declared BUILDING -> SPECIFYING -> BUILDING path to add scope to a building spec without restarting the lane (canonical rule in WORKFLOW.md, operator-approved at a checkpoint, resume with /user:next).
  • SPEC-028: the release-hygiene guard, a warn-only check on a phantom cut (VERSION/plugin.json naming a version with no matching git tag) at /user:ship Step 4a + a kit-health line.

Plus the [Unreleased] -> [1.6.0] - 2026-05-22 CHANGELOG cut. VERSION/plugin.json are already 1.6.0; tagging v1.6.0 on master after merge clears the very phantom cut SPEC-028 now warns about.

Why

SPEC-027 and SPEC-028 were dogfooded end to end through the kit's own lifecycle (/user:assign -> spec -> spec-validate -> execute -> review -> docs -> ship -> retro). They trace to docs/operating-layer-vision.md (the SDLC state-machine gap analysis) and the SPEC-018/SPEC-027 retros (the recurring release-hygiene tangle this PR also resolves).

Review

Each cycle passed the full verification pipeline. Notable catches:

  • SPEC-027: /user:review (HIGH) added the operator-approval gate the canonical amend rule had omitted (would have let an autonomous loop self-expand scope).
  • SPEC-028: three verification layers caught three distinct drifts of one DEC-005 invariant on the guard's own two inlined copies, task-verifier (outer guard), integration-checker (inner guard), /user:review (the accumulation signal). The guard then self-fired on its own ship.

Testing

bash tests/test-meta.sh (256/256) and bash tests/test-hooks.sh (92/92), green on this branch. CI runs the macOS + Ubuntu matrix.

Checklist

  • Tests pass (meta 256, hooks 92)
  • Docs updated (AGENTS.md, WORKFLOW, MANUAL, PLAYBOOK, ORCHESTRATION, vision, CHANGELOG)
  • Review recorded per cycle (REVIEW verdicts SHIP)
  • Merge to master, then tag v1.6.0 (maintainer; clears the phantom-cut warn)

Supersedes #7 (the feat/agents-md-operating-layer branch is the bottom of this linear stack; its commits are all here).

🤖 Generated with Claude Code

tieubao and others added 30 commits May 21, 2026 22:42
AGENTS.md operating-layer cycle planning artifacts:
- SPEC-024 drafted and validated via /user:spec-validate (5 lenses);
  revisions DEC-004 corrected + DEC-005..008 added (four-zone contract,
  install.sh jq ownership, WORKFLOW dedup, edge-case tip model, doc-map
  file-trigger row).
- ADR-0013 flipped proposed -> accepted with the After-state addendum.
- BACKLOG: ID-015 (this work), plus ID-016/017 from the SPEC-025 retro.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tool-agnostic front door carrying the four portable operate-contract
zones (read-in-order list, task loop, done-definition, Pause-if list)
that commands/assign.md projects into the six-section /goal. States
plainly that enforcement is Claude-Code-only (the hooks); under other
runtimes AGENTS.md is advisory only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AGENTS.md is the canonical operate-contract front door. Remove the
restated ordered read-order and core done-definition from WORKFLOW.md
(now pointers to AGENTS.md zone 1 and zone 3) and add the AGENTS.md
front-door pointer to CLAUDE.md. WORKFLOW.md required-reading now names
AGENTS.md first; kit-specific completeness clauses are kept.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirror the kit-root AGENTS.md four-zone shape (Read in this order,
Task loop, Done means, Pause if) as a downstream template for projects
consuming dwarves-kit, voiced for the spm sample CLI rather than copied
verbatim. Keeps the CC-only enforcement caveat and the goal-composition
note. Reference it from the hello-spec README (front-of-reading-order).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
TASK-001..003 (Phase 1) passed task-verifier; SPEC-024 checklist updated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brownfield lane: review an existing codebase and write the
operating-layer docs (AGENTS.md / CLAUDE.md / specs) without
changing application behavior. Doc-output only, no app-code edits,
/spec optional. Consistent with the lanes list in AGENTS.md zone 2.
The lane explicitly forbids app-behavior change, which the
"backfill lane silently edits app code" failure-mode row depends on.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the four-field contract-goal shape in Step 3 (Objective / Scope
fence / Termination-on-blocker / Verification) with a six-section
operating directive, each section projecting from an AGENTS.md zone or
the active spec, matching AGENTS.md's "How a goal is composed" table:

  Context-to-read <- AGENTS.md zone 1 (Read in this order)
  Constraints     <- AGENTS.md / CLAUDE.md rules + scope fence
  Operating rules <- AGENTS.md zone 2 (Task loop)
  Validation loop <- the active spec's ## Verification
  Done-when       <- AGENTS.md zone 3 + the spec's ## After state
  Pause-if        <- AGENTS.md zone 4 (Pause if)

Done-when quotes the spec's observable ## After state bullets (falls back
to AGENTS.md "Done means" when a spec lacks the section). Scope fence
folds into Constraints; termination-on-blocker folds into Pause-if. Step 4
now points at the six-section directive. Spec-first opening move kept.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Insert an observable definition-of-done section between ## Solution and
## Acceptance Criteria in the commands/spec.md template block. Each bullet
is false-now/true-after and checkable by a human or a command. The inline
rule states observable, not narrated, or it is fluff and gets cut, anchored
to PHILOSOPHY's every-file-justifies-itself honesty rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
TASK-004 backfill lane, TASK-005 six-section projection, TASK-006 After-state template: all passed task-verifier.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Extend the WORKFLOW.md doc-impact map for the operating-layer docs:

- Add a "new top-level file under the kit root" trigger row, mirroring
  the existing top-level-dir row, so a top-level file like AGENTS.md no
  longer slips through the self-maintaining net.
- Add an AGENTS.md companion-doc row (CLAUDE.md/WORKFLOW.md pointers,
  examples/hello-spec/AGENTS.md, commands/assign.md, tests/test-meta.sh).
- Note that the backfill lane produces operating-layer docs, so a
  backfill run knows which docs it writes.
- Widen the self-maintaining note to cover both dirs and files.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
README "Project structure" now lists AGENTS.md (the tool-agnostic
operate-contract front door) and WORKFLOW.md, and notes CLAUDE.md is the
Claude-Code layer on top. README Workflow section names the backfill lane.
docs/architecture.md data-flow intro cross-references AGENTS.md as the front
door that CLAUDE.md and WORKFLOW.md point at, and names the backfill lane.

These are structure listings and cross-references; the operate-contract itself
stays in AGENTS.md (not restated here).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pin the cycle's structural outputs so a wording flip fails CI:
- kit-root AGENTS.md: the four portable zones, the literal "Pause if",
  and the Claude-Code-only-enforcement statement.
- commands/assign.md: the six-section /goal projection (writer side).
- low-cost guards for hello-spec AGENTS.md and spec.md "## After state".

Add the install merge-with-existing-hooks regression: seed a HOME whose
settings.json already carries a third-party hook, run install.sh through
the jq clean+merge path, and assert the hook survives, the JSON stays
valid, and a dwarves-kit hook is merged in. The test passes against the
current install.sh, so no jq fix was needed (DEC-004: bug not present).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bump VERSION, plugin.json, and tool.toml 1.6.0 -> 1.7.0 for the
SPEC-024 feature release. Add the 1.7.0 CHANGELOG entry (AGENTS.md
front door, backfill lane, assign goal projection, spec After-state
section, doc-impact-map rows, downstream AGENTS.md template, and the
added install settings-merge regression coverage framed as a guard,
not a fix). Add a copy-if-absent AGENTS.md tip to install.sh.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
TASK-007..010 (doc-impact map, README/architecture cross-refs, test asserts + install-merge guard, v1.7.0 release) passed task-verifier.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Addresses /review-team findings on the SPEC-024 build:
- WORKFLOW.md Required-reading no longer restates the AGENTS.md-owned ordered list (the spec's primary drift failure mode, realized in output); it now points only.
- tests/test-meta.sh: negative anti-drift assertions (WORKFLOW.md + CLAUDE.md carry no numbered read-order restatement); pin all four hello-spec AGENTS.md zones; pin assign.md Done-when references the spec After-state.
- backfill lane now has a routing line in the spine.
- SPEC-024 bookkeeping: TASK-003 + global AC + After-state boxes checked; TASK-010 wording corrected to no-fix reality.
- BACKLOG: ID-018 (install tip cp -n) and ID-019 (demo SPEC After-state) logged as deferred LOW findings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
doc-impact-map companions the build missed: MANUAL /user:assign now lists the AGENTS.md/spec projection source + the six-section output; CLAUDE downstream-template note names examples/hello-spec/AGENTS.md as the front door. doc-verifier PASS (9 claims).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Flip SPEC-024 Status VALIDATED -> SHIPPED; drop ID-015 from the BACKLOG active queue (v1.7.0; CHANGELOG is the canonical shipped record).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Captures the spec-validate phantom-fix catch, the execute/integration-checker presence-not-absence blind spot that missed the WORKFLOW restatement, and recurring worker shell/hook friction.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ID-020 verifier absence-checks (the replace-task blind spot both verifiers missed), ID-021 reduce execute-worker shell/hook friction + investigate the heredoc commit mis-parse.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The 1.6.0 -> 1.7.0 bump went against the kit convention (accumulate under CHANGELOG [Unreleased], cut versions separately) and had clobbered the prior ## [1.6.0] heading. Revert all three version surfaces to 1.6.0; restore the [1.6.0] release section; move the SPEC-024 notes into [Unreleased]. DEC-009.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New docs/ORCHESTRATION.md: the flow/loop view of the kit's orchestration layer. Catalogs 1 spine, 5 lanes, 3 bounded loops, 7 alt/branch flows, 8 opt-in side-flows, and the 4 hard stops; per-flow trigger/steps/stop/enforcer/branches; 6 ASCII diagrams (master lifecycle + per-loop). Cross-linked from WORKFLOW.md + README.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New docs/PLAYBOOK.md: scenario -> trigger -> response -> orchestration hook for the 5 entry scenarios (what's-next, apply-SDD, autonomous-full-flow, iteration-heavy phase, vague brief). Leads with the hooks-vs-commands-vs-skills layering (only hooks auto-fire) and the BACKLOG-ID-first gap + the freeform->ID bridge. Includes an autonomy-dial and a triggers cheat-sheet.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SPEC-026 (DRAFT) + BACKLOG ID-022: extend /user:assign to accept freeform intent (not only ID-NNN), auto-allocating an ID + BACKLOG row so freeform intake is native. Unparks the SPEC-024-deferred griller entry; preserves ID-first traceability via an approve-before-allocate + row-before-draft invariant.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Design-first north-star for the natural-language operating layer: vision, the SDLC modeled as a formal state machine (states, guarded transitions, terminals, hard-stops-as-guards, 2 sub-machines), the full 15-scenario catalog (your 5 + 10 new), and a gap analysis. New backlog rows ID-023 (mid-flight spec amend), ID-024 (context-switch + abandon terminal), ID-025 (re-open-shipped) trace here; SPEC-026 is the first implementing spec.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
spec-validate (5 lenses): NEEDS REVISION -> revised. Delegate crystallize to /user:think (keep /assign a light mutator, DEC-003); sanitize freeform input (pipe-escape + slug hardening, DEC-004); atomic ID allocation + collision check (DEC-005); dedup-by-slug + concurrency edge cases. Status DRAFT -> VALIDATED; ID-022 -> validated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Widen /user:assign so $ARGUMENTS is either an ID-NNN (matches
^ID-[0-9]+$, the unchanged ID-first path) or freeform intent text.
The freeform path delegates the interview to /user:think, gates on
human approval of the crystallized objective before allocating an ID
(approve-before-allocate), sanitizes input (escape | and newlines in
BACKLOG cells; reduce the slug to [a-z0-9-]+ so it cannot traverse
out of .claude/goals/), atomically allocates the next ID by
re-reading max in the write step with a loud post-write collision
check, writes the BACKLOG row before the goal draft (row-before-draft),
then rejoins the existing Steps 4-6 tail. /assign stays a light
mutator-dispatcher: it does not embed the interview.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a SPEC-026 assertion block to tests/test-meta.sh that pins the
freeform front door contract in commands/assign.md so a wording flip
on any of the documented intake paths, the /user:think delegation, or
the four invariants fails CI.

Pins (grep -qF):
- the two-shape resolver: ^ID-[0-9]+$ and freeform
- the delegation: /user:think (interview delegated, not embedded; DEC-003)
- the four invariants: row-before-draft, approve-before-allocate,
  sanitize, atomic-allocate (plus the collision guard wording)
- the slug hardening: [a-z0-9-] (sanitized slug charset; DEC-004)

Total assert count rises from 241 to 250.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PLAYBOOK S2/S5/S8 and the layer-2 intro now describe /user:assign's
native freeform path (delegate crystallize to /user:think, approve,
sanitize, atomic-allocate the ID + BACKLOG row, then route) instead of
a hand-run bridge. Section 8 no longer calls it "manual today"; it is
the native path /assign runs internally. Section 11 marks SPEC-026 /
ID-022 shipped and drops the "until that ships, use the bridge" line.
The 3-layer model and the honest "invoked command, not an auto-keyword"
point are kept. WORKFLOW.md ## The spine gains a Freeform-front-door
note (no numbered AGENTS/CLAUDE read-order restatement).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
TASK-001..005 passed task-verifier; SPEC-026 checklist updated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Doc-impact drift caught in a follow-up audit: SPEC-026 changed commands/assign.md but TASK-005 only updated PLAYBOOK + WORKFLOW; MANUAL.md (the commands/* companion per the doc-impact map) and ORCHESTRATION.md (the flow view) still described /assign as ID-only. Both now document the freeform path (delegate to /think, approve-before-allocate, sanitize, allocate ID + row).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tieubao and others added 26 commits May 22, 2026 01:06
Declares the BUILDING -> SPECIFYING -> BUILDING amend micro-loop
(operating-layer-vision Scenario 7 / ID-023). Approach A: convention +
recorded ## Amendments checkpoint, no new command or hook. spec-validate
passed after fixing the resume claim (lead with /next, not /execute;
DEC-006) and documenting the un-recorded-amend limitation (DEC-007).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add the BUILDING -> SPECIFYING amend row and the SPECIFYING -> BUILDING
(resume) return row to the §3.3 transition table, distinct from the
existing validation/review revision paths. Mark the §5 gap-analysis row
"Mid-flight spec amend" closed, referencing the now-validated implementing
spec, mirroring how the freeform front door row references its spec.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a `## Mid-flight amend` section to WORKFLOW.md as the single source of
truth for the BUILDING -> SPECIFYING -> BUILDING amend path. Names the four
invariants: no lane restart (Status stays VALIDATED, delta-only re-validation),
completed work frozen (add-only, `- [x]` rows unchanged), recorded at a
checkpoint via the `## Amendments` entry, and resume via `/user:next` (not a
fresh `/user:execute`). Other docs point here rather than restating the rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reword the "do NOT modify the spec" anti-pattern and the
ambiguity / oversize error-handling branches so they point at the
declared mid-flight amend path (pause at a checkpoint, append tasks,
record ## Amendments, resume with /user:next) instead of only
"stop and ask". Keeps the no-silent-mutation guard: an amend is a
deliberate, recorded, checkpoint action, not a silent edit; a silent
rewrite of done (- [x]) tasks stays forbidden. Points at WORKFLOW.md
"## Mid-flight amend" (canonical); does not restate the rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add an optional, on-demand `## Amendments` section to the spec template
in commands/spec.md, modeled on the `## Failure modes` optional-section
convention (never an empty scaffold in a fresh spec). Includes the
AMEND-NNN entry shape and points at WORKFLOW.md as the owner of the
amend rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add Scenario 7 ("also do Y" mid-build) as an operator card in
docs/PLAYBOOK.md and as an amend micro-loop view in
docs/ORCHESTRATION.md. Both projections point at WORKFLOW.md
"## Mid-flight amend" as canonical and do not restate the four
invariants, per DEC-005 (avoid source-of-truth duplication).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a "Mid-flight amend convention" section to tests/test-meta.sh with four
assertions guarding the BUILDING -> SPECIFYING -> BUILDING amend convention
across its four surfaces: execute.md (amend + checkpoint), WORKFLOW.md (the
canonical "Mid-flight amend" rule), spec.md (the optional "## Amendments"
section), and operating-layer-vision.md (the BUILDING -> SPECIFYING transition
row in the table). Total assertions 250 -> 254.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
All six tasks passed the verification pipeline (task-verifier PASS each).
test-meta 254/254, test-hooks 92/92.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Review (HIGH) found the amend path had no human-approval gate in the canonical
WORKFLOW rule or the autonomous /execute orchestrator, while the PLAYBOOK card
already promised one. An autonomous loop could self-expand scope, contradicting
AGENTS.md zone-4 Pause-if and the kit's anti-scope-drift stance. Folded
operator-approval into invariant #3 (kept four invariants, no fifth) and added
"confirm the added scope with the user" to execute.md's two amend branches.
Recorded as SPEC-027 DEC-008. test-meta 254/254, test-hooks 92/92.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
MANUAL: note the optional ## Amendments section under /user:spec, the
operator-approved amend path under /user:execute, and that /user:next is the
resume door after an amend. CHANGELOG [Unreleased]: the SPEC-027 entry.
doc-verifier PASS (14/14 claims). test-meta 254/254, test-hooks 92/92.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Local ship (no version bump / tag / PR per the maintainer's call; the branch
stacks on unmerged PR #7 and 1.6.0 is cut-but-untagged). SPEC-027 -> SHIPPED;
ID-023 -> shipped in CHANGELOG [Unreleased]. CHANGELOG is the shipped record.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signal: spec-validate caught a correctness defect pre-build; review caught a
missing approval-gate the verifiers passed (ID-020 pattern recurs); release
hygiene is a two-cycle recurrence (SPEC-018 + SPEC-027) and the top finding.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ID-026 release-hygiene guard (recurring, top signal), ID-027 spec-validate
autonomy-gate lens, ID-028 execute.md disjoint-file parallel-dispatch note.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
A warn-only guard (ship Step 4 + a kit-health line) for the phantom cut:
VERSION/plugin.json naming a version with no matching git tag, with
[Unreleased] piling on top (the SPEC-018 + SPEC-027 recurrence). Approach A
(warn, no hook, no hard test); normal lane. spec-validate passed; folded the
whitespace-strip + identical-shape-across-surfaces anti-drift note (DEC-005).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a repo-scoped release-hygiene check to kit-health Step 1: warn when
VERSION names a version with no matching git tag (a phantom cut), with a
soft note when CHANGELOG [Unreleased] is accumulating above it. Degrades
to a no-op outside a git repo, without VERSION, or without git; never
errors and never exits non-zero. Shape matches the ship.md surface
(whitespace-strip, git tag -l "v$VER", graceful degrade).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a Step 4a release-hygiene warn to commands/ship.md. It detects the
phantom cut (VERSION names a version with no matching git tag), warns the
maintainer, and adds an accumulation note when CHANGELOG [Unreleased] is
non-empty. Warn-only, never blocks; degrades silently outside a git repo
or without VERSION. Shares the exact check shape with kit-health per
DEC-005 so the two inlined copies cannot drift.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ship.md used `[ -d .git ]` which is false in a git worktree (where .git is a file). Replace with `git rev-parse --git-dir` to match kit-health check 11 exactly, per DEC-005.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a "Release-hygiene guard" section to tests/test-meta.sh with two
assertions that pin the PRESENCE of the phantom-cut warn on its two
surfaces (ship.md, kit-health.md), not that the working tree is
currently tag-clean (DEC-004: a runtime tag-state assertion would go
red on the legitimate untagged-transient and on shallow CI clones).

Total 254 -> 256, all green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3/3 tasks passed the pipeline (TASK-001 needed 1 fix-agent retry to align the
degrade guard with kit-health per DEC-005). test-meta 256/256, test-hooks 92/92.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Inner condition was missing the [ -n "$VER" ] guard, causing
ship.md to run `git tag -l "v"` and spuriously fire the phantom-cut
warn when VERSION is empty or whitespace-only. Brings the condition
into exact parity with kit-health.md check 11 (SPEC-028 DEC-005).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Review (MEDIUM) found the soft accumulation-context signal had drifted: kit-health
used grep heading-exists (over-fires) while ship.md used the spec's awk non-empty
test. Aligned kit-health to the same awk; the line is now byte-identical across both
surfaces. Recorded as SPEC-028 DEC-006. Smoke: WARNs correctly, exit 0. meta 256/256.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
MANUAL: the Step-4a release-hygiene warn under /user:ship, and the phantom-cut
check under /user:kit-health's Reads. CHANGELOG [Unreleased]: the SPEC-028 entry.
doc-verifier PASS (16/16). meta 256/256, hooks 92/92.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Local ship (no version bump / tag / PR; same call as the SPEC-027 cycle, and the
new guard itself warns the release state is a phantom cut). SPEC-028 -> SHIPPED;
ID-026 -> shipped in CHANGELOG [Unreleased]. The guard self-fired on this ship.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signal: three verification layers caught three distinct drifts of one DEC-005
invariant (the guard's own two inlined copies); the guard self-fired on its own
ship. Tension surfaced: "no premature abstraction (3x)" is wrong for
identical-by-contract logic. The phantom cut + 3-deep stack remain to be resolved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ID-029 carve out identical-by-contract from the no-premature-abstraction rule
(DEC-003's two copies drifted three times in one cycle); ID-030 worker-prompt
symmetry for identical-output tasks. The release-state cleanup stays a maintainer
decision (recorded in the retro), not a backlog row.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Finalize [Unreleased] -> [1.6.0] - 2026-05-22 (VERSION/plugin.json already 1.6.0).
Resolves the phantom-cut content; the SPEC-028 guard's warn clears once v1.6.0 is
tagged on master after this PR merges.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@tieubao tieubao merged commit acaea7b into master May 22, 2026
2 checks passed
@tieubao tieubao deleted the feat/release-hygiene-guard branch May 22, 2026 03:48
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