Skip to content

fix(strix): resolve the evidence binder next to the trusted gate - #2331

Closed
seonghobae wants to merge 1 commit into
mainfrom
fix/strix-evidence-binder-trusted-path
Closed

seonghobae wants to merge 1 commit into
mainfrom
fix/strix-evidence-binder-trusted-path

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Root cause

fast-mlsirm#2005 and #2018 Strix reported 0 vulnerabilities and then exited 2 with Strix evidence binder is missing: …/trusted-workspace/scripts/ci/strix_evidence_binding.py. strix.yml runs the trusted .github gate (TRUSTED_STRIX_GATE) with STRIX_REPO_ROOT set to the consumer repository's base checkout. sanitize_remediation_evidence_claims() looked for the central binder under $REPO_ROOT/scripts/ci/, which is the consumer tree and does not contain the binder. Only .github PRs passed, because there the gate and the scanned repository are the same checkout. The gate already loads its other helper the right way (. "$SCRIPT_DIR/strix_model_utils.sh").

Change

  • scripts/ci/strix_quick_gate.sh: the binder is resolved at $SCRIPT_DIR/strix_evidence_binding.py. If the trusted copy is missing or a symlink, the gate still fails closed with exit 2.
  • tests/test_strix_evidence_binder_trusted_path.py: runs the real bash function with a consumer REPO_ROOT that has no scripts/ci, and asserts it succeeds. A second case asserts it still fails closed when the trusted copy is absent. Both fail on the previous gate and pass now.
  • scripts/ci/test_strix_quick_gate.sh: the 25 fixture setups now copy the binder next to the copied gate. Fifteen pull-request-target cases had been failing with the same "binder is missing" error since 1e15046 (2026-09-17).

Evidence

  • pytest tests/test_strix_evidence_binder_trusted_path.py: 2 passed. RED is 2 failed on main.
  • The local run of bash scripts/ci/test_strix_quick_gate.sh hit the local 50-minute limit before finishing. By that point none of the fifteen binder cases had failed, whereas the pre-change run showed 15 binder FAIL lines at the same stage. The three FAIL lines that remain are pre-existing and unrelated: OpenCode coverage-source contract wording (coverage-source-tree:, TARGET_REPOSITORY: ${{ needs.validate-pr-metadata.outputs.target_repository }}, Report coverage source materialization failure). Hosted CI is the authoritative full run.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LeLbwEgYXzCzpaFMTHDcBS

strix_quick_gate.sh looked for strix_evidence_binding.py under REPO_ROOT,
which is the scanned consumer checkout, so every non-.github repository
exited 2 after a clean scan (fast-mlsirm#2005/#2018). Resolve it from
SCRIPT_DIR like strix_model_utils.sh, keep the fail-closed check, and copy
the binder into the self-test fixture repositories.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LeLbwEgYXzCzpaFMTHDcBS
@coderabbitai

coderabbitai Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 1 minute.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 17c24de8-9827-4ede-af57-c3d5228730e6

📥 Commits

Reviewing files that changed from the base of the PR and between e6334e2 and 52a0231.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • scripts/ci/strix_quick_gate.sh
  • scripts/ci/test_strix_quick_gate.sh
  • tests/test_strix_evidence_binder_trusted_path.py

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae marked this pull request as draft September 21, 2026 20:11
@seonghobae

Copy link
Copy Markdown
Contributor Author

Lead note: this duplicates the earlier #2291 (bbe225d, 2026-09-19), which changes the same binder line to $SCRIPT_DIR/strix_evidence_binding.py. #2291 is also the better fix. Its fixtures materialize the trusted gate, model and binder outside the consumer root, and tests/test_strix_trusted_fixture_boundary.py fails if any fixture reintroduces consumer-root materialization. This PR instead copies the binder into the fixture's consumer root, which would mask exactly the consumer-root resolution bug. Converted to draft to avoid duplicate CI load. I will close it as superseded once #2291 merges. Merge order: #2333#2278#2291.

Copy link
Copy Markdown
Contributor Author

Succession audit complete against canonical #2291.

Valid delta from this sibling is now fully inherited by #2291@1794626af3473ef23b9c2e678c3f06fd6c11636f: the production gate already owned the same $SCRIPT_DIR/strix_evidence_binding.py trust boundary, and current #2291 now also owns the focused tests/test_strix_evidence_binder_trusted_path.py regression covering consumer roots without central scripts plus fail-closed behavior when the trusted binder is absent. #2291 retains the stronger 24-site fixture architecture that materializes trusted runtime in a sibling trusted-source root instead of copying the binder into the consumer fixture. Its canonical changelog fragment owns release-note provenance.

The remaining unique changes here are therefore either semantically duplicated or weaker than the canonical owner. No workflow/review receipt transfers. Closing this direct-main sibling is complete-succession cleanup, not evidence that #2291 is merge-ready; #2291 remains Draft pending fresh exact-head hosted checks and independent review.

@seonghobae seonghobae closed this Sep 21, 2026
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.

1 participant