Innovation Engine — insight

Test-Path Regression Radar

August 14, 2026

Ethan's last three joyos-pr-dashboard commits were all the same fix: absolute paths and hardcoded interpreter references in test files breaking on swarm/mirror machines. This watcher scans test files across active projects for the exact patterns he keeps hand-fixing (absolute /home/ethan paths, bare 'node' spawns, hardcoded ports) and files them into his existing repeat-fix-radar ledger before CI catches them.

joyos-pr-dashboard git reporepeat-fix-radarcommit-whisper tablet briefsystemd timers

Create /home/ethan/bin/test-path-portability-scan: grep -rn across each repo in ~/.claude/active-projects for test globs (**/*.test.*, tests/**) matching three rules — (1) string literals starting /home/ or /Users/, (2) spawn/exec with literal 'node'/'npm' instead of process.execPath, (3) hardcoded localhost port numbers not read from env. Emit JSON findings to ~/.local/state/test-path-radar/findings.json, diff against prior run, and pipe only NEW findings into `repeat-fix-radar` and `commit-whisper` for the tablet brief. Add a systemd timer (test-path-portability-scan.timer) running post-push hourly, plus a git pre-push hook in joyos-pr-dashboard that runs the scan on staged test files and warns (non-blocking) before the push lands.

Built & Ready
Done and committed.

**Shipped**
- `~/bin/test-path-portability-scan` + 9 bats tests (9/9 green)
- `test-path-portability-scan.{service,timer}` — hourly, enabled, next fire 07:01, one real run returned success
- Baseline of 772 pre-existing findings recorded, so only genuinely new violations produce a tablet card from here
- Committed to `swarm-vitest-jq-git-python-fix` (not pushed)

**One thing left for you, logged as a decision:** the pre-push hook was specified for `joyos-pr-dashboard`, and no project by that name exists on this machine. Either name the real repo or drop the hook — my recommendation is drop it, since the hourly scan already covers it and a hook adds friction on every push.

Also noted earlier and still true: tests ran locally rather than on the swarm, because `~/` is permanently dirty and jobq refused every node.
Active Projects
innovation-engine, joyos-lab-staging, joyos-labs-monitor, jekelinspections, .claude
Category
insight