You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(plugins): resolve residual audit findings across 6 plugins
Fixes surfaced by /audit plugins --adversarial and its follow-up residual-critical/non-critical passes, plus a routing-links checker bug found while validating this commit.
- Fix unrehydrated shell-variable and sentinel-newline bugs across cc_develop, cc_foundry, cc_oss, cc_research, codemap-py — fresh-shell state loss between separate Bash tool calls (CODEX_AVAILABLE, RANGE, SCAN_STATE_FILE and others)
- Harden symlink-unsafe temp-file writes in codemap-py (resolve_index_env.py, parse_deprecate_args.py, setup_scan_env.sh) via O_NOFOLLOW / mktemp+atomic-rename instead of plain redirect
- Add containment guard to codemap-py's locate_scan_query.py Tier-3 cache glob, mirroring the existing Tier-2 guard
- Wire Glob-based file resolution into codemap-py's debrief-coding Step 2 (previously referenced shell vars unresolvable across tool calls and unreadable by the Read tool)
- Fix cross-plugin path-resolution bug in cc_foundry's check_routing_links.py: relative_to() against an absolute plugins_dir always raised ValueError, silently falling back to the source plugin instead of the referenced target plugin
- Fix resolve_skill_subdir.py tier-precedence bug so --local correctly overrides CLAUDE_PLUGIN_ROOT instead of being a silent no-op
- Various smaller fixes: BSD-incompatible grep -oP, sentinel project-scoping collision, stale .js hook references, cicd-steward unmarked write, Confidence block format, orphan-risk markers
- Bump versions: cc_develop 0.18.3, cc_foundry 0.38.4, cc_oss 0.24.3, cc_research 0.12.6, codemap-py 0.28.4 (.claude-plugin + .codex-plugin), codex-rig 0.4.2
---
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
|`--issue <N>`| Force issue mode — fetch GitHub issue `<N>` instead of inferring mode from a bare numeric argument. Value form only; `--issue=123` is not supported by design (mode-detect matches the bare token). |
380
381
|`--repo <owner/repo>`| Route issue fetch to upstream repo. Use when working in fork and issue on original repo (e.g. `--repo owner/my-project`). |
381
382
|`--team`| Spawn 2-3 `foundry:sw-engineer` teammates, each investigating distinct root-cause hypothesis independently. Use when root cause unclear after initial analysis, or failure spans 3+ modules |
382
383
|`--worktree`| Run the investigation in an isolated git worktree (base: HEAD) so reproduction attempts never touch main sources. Diagnosis file is written to the **main tree** so `/develop:fix` can read it. |
@@ -646,7 +647,7 @@ claude plugin install foundry@borda-ai-rig
646
647
647
648
### A question is blocked with "develop:review report gate"
648
649
649
-
`enforce-review-header.js` denied an `AskUserQuestion` call because `.reports/review/<timestamp>/review-report.md` does not exist — the review reached agent launch but never consolidated its findings into a report. Finish the consolidation step and print the report `---` header; the question then goes through. The gate deactivates two hours after a run starts, so an aborted review never blocks later questions permanently.
650
+
`enforce-review-header.js` denied an `AskUserQuestion` call because `.reports/review/<timestamp>/review-report.md` does not exist — the review reached agent launch but never consolidated its findings into a report. Finish the consolidation step and print the report `---` header; the question then goes through. The gate deactivates two hours after a run starts, so an aborted review never blocks later questions permanently. When no review is actually in flight and an aborted run simply left its sentinel behind, there is no need to wait out that window: the denial message names the sentinel file, so `rm -f`-ing that path and re-issuing the question clears the block immediately.
Use `$PYTEST_CMD` for single test file/node with pytest-specific flags (`--tb`, `::test_name`); `$TEST_CMD` for full suite.
32
+
33
+
**Both values are persisted, and every later block must re-read them** — bash state is lost between Bash() calls, so a bare `$PYTEST_CMD` in a later block expands to the empty string and the command silently becomes `--tb=... -v` → `command not found` → exit 127, which downstream exit-code checks misread as a genuine test failure. Read back with:
0 commit comments