Replace GNU-only sed -i in test-bash-workflow.sh with mktemp+sed+mv so
BSD sed runs case-guard reject-path tests 4/5. Wire the suite into
macos-bash-compat.yml.
Closes#135
Treat repository discovery as read-only until the user explicitly activates the package and approves the disclosed first-side-effect plan. Preserve deterministic execution after approval, keep client-global configuration opt-in, align the English and Chinese entry contracts, and guard all four top-level agent entry files in CI.
ReFirmLabs.binwalk is not in the winget community repository
(0x8A150014 NO_APPLICATIONS_FOUND) and binwalk ships no prebuilt
binaries on any GitHub release, so the advertised auto-install path
could never succeed on Windows. Mark the capability manual with a
manualInstallHint (Rust toolchain + cargo install binwalk), matching
what firmware-pentest/SKILL.md already documents. Linux/Kali/macOS
are unaffected (apt/brew path does not read this entry).
verify-routing-coherence.ps1 already rejects benchmark cases that point at a
removed route, but nothing enforced the reverse. The benchmark meta says to add
a case whenever a route is added, yet a new route could ship with zero coverage.
Add the symmetric check: every routing.json route must have at least one
routing-benchmark.json case. Passes today (44/44).
fix(docs): guard internal Markdown links
Owner integration: scan Git index blobs, include the payload corpus, and repair its missing reverse-shell link without materializing AV-sensitive content.
fix(ida-reverse): recover stalled Streamable HTTP supervisor
Owner integration: isolate opening and last-healthy state per MCP port and clear corrupt locks.
test-consolidate-evidence.ps1 printed CONSOLIDATE_ALIGN_OK but leaked exit 1:
it ran review_case.py --verify-hashes on a case whose consolidation had (by
design) rewritten E-001.md, so hash fixity could never pass. Drop --verify-hashes,
assert review_case's exit code, and wire both this and
test-bootstrap-codex-encoding.ps1 into the Windows leg of routing-tests. Both
shipped in the repo but were never run by CI.
Add skills/scripts/verify-doc-links.py (wired into the case-contract CI
job): it fails on any internal Markdown link that does not resolve to a
tracked file, skipping fenced code, the generated tool-index.md, and the
vendored src-hunter corpus. Also remove a dangling phishing-case-study.md
pointer in field-notes.md whose target was never created (analysis is inline).
Keep-alive Force only after tools/list stays unhealthy >180s.
open.ps1 holds opening.lock so in-flight idb_open is never replaced.
GUI and never-healthy stay busy/reuse. recover.ps1 remains the manual -Force path.
Patch idalib_supervisor onto ThreadingHTTPServer and accept GET /mcp.
Replace a managed supervisor only if tools/list stays dead >180s.
Add recover.ps1 as an immediate -Force path. Never taskkill /T or ida.exe.
* feat(workflow): add consolidate-evidence scripts and support superseded status
* fix(workflow): align consolidate-evidence Finding fields (#114)
Emit the same review_case contract from both Python and PowerShell:
confidence, location, evidence_ids. Drop the ps1-only evidence_refs field.
Add a small alignment regression. Do not close#62.
---------
Co-authored-by: maxwang <wang.yuchi.312@gmail.com>
fix: make MCP bootstrap client-neutral by default
Owner integration: preserve all prior CI contracts, document explicit host selection on Windows, and make the Bash manifest regression UTF-8 deterministic.
fix: make case setup consistent across Windows, Linux, and macOS
Owner integration: preserve routing.json SSoT, keep reports optional by default, and require offline samples to resolve to real local files.
Keep reverse-skill a skill router, not a platform. RULES hot path is master-route then case-init then PRIMARY. MASTER-ROUTING priority is verified against routing.json. precedent-auth no longer grants. CTF is one R41 pointer, not 40 competition routes. open.ps1 never deletes .i64/.idb. Route-scope parse is line-anchored and last-match. Tests: 168 routing cases, parse-contracts, title-safety in CI.
Reuse a healthy HTTP MCP, launch idalib_supervisor via windowless Python, and never taskkill ida.exe. Treat a listening 13337 with tools/list timeout as busy so the 1-minute watchdog cannot kill a supervisor mid-idb_open. open.ps1 uses idb_open/idb_list. Add watchdog, autostart, GUI launcher, and ToolDiscovery catalog entries.