From dcce9e55306e5049cc363a4c5ba05076b62d8a6a Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 1 Sep 2026 18:49:17 +0900 Subject: [PATCH 1/6] test(scheduler): reproduce Strix sibling-job rerun selection --- tests/test_strix_rerun_job_selection.py | 57 +++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tests/test_strix_rerun_job_selection.py diff --git a/tests/test_strix_rerun_job_selection.py b/tests/test_strix_rerun_job_selection.py new file mode 100644 index 0000000000..ab6d7ba4c6 --- /dev/null +++ b/tests/test_strix_rerun_job_selection.py @@ -0,0 +1,57 @@ +"""Regression coverage for exact-head Strix rerun job selection.""" + +from scripts.ci import pr_review_merge_scheduler as sched + + +def _strix_job(name: str, job_id: int, conclusion: str) -> dict: + """Build one exact-head job from the trusted Strix workflow.""" + return { + "__typename": "CheckRun", + "name": name, + "status": "COMPLETED", + "conclusion": conclusion, + "startedAt": "2026-08-30T05:24:23Z", + "detailsUrl": f"https://github.com/ContextualWisdomLab/bandscope/actions/runs/33294403831/job/{job_id}", + "checkSuite": { + "createdAt": "2026-08-30T05:22:18Z", + "workflowRun": {"workflow": {"name": "Strix Security Scan"}}, + }, + } + + +def test_dispatch_strix_reruns_scan_job_not_sibling_publisher(monkeypatch) -> None: + """A skipped status-publisher sibling must never be selected as the Strix rerun target.""" + pr = { + "number": 1055, + "statusCheckRollup": { + "contexts": { + "nodes": [ + _strix_job("strix", 99212031836, "FAILURE"), + _strix_job("publish-manual-pr-evidence-status", 99212677006, "SKIPPED"), + ] + } + }, + } + reruns: list[tuple[str, str, str]] = [] + + def record_rerun(repo: str, job_id: str, *, dry_run: bool, action: str) -> None: + reruns.append((repo, job_id, action)) + + monkeypatch.setattr(sched, "rerun_actions_job", record_rerun) + + assert ( + sched.dispatch_strix_evidence( + "ContextualWisdomLab/bandscope", + "Strix Security Scan", + pr, + dry_run=False, + ) + == "rerun" + ) + assert reruns == [ + ( + "ContextualWisdomLab/bandscope", + "99212031836", + "rerun-strix-evidence", + ) + ] From 06562c9e9ba435be06da62e47bee32d13a434343 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 1 Sep 2026 19:01:39 +0900 Subject: [PATCH 2/6] chore(ci): stage one-shot Strix rerun selector repair --- .../source-fix-1584-strix-rerun-selection.yml | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/source-fix-1584-strix-rerun-selection.yml diff --git a/.github/workflows/source-fix-1584-strix-rerun-selection.yml b/.github/workflows/source-fix-1584-strix-rerun-selection.yml new file mode 100644 index 0000000000..1b35ac0b9c --- /dev/null +++ b/.github/workflows/source-fix-1584-strix-rerun-selection.yml @@ -0,0 +1,61 @@ +name: One-shot PR 1584 Strix rerun selector repair + +on: + push: + branches: + - fix/strix-rerun-select-scan-20260901 + paths: + - .github/workflows/source-fix-1584-strix-rerun-selection.yml + +permissions: + contents: write + +jobs: + repair: + runs-on: ubuntu-24.04 + timeout-minutes: 20 + steps: + - name: Apply focused repair, verify, and retire workflow + env: + GH_TOKEN: ${{ github.token }} + TARGET_BRANCH: fix/strix-rerun-select-scan-20260901 + shell: bash + run: | + set -euo pipefail + export GIT_TERMINAL_PROMPT=0 + git clone --filter=blob:none "https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" repo + cd repo + git checkout "$TARGET_BRANCH" + test "$(git rev-parse HEAD)" = "$GITHUB_SHA" + + python3 - <<'PY' + from pathlib import Path + + path = Path("scripts/ci/pr_review_merge_scheduler.py") + text = path.read_text(encoding="utf-8") + old = " job_id = matching_actions_job_id(pr, is_strix_context)\n" + new = ( + " job_id = matching_actions_job_id(\n" + " pr, lambda node: node.get(\"name\") == \"strix\" and is_strix_context(node)\n" + " )\n" + ) + if text.count(old) != 1: + raise SystemExit(f"expected exactly one Strix rerun selector, found {text.count(old)}") + path.write_text(text.replace(old, new), encoding="utf-8") + PY + + python3 -m pytest -q \ + tests/test_strix_rerun_job_selection.py \ + tests/test_pr_review_merge_scheduler.py + python3 scripts/ci/pr_review_merge_scheduler.py --self-test + git diff --check + + git rm .github/workflows/source-fix-1584-strix-rerun-selection.yml + git add scripts/ci/pr_review_merge_scheduler.py tests/test_strix_rerun_job_selection.py + git diff --cached --check + git status --short + + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git commit -m "fix(scheduler): rerun authoritative Strix scan job" + git push origin "HEAD:${TARGET_BRANCH}" From 511d995fbcdbdf3a76f312e2e96e967814beaee9 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 1 Sep 2026 19:03:49 +0900 Subject: [PATCH 3/6] fix(ci): make PR 1584 one-shot repair self-contained --- .../source-fix-1584-strix-rerun-selection.yml | 86 ++++++++++++++++--- 1 file changed, 76 insertions(+), 10 deletions(-) diff --git a/.github/workflows/source-fix-1584-strix-rerun-selection.yml b/.github/workflows/source-fix-1584-strix-rerun-selection.yml index 1b35ac0b9c..37dabf9950 100644 --- a/.github/workflows/source-fix-1584-strix-rerun-selection.yml +++ b/.github/workflows/source-fix-1584-strix-rerun-selection.yml @@ -33,20 +33,86 @@ jobs: path = Path("scripts/ci/pr_review_merge_scheduler.py") text = path.read_text(encoding="utf-8") - old = " job_id = matching_actions_job_id(pr, is_strix_context)\n" - new = ( - " job_id = matching_actions_job_id(\n" - " pr, lambda node: node.get(\"name\") == \"strix\" and is_strix_context(node)\n" - " )\n" - ) + old = '''def dispatch_strix_evidence(repo: str, workflow: str, pr: dict[str, Any], *, dry_run: bool) -> str: + """Dispatch same-head Strix workflow evidence before OpenCode reviews.""" + job_id = matching_actions_job_id(pr, is_strix_context) + '''.replace(" ", "") + new = '''def is_strix_scan_check_run(node: dict[str, Any]) -> bool: + """Return whether a check run is the authoritative Strix scan job.""" + return ( + node.get("__typename") == "CheckRun" + and node.get("name") == "strix" + and is_strix_context(node) + ) + + + def dispatch_strix_evidence(repo: str, workflow: str, pr: dict[str, Any], *, dry_run: bool) -> str: + """Dispatch same-head Strix workflow evidence before OpenCode reviews.""" + job_id = matching_actions_job_id(pr, is_strix_scan_check_run) + '''.replace(" ", "") if text.count(old) != 1: - raise SystemExit(f"expected exactly one Strix rerun selector, found {text.count(old)}") + raise SystemExit( + f"expected exactly one Strix dispatch block, found {text.count(old)}" + ) path.write_text(text.replace(old, new), encoding="utf-8") PY - python3 -m pytest -q \ - tests/test_strix_rerun_job_selection.py \ - tests/test_pr_review_merge_scheduler.py + python3 - <<'PY' + from scripts.ci import pr_review_merge_scheduler as sched + + def strix_job(name: str, job_id: int, conclusion: str) -> dict: + return { + "__typename": "CheckRun", + "name": name, + "status": "COMPLETED", + "conclusion": conclusion, + "startedAt": "2026-08-30T05:24:23Z", + "detailsUrl": ( + "https://github.com/ContextualWisdomLab/bandscope/" + f"actions/runs/33294403831/job/{job_id}" + ), + "checkSuite": { + "createdAt": "2026-08-30T05:22:18Z", + "workflowRun": {"workflow": {"name": "Strix Security Scan"}}, + }, + } + + scan = strix_job("strix", 99212031836, "FAILURE") + publisher = strix_job( + "publish-manual-pr-evidence-status", 99212677006, "SKIPPED" + ) + assert sched.is_strix_context(scan) + assert sched.is_strix_context(publisher) + assert sched.is_strix_scan_check_run(scan) + assert not sched.is_strix_scan_check_run(publisher) + + pr = { + "number": 1055, + "statusCheckRollup": {"contexts": {"nodes": [scan, publisher]}}, + } + reruns = [] + + def record_rerun(repo: str, job_id: str, *, dry_run: bool, action: str) -> None: + reruns.append((repo, job_id, action)) + + sched.rerun_actions_job = record_rerun + assert ( + sched.dispatch_strix_evidence( + "ContextualWisdomLab/bandscope", + "Strix Security Scan", + pr, + dry_run=False, + ) + == "rerun" + ) + assert reruns == [ + ( + "ContextualWisdomLab/bandscope", + "99212031836", + "rerun-strix-evidence", + ) + ] + PY python3 scripts/ci/pr_review_merge_scheduler.py --self-test git diff --check From 5b7ddd1e55742c5fca3232c4c6f22258e5f95997 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Sep 2026 10:04:05 +0000 Subject: [PATCH 4/6] fix(scheduler): rerun authoritative Strix scan job --- .../source-fix-1584-strix-rerun-selection.yml | 127 ------------------ scripts/ci/pr_review_merge_scheduler.py | 11 +- 2 files changed, 10 insertions(+), 128 deletions(-) delete mode 100644 .github/workflows/source-fix-1584-strix-rerun-selection.yml diff --git a/.github/workflows/source-fix-1584-strix-rerun-selection.yml b/.github/workflows/source-fix-1584-strix-rerun-selection.yml deleted file mode 100644 index 37dabf9950..0000000000 --- a/.github/workflows/source-fix-1584-strix-rerun-selection.yml +++ /dev/null @@ -1,127 +0,0 @@ -name: One-shot PR 1584 Strix rerun selector repair - -on: - push: - branches: - - fix/strix-rerun-select-scan-20260901 - paths: - - .github/workflows/source-fix-1584-strix-rerun-selection.yml - -permissions: - contents: write - -jobs: - repair: - runs-on: ubuntu-24.04 - timeout-minutes: 20 - steps: - - name: Apply focused repair, verify, and retire workflow - env: - GH_TOKEN: ${{ github.token }} - TARGET_BRANCH: fix/strix-rerun-select-scan-20260901 - shell: bash - run: | - set -euo pipefail - export GIT_TERMINAL_PROMPT=0 - git clone --filter=blob:none "https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" repo - cd repo - git checkout "$TARGET_BRANCH" - test "$(git rev-parse HEAD)" = "$GITHUB_SHA" - - python3 - <<'PY' - from pathlib import Path - - path = Path("scripts/ci/pr_review_merge_scheduler.py") - text = path.read_text(encoding="utf-8") - old = '''def dispatch_strix_evidence(repo: str, workflow: str, pr: dict[str, Any], *, dry_run: bool) -> str: - """Dispatch same-head Strix workflow evidence before OpenCode reviews.""" - job_id = matching_actions_job_id(pr, is_strix_context) - '''.replace(" ", "") - new = '''def is_strix_scan_check_run(node: dict[str, Any]) -> bool: - """Return whether a check run is the authoritative Strix scan job.""" - return ( - node.get("__typename") == "CheckRun" - and node.get("name") == "strix" - and is_strix_context(node) - ) - - - def dispatch_strix_evidence(repo: str, workflow: str, pr: dict[str, Any], *, dry_run: bool) -> str: - """Dispatch same-head Strix workflow evidence before OpenCode reviews.""" - job_id = matching_actions_job_id(pr, is_strix_scan_check_run) - '''.replace(" ", "") - if text.count(old) != 1: - raise SystemExit( - f"expected exactly one Strix dispatch block, found {text.count(old)}" - ) - path.write_text(text.replace(old, new), encoding="utf-8") - PY - - python3 - <<'PY' - from scripts.ci import pr_review_merge_scheduler as sched - - def strix_job(name: str, job_id: int, conclusion: str) -> dict: - return { - "__typename": "CheckRun", - "name": name, - "status": "COMPLETED", - "conclusion": conclusion, - "startedAt": "2026-08-30T05:24:23Z", - "detailsUrl": ( - "https://github.com/ContextualWisdomLab/bandscope/" - f"actions/runs/33294403831/job/{job_id}" - ), - "checkSuite": { - "createdAt": "2026-08-30T05:22:18Z", - "workflowRun": {"workflow": {"name": "Strix Security Scan"}}, - }, - } - - scan = strix_job("strix", 99212031836, "FAILURE") - publisher = strix_job( - "publish-manual-pr-evidence-status", 99212677006, "SKIPPED" - ) - assert sched.is_strix_context(scan) - assert sched.is_strix_context(publisher) - assert sched.is_strix_scan_check_run(scan) - assert not sched.is_strix_scan_check_run(publisher) - - pr = { - "number": 1055, - "statusCheckRollup": {"contexts": {"nodes": [scan, publisher]}}, - } - reruns = [] - - def record_rerun(repo: str, job_id: str, *, dry_run: bool, action: str) -> None: - reruns.append((repo, job_id, action)) - - sched.rerun_actions_job = record_rerun - assert ( - sched.dispatch_strix_evidence( - "ContextualWisdomLab/bandscope", - "Strix Security Scan", - pr, - dry_run=False, - ) - == "rerun" - ) - assert reruns == [ - ( - "ContextualWisdomLab/bandscope", - "99212031836", - "rerun-strix-evidence", - ) - ] - PY - python3 scripts/ci/pr_review_merge_scheduler.py --self-test - git diff --check - - git rm .github/workflows/source-fix-1584-strix-rerun-selection.yml - git add scripts/ci/pr_review_merge_scheduler.py tests/test_strix_rerun_job_selection.py - git diff --cached --check - git status --short - - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git commit -m "fix(scheduler): rerun authoritative Strix scan job" - git push origin "HEAD:${TARGET_BRANCH}" diff --git a/scripts/ci/pr_review_merge_scheduler.py b/scripts/ci/pr_review_merge_scheduler.py index 00d71905d9..1289218a08 100644 --- a/scripts/ci/pr_review_merge_scheduler.py +++ b/scripts/ci/pr_review_merge_scheduler.py @@ -3097,9 +3097,18 @@ def dispatch_opencode_review(repo: str, workflow: str, pr: dict[str, Any], *, dr return "dispatched" +def is_strix_scan_check_run(node: dict[str, Any]) -> bool: + """Return whether a check run is the authoritative Strix scan job.""" + return ( + node.get("__typename") == "CheckRun" + and node.get("name") == "strix" + and is_strix_context(node) + ) + + def dispatch_strix_evidence(repo: str, workflow: str, pr: dict[str, Any], *, dry_run: bool) -> str: """Dispatch same-head Strix workflow evidence before OpenCode reviews.""" - job_id = matching_actions_job_id(pr, is_strix_context) + job_id = matching_actions_job_id(pr, is_strix_scan_check_run) if job_id: rerun_actions_job(repo, job_id, dry_run=dry_run, action="rerun-strix-evidence") return "rerun" if not dry_run else "dry_run" From ae368264ba6f85ac1c93ba0f59a1fce1aac95d79 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 1 Sep 2026 19:05:27 +0900 Subject: [PATCH 5/6] fix(ci): provision pinned pytest for PR 1584 repair --- .../source-fix-1584-strix-rerun-selection.yml | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/workflows/source-fix-1584-strix-rerun-selection.yml diff --git a/.github/workflows/source-fix-1584-strix-rerun-selection.yml b/.github/workflows/source-fix-1584-strix-rerun-selection.yml new file mode 100644 index 0000000000..b191eb153a --- /dev/null +++ b/.github/workflows/source-fix-1584-strix-rerun-selection.yml @@ -0,0 +1,84 @@ +name: One-shot PR 1584 Strix rerun selector repair + +on: + push: + branches: + - fix/strix-rerun-select-scan-20260901 + paths: + - .github/workflows/source-fix-1584-strix-rerun-selection.yml + +permissions: + contents: write + +jobs: + repair: + runs-on: ubuntu-24.04 + timeout-minutes: 20 + steps: + - name: Set up Python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: "3.14" + + - name: Install exact hash-verified test runner dependencies + env: + PIP_DISABLE_PIP_VERSION_CHECK: "1" + PIP_NO_INPUT: "1" + shell: bash --noprofile --norc -e -o pipefail {0} + run: | + cat >"${RUNNER_TEMP}/source-fix-quality-requirements.txt" <<'EOF' + coverage==7.15.2 --hash=sha256:b9a6367e4aff723e8ee8190836836124284e8fcd4265e307c844010cfa074f3f + iniconfig==2.1.0 --hash=sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760 + packaging==26.2 --hash=sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e + pluggy==1.6.0 --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + pygments==2.20.0 --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 + pytest==9.1.1 --hash=sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c + EOF + python -m pip install \ + --only-binary=:all: \ + --require-hashes \ + -r "${RUNNER_TEMP}/source-fix-quality-requirements.txt" + + - name: Apply focused repair, verify, and retire workflow + env: + GH_TOKEN: ${{ github.token }} + TARGET_BRANCH: fix/strix-rerun-select-scan-20260901 + shell: bash --noprofile --norc -e -o pipefail {0} + run: | + export GIT_TERMINAL_PROMPT=0 + git clone --filter=blob:none "https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" repo + cd repo + git checkout "$TARGET_BRANCH" + test "$(git rev-parse HEAD)" = "$GITHUB_SHA" + + python - <<'PY' + from pathlib import Path + + path = Path("scripts/ci/pr_review_merge_scheduler.py") + text = path.read_text(encoding="utf-8") + old = " job_id = matching_actions_job_id(pr, is_strix_context)\n" + new = ( + " job_id = matching_actions_job_id(\n" + " pr, lambda node: node.get(\"name\") == \"strix\" and is_strix_context(node)\n" + " )\n" + ) + if text.count(old) != 1: + raise SystemExit(f"expected exactly one Strix rerun selector, found {text.count(old)}") + path.write_text(text.replace(old, new), encoding="utf-8") + PY + + python -m pytest -q \ + tests/test_strix_rerun_job_selection.py \ + tests/test_pr_review_merge_scheduler.py + python scripts/ci/pr_review_merge_scheduler.py --self-test + git diff --check + + git rm .github/workflows/source-fix-1584-strix-rerun-selection.yml + git add scripts/ci/pr_review_merge_scheduler.py tests/test_strix_rerun_job_selection.py + git diff --cached --check + git status --short + + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git commit -m "fix(scheduler): rerun authoritative Strix scan job" + git push origin "HEAD:${TARGET_BRANCH}" From e7e4a8d44caa2a537490a7a2432330c5ea26cd14 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 1 Sep 2026 19:06:06 +0900 Subject: [PATCH 6/6] chore(ci): retire completed PR 1584 source-fix workflow --- .../source-fix-1584-strix-rerun-selection.yml | 84 ------------------- 1 file changed, 84 deletions(-) delete mode 100644 .github/workflows/source-fix-1584-strix-rerun-selection.yml diff --git a/.github/workflows/source-fix-1584-strix-rerun-selection.yml b/.github/workflows/source-fix-1584-strix-rerun-selection.yml deleted file mode 100644 index b191eb153a..0000000000 --- a/.github/workflows/source-fix-1584-strix-rerun-selection.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: One-shot PR 1584 Strix rerun selector repair - -on: - push: - branches: - - fix/strix-rerun-select-scan-20260901 - paths: - - .github/workflows/source-fix-1584-strix-rerun-selection.yml - -permissions: - contents: write - -jobs: - repair: - runs-on: ubuntu-24.04 - timeout-minutes: 20 - steps: - - name: Set up Python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 - with: - python-version: "3.14" - - - name: Install exact hash-verified test runner dependencies - env: - PIP_DISABLE_PIP_VERSION_CHECK: "1" - PIP_NO_INPUT: "1" - shell: bash --noprofile --norc -e -o pipefail {0} - run: | - cat >"${RUNNER_TEMP}/source-fix-quality-requirements.txt" <<'EOF' - coverage==7.15.2 --hash=sha256:b9a6367e4aff723e8ee8190836836124284e8fcd4265e307c844010cfa074f3f - iniconfig==2.1.0 --hash=sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760 - packaging==26.2 --hash=sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e - pluggy==1.6.0 --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 - pygments==2.20.0 --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 - pytest==9.1.1 --hash=sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c - EOF - python -m pip install \ - --only-binary=:all: \ - --require-hashes \ - -r "${RUNNER_TEMP}/source-fix-quality-requirements.txt" - - - name: Apply focused repair, verify, and retire workflow - env: - GH_TOKEN: ${{ github.token }} - TARGET_BRANCH: fix/strix-rerun-select-scan-20260901 - shell: bash --noprofile --norc -e -o pipefail {0} - run: | - export GIT_TERMINAL_PROMPT=0 - git clone --filter=blob:none "https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" repo - cd repo - git checkout "$TARGET_BRANCH" - test "$(git rev-parse HEAD)" = "$GITHUB_SHA" - - python - <<'PY' - from pathlib import Path - - path = Path("scripts/ci/pr_review_merge_scheduler.py") - text = path.read_text(encoding="utf-8") - old = " job_id = matching_actions_job_id(pr, is_strix_context)\n" - new = ( - " job_id = matching_actions_job_id(\n" - " pr, lambda node: node.get(\"name\") == \"strix\" and is_strix_context(node)\n" - " )\n" - ) - if text.count(old) != 1: - raise SystemExit(f"expected exactly one Strix rerun selector, found {text.count(old)}") - path.write_text(text.replace(old, new), encoding="utf-8") - PY - - python -m pytest -q \ - tests/test_strix_rerun_job_selection.py \ - tests/test_pr_review_merge_scheduler.py - python scripts/ci/pr_review_merge_scheduler.py --self-test - git diff --check - - git rm .github/workflows/source-fix-1584-strix-rerun-selection.yml - git add scripts/ci/pr_review_merge_scheduler.py tests/test_strix_rerun_job_selection.py - git diff --cached --check - git status --short - - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git commit -m "fix(scheduler): rerun authoritative Strix scan job" - git push origin "HEAD:${TARGET_BRANCH}"