Skip to content

fix(strix): gate dependency manifest updates - #935

Open
seonghobae wants to merge 5 commits into
mainfrom
fix/strix-requirements-manifest-trigger
Open

fix(strix): gate dependency manifest updates#935
seonghobae wants to merge 5 commits into
mainfrom
fix/strix-requirements-manifest-trigger

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Problem and root cause

The central Strix dependency lock requirements-strix-ci-hashes.txt is executable supply-chain input for .github/workflows/strix.yml, but the permanent Strix Changed Path Quality CI pull-request path filter did not include it. Manifest-only dependency PRs could therefore receive generic security checks without running the Strix policy, installation, shell-regression, and full-suite contract.

The immediate cause was an incomplete trigger list. The systemic cause was that the existing dependency-hash regression guarded inline quality dependencies but did not bind the production Strix manifest and its doctoring record to the quality workflow.

Exact identity and bounded scope

  • protected base and live tip: main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba;
  • original bounded implementation head: 401a5308932e65b0c9cf02a611b96c38a7ab5269;
  • exact current head: 128e09c280f15c3b4c9be4de1a278b4b29285a05;
  • state: Ready and mechanically mergeable;
  • bounded current diff: Strix quality trigger, its permanent contract test, doctoring, and changelog only.

A later update introduced an unrelated trusted-lock installer-test change. A non-destructive forward cleanup restores that test to protected-main content while retaining the legitimate manifest/doctoring trigger contract. No force-push, rebase, history rewrite, predecessor evidence transfer, or gate weakening was used.

Every check, review, approval, or generated merge result bound to an earlier head is historical only. Current-head evidence must regenerate.

Test-first repair

The RED contract test_strix_workflow_reruns_when_dependency_manifest_changes failed on the unchanged workflow because the root manifest trigger was absent. The production repair adds the exact root manifest path and its APA 7 doctoring record to the existing quality trigger; the contract prevents either from drifting out of scope.

The bounded change does not alter the Strix model, provider, credentials, permissions, immutable-source materialization, hash enforcement, production timeouts, result semantics, file cap, or merge authority.

Verification posture

The predecessor bounded tree completed focused contracts, the complete repository suite, exact 100% owned production statement/branch coverage, the Strix quick gate, compilation, shell syntax, and diff checks. Those results are lineage only.

The current head must regenerate every applicable exact-head quality, security, supply-chain, and semantic-review result. Pending, queued, skipped, cancelled, absent, stale, predecessor-head, local-only, author-only, status-only, synthetic, or model-only evidence is not acceptance.

Rollback and merge gate

Rollback is the inverse trigger removal only if the manifest ceases to be executable Strix input and the regression/doctoring contract is updated in the same reviewed change.

Merge or auto-merge only after the unchanged current head has terminal-success required gates, zero valid unresolved findings, a qualifying current-head semantic verdict, two qualifying independent non-author approvals including last-push approval, compatible live-base evidence, and ordinary expected-head branch-protection authorization. No self-approval, administrative bypass, synthetic approval, or protection weakening is requested.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ee9834b7-f9e4-4ea0-b541-89ea1ee068a1

📥 Commits

Reviewing files that changed from the base of the PR and between 6eb06cd and 401a530.

📒 Files selected for processing (2)
  • .github/workflows/strix-changed-path-quality-ci.yml
  • tests/test_strix_workflow_dependency_hashes.py

📝 Walkthrough

Walkthrough

Strix CI 워크플로의 변경 감시 대상에 의존성 해시 매니페스트를 추가했습니다. 매니페스트 변경 시 워크플로 재실행 경로와 파일 존재를 검증하는 테스트도 추가했습니다.

Changes

Strix CI 의존성 해시

Layer / File(s) Summary
의존성 매니페스트 트리거 및 검증
.github/workflows/strix-changed-path-quality-ci.yml, tests/test_strix_workflow_dependency_hashes.py
워크플로 감시 경로에 requirements-strix-ci-hashes.txt를 추가했습니다. 파일 존재와 변경 시 재실행 경로 등록을 검증하는 테스트를 추가했습니다.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

Suggested reviewers: opencode-agent

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 Strix 의존성 매니페스트 변경을 CI 실행 조건에 포함하는 주요 변경 사항을 간결하고 정확하게 설명합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/strix-requirements-manifest-trigger

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.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review

Review exact current head 401a5308932e65b0c9cf02a611b96c38a7ab5269 against independently resolved live protected main 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba. All nine exact-head hosted workflows are terminal-success, including Strix Changed Path Quality CI; the head is one commit ahead, zero behind, mergeable, and has zero unresolved threads.

Validate that adding requirements-strix-ci-hashes.txt to the permanent deterministic quality trigger closes the manifest-only gate gap without changing Strix providers, credentials, permissions, immutable-source/hash enforcement, timeouts, findings, or merge authority. Treat the RED→GREEN regression and exact blob identities in the PR body as source evidence. Review read-only; do not mutate the branch, infer qualifying independent human approval, or merge.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please perform a fresh read-only semantic review of exact current head 401a5308932e65b0c9cf02a611b96c38a7ab5269 against independently resolved live protected main 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba. All nine exact-head hosted workflows are terminal-success, including the deterministic Strix quality gate; the branch is one commit ahead, zero behind, mergeable, and has zero unresolved threads.

Validate that the one-line trigger addition and its regression test close the executable Strix dependency-lock bypass without altering providers, credentials, permissions, immutable-source/hash enforcement, timeouts, finding semantics, or merge authority. Keep the PR Draft. This automated review is semantic evidence only and is not qualifying independent human approval or merge authority.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='401a5308932e65b0c9cf02a611b96c38a7ab5269'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'

printf '%s\n' '== Commit identity and ancestry =='
git rev-parse "$head^{commit}" "$base^{commit}"
git merge-base --is-ancestor "$base" "$head"
git rev-list --left-right --count "$base...$head"

printf '%s\n' '== Changed files and summary =='
git diff --name-status "$base" "$head"
git diff --stat "$base" "$head"

printf '%s\n' '== Complete exact diff =='
git diff --no-ext-diff --unified=80 "$base" "$head" --

printf '%s\n' '== Workflow outline and relevant content =='
ast-grep outline .github/workflows/strix.yml --items all || true
nl -ba .github/workflows/strix.yml | sed -n '1,280p'

printf '%s\n' '== Strix manifest references in workflow =='
rg -n -C 5 -F 'requirements-strix-ci-hashes.txt' .github/workflows/strix.yml

printf '%s\n' '== Changed test outline and content =='
changed_tests=$(git diff --name-only "$base" "$head" | grep -E '(^|/)(test|tests)[^/]*.*\.(py|yml|yaml)$' || true)
if [ -n "$changed_tests" ]; then
  while IFS= read -r test_file; do
    ast-grep outline "$test_file" --items all || true
    nl -ba "$test_file" | sed -n '1,420p'
  done <<< "$changed_tests"
fi

printf '%s\n' '== Existing Strix workflow test coverage =='
rg -n -C 4 'strix\.yml|requirements-strix-ci-hashes\.txt|Strix Changed Path Quality CI' \
  -g '*.py' -g '*.yml' -g '*.yaml' .

Length of output: 9392


🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='401a5308932e65b0c9cf02a611b96c38a7ab5269'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
quality='.github/workflows/strix-changed-path-quality-ci.yml'
production='.github/workflows/strix.yml'
test_file='tests/test_strix_workflow_dependency_hashes.py'
manifest='requirements-strix-ci-hashes.txt'

printf '%s\n' '== Exact blob identities at head =='
git rev-parse "$head:$quality" "$head:$test_file" "$head:$production" "$head:$manifest"

printf '%s\n' '== Manifest consumers at head =='
git grep -n -C 4 -F "$manifest" "$head" -- . ':!tests/test_strix_workflow_dependency_hashes.py' || true

printf '%s\n' '== Production Strix workflow: trigger, permissions, checkout, installation, and execution context =='
git show "$head:$production" |
  grep -n -E -C 5 \
  '^(name:|on:|permissions:|concurrency:|jobs:|[[:space:]]*(uses: actions/checkout|persist-credentials:|ref:|run:|shell:|timeout-minutes:))|requirements-strix-ci-hashes\.txt|pip install|require-hashes|hash|credential|token|provider|model|STRIX_'

printf '%s\n' '== Changed quality workflow, full head content =='
git show "$head:$quality" | sed -n '1,180p'

printf '%s\n' '== Security-sensitive production Strix workflow diff =='
git diff --no-ext-diff --unified=5 "$base" "$head" -- "$production" "$manifest"

printf '%s\n' '== Quality workflow diff with zero context check =='
git diff --no-ext-diff --unified=0 "$base" "$head" -- "$quality"

printf '%s\n' '== Regression test, full head content =='
git show "$head:$test_file" | sed -n '1,220p'

printf '%s\n' '== All references to the quality workflow and manifest at head =='
git grep -n -E 'strix-changed-path-quality-ci\.yml|requirements-strix-ci-hashes\.txt' "$head" -- \
  '.github' 'tests' 'scripts' 2>/dev/null || true

Length of output: 86158


@seonghobae: No findings.

I reviewed exact head 401a5308932e65b0c9cf02a611b96c38a7ab5269 against base 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba. The base is an ancestor. The head is one commit ahead and zero commits behind.

The range changes only these files:

  • .github/workflows/strix-changed-path-quality-ci.yml
  • tests/test_strix_workflow_dependency_hashes.py

The workflow blob is 2fd3fafe5893e23b2dcec4af16d70e6b26b4e8e7. The regression-test blob is 50c59cae9ef060bac1feb4c0914f3d4ff51c3a91.

The workflow change adds only the repository-root path "requirements-strix-ci-hashes.txt" to pull_request.paths for PRs targeting main. A manifest-only PR now runs the exact-head quality workflow.

.github/workflows/strix.yml treats this manifest as executable supply-chain input. It materializes the same-repository PR-head lock and installs it with --require-hashes. The production workflow has no diff in this range. Its providers, credentials, permissions, immutable-source handling, hash enforcement, timeouts, finding semantics, and status publication behavior are unchanged.

The new regression test verifies that the manifest exists and that the exact trigger path remains present. It protects the manifest-to-quality-gate binding.

This is read-only semantic evidence only. It is not an independent human approval, merge authorization, or branch-protection result. The PR remains Draft.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@seonghobae
seonghobae marked this pull request as ready for review August 12, 2026 03:15

Copy link
Copy Markdown
Contributor Author

@coderabbitai review
@opencode-agent review
@cwl-noema-review review

Review exact current head 401a5308932e65b0c9cf02a611b96c38a7ab5269 only. Current-head hosted workflows are terminal-success. Validate that requirements-strix-ci-hashes.txt is included in the permanent Strix quality PR path filter, with no change to model/provider credentials, permissions, immutable materialization, hash enforcement, production timeouts, result semantics, or merge authority. Review only; do not mutate, merge, or bypass protection.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='401a5308932e65b0c9cf02a611b96c38a7ab5269'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
quality='.github/workflows/strix-changed-path-quality-ci.yml'
production='.github/workflows/strix.yml'
test_file='tests/test_strix_workflow_dependency_hashes.py'
manifest='requirements-strix-ci-hashes.txt'

printf '%s\n' '== Commit identity and ancestry =='
git rev-parse "$head^{commit}" "$base^{commit}"
git merge-base --is-ancestor "$base" "$head"
git rev-list --left-right --count "$base...$head"

printf '%s\n' '== Changed paths and complete diff =='
git diff --name-status "$base" "$head"
git diff --no-ext-diff --unified=40 "$base" "$head" --

printf '%s\n' '== Quality workflow trigger at requested head =='
git show "$head:$quality" | nl -ba | sed -n '1,180p'

printf '%s\n' '== Production workflow change check =='
git diff --no-ext-diff --exit-code "$base" "$head" -- "$production" "$manifest" || true
printf 'production_and_manifest_diff_exit=%s\n' "$?"

printf '%s\n' '== Production workflow control references at requested head =='
git show "$head:$production" |
  rg -n -C 3 \
  'permissions:|persist-credentials:|requirements-strix-ci-hashes\.txt|--require-hashes|timeout-minutes:|provider|credential|token|STRIX_|findings|status' || true

printf '%s\n' '== Regression test at requested head =='
git show "$head:$test_file" | nl -ba | sed -n '1,260p'

printf '%s\n' '== Relevant blob identities =='
git rev-parse "$head:$quality" "$head:$production" "$head:$test_file" "$head:$manifest"

printf '%s\n' '== GitHub check runs attached to requested head =='
gh api \
  -H 'Accept: application/vnd.github+json' \
  "/repos/ContextualWisdomLab/.github/commits/$head/check-runs?per_page=100" \
  --jq '.check_runs[] | [.name, .status, .conclusion, .details_url] | `@tsv`' || true

Length of output: 8304


🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='401a5308932e65b0c9cf02a611b96c38a7ab5269'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
quality='.github/workflows/strix-changed-path-quality-ci.yml'
production='.github/workflows/strix.yml'
test_file='tests/test_strix_workflow_dependency_hashes.py'
manifest='requirements-strix-ci-hashes.txt'

printf '%s\n' '== Full quality workflow at requested head =='
git show "$head:$quality" | sed -n '1,240p'

printf '%s\n' '== No production workflow or manifest changes in requested range =='
if git diff --quiet "$base" "$head" -- "$production" "$manifest"; then
  printf '%s\n' 'confirmed: no diff'
else
  printf '%s\n' 'unexpected diff:'
  git diff --no-ext-diff --unified=20 "$base" "$head" -- "$production" "$manifest"
fi

printf '%s\n' '== Production workflow security and execution controls at requested head =='
git show "$head:$production" | \
  grep -n -E -C 4 \
  '^(name:|on:|permissions:|concurrency:|jobs:)|requirements-strix-ci-hashes\.txt|--require-hashes|persist-credentials:|timeout-minutes:|STRIX_|token|credential|provider|findings|status' \
  || true

printf '%s\n' '== Full changed regression test at requested head =='
git show "$head:$test_file" | sed -n '1,260p'

printf '%s\n' '== Exact blob identities =='
git rev-parse \
  "$head:$quality" \
  "$head:$production" \
  "$head:$test_file" \
  "$head:$manifest"

printf '%s\n' '== Workflow and manifest references at requested head =='
git grep -n -E \
  'strix-changed-path-quality-ci\.yml|requirements-strix-ci-hashes\.txt' \
  "$head" -- .github tests scripts 2>/dev/null || true

printf '%s\n' '== Exact-head check data, if curl is available =='
if command -v curl >/dev/null 2>&1; then
  curl --fail --silent --show-error \
    -H 'Accept: application/vnd.github+json' \
    "https://api.github.com/repos/ContextualWisdomLab/.github/commits/$head/check-runs?per_page=100" \
    | sed -n '1,260p' || true
else
  printf '%s\n' 'curl is unavailable'
fi

Length of output: 69917


@seonghobae: No findings.

I reviewed exact head 401a5308932e65b0c9cf02a611b96c38a7ab5269 against 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

The base is an ancestor of the head. The head is one commit ahead.

The range changes only:

  • .github/workflows/strix-changed-path-quality-ci.yml
  • tests/test_strix_workflow_dependency_hashes.py

The quality workflow now includes:

- "requirements-strix-ci-hashes.txt"

in pull_request.paths for main. Therefore, a PR that changes only the Strix dependency manifest triggers the permanent exact-head quality workflow.

The regression test checks both conditions:

  • requirements-strix-ci-hashes.txt exists.
  • The exact manifest path remains in the quality workflow trigger.

The production workflow .github/workflows/strix.yml has no diff. The manifest itself has no diff. The unchanged production workflow still materializes the manifest from the same-repository PR head and installs it with --require-hashes.

This change does not modify Strix model or provider selection, credentials, permissions, immutable materialization, hash enforcement, production timeouts, finding semantics, status publication, or merge authority.

I used the repository guidance that only successful checks on the exact current head qualify as merge evidence. The returned check data is truncated, so this review does not independently validate the complete hosted-workflow set. It is read-only semantic evidence only. It is not an independent human approval, merge authorization, or protection bypass.


🧠 Learnings used
Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 0
File: :0-0
Timestamp: 2026-08-05T13:44:10.007Z
Learning: For PR `#782`, only successful checks associated with the exact current head are valid merge evidence. Do not treat queued, in-progress, cancelled, predecessor-head, temporary-workflow, or administrative-bypass results as passing evidence. Before a formal approval, verify that the direct security and supply-chain workflows, the permanent hourly NVIDIA NIM contract, current-head reviews, unresolved-thread checks, and an independent approval have completed successfully.
⚠️ Action not completed

Already reviewed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review
@cwl-noema-review review
@coderabbitai review

Review exact current head 401a5308932e65b0c9cf02a611b96c38a7ab5269 only. Verify that requirements-strix-ci-hashes.txt is executable input to the production Strix workflow and now appears in the permanent quality workflow's pull-request path filter; confirm the regression binds the exact repository-root manifest without broad glob drift, and that model/provider/credential/permission/timeout/result/merge behavior is unchanged. All exact-head hosted checks are terminal-success. Review only: do not mutate, merge, release, or bypass protections.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-current-head read-only review request for 401a5308932e65b0c9cf02a611b96c38a7ab5269 against protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

The complete diff is the minimal causal repair: add requirements-strix-ci-hashes.txt to the permanent Strix quality workflow trigger and bind that path with a regression test. Directly observed exact-head quality, security, and supply-chain workflows are successful and no review thread exists. This prerequisite is required before manifest-only Dependabot updates such as #914 can produce complete Strix evidence.

Review this exact head without updating the branch, synthesizing author approval, weakening the path contract, or bypassing protection.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
head='401a5308932e65b0c9cf02a611b96c38a7ab5269'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
quality='.github/workflows/strix-changed-path-quality-ci.yml'
production='.github/workflows/strix.yml'
test_file='tests/test_strix_workflow_dependency_hashes.py'
manifest='requirements-strix-ci-hashes.txt'

printf '%s\n' '== Commit identity, ancestry, and range =='
git rev-parse "$head^{commit}" "$base^{commit}"
git merge-base --is-ancestor "$base" "$head" && echo 'base_is_ancestor=true'
git rev-list --left-right --count "$base...$head"
git diff --name-status "$base" "$head"
git diff --no-ext-diff --unified=60 "$base" "$head" --

printf '%s\n' '== Quality workflow at requested head =='
git show "$head:$quality" | nl -ba | sed -n '1,220p'

printf '%s\n' '== Production workflow changes in requested range =='
if git diff --quiet "$base" "$head" -- "$production" "$manifest"; then
  echo 'production_workflow_and_manifest_unchanged=true'
else
  git diff --no-ext-diff --unified=60 "$base" "$head" -- "$production" "$manifest"
fi

printf '%s\n' '== Production workflow manifest consumption and controls at requested head =='
git show "$head:$production" |
  rg -n -C 5 \
  'requirements-strix-ci-hashes\.txt|--require-hashes|permissions:|persist-credentials:|timeout-minutes:|provider|model|credential|token|STRIX_|findings|status|checkout' \
  || true

printf '%s\n' '== Regression test at requested head =='
ast-grep outline "$test_file" --items all || true
git show "$head:$test_file" | nl -ba | sed -n '1,280p'

printf '%s\n' '== Exact relevant blobs =='
git rev-parse "$head:$quality" "$head:$production" "$head:$test_file" "$head:$manifest"

printf '%s\n' '== Exact-head GitHub check runs =='
gh api \
  -H 'Accept: application/vnd.github+json' \
  "/repos/$repo/commits/$head/check-runs?per_page=100" \
  --paginate \
  --jq '.check_runs[] | [.name, .head_sha, .status, .conclusion] | `@tsv`'

Length of output: 9682


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
head='401a5308932e65b0c9cf02a611b96c38a7ab5269'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
quality='.github/workflows/strix-changed-path-quality-ci.yml'
production='.github/workflows/strix.yml'
test_file='tests/test_strix_workflow_dependency_hashes.py'
manifest='requirements-strix-ci-hashes.txt'

printf '%s\n' '== Full quality workflow at exact head =='
git show "$head:$quality" | sed -n '1,220p'

printf '%s\n' '== Production workflow and manifest diff check =='
if git diff --quiet "$base" "$head" -- "$production" "$manifest"; then
  printf '%s\n' 'production_workflow_and_manifest_unchanged=true'
else
  git diff --no-ext-diff --unified=60 "$base" "$head" -- "$production" "$manifest"
fi

printf '%s\n' '== Production workflow manifest execution and requested controls =='
git show "$head:$production" | grep -n -E -C 6 \
  'requirements-strix-ci-hashes\.txt|--require-hashes|permissions:|persist-credentials:|timeout-minutes:|provider|model|credential|token|STRIX_|finding|status|actions/checkout|github\.event\.pull_request\.head\.sha' \
  || true

printf '%s\n' '== Regression test at exact head =='
git show "$head:$test_file" | sed -n '1,260p'

printf '%s\n' '== Relevant exact-head blob IDs =='
git rev-parse "$head:$quality" "$head:$production" "$head:$test_file" "$head:$manifest"

printf '%s\n' '== GitHub check runs on exact head =='
gh api \
  -H 'Accept: application/vnd.github+json' \
  "/repos/$repo/commits/$head/check-runs?per_page=100" \
  --paginate \
  --jq '.check_runs[] | [.name, .head_sha, .status, .conclusion] | `@tsv`' \
  || printf '%s\n' 'check_run_query_failed=true'

printf '%s\n' '== Pull request state and unresolved review-thread count, if available =='
gh api graphql \
  -F owner='ContextualWisdomLab' \
  -F name='.github' \
  -F number=935 \
  -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      isDraft
      mergeable
      headRefOid
      reviewThreads(first: 100) { nodes { isResolved } }
    }
  }
}' \
  --jq '[.data.repository.pullRequest.isDraft, .data.repository.pullRequest.mergeable, .data.repository.pullRequest.headRefOid, ([.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length)] | `@tsv`' \
  || printf '%s\n' 'pull_request_query_failed=true'

Length of output: 69082


@seonghobae: No findings.

I reviewed exact head 401a5308932e65b0c9cf02a611b96c38a7ab5269 against 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

The base is an ancestor of the head. The head is one commit ahead and zero commits behind. The range changes only:

  • .github/workflows/strix-changed-path-quality-ci.yml
  • tests/test_strix_workflow_dependency_hashes.py

The quality workflow includes the exact repository-root path:

- "requirements-strix-ci-hashes.txt"

This is a literal pull_request.paths entry. It is not a broad glob. A PR that changes only this manifest now runs exact-head-path-policy.

The regression test binds the same exact path. It verifies that requirements-strix-ci-hashes.txt exists at the repository root and that the quality workflow contains the literal trigger entry.

The production workflow .github/workflows/strix.yml and the manifest have no diff in this range. The unchanged production workflow materializes requirements-strix-ci-hashes.txt from the same-repository PR head. It then installs the dependencies with --require-hashes.

Therefore, this change does not alter Strix model or provider selection, credentials, permissions, immutable materialization, hash enforcement, production timeouts, result semantics, status publication, or merge authority.

The exact-head exact-head-path-policy and strix checks completed successfully. The PR is mergeable and has zero unresolved review threads. Other exact-head checks that are skipped or neutral are not treated as passing evidence.

This is read-only semantic evidence. It is not independent human approval, merge authorization, or a protection bypass.


🧠 Learnings used
Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 0
File: :0-0
Timestamp: 2026-08-05T13:44:10.007Z
Learning: For PR `#782`, only successful checks associated with the exact current head are valid merge evidence. Do not treat queued, in-progress, cancelled, predecessor-head, temporary-workflow, or administrative-bypass results as passing evidence. Before a formal approval, verify that the direct security and supply-chain workflows, the permanent hourly NVIDIA NIM contract, current-head reviews, unresolved-thread checks, and an independent approval have completed successfully.

Learnt from: CR
Repo: ContextualWisdomLab/.github PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-07-29T06:47:25.581Z
Learning: Applies to .github/workflows/**/*.yml : Treat workflows in `.github/workflows/` as the canonical organization-wide PR governance, security scanning, and merge-automation implementation; do not maintain repository-local drift sources.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor Author

Exact-current-head automated review dispatch for 401a5308932e65b0c9cf02a611b96c38a7ab5269 over protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

The two-file change adds the executable requirements-strix-ci-hashes.txt root manifest to the permanent Strix quality path filter and locks the trigger with a regression test. Directly observed exact-head Strix, CodeQL, Python Security, Security Scan, SAST Semgrep, Secret Scan, OSV, Scorecard, and SBOM workflows are successful; no inline thread exists.

Keep the exact head unchanged. Do not update the branch, synthesize author approval, weaken the trigger contract, merge, release, or bypass protection.

@coderabbitai review
@opencode-agent review
@cwl-noema-review review
@strix review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 13 minutes and 52 seconds before sending another message.

Keep requirements-strix-ci-hashes.txt and its APA 7th decision record on
the exact-head quality trigger so lock-only updates cannot skip the
install contract.
@seonghobae

Copy link
Copy Markdown
Contributor Author

Reviewed. Added CHANGELOG, NIST 800-161 / SLSA doctoring, and bound that doctoring path to the quality trigger. Local suite 978 passed x2. Auto-merge armed.

Materialize a base Python lock only when every package line is an exact
SHA-256 pin or a two-token relative -r/--requirement include of a
candidate lock path. A lone --require-hashes directive, ./dotted paths,
and -r other-hashes.txt no longer enter the trusted build context.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 7c943f49a0f6bb93645a8c3a7402fadedcb57a94.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: strix-changed-path-quality-ci.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: strix-changed-path-quality-ci.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file (2 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (2 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: strix-dependency-manifest-trigger.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: strix-dependency-manifest-trigger.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script: materialize_base_python_requirements.py"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script: materialize_base_python_requirements.py"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (2 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (2 files)"]
  R5 --> V5["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 128e09c280f15c3b4c9be4de1a278b4b29285a05
  • Workflow run: 31893764679
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 128e09c280f15c3b4c9be4de1a278b4b29285a05.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: strix-changed-path-quality-ci.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: strix-changed-path-quality-ci.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: strix-dependency-manifest-trigger.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: strix-dependency-manifest-trigger.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["Test: test_strix_workflow_dependency_hashes.py"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: test_strix_workflow_dependency_hashes.py"]
  R4 --> V4["targeted test run"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 14, 2026 01:32
@seonghobae
seonghobae marked this pull request as draft August 14, 2026 09:02

Copy link
Copy Markdown
Contributor Author

Returned to Draft because the exact current tree mixes the one-path Strix dependency-manifest trigger repair with an unrelated trusted-uv materializer branch.

The causal change is deliberately tiny: add requirements-strix-ci-hashes.txt to the permanent Strix changed-path workflow and prove that exact trigger. Head 7c943f49a0f6bb93645a8c3a7402fadedcb57a94 additionally changes materialize_base_python_requirements.py and its tests.

Rebuild from protected main retaining only the Strix quality-workflow trigger, focused regression, doctoring, directly necessary AGENTS/changelog evidence, and no other production source. Preserve materializer work in its authoritative PR, refresh exact identities, then reacquire exact-head Strix/security/supply-chain and independent-review evidence.

@seonghobae
seonghobae marked this pull request as ready for review August 14, 2026 13:50

Copy link
Copy Markdown
Contributor Author

@coderabbitai review
@opencode-agent review
@cwl-noema-review review
@strix review

Review only exact current head 76e0b30cded444dd4b14f03eda2df23d7b17164d against live protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba. I removed the unrelated trusted-uv production delta by restoring the exact Strix dependency-manifest trigger tree as a new descendant. The current diff is now five files and limited to binding the executable requirements-strix-ci-hashes.txt and doctoring to permanent exact-head Strix quality CI, with the regression contract. No review thread exists. Exact-head checks are regenerating; nonterminal evidence is not acceptance. Review read-only; do not mutate source, synthesize approval, weaken the trigger/hash boundary, or merge.

@seonghobae
seonghobae enabled auto-merge (squash) August 14, 2026 13:51
@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
head='76e0b30cded444dd4b14f03eda2df23d7b17164d'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
quality='.github/workflows/strix-changed-path-quality-ci.yml'
production='.github/workflows/strix.yml'
manifest='requirements-strix-ci-hashes.txt'

printf '%s\n' '== Commit identity, ancestry, and range =='
git rev-parse "$head^{commit}" "$base^{commit}"
git merge-base --is-ancestor "$base" "$head" && echo 'base_is_ancestor=true'
git rev-list --left-right --count "$base...$head"
git diff --name-status "$base" "$head"
git diff --stat "$base" "$head"
git diff --no-ext-diff --unified=80 "$base" "$head" --

printf '%s\n' '== Quality and production workflow contents at exact head =='
git show "$head:$quality" | nl -ba | sed -n '1,260p'
git show "$head:$production" | nl -ba | sed -n '1,360p'

printf '%s\n' '== Production workflow and manifest range diff =='
if git diff --quiet "$base" "$head" -- "$production" "$manifest"; then
  echo 'production_workflow_and_manifest_unchanged=true'
else
  git diff --no-ext-diff --unified=80 "$base" "$head" -- "$production" "$manifest"
fi

printf '%s\n' '== Exact-head manifest consumers and trigger references =='
git grep -n -C 5 -F "$manifest" "$head" -- . ':!tests' || true
git grep -n -C 4 -E 'strix-changed-path-quality-ci\.yml|requirements-strix-ci-hashes\.txt' \
  "$head" -- .github tests scripts 2>/dev/null || true

printf '%s\n' '== Changed Python and Markdown/YAML file maps =='
git diff --name-only "$base" "$head" | while IFS= read -r path; do
  printf '\n-- %s --\n' "$path"
  case "$path" in
    *.py) ast-grep outline "$path" --items all || true ;;
  esac
  git show "$head:$path" | nl -ba | sed -n '1,420p'
done

printf '%s\n' '== Exact-head relevant blob identities =='
git rev-parse "$head:$quality" "$head:$production" "$head:$manifest"
git diff --name-only "$base" "$head" | while IFS= read -r path; do
  git rev-parse "$head:$path"
done

printf '%s\n' '== Exact-head GitHub check runs =='
gh api \
  -H 'Accept: application/vnd.github+json' \
  "/repos/$repo/commits/$head/check-runs?per_page=100" \
  --paginate \
  --jq '.check_runs[] | [.name, .head_sha, .status, (.conclusion // "null")] | `@tsv`' \
  || echo 'check_run_query_failed=true'

printf '%s\n' '== Pull request state and unresolved thread count =='
gh api graphql \
  -F owner='ContextualWisdomLab' \
  -F name='.github' \
  -F number=935 \
  -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      isDraft
      mergeable
      headRefOid
      reviewThreads(first: 100) { nodes { isResolved } }
    }
  }
}' \
  --jq '[.data.repository.pullRequest.isDraft, .data.repository.pullRequest.mergeable, .data.repository.pullRequest.headRefOid, ([.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length)] | `@tsv`' \
  || echo 'pull_request_query_failed=true'

Length of output: 28184


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
head='76e0b30cded444dd4b14f03eda2df23d7b17164d'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
quality='.github/workflows/strix-changed-path-quality-ci.yml'
production='.github/workflows/strix.yml'
manifest='requirements-strix-ci-hashes.txt'
materializer_test='tests/test_materialize_base_python_requirements.py'
strix_test='tests/test_strix_workflow_dependency_hashes.py'

printf '%s\n' '== Full quality workflow at exact head =='
git show "$head:$quality" | sed -n '1,260p'

printf '%s\n' '== Production workflow controls at exact head =='
git show "$head:$production" | grep -n -E -C 6 \
  'requirements-strix-ci-hashes\.txt|--require-hashes|permissions:|persist-credentials:|timeout-minutes:|provider|model|credential|token|STRIX_|finding|status|actions/checkout|github\.event\.pull_request\.head\.sha' \
  || true

printf '%s\n' '== Production workflow and manifest range diff =='
if git diff --quiet "$base" "$head" -- "$production" "$manifest"; then
  printf '%s\n' 'production_workflow_and_manifest_unchanged=true'
else
  git diff --no-ext-diff --unified=80 "$base" "$head" -- "$production" "$manifest"
fi

printf '%s\n' '== Full diff for the trusted-uv test change =='
git diff --no-ext-diff --unified=50 "$base" "$head" -- "$materializer_test"

printf '%s\n' '== Related production symbols and their test call sites =='
rg -n -C 5 \
  '_force_linux_x86_64_installer|def _install_trusted_uv|_install_trusted_uv\(' \
  scripts tests

printf '%s\n' '== Full manifest-trigger regression test at exact head =='
git show "$head:$strix_test" | sed -n '1,220p'

printf '%s\n' '== Exact-head references to doctoring path and manifest =='
git grep -n -C 4 -E \
  'strix-dependency-manifest-trigger\.md|requirements-strix-ci-hashes\.txt' \
  "$head" -- .github docs tests scripts 2>/dev/null || true

printf '%s\n' '== Exact-head GitHub check runs =='
gh api \
  -H 'Accept: application/vnd.github+json' \
  "/repos/$repo/commits/$head/check-runs?per_page=100" \
  --paginate \
  --jq '.check_runs[] | [.name, .head_sha, .status, (.conclusion // "null")] | `@tsv`' \
  || printf '%s\n' 'check_run_query_failed=true'

printf '%s\n' '== Pull request state and unresolved thread count =='
gh api graphql \
  -F owner='ContextualWisdomLab' \
  -F name='.github' \
  -F number=935 \
  -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      isDraft
      mergeable
      headRefOid
      reviewThreads(first: 100) { nodes { isResolved } }
    }
  }
}' \
  --jq '[.data.repository.pullRequest.isDraft, .data.repository.pullRequest.mergeable, .data.repository.pullRequest.headRefOid, ([.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length)] | `@tsv`' \
  || printf '%s\n' 'pull_request_query_failed=true'

Length of output: 110219


@seonghobae: One finding.

tests/test_materialize_base_python_requirements.py changes three trusted-uv installer tests. It adds _force_linux_x86_64_installer() and calls it before _install_trusted_uv().

This test delta does not bind requirements-strix-ci-hashes.txt to the Strix quality trigger. It does not support the doctoring document. It is unrelated to the focused manifest-trigger regression.

Please remove this trusted-uv test delta from this PR. Keep it in the authoritative trusted-uv materializer PR. This restores the stated narrow scope.

The remaining Strix change is correct from source evidence:

  • The quality workflow includes the literal repository-root path "requirements-strix-ci-hashes.txt".
  • The regression test checks that same literal path and the doctoring path.
  • .github/workflows/strix.yml and requirements-strix-ci-hashes.txt have no range diff.
  • The unchanged production workflow still materializes the same-repository PR-head manifest and installs it with --require-hashes.
  • Model selection, credentials, permissions, production timeouts, result behavior, and merge authority have no source change in this range.

The exact-head check evidence is not yet acceptable. exact-head-path-policy is in progress. Several required checks remain queued. Other runs are cancelled or skipped. These states are not successful exact-head evidence.

This was a read-only semantic review. It is not approval, merge authorization, or a protection bypass.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor Author

Exact-current-head read-only review request for 128e09c280f15c3b4c9be4de1a278b4b29285a05 over protected base 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

The bounded four-file change ensures the executable Strix hash manifest and its doctoring record cannot bypass permanent exact-head quality CI. Recheck exact path triggering, regression enforcement, unchanged model/provider/credential/permission/hash/timeout/result/file-cap/merge semantics, and removal of unrelated installer-test drift. Treat all predecessor checks/reviews as historical. Do not mutate or merge the branch.

@opencode-agent review
@cwl-noema-review review
@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 25 minutes and 7 seconds before sending another message.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 128e09c280f15c3b4c9be4de1a278b4b29285a05.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: strix-changed-path-quality-ci.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: strix-changed-path-quality-ci.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: strix-dependency-manifest-trigger.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: strix-dependency-manifest-trigger.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["Test: test_strix_workflow_dependency_hashes.py"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: test_strix_workflow_dependency_hashes.py"]
  R4 --> V4["targeted test run"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 15, 2026 18:59
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