Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
b9a3d09
fix(nextwave): harden Prime(post-flight) canonical-line contract (#608)
bakeb7j0 May 6, 2026
42fc82f
fix(wavemachine): close inter-wave narrator gap (Plan #581 Bug B) (#609)
bakeb7j0 May 6, 2026
c389194
chore(changelog): aggregate wave-1a fragments
May 6, 2026
06b6943
chore(prepwaves): refuse to run on dirty sandbox (#610)
bakeb7j0 May 6, 2026
fc76081
chore(devspec): /devspec finalize commits its own doc updates (#611)
bakeb7j0 May 6, 2026
be1f4af
feat(prepwaves): emit seed prompt + /clear recommendation at end of o…
bakeb7j0 May 6, 2026
115b040
chore(changelog): aggregate wave-2a fragments
May 6, 2026
6fd9b1e
chore(wave_axioms): structural rework + Axiom 9 + skill-body wiring (…
bakeb7j0 May 6, 2026
bff882c
feat(orchestrator): long-session drift mitigation for /wavemachine (#…
bakeb7j0 May 6, 2026
4855b49
chore(changelog): aggregate wave-3a fragments
May 6, 2026
f609e8a
feat(wave-skill): /wave routing skill wraps wave_show (#619)
bakeb7j0 May 6, 2026
1a5a2af
feat(wave-watcher): standalone daemon aggregating wave-pattern state …
bakeb7j0 May 6, 2026
390acea
chore(changelog): aggregate wave-4a fragments
May 6, 2026
91c754e
chore(vox): instrument with mcp-log for fleet observability (#621)
bakeb7j0 May 7, 2026
47af41c
feat(dod): /dod reads Plan-issue DoD instead of devspec (#622)
bakeb7j0 May 7, 2026
2b71682
chore(wavemachine): remove Classic mode; Kahuna is the only shape (#623)
bakeb7j0 May 7, 2026
13df79d
chore(precheck): log vox-invocation failures (#624)
bakeb7j0 May 7, 2026
589a785
chore(changelog): aggregate wave-5a fragments
May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.fragment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
### chore(precheck): log vox-invocation failures instead of swallowing with || true (#550)

`/precheck` no longer wraps `vox` with `|| true`. The skill now documents the canonical instrumented pattern that captures vox's rc + stderr and, on non-zero, emits a `vox_invocation_failed` event to `mcp.jsonl` (server `precheck`, level `warn`). The gate stays best-effort — vox failure does not block — but the failure is no longer hidden.

Checklist now distinguishes vox outcome visually:
- success: `vox: ✅ fired`
- failure: `vox: ⚠️ failed (rc=N — see mcp.jsonl)`

Pairs with cc-workflow#551 (vox-script-side instrumentation). The two layers catch different failure modes:
- `vox_invocation_failed` (this PR, from `/precheck`) — vox didn't run at all, or returned non-zero
- `call_failed` (vox-script) — vox ran but provider/player failed

Files: `skills/precheck/SKILL.md` — Step 4 guidance, Notification section (canonical bash pattern + cross-link), checklist status line, and Rules section all updated.
56 changes: 56 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,61 @@
# Changelog

## Unreleased

<<<<<<< Updated upstream
<<<<<<< Updated upstream
<<<<<<< Updated upstream
<<<<<<< Updated upstream
### Fixes

- `wave_finalize`: durable-state fallback when wavebus has been cleaned up by `wave_complete`. Re-derives the MR body from `<project>/.claude/status/{phases-waves.json,state.json}` (issue #s + recorded `mr_urls`) so the kahuna→target finalize step succeeds at the end of the last wave instead of returning `no_artifacts`. Bus artifacts still take precedence when present. (#415, Plan #581 incident)
- `/wavemachine`: Wave-to-wave handoff is now a single tool-use boundary — skill body forbids narrative text between waves, and a new doc-shape regression test (`tests/regression/test_wavemachine_handoff_no_narrator.sh`) guards the contract. Closes "Bug B" from Plan #581 campaign A debrief (#600).
- `/nextwave`: Prime(post-flight) prompt now declares the canonical-line contract verbatim with concrete PASS/FAIL/BLOCKED examples, a forbidden-phrases list (including the exact `"Sleep is still running. Let me wait for the notification."` narration that broke Plan #581 wave-2), and an `Exit shape` section as the LAST section of the prompt so it is the most recent context when the agent emits its final message. Closes #606.
=======
### Features

- `/prepwaves` now ends with a `/clear` recommendation and a paste-ready `/wavemachine` seed prompt. The recommendation downgrades to a hint when `nerf_status` reports <30% of soft dart used. Reduces context drift between planning and execution sessions (Plan #581 debrief). Closes #602.

### Chore

- `/prepwaves` now refuses to run on a dirty working tree or a non-base branch, listing every offending path so the operator can choose between commit, stash, or discard. A `--force-dirty` override exists for legitimate edge cases and emits a noisy banner before proceeding. Rationale: Plan #581 sandbox cross-talk incident (#603).
- `/devspec approve` now self-commits the Dev Spec (and any auxiliary finalization-track writes) on the active branch with a `docs(devspec): finalize Dev Spec for Plan #N — <slug>` message instead of leaving the changes uncommitted. Refuses to commit on the project's protected base branch. Push remains the operator's affirmative act. (#604)
>>>>>>> Stashed changes
=======
### Features

- /wavemachine: long-session drift mitigation — at every wave-to-wave handoff the loop body emits per-wave drift-signal events (`wave_message_length_main`, `wave_stop_hook_blocks`, `wave_concerns_posts`) via `scripts/wavemachine/drift-instrumentation.sh emit-wave-drift` and injects a system-reminder re-grounding payload citing `WAVE_AXIOMS.md` (with explicit Axiom 9 reference). The lightweight payload is unconditional at every wave boundary; mandatory `/engage` and `/compact`-on-N-waves are documented as rejected alternatives held in reserve for empirical escalation. (cc-workflow#601, "Bug C" from Plan #581 campaign A debrief.)

### Chore

- WAVE_AXIOMS.md restructured: each axiom now has a stable rule/why/how subsection layout, and a new Axiom 9 ("User attention is the cost. Autonomy is the protection.") binds the autonomy clauses in `/wavemachine`-class skills to the user-attention-protection rationale. The four wave-pattern skill bodies (`/wavemachine`, `/nextwave`, `/prepwaves`, `/assesswaves`) now begin with a `## Axioms` cross-reference block citing the binding axioms by number, and inline justification prose that duplicated the axiom corpus has been replaced with cross-references — single source of truth, no more skill-body drift. (#605)
>>>>>>> Stashed changes
=======
### Features

- `wave_wait_for_signal` MCP tool — sanctioned idle-wait for wave-pattern Orchestrators (and Primes) blocking on filesystem-bus completion artifacts. Polls every 5s with configurable timeout (default 1800s) and minimum match count (default 1); accepts literal paths or Bun.Glob patterns. Returns matched paths on success or `timed_out: true` + `partial_matches` on timeout. Replaces ad-hoc `Bash(sleep)` loops and the anxiety-driven premature-exit failure mode (#414).
- **wave-watcher daemon (#578).** New standalone Bun daemon at
- `/wave` skill: thin routing skill wrapping `mcp__sdlc-server__wave_show` so wave-pattern status (Project / Phase / Wave / Flight / Action / Progress / Deferrals) can be checked from any conversation without remembering the MCP tool name. Pure pass-through — no interpretation. Future routes (`/wave health`, `/wave topology`, `/wave next`) documented but reserved for follow-up issues. (#579)

### Fixes

- `pr_wait_ci` no longer hangs the full timeout window when a PR/MR has no required status checks. The handler now probes once at t=0; on empty rollup it returns `{ status: "no_checks_required", elapsed_sec, mergeable, blocker? }` instead of polling. Polling-loop behavior for non-empty rollups is unchanged. (#416)

### Docs

- Added `docs/tools.md` (per-tool reference, seeded with `wave_wait_for_signal`).
- Added `docs/wave-pattern-orchestration.md` with the canonical Orchestrator-wait-on-Flights example.
>>>>>>> Stashed changes
=======
### Breaking

- Wavemachine Classic mode retired; Kahuna is the only execution shape. Every Plan now bootstraps a `kahuna_branch` at launch and routes Flight PRs through that integration branch, with the four-signal trust gate at Plan completion auto-merging kahuna→protected-branch. The `legacy non-KAHUNA` / `KAHUNA mode` framing is gone from `/wavemachine`, `/nextwave`, `/prepwaves`, `/assesswaves`, and `/devspec`. Hardcoded `main` integration targets in skill bodies have been replaced with abstract phrasing (the project's protected branch, read from `.claude-project.md`). No mode-selection flag, no fallback path. Closes cc-workflow#580.

### Chore

- New regression check `scripts/ci/check-no-classic-mode.sh` (wrapped by `tests/regression/test_no_classic_mode.sh`) flags Classic-mode taint in wave-pattern skill bodies and the cross-repo recipe; wired into `scripts/ci/validate.sh`'s regression-tests pass.
>>>>>>> Stashed changes

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
Expand Down
3 changes: 2 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Every issue MUST be wave-pattern quality: detailed enough that a spec-driven age

**READ `WAVE_AXIOMS.md` FIRST when invoking `/wavemachine`, `/nextwave`, `/assesswaves`, or `/prepwaves`.** That file is the canonical, load-mandatory constitutional layer for wave-pattern execution. Each axiom binds to a specific observed-and-forbidden agent behavior; violation is a bug, not a judgment call.

The eight axioms (full text in `WAVE_AXIOMS.md` at the cc-workflow root):
The nine axioms (full text in `WAVE_AXIOMS.md` at the cc-workflow root):

1. **Serial is a valid wave topology.** Wave campaigns are justified by autonomous batched execution, not parallelism.
2. **The campaign is autonomous from invocation to terminal state.** No mid-campaign questions. No "shall I continue?"
Expand All @@ -97,6 +97,7 @@ The eight axioms (full text in `WAVE_AXIOMS.md` at the cc-workflow root):
6. **Approval frequency is set by the invoked command.** `/nextwave` = per-wave; `/wavemachine` = at terminal state. The agent never adds gates.
7. **`/assesswaves` measures justification, not topology suitability.** YES whenever count ≥ 4 or per-issue wall-clock is non-trivial.
8. **These axioms supersede agent judgment in their domain.** Disagreement is a reason to PR `WAVE_AXIOMS.md`, never to override in the moment.
9. **User attention is the cost. Autonomy is the protection.** Autonomy clauses in `/wavemachine`-class skills protect the user's attention; the legal-exits list is exhaustive (Axiom 3); plan-reality drift is the only legitimate stop beyond hard faults and explicit halts.

Disagreement with an axiom is a reason to update `WAVE_AXIOMS.md` via PR — never to override it in the moment.

Expand Down
Loading
Loading