fix(strix): resolve evidence binder from trusted source - #2291
seonghobae wants to merge 14 commits into
Conversation
📝 WalkthroughWalkthroughStrix 게이트가 신뢰 소스 디렉터리에서 증거 바인더를 해석하도록 변경되었습니다. 테스트 하니스는 소비자 워크스페이스와 신뢰 런타임을 분리하고 ChangesStrix 신뢰 런타임 격리
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Bug fix · Severity of issue fixed: Medium Sequence Diagram(s)sequenceDiagram
participant Harness as test_strix_quick_gate.sh
participant Gate as trusted Strix quick gate
participant Binder as strix_evidence_binding.py
participant Workspace as consumer workspace
Harness->>Gate: 절대 경로로 실행
Harness->>Gate: STRIX_REPO_ROOT 전달
Gate->>Binder: SCRIPT_DIR에서 바인더 로드
Gate->>Workspace: 소비자 입력과 저장소 상태 처리
Suggested reviewers: Merge Risk: 🟡 Moderate · up to The current test harness fails and does not consistently verify the required trusted-runtime isolation. Fix the specialized fixtures before merging. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
Exact-head evidence —
|
|
|
seonghobae
left a comment
There was a problem hiding this comment.
P1 — add a production-shaped consumer-isolation regression before accepting this repair.
The source change points the binder at the correct trusted owner, but the new test only greps for the literal assignment. It never runs the gate with STRIX_REPO_ROOT rebound to an isolated consumer that deliberately has no scripts/ci/strix_evidence_binding.py, which is the exact boundary that produced the 527 binder is missing: <consumer>/... failures.
Please add an executable fixture that invokes the real gate (or a source-faithful extracted function) with:
- the gate and binder present only under the central trusted
SCRIPT_DIR; - an isolated consumer
STRIX_REPO_ROOTwith no binder; - a fake Strix log/report that reaches
sanitize_remediation_evidence_claims; and - assertions that the run does not read the consumer binder path and that the central binder actually transforms or validates the report.
The existing positive/negative string assertions can remain as static contracts, but they do not prove the repaired data flow. Keep the hosted exact-head checks and independent review as separate acceptance gates; the currently queued runs are not passing evidence.
seonghobae
left a comment
There was a problem hiding this comment.
Current-head re-review: the earlier P1 executable consumer-isolation gap is repaired. The harness now materializes the trusted gate, model helper, and evidence binder as one central runtime fixture across every isolated-consumer family; STRIX_REPO_ROOT remains the binder-free consumer workspace. The original exact head reproduced exit 2 with the consumer-path missing-binder error, while the repaired filtered scenario exits 0 in normal and GITHUB_ACTIONS=true environments. Focused tests are 51 passed, the complete Python suite is 3,392 passed / 5 skipped / 40 subtests, and the complete Strix shell harness reports PASS. Exact head db1fd614934c32ee01340de8524cce4141df9b24, tree 741a72afac667baa5394f60eb3aa8b784e3ba589. This COMMENT records evidence only and is not an approval; hosted current-head gates and independent review remain required.
|
Naruon consumer owner-path note: #2291 should be treated as the canonical Strix trusted-binder production/runtime owner. Existing Please keep #2291's invariant explicit through integration: consumer scan/artifact roots stay consumer-owned; Naruon does not consume this source directly; only a normally integrated/released central contract plus fresh downstream exact-head evidence is acceptable. No receipt transfer, force rewrite, or duplicate runtime owner. |
seonghobae
left a comment
There was a problem hiding this comment.
Current-head transport recovery review.
fb9c0e212c711e45b6ee82a1f194609fcc299e0e changed only scripts/ci/test_strix_quick_gate.sh, replacing the 13,102-line executable harness with a binary-like single-line blob (+1,213/-13,101 versus its verified parent). The corrupted blob had no shell shebang/newlines and no materialize_trusted_gate_fixture, so it carried no valid executable test delta.
Ordinary-forward successor 78b33a8d576f36ad4b28ce971e824876749d4d34 preserves the incident in ancestry and restores exact verified tree 741a72afac667baa5394f60eb3aa8b784e3ba589. Fresh remote comparison against db1fd614934c32ee01340de8524cce4141df9b24 is two commits ahead with zero file differences, and the harness blob is again 502075f9343d2d83b42c34e9c3d8982555600406 with its executable shebang.
This records tree recovery only, not hosted acceptance or approval. Runtime Quality 35474568056, Python Security 35474568060, CodeQL 35474568053, SAST 35474568076, and Security 35474568087 are queued/nonterminal; fresh exact-head checks and qualifying independent review remain required.
seonghobae
left a comment
There was a problem hiding this comment.
Exact-head repair receipt for 00082e8dc7ab6bdd3261c4f7131f6e300a66b645.
Re-review found the predecessor fixture still placed strix_evidence_binding.py under the consumer repo_root_dir/scripts/ci and invoked the gate from that same path. It therefore could not prove the claimed trusted-source / consumer-root separation.
RED 191bd630bb5df0f8f3f5f43f095d832bb40f2c6d makes a consumer-owned binder an executable fixture failure. GREEN ef1a866734618cd8c18c21c6c6a0c5aeea62254f moves the gate/model/binder bundle to a sibling trusted-source/scripts/ci, passes the binder-free workspace only through STRIX_REPO_ROOT, and invokes the trusted gate by absolute path. Gap and CHANGELOG evidence are corrected at abc9a7d1… and 00082e8d….
Fresh exact remote verification: owner-boundary assertions 7/7; bash -n for gate and 13k-line harness 2/2; a production-shaped direct gate probe with no consumer binder exited 0; exact binder sanitization produced all three required markers (remediation NOT applied, rejection marker, State=remediation_failed). Predecessor full-suite results are not current-head acceptance.
This COMMENT records direct repair evidence only, not approval. Fresh exact-head hosted Checks and qualifying independent review remain required.
|
Downstream single-writer convergence is now explicit. #2272 exact head The stacked #2272 diff now contains only 7 Pages/SAST paths. It no longer changes the Strix production gate/harness, no longer carries This is downstream topology and source verification only. #2291's queued exact-head Checks and qualifying independent review remain its acceptance gates; no review/check receipt transfers to #2272. |
A Ready canary on the #2291 stacked base generated Security, SAST, and CodeQL but omitted Runtime Quality and Python Security. Remove only those two pull_request base-name filters and pin the five-workflow stacked-base contract; push filters and all job guards remain unchanged.
seonghobae
left a comment
There was a problem hiding this comment.
Exact-head COMMENT review for 782d67b433aa71cf2c81b2a81f55ae192a317f3b (tree 37503f7f6c1522f727e83cf40bec8b7171b9fed3). This is not an approval.
The trusted gate/model/binder runtime remains isolated under trusted-source/scripts/ci; the consumer is passed only through STRIX_REPO_ROOT and owns no binder. Full-matrix execution exposed one narrower fixture requirement: when the canonical .github gate itself is the changed source, the consumer scan tree must contain the gate and model helper as source under review. This head materializes those two files only for pr-changed-scope-includes-ci-dependency, while continuing to execute the trusted absolute gate and leaving the consumer binder absent.
Fresh exact-tree verification: focused binder/runtime-quality 85 passed; full warnings-as-errors 3,394 passed / 3 skipped / 40 subtests; complete Strix shell integration PASS; required-workflow smoke, bash -n, compileall, and diff check PASS. Remote/local trees and the 643,680-byte harness blob are byte-identical. Unresolved threads are 0; I found no additional source defect.
Ready may admit independent review. Fresh exact-head hosted Checks and a qualifying independent approval remain merge gates.
seonghobae
left a comment
There was a problem hiding this comment.
Hosted exact-head Runtime Quality RED is now concrete at a8d6261d4fc2c2a82a9b8ad6636e75677ecc5081: run 35512696971, job 106083294309, failed at Verify scheduler and contextual-orchestrator review-repair contracts. The new tests/test_strix_trusted_fixture_boundary.py correctly rejects every specialized fixture that still calls materialize_trusted_gate_fixture "$repo_root_dir/scripts/ci".
run_gate_case() already demonstrates the causal repair shape: materialize strix_quick_gate.sh, strix_model_utils.sh, and strix_evidence_binding.py under a separate trusted script root; execute that trusted gate; pass STRIX_REPO_ROOT="$repo_root_dir" so the gate still observes the consumer repository; and copy gate/model into the consumer tree only for scenarios that intentionally exercise those consumer source files. All remaining specialized fixture families in scripts/ci/test_strix_quick_gate.sh must adopt that split-root pattern.
Do not repair this by changing the regression to sample only one fixture, by restoring binder lookup from $REPO_ROOT, or by leaving trusted binder/runtime material in the consumer root. Those variants can hide the exact boundary the production SCRIPT_DIR repair is meant to protect. After the complete fixture-matrix repair, require fresh exact-head Runtime Quality GREEN before #2109 reconciliation; predecessor success does not transfer.
|
Fresh hosted-security evidence changes the status of this exact head but does not change the 24-site causal repair.
This dependency RED is not introduced by #2291: the same AnyIO 4.14.0 lock exists on base For #2291 itself, the existing hosted Runtime Quality RED and unresolved Major still require the complete 24-site split-root fixture repair. Neither failed lane should be blind-rerun before its causal source is repaired. |
|
Consumer-side reproduction from fast-mlsirm (lead verification, no fmls workaround committed). Affected required Strix jobs: fast-mlsirm #2005 job 106100379387 (scan finished, Vulnerabilities 0) and #2018 job 106100530048. Both exited 2 with Minimal repro: extract
So the |
…e the consumer root Green step for a8d6261. The 24 specialized cases in test_strix_quick_gate.sh installed the trusted gate/model/binder into $repo_root_dir/scripts/ci and ran ./scripts/ci/strix_quick_gate.sh, so a consumer-root binder lookup could never fail there and masked the #2292 defect. Each case now materializes into $tmp_dir/trusted-source/scripts/ci and runs the gate from that directory with STRIX_REPO_ROOT=$repo_root_dir, which keeps the old repo-root semantics (the gate defaults REPO_ROOT to SCRIPT_DIR/../..). Evidence: - tests/test_strix_trusted_fixture_boundary.py: fails on a8d6261 (CI job 106083294309), passes here. - bash scripts/ci/test_strix_quick_gate.sh on Linux, umask 022: a8d6261 PASS (rc=0, 727s) and this commit PASS (rc=0, 726s). - strix-related pytest (8 files): 242 passed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P5o6j4zfxGPdRaH4Lug8UY
|
Green step pushed as
|
|
Fresh downstream owner-graph finding from Naruon commercial sweep: Concurrent Draft #2331 ( Verified overlap:
Verified potentially valid delta not present on current #2291: #2331 adds focused Treat #2331 as a repair/succession finding, not a second accepted Strix owner: ordinary/non-force adopt the focused test (or an equivalent stronger contract) into this canonical stack if it remains valid, while preserving this owner's sibling trusted-source fixture boundary rather than importing #2331's consumer-root binder-copy strategy. Do not close either lane as fully superseded until every valid test/fixture/evidence delta is demonstrably inherited. |
|
@coderabbitai review Please review exact current head |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
head="1794626af3473ef23b9c2e678c3f06fd6c11636f"
base="e6334e229581a918e2f22de18733b76fa65d7e71"
gate="scripts/ci/strix_quick_gate.sh"
harness="scripts/ci/test_strix_quick_gate.sh"
focused_test="tests/test_strix_evidence_binder_trusted_path.py"
boundary_test="tests/test_strix_trusted_fixture_boundary.py"
printf '%s\n' '== exact topology =='
git cat-file -t "$head"
printf 'merge-base: '
git merge-base "$base" "$head"
printf '%s\n' '== effective changed paths =='
git diff --name-status "$base" "$head"
git diff --stat "$base" "$head"
printf '%s\n' '== succession delta =='
git diff --no-ext-diff --unified=80 "$head^" "$head" -- "$focused_test"
printf '%s\n' '== focused test outline =='
ast-grep outline "$focused_test" --items all || true
printf '%s\n' '== focused test, numbered =='
git show "$head:$focused_test" | nl -ba
printf '%s\n' '== production function and relevant initialisation =='
git show "$head:$gate" | nl -ba | sed -n '1,100p;220,285p'
printf '%s\n' '== all runtime materialisations, gate paths, and consumer roots =='
git show "$head:$harness" | nl -ba | grep -E -C 4 'materialize_trusted_gate_fixture|trusted-source|gate_under_test=|STRIX_REPO_ROOT=|bash "\./scripts/ci/strix_quick_gate\.sh"|bash "\$gate_under_test"' || true
printf '%s\n' '== forbidden consumer materialisations and binder copies =='
git show "$head:$harness" | grep -nE 'materialize_trusted_gate_fixture "\$repo_root_dir/scripts/ci"|repo_root_dir/scripts/ci/strix_evidence_binding\.py|cp .*strix_evidence_binding\.py' || true
printf '%s\n' '== boundary test and its source-based offender search =='
git show "$head:$boundary_test" | nl -ba
printf '%s\n' '== full effective relevant diff =='
git diff --no-ext-diff --unified=30 "$base" "$head" -- "$gate" "$harness" "$focused_test" "$boundary_test"Length of output: 160580
I found no issue in the requested trusted-binder boundary.
The sibling trusted-runtime fixture topology remains preserved.
I used the prior trusted-binder boundary guidance during this review. I did not execute repository code. 🧠 Learnings usedYou are interacting with an AI system. |
|
Marked ready for review at exact head
|
seonghobae
left a comment
There was a problem hiding this comment.
Current exact-head review after fresh hosted-state read. Runtime Quality 35661200424 and SAST 35672611347 are now terminal SUCCESS. Security 35672611396 has admitted and completed Detect changed scope plus gitleaks; only trivy-fs/scorecard remain queued with runner_id=0. Python Security 35672611349 has completed Detect Python; pip-audit/Bandit remain queued with no runner. CodeQL 35672611353 is still waiting at Detect CodeQL languages with no runner. The binder source repair remains intact and all visible inline threads are resolved/outdated, but there is still no qualifying independent APPROVED review. This COMMENT records current authority only; it is not approval. Do not blind-rerun, add a wake commit, or transfer predecessor receipts while this generation is live.
|
Impact evidence: this binder defect is now confirmed to fail the required Strix check across consumer repositories, not only in
This PR resolves the binder next to the trusted gate instead of under the scanned repository root, and its own run of Two operational notes for whoever merges: the required |
|
Shepherding status at exact head Current-head classification
Consumer-fixture regression evidence, re-verified locally at this head
Acceptance conditions for calling the consumer path repairedNone of these may be waived:
Next recheck: the CodeQL dispatch verdict and the |
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head product diff. Coverage is a separate gate.
Changed files
CHANGELOG.d/20260920-strix-trusted-binder-runtime-fixture.md— repository behaviordocs/product-technical-gap-baseline.md— operator or user guidancescripts/ci/strix_quick_gate.sh— review and security gate shell pathscripts/ci/test_strix_quick_gate.sh— review and security gate shell pathtests/test_strix_evidence_binder_trusted_path.py— regression suitetests/test_strix_trusted_fixture_boundary.py— regression suite
Changed behavior
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: 20260920-strix-trusted-binder-runtime-fixture.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: 20260920-strix-trusted-binder-runtime-fixture.md"]
R1 --> V1["required checks"]
Evidence --> S2["Docs: product-technical-gap-baseline.md"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs: product-technical-gap-baseline.md"]
R2 --> V2["docs review"]
Evidence --> S3["CI script: strix_quick_gate.sh"]
S3 --> I3["review and security gate shell path"]
I3 --> R3["Review risk: CI script: strix_quick_gate.sh"]
R3 --> V3["bash -n plus Strix self-test"]
Evidence --> S4["CI script: test_strix_quick_gate.sh"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script: test_strix_quick_gate.sh"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test: test_strix_evidence_binder_trusted_path.py (2 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test: test_strix_evidence_binder_trusted_path.py (2 files)"]
R5 --> V5["targeted test run"]
Findings
No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.
- Head SHA:
1794626af3473ef23b9c2e678c3f06fd6c11636f - Workflow run: 35694049570
- Workflow attempt: 1
- Coverage gate:
failure
Review outcome
Coverage is a gate, not the review. This body reviews the changed product files.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: 20260920-strix-trusted-binder-runtime-fixture.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: 20260920-strix-trusted-binder-runtime-fixture.md"]
R1 --> V1["required checks"]
Evidence --> S2["Docs: product-technical-gap-baseline.md"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs: product-technical-gap-baseline.md"]
R2 --> V2["docs review"]
Evidence --> S3["CI script: strix_quick_gate.sh"]
S3 --> I3["review and security gate shell path"]
I3 --> R3["Review risk: CI script: strix_quick_gate.sh"]
R3 --> V3["bash -n plus Strix self-test"]
Evidence --> S4["CI script: test_strix_quick_gate.sh"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script: test_strix_quick_gate.sh"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test: test_strix_evidence_binder_trusted_path.py (2 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test: test_strix_evidence_binder_trusted_path.py (2 files)"]
R5 --> V5["targeted test run"]
OpenCode Review Overview
Coverage evidence did not pass, so approval is blocked. The formal pull-request review is the source-backed diff review, not this status comment. |
Three defects that would each have failed the gate's first Actions run, none of which a local unit test could surface: - Python 3.11 made `-I` imply `-P`, so under `python3 -I <script>` sys.path carries neither the invoking directory nor the script's own. Every `capture`, `gate`, and `seal` invocation would have died on ImportError before argparse. The sibling policy module is now resolved next to this script by real path, exactly as the Strix evidence binder already is. Verified by running the CLI under `-I` from an unrelated directory. - setup-python's interpreter ships pip (often setuptools/wheel too), so inspecting it directly would raise LOCK_ENV_MISMATCH on every run and invite a bootstrap exemption the brief forbids. The workflow now builds `python3 -m venv --without-pip`, installs the lock into it with `pip --python`, and threads that interpreter through the capture script's `pip inspect --local` and `pip show`. The environment is made honest rather than the rule weakened. The interpreter argument is passed only for a release that declared a Python lock, so a cargo-only release still gates. - The capture step now strips the lock's hashes into a plain `name==version` list and fetches without hash checking, then hashes the bytes itself. Fetching with --require-hashes would have pip reject a tampered distribution first, so the gate could never observe SOURCE_HASH_MISMATCH. Strix is no longer invoked through a guessed CLI. Each isolated fixture workspace is scanned by the organization's own trusted entry point scripts/ci/strix_quick_gate.sh via STRIX_REPO_ROOT, with strix.yml's bootstrap invariants mirrored verbatim: private install umask, --require-hashes --no-deps against the unmodified requirements-strix-ci-hashes.txt, an absolute non-symlinked executable inside the interpreter's own scripts root, chmod go-w, digest pinned into GITHUB_ENV, the sidecar-provided LLM_API_KEY_FILE / LLM_API_BASE_FILE / STRIX_LLM_FILE, and orchestrator/free as the only accepted model. Every Strix timeout knob is pinned to the unbounded value 0 per docs/product-goal-directive.md section 8, and a contract test now forbids any other timeout on an executable line. The trusted gate resolves its evidence binder against STRIX_REPO_ROOT on current main and against its own script directory once #2291 lands, so the trusted binder is copied into each fixture workspace and both resolutions hold without editing that file. strix_runs/**/vulnerabilities.json is consumed by the existing gate as free text, so its top-level shape is not contractual. The binding writer accepts it only when it is already an array, or an object carrying a `vulnerabilities` array; any other shape writes no binding at all, so the gate refuses with STRIX_BINDING_MISSING rather than inventing a result. The trusted-gate sparse-checkout is now the whole scripts/ci tree, because the Strix gate, the orchestrator sidecar, and the token loader each source siblings (strix_model_utils.sh, sanitize_contextual_orchestrator_sidecar_stream.py, install_strix_timeout_compat.py, strix_timeout_compat.py) by their own directory; an enumerated file list breaks silently when one gains another. Refs #2342. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FvosNg4GVUjaV5UfrimrsX
Read against strix_quick_gate.sh rather than assumed: - sanitize_remediation_evidence_claims returns 2 when $REPO_ROOT/scripts/ci/strix_evidence_binding.py is absent, and REPO_ROOT is STRIX_REPO_ROOT on current main. Copying the trusted binder into each isolated fixture workspace is therefore required, not defensive -- which is also what makes #2291's repair visible. - With STRIX_TARGET_PATH="./" that binder was inside the scan target, so Strix would pentest a 756-line urllib client this PR did not ship and a single MEDIUM finding against it would fail every dependency. The fixture now lives in $workspace/fixture/ and the target is narrowed to `fixture`; the binder sits beside the scanned directory, never inside it. validate_raw_target_path_input / resolve_scan_target_path accept a relative in-repository directory, so the narrowed target is supported rather than improvised. - PR_NUMBER, PR_BASE_SHA, PR_HEAD_SHA and GH_TOKEN are all read as optional by the trusted gate, and changed-file scoping engages only when base and head are both set, so a release scan needs none of them. IS_PR_EVIDENCE_RUN already defaults to false; it is now stated explicitly because this is a release scan, not PR evidence. - CONTEXTUAL_ORCHESTRATOR_BASE_URL is written to $GITHUB_ENV by the sidecar, so the later binding step reads it across the step boundary as intended. Refs #2342. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FvosNg4GVUjaV5UfrimrsX
|
Another consumer instance of the same defect, for the record: late-life-anxiety-reanalysis#248, run 35776707610, job 106951311984. The scan itself finished with Two things this instance makes explicit:
This PR's own merge precedence is unchanged: the required |
Current authority — 2026-09-22 KST
Exact head is
1794626af3473ef23b9c2e678c3f06fd6c11636fon protectedmain@e6334e229581a918e2f22de18733b76fa65d7e71; OPEN / Ready. The prior source-repair headbbe225d6559ba5ba562d06d2802d3d9687cc02e3remains audit-visible; the current commit is an ordinary-forward focused-test inheritance, not a rewrite.This PR remains the canonical trusted Strix runtime/binder owner. Production
strix_quick_gate.shresolvesstrix_evidence_binding.pyfrom the trusted source runtime rather thanSTRIX_REPO_ROOT; the consumer remains scan/artifact source and must not be required to carry the binder.24-site specialized-fixture P1 — source repaired
The accepted P1 was that 24 specialized
scripts/ci/test_strix_quick_gate.shfixtures still calledmaterialize_trusted_gate_fixture "$repo_root_dir/scripts/ci", co-locating trusted gate/model/binder with the consumer and masking regressions to consumer-root binder lookup. Structural REDtests/test_strix_trusted_fixture_boundary.pyrecords that forbidden materialization string.Ordinary-forward commit
bbe225d6559ba5ba562d06d2802d3d9687cc02e3repaired the specialized matrix without changing the product gate. Each affected case materializes into a sibling$tmp_dir/trusted-source/scripts/ci, invokes the trusted gate by absolute path, and suppliesSTRIX_REPO_ROOT="$repo_root_dir". Exact-source search found zero remaining occurrences of the forbidden consumer-root materialization. Consumer copies of gate/model remain only where a scenario intentionally places those files under scan; the trusted binder is not reintroduced there.#2331 valid-delta succession — complete
Direct-main sibling #2331 independently reproduced the original consumer-root binder failure and contributed one valid delta not previously present here:
tests/test_strix_evidence_binder_trusted_path.py. Its production gate fix is semantically the same$SCRIPT_DIR/strix_evidence_binding.pyresolution already owned here, while its fixture strategy copies the binder alongside consumer-root fixture materialization and is weaker than this owner's sibling trusted-source architecture.Commit
1794626af3473ef23b9c2e678c3f06fd6c11636finherits that valid focused contract into this canonical owner without copying #2331's weaker fixture topology. The regression executes the realsanitize_remediation_evidence_claimsbash function with a consumerREPO_ROOTcontaining no central binder, requires success through the trusted sibling binder, then removes the trusted binder and requires fail-closed exit 2. CodeRabbit independently re-read exact1794626a...and reported no remaining finding in this trusted-binder boundary; that review evidence is current-head but not a substitute for hosted required checks.Fresh exact-head hosted state
The older exact-head security generation remains cancelled audit history and is not acceptance. The replacement generation is now terminal in all visible lanes:
35661200424: SUCCESS.35672611347: SUCCESS.35672611396: SUCCESS.35672611349: FAILURE.Detect Pythonand Bandit are SUCCESS;pip-auditjob106599684140is the sole failing leaf after real hosted execution.35672611353: FAILURE, but current job evidence does not establish a source/SARIF defect.Detect CodeQL languagessucceeded. Both compatibility jobs successfully read the current-head dispatch verdict and then failed atRelease runner or enforce current-head CodeQL verdict; the subsequentDispatch current-head CodeQL scanjob106661445370ran later and succeeded. Treat this as the same current-head verdict/lifecycle lane owned through ops: diagnose and bound organization GitHub Actions queue starvation #712 unless a terminal scan verdict proves otherwise; do not normalize it to GREEN and do not blind-rerun.The Python Security failure is not owned by this six-file Strix binder delta: #2291 does not change any dependency manifest or lock. Protected central main and this exact head still contain shared
requirements-strix-ci-hashes.txtauthority with AnyIO 4.14.0. Canonical dependency owner #2278 is the one-filerequirements-strix-ci-hashes.txtsuccessor that advances AnyIO 4.14.0 -> 4.14.2; on exact8a5251bf409fe84b3dd0cba1e48992f5b8d9eda5, Python Security35649352757, SAST35649352729, and Security Scan35649352800are terminal SUCCESS. Its CodeQL35649352653is a separate terminal lifecycle/current-head-verdict failure and remains under #712. Do not copy that dependency delta into this owner.Normal repair order is #2278 governance/integration -> ordinary/non-force reconciliation of #2291 onto the resulting protected central main -> fresh exact-head Python Security and all other required evidence. This classification does not transfer #2278 checks to #2291 and does not declare the current pip-audit log equivalent without reconciliation. It identifies the existing canonical shared-dependency owner and prevents duplicate mutation while the same protected AnyIO 4.14.0 lock remains in this branch.
All visible inline review threads are resolved/outdated. Submitted reviews remain COMMENTED; there is still no qualifying independent current-head
APPROVEDreview.Acceptance / landing order
Merge authority remains withheld until the shared dependency repair reaches protected authority and this branch is ordinarily reconciled, then one unchanged exact head has terminal Runtime Quality, SAST, Security Scan, Python Security and CodeQL acceptance; no actionable review thread; qualifying independent current-head review evidence; and normal protected-main merge. #2109 remains the Draft/Ready + stacked-base admission successor and must consume this owner only after normal protected integration.
No predecessor evidence transfer, self-approval, source-neutral wake/no-op commit, blind rerun, dependency-fix duplication, force push, destructive rebase, review dismissal, or gate weakening is authorized.