Skip to content

fix(wavemachine): call installed binaries by PATH-resolvable names#570

Merged
bakeb7j0 merged 1 commit intomainfrom
fix/569-wavemachine-skill-non-portable-paths
May 4, 2026
Merged

fix(wavemachine): call installed binaries by PATH-resolvable names#570
bakeb7j0 merged 1 commit intomainfrom
fix/569-wavemachine-skill-non-portable-paths

Conversation

@bakeb7j0
Copy link
Copy Markdown
Contributor

@bakeb7j0 bakeb7j0 commented May 4, 2026

Summary

/wavemachine and /nextwave SKILL.md bodies were calling supporting tooling via paths that only resolve inside claudecode-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:
  • skills/nextwave/SKILL.md:
    • All scripts/mcp-logmcp-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 present
  • tests/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 workarounds

Out of scope (called out in test header): 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). 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 findings
  • Code review by feature-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
  • Manually confirmed ~/.local/bin/{wave-status,generate-status-panel,mcp-log} are all on PATH and that wave-status --help lists every subcommand the skill calls
  • Post-merge smoke: invoke /wavemachine from a non-cc-workflow project (e.g. mcp-server-discord checkout) 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 on main.

🤖 Generated with Claude Code

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>
@bakeb7j0 bakeb7j0 enabled auto-merge May 4, 2026 00:01
@bakeb7j0 bakeb7j0 added this pull request to the merge queue May 4, 2026
Merged via the queue into main with commit f814e10 May 4, 2026
1 check passed
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.

fix(wavemachine): skill body calls non-portable paths instead of installed binaries

1 participant