Conversation
PR #383 introduced a regression by replacing direct state.json edits with 'python3 -m wave_status <subcmd>' — the Python module form, which only resolves inside cc-workflow's source tree. Same-shape relative-path bugs crept into ./scripts/generate-status-panel and scripts/mcp-log calls, making /wavemachine non-portable across projects since 2026-04-20. The installer was always correct: it builds wave-status (zipapp), generate-status-panel, and mcp-log into ~/.local/bin/ — all PATH-resolvable in any CC session. The skill bodies just stopped calling the right names. Fix: rewrite call sites in skills/wavemachine/SKILL.md and skills/nextwave/SKILL.md to use bare installed-binary names, add a pre-flight existence check that refuses to start /wavemachine if any of the three CLIs is missing, and add two regression tests under tests/regression/ that lock in the invariant going forward. scripts/wavebus/{wave-init,flight-finalize,wave-cleanup} references in nextwave have the same shape of bug but a different install layout (subdirectory not on PATH); deliberately out of scope for #569 and called out in the regression test header so the exclusion is explicit. Closes #569 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/wavemachineand/nextwaveSKILL.md bodies were calling supporting tooling via paths that only resolve insideclaudecode-workflow's source tree (python3 -m wave_status,./scripts/generate-status-panel,scripts/mcp-log). On any other project the calls failed, breaking the statusline indicator, status panel, and observability log — or in the better case, halting an agent that correctly diagnosed the missing tooling. This PR rewrites the call sites to use the PATH-resolvable installed-binary names (wave-status,generate-status-panel,mcp-log), adds a pre-flight existence check that refuses early with a named-CLI error, and locks the invariant in with two regression tests.Regression-introducing commit:
f9d3a12(PR #383, 2026-04-20). The intent ("route state writes through wave-status CLI") was right; the executed change shipped the wrong invocation form.Changes
skills/wavemachine/SKILL.md:python3 -m wave_status <subcmd>→wave-status <subcmd>(4 sites)./scripts/generate-status-panelandscripts/generate-status-panel→generate-status-panel(~9 sites)scripts/mcp-log→mcp-log(5 sites)wave_status wavemachine-stop(nopython3 -m) →wave-status wavemachine-stop(3 sites — half-finished edit from fix(wavemachine): route state writes through wave-status CLI #383)command -v wave-status generate-status-panel mcp-log; refuses with a message that names every missing CLI individually and points the operator at./installfor remediationskills/nextwave/SKILL.md:scripts/mcp-log→mcp-log(4 sites)tests/regression/test_skill_uses_installed_binaries.sh(new): greps both skill bodies for forbidden patterns (backtick-inline AND fenced-block forms), fails if any presenttests/regression/test_wavemachine_preflight_tools_check.sh(new): verifies pre-flight check exists, names all three CLIs, points at the installer, doesn't suggest PYTHONPATH/pip-install workaroundsOut of scope (called out in test header):
scripts/wavebus/{wave-init,flight-finalize,wave-cleanup}references innextwavehave the same shape of bug but a different install layout (subdirectory not on PATH). Separate issue to follow.Linked Issues
Closes #569
Test Plan
./scripts/ci/validate.sh— 124/124 pass (including 2 new regression tests auto-picked up by the suite glob)trivy fs --scanners vuln --severity HIGH,CRITICAL— 0 findingsfeature-dev:code-reviewer— 3 important findings, all fixed in-place: (1) test pattern extended to catch fenced-block form; (2) pre-flight ordering note added; (3) explicit out-of-scope wavebus comment in test header~/.local/bin/{wave-status,generate-status-panel,mcp-log}are all on PATH and thatwave-status --helplists every subcommand the skill calls/wavemachinefrom a non-cc-workflow project (e.g.mcp-server-discordcheckout) with a wave plan, confirm pre-flight passes and the loop runs cleanly. Will do this once fix(wavemachine): skill body calls non-portable paths instead of installed binaries #569 is onmain.🤖 Generated with Claude Code