Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
c289ff3
fix(automation): schedule exact-head RCA and feasible repair loops
seonghobae Aug 8, 2026
04aa2f9
fix(automation): cancel only superseded queue scans
seonghobae Aug 8, 2026
3cd777c
docs(automation): clarify approval and scan concurrency
seonghobae Aug 8, 2026
2ff4f77
test(automation): distinguish stale scans from active RCA
seonghobae Aug 8, 2026
17bd5e4
test(automation): align queue scan supersession contract
seonghobae Aug 8, 2026
a30c045
test(automation): cover failed-check repair dispatch
seonghobae Aug 11, 2026
60de3e6
fix(automation): validate repair dispatch authority
seonghobae Aug 11, 2026
5845cb2
docs(automation): cite CWE-367 for hourly NIM repair
seonghobae Aug 13, 2026
12b3aba
fix(automation): reject symlink parent of conflict root
seonghobae Aug 13, 2026
bb990cc
fix(coverage): accept only bounded relative requirement includes
seonghobae Aug 13, 2026
000eabe
ci: add one-shot fast-mlsirm hourly caller repair
seonghobae Aug 14, 2026
015ae4f
ci: repair fast-mlsirm hourly caller bootstrap
seonghobae Aug 14, 2026
aa788af
feat(automation): add fast-mlsirm hourly review repair caller
seonghobae Aug 14, 2026
31abcd5
docs(automation): document fast-mlsirm hourly review repair
seonghobae Aug 14, 2026
609a43c
test(automation): verify fast-mlsirm hourly review repair caller
seonghobae Aug 14, 2026
56d34f5
test(automation): track fast-mlsirm hourly caller contracts
seonghobae Aug 14, 2026
cdc9ac6
docs(architecture): record fast-mlsirm repair heartbeat
seonghobae Aug 14, 2026
415f8b0
docs(changelog): record fast-mlsirm hourly review repair
seonghobae Aug 14, 2026
53db333
ci: remove completed fast-mlsirm caller bootstrap
seonghobae Aug 14, 2026
f84b1c7
test(automation): require scheduler source path coverage
seonghobae Aug 15, 2026
51e6b2d
fix(automation): gate scheduler implementation changes
seonghobae Aug 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/workflows/clearfolio-hourly-review-repair.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Clearfolio Hourly Review Repair

on:
schedule:
# Offset the heartbeat from minute zero to reduce shared-runner congestion.
- cron: "23 * * * *"

concurrency:
group: clearfolio-hourly-review-repair
cancel-in-progress: false

permissions:
contents: read

jobs:
dispatch-review-repair:
uses: ./.github/workflows/pr-review-fix-scheduler.yml
with:
target_repository: ContextualWisdomLab/clearfolio
base_branch: main
max_prs: "50"
max_dispatches: "1"
retry_hours: "1"
secrets:
PR_REVIEW_MERGE_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN }}
OPENCODE_APPROVE_TOKEN: ${{ secrets.OPENCODE_APPROVE_TOKEN }}
31 changes: 31 additions & 0 deletions .github/workflows/disksage-hourly-review-repair.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: DiskSage Hourly Review Repair

on:
schedule:
# Minute 37 avoids the minute-zero runner surge and the Clearfolio heartbeat.
- cron: "37 * * * *"

concurrency:
group: disksage-hourly-review-repair
# The queue scan is bounded and the worker has its own exact-head lease. Do not
# discard an in-flight RCA merely because the next hourly heartbeat arrives.
cancel-in-progress: false

permissions:
contents: read

jobs:
dispatch-review-repair:
uses: ./.github/workflows/pr-review-fix-scheduler.yml
with:
target_repository: ContextualWisdomLab/disksage
base_branch: main
max_prs: "50"
max_dispatches: "1"
# Central OpenCode/NVIDIA NIM work can legitimately approach two hours.
# A two-hour same-head floor avoids duplicate writers without freezing the
# next eligible PR or confusing provider latency with a source-code defect.
retry_hours: "2"
secrets:
PR_REVIEW_MERGE_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN }}
OPENCODE_APPROVE_TOKEN: ${{ secrets.OPENCODE_APPROVE_TOKEN }}
28 changes: 28 additions & 0 deletions .github/workflows/fast-mlsirm-hourly-review-repair.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: fast-mlsirm Hourly Review Repair

on:
schedule:
# Minute 49 avoids minute-zero pressure and the existing product callers.
- cron: "49 * * * *"

concurrency:
group: fast-mlsirm-hourly-review-repair
# Preserve bounded RCA when a later hourly heartbeat arrives.
cancel-in-progress: false

permissions:
contents: read

jobs:
dispatch-review-repair:
uses: ./.github/workflows/pr-review-fix-scheduler.yml
with:
target_repository: ContextualWisdomLab/fast-mlsirm
base_branch: main
max_prs: "50"
max_dispatches: "1"
# Central OpenCode/NVIDIA NIM review and psychometric CI can approach two hours.
retry_hours: "2"
secrets:
PR_REVIEW_MERGE_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN }}
OPENCODE_APPROVE_TOKEN: ${{ secrets.OPENCODE_APPROVE_TOKEN }}
129 changes: 129 additions & 0 deletions .github/workflows/hourly-nvidia-nim-review-repair.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
name: Hourly NVIDIA NIM Review Repair
Comment thread
seonghobae marked this conversation as resolved.

on:
pull_request:
paths:
- .github/workflows/pr-review-fix-scheduler.yml
- scripts/ci/pr_review_fix_scheduler.py
- .github/workflows/pr-review-autofix.yml
- .github/workflows/clearfolio-hourly-review-repair.yml
- .github/workflows/disksage-hourly-review-repair.yml
- .github/workflows/fast-mlsirm-hourly-review-repair.yml
- .github/workflows/hourly-nvidia-nim-review-repair.yml
- scripts/ci/pr_review_conflict_scope.py
- scripts/ci/pr_review_autofix_context.py
- tests/test_disksage_hourly_review_caller.py
- tests/test_fast_mlsirm_hourly_review_caller.py
- tests/test_hourly_scheduler_runtime_budget.py
- tests/test_hourly_autofix_context_quality_gate.py
- tests/test_pr_review_conflict_scope.py
- tests/test_pr_review_conflict_scope_control_files.py
- tests/test_pr_review_conflict_scope_git_executable.py
- tests/test_pr_review_conflict_scope_ignored_paths.py
- tests/test_pr_review_conflict_scope_symlink_targets.py
- tests/test_pr_review_fix_hourly_contract.py
- tests/test_pr_review_fix_scheduler.py
- tests/test_pr_review_fix_scheduler_source_pin.py
- tests/test_pr_review_autofix_context_head_binding.py
- tests/test_pr_review_autofix_nvidia_nim_contract.py
- tests/test_pr_review_autofix_writer_security_contract.py
- docs/automation/hourly-review-repair.md
- docs/doctoring/clearfolio-hourly-review-caller.md
- docs/doctoring/conflict-control-evidence-isolation.md
- docs/doctoring/disksage-hourly-review-caller.md
- docs/doctoring/fast-mlsirm-hourly-review-caller.md
- docs/doctoring/hourly-nvidia-nim-autofix.md
push:
paths:
- .github/workflows/pr-review-fix-scheduler.yml
- scripts/ci/pr_review_fix_scheduler.py
- .github/workflows/pr-review-autofix.yml
- .github/workflows/clearfolio-hourly-review-repair.yml
- .github/workflows/disksage-hourly-review-repair.yml
- .github/workflows/fast-mlsirm-hourly-review-repair.yml
- .github/workflows/hourly-nvidia-nim-review-repair.yml
- scripts/ci/pr_review_conflict_scope.py
- scripts/ci/pr_review_autofix_context.py
- tests/test_disksage_hourly_review_caller.py
- tests/test_fast_mlsirm_hourly_review_caller.py
- tests/test_hourly_scheduler_runtime_budget.py
- tests/test_hourly_autofix_context_quality_gate.py
- tests/test_pr_review_conflict_scope.py
- tests/test_pr_review_conflict_scope_control_files.py
- tests/test_pr_review_conflict_scope_git_executable.py
- tests/test_pr_review_conflict_scope_ignored_paths.py
- tests/test_pr_review_conflict_scope_symlink_targets.py
- tests/test_pr_review_fix_hourly_contract.py
- tests/test_pr_review_fix_scheduler.py
- tests/test_pr_review_fix_scheduler_source_pin.py
- tests/test_pr_review_autofix_context_head_binding.py
- tests/test_pr_review_autofix_nvidia_nim_contract.py
- tests/test_pr_review_autofix_writer_security_contract.py
- docs/automation/hourly-review-repair.md
- docs/doctoring/clearfolio-hourly-review-caller.md
- docs/doctoring/conflict-control-evidence-isolation.md
- docs/doctoring/disksage-hourly-review-caller.md
- docs/doctoring/fast-mlsirm-hourly-review-caller.md
- docs/doctoring/hourly-nvidia-nim-autofix.md

permissions:
contents: read

concurrency:
group: hourly-nvidia-nim-review-repair-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
contract:
name: Hourly cadence, immutable source, NIM credential, and conflict scope
runs-on: ubuntu-24.04
timeout-minutes: 20
steps:
- name: Harden runner
uses: step-security/harden-runner@bf7454d06d71f1098171f2acdf0cd4708d7b5920 # v2.20.0
with:
egress-policy: audit
- name: Checkout exact source revision
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.12"
- name: Install hash-locked test tooling
run: >-
python -m pip install --disable-pip-version-check --require-hashes
-r requirements-opencode-review-ci-hashes.txt
- name: Verify hourly scheduler and NVIDIA NIM autofix contracts
run: |
set -euo pipefail
python -m pytest -q \
--cov=scripts.ci.pr_review_conflict_scope \
--cov=scripts.ci.pr_review_autofix_context \
--cov-branch \
--cov-fail-under=100
python -m interrogate \
--fail-under 100 \
scripts/ci/pr_review_conflict_scope.py \
scripts/ci/pr_review_autofix_context.py
python -m compileall -q \
scripts/ci/pr_review_conflict_scope.py \
scripts/ci/pr_review_autofix_context.py \
tests/test_pr_review_conflict_scope.py \
tests/test_disksage_hourly_review_caller.py \
tests/test_fast_mlsirm_hourly_review_caller.py \
tests/test_hourly_scheduler_runtime_budget.py \
tests/test_pr_review_conflict_scope_control_files.py \
tests/test_hourly_autofix_context_quality_gate.py \
tests/test_pr_review_conflict_scope_git_executable.py \
tests/test_pr_review_conflict_scope_ignored_paths.py \
tests/test_pr_review_conflict_scope_symlink_targets.py \
tests/test_pr_review_fix_hourly_contract.py \
tests/test_pr_review_fix_scheduler.py \
tests/test_pr_review_fix_scheduler_source_pin.py \
tests/test_pr_review_autofix_context_head_binding.py \
tests/test_pr_review_autofix_nvidia_nim_contract.py \
tests/test_pr_review_autofix_writer_security_contract.py
git diff --check
Loading
Loading