Skip to content

refactor(actions): consolidate 18 hourly review-repair callers into one file - #1673

Merged
seonghobae merged 8 commits into
mainfrom
consolidate-hourly-review-repair-callers
Sep 2, 2026
Merged

refactor(actions): consolidate 18 hourly review-repair callers into one file#1673
seonghobae merged 8 commits into
mainfrom
consolidate-hourly-review-repair-callers

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Replaces the 18 near-identical per-repository hourly review-repair schedules with one active scheduler, .github/workflows/hourly-review-repair.yml, per the repository owner's request ("이런 Workflow는 단일 파일로 통합하라", citing hosted run ContextualWisdomLab/.github/actions/runs/33524178483/job/99910668839).
  • Uses GitHub Actions native scheduling plus github.event.schedule lookup and a matrix fan-out, preserving each repository's exact target, base branch, retry floor, and independent non-cancelling concurrency group. The existing product-neutral pr-review-fix-scheduler.yml remains unchanged.
  • Auditing the originals surfaced two source defects: fast-mlsirm and metering-billing-platform independently shared minute 49, now represented explicitly as one trigger with two matrix rows; Clearfolio alone lacked the caller-level id-token: write permission that its siblings had, now made uniform. Its doctoring now matches the consolidated non-cancelling/OIDC boundary.
  • Current-head review surfaced a control-plane lifecycle defect: source deletion alone does not retire GitHub Actions workflow registry identities. Exact head 1a40fdd23c57bc558dc71335fe3e84123663181d carries an explicit one-shot registry retirement migration, a dedicated regression contract, focused-CI ownership, and doctoring.

Registry-identity migration

.github/workflows/hourly-review-repair-registry-retirement.yml has no schedule, no workflow_dispatch, and no repository-content/model/reviewer authority. It can execute only from reviewed source pushed to protected main; the job independently requires github.event_name == 'push' and github.ref == 'refs/heads/main'. It has only actions: write + contents: read, enumerates the full Actions workflow registry, and requires exactly one active .github/workflows/hourly-review-repair.yml replacement before any mutation.

The migration then resolves and retires all 18 deleted caller identities. Every active identity is disabled through the Actions API, re-read, and required to report disabled_manually; missing, duplicate, unresolved, or unexpected states fail closed. The replacement is rechecked active after legacy retirement, and the migration workflow disables its own registry identity last. A transient hosted failure is retried from the same reviewed protected-main run/job rather than by executing feature-branch workflow code.

After one hosted protected-main migration run proves all 18 legacy identities plus the migration identity disabled while the replacement remains active, remove the migration YAML in a normal cleanup PR. Its own registry identity will already be disabled, avoiding creation of another enabled orphan. PR checks validate the migration source but are not post-merge retirement evidence.

tests/test_hourly_review_repair_registry_retirement.py pins the protected-main-push-only/narrow-permission boundary, all 18 exact legacy paths, replacement-before-disable ordering, read-after-write verification, self-disable-last behavior, and absence of reviewer/provider credentials. Contextual Orchestrator Review Repair Quality CI now watches the migration workflow, its test, and its doctoring record on both PR and push and runs the dedicated contract as part of the repository test suite.

Exact current state — 2026-09-02

  • exact head: 1a40fdd23c57bc558dc71335fe3e84123663181d;
  • state: open / Ready; mergeability and required gates must be refetched after the current head settles;
  • all currently reviewed inline findings are resolved by source/docs or were informational confirmations;
  • predecessor-head local/full-suite claims do not transfer to this exact head;
  • exact-head repository/security/reviewer workflows are queued/pending and therefore non-passing.

Merge boundary

Do not bypass protection or reuse predecessor evidence. Merge only after every then-applicable exact-head required workflow/reviewer gate is terminal-success on one unchanged head. Registry retirement itself occurs only after the replacement is active on protected main; it must then be verified from the hosted migration run before the one-shot source is removed.


Devin Review

…ne file

Replaces the 18 near-identical per-repository hourly review-repair caller
workflows with one file, .github/workflows/hourly-review-repair.yml, per the
repository owner's request ("이런 Workflow는 단일 파일로 통합하라") citing
run ContextualWisdomLab/.github/actions/runs/33524178483/job/99910668839.
A single on.schedule list (17 distinct minutes, staggering comments
preserved) feeds a resolve-target job that looks up github.event.schedule in
a case/esac table, fanned out through a matrix dispatch-review-repair job
that keeps every repository's own independent, non-cancelling
concurrency.group. pr-review-fix-scheduler.yml is unchanged.

Auditing the 18 originals for this consolidation found two real issues, both
handled deliberately: fast-mlsirm and metering-billing-platform had
independently collided on cron minute 49 (now one shared trigger,
matrix-fanned to both, so each still dispatches exactly once/hour); and
clearfolio-hourly-review-repair.yml was the only one of the 18 missing its
job-level id-token: write grant (closed uniformly across the consolidated
matrix). Full mapping and rationale: docs/doctoring/hourly-review-repair-
single-file-consolidation.md and ADR-0021.

13 dedicated per-repository test files are replaced by
tests/test_hourly_review_repair_callers.py, which extracts and executes the
lookup script as a subprocess for every schedule and asserts it against the
exact parameters the deleted files used. 4 other test files that used a
since-deleted caller as a representative example, plus the quality-gate
workflow's path filters and several doc cross-references (AGENTS.md,
ARCHITECTURE.md, docs/automation/hourly-review-repair.md), are updated in
place rather than deleted.

Full suite: 2566 passed, 1 skipped (pre-existing, environment-conditional),
21 subtests passed; 100% branch coverage and 100% docstrings on scripts/ci
(untouched by this change); actionlint clean across all workflow files.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 23 minutes.

Check out review usage here.

View limit details

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

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

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 44f64aa6-8281-4481-9a8d-f95f2ae7cb94

📥 Commits

Reviewing files that changed from the base of the PR and between bb14b01 and 1a40fdd.

📒 Files selected for processing (48)
  • .github/workflows/accounting-information-platform-hourly-review-repair.yml
  • .github/workflows/afipc-hourly-review-repair.yml
  • .github/workflows/bandscope-hourly-review-repair.yml
  • .github/workflows/clearfolio-hourly-review-repair.yml
  • .github/workflows/contextual-orchestrator-hourly-review-repair.yml
  • .github/workflows/disksage-hourly-review-repair.yml
  • .github/workflows/fast-mlsirm-hourly-review-repair.yml
  • .github/workflows/github-hourly-review-repair.yml
  • .github/workflows/governance-risk-compliance-hourly-review-repair.yml
  • .github/workflows/hourly-nvidia-nim-review-repair.yml
  • .github/workflows/hourly-review-repair-registry-retirement.yml
  • .github/workflows/hourly-review-repair.yml
  • .github/workflows/inkspan-hourly-review-repair.yml
  • .github/workflows/lineageweave-hourly-review-repair.yml
  • .github/workflows/metering-billing-platform-hourly-review-repair.yml
  • .github/workflows/nonnest2-hourly-review-repair.yml
  • .github/workflows/orgmetra-hourly-review-repair.yml
  • .github/workflows/originweave-hourly-review-repair.yml
  • .github/workflows/psychometrics-commons-hourly-review-repair.yml
  • .github/workflows/quarantine-sandbox-hourly-review-repair.yml
  • .github/workflows/semantic-data-portal-hourly-review-repair.yml
  • AGENTS.md
  • ARCHITECTURE.md
  • CHANGELOG.md
  • docs/adr/0021-hourly-review-repair-single-file-consolidation.md
  • docs/automation/hourly-review-repair.md
  • docs/doctoring/clearfolio-hourly-review-caller.md
  • docs/doctoring/hourly-review-repair-registry-retirement.md
  • docs/doctoring/hourly-review-repair-single-file-consolidation.md
  • tests/test_afipc_hourly_review_caller.py
  • tests/test_bandscope_hourly_review_caller.py
  • tests/test_contextual_orchestrator_hourly_review_caller.py
  • tests/test_disksage_hourly_review_caller.py
  • tests/test_fast_mlsirm_hourly_review_caller.py
  • tests/test_github_hourly_conflict_repair.py
  • tests/test_governance_risk_compliance_hourly_review_caller.py
  • tests/test_hourly_review_repair_callers.py
  • tests/test_hourly_review_repair_registry_retirement.py
  • tests/test_hourly_scheduler_runtime_budget.py
  • tests/test_inkspan_hourly_review_caller.py
  • tests/test_lineageweave_hourly_review_caller.py
  • tests/test_nonnest2_hourly_review_caller.py
  • tests/test_orgmetra_hourly_review_caller.py
  • tests/test_originweave_hourly_review_caller.py
  • tests/test_pr_review_autofix_nvidia_nim_contract.py
  • tests/test_pr_review_fix_hourly_contract.py
  • tests/test_quarantine_sandbox_hourly_review_caller.py
  • tests/test_semantic_data_portal_hourly_review_caller.py

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

❤️ Share

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

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae
seonghobae enabled auto-merge (squash) September 2, 2026 03:31

Copy link
Copy Markdown
Contributor Author

QUEUE_SATURATION_CHICKEN_EGG admission decision on exact head 1a40fdd23c57bc558dc71335fe3e84123663181d.

Fresh revalidation immediately before merge: PR is Ready and mechanically mergeable with no conflict; every inline review thread is resolved; exact-head CodeRabbit and Devin Review statuses are success; no current substantive security/review finding remains. The source repair is independently reviewed, including the privileged registry-retirement boundary: no workflow_dispatch, protected-main push-only execution, actions: write + contents: read, replacement-active precondition, read-after-disable verification of all 18 legacy identities, replacement recheck, and self-disable last. The remaining exact-head hosted workflows are queued/pending in the saturated central Actions fleet. In addition, the registry-retirement proof is structurally post-merge: it cannot execute until the reviewed replacement exists on protected main.

This is therefore the bounded circular control-plane case: the change removes 18 duplicate scheduled caller sources and provides the only reviewed migration that can retire their persistent Actions registry identities, while its ordinary admission evidence is itself waiting behind the fleet pressure it reduces. No test failure, real security finding, meaningful CHANGES_REQUESTED, malformed provenance, or merge conflict is being bypassed. Merge is head-guarded with the exact SHA above. After landing, the protected-main registry migration must be re-read and verified before removing its one-shot source.

@seonghobae
seonghobae merged commit 29b931e into main Sep 2, 2026
17 of 40 checks passed
@seonghobae
seonghobae deleted the consolidate-hourly-review-repair-callers branch September 2, 2026 04:10
seonghobae added a commit that referenced this pull request Sep 2, 2026
Resolve CHANGELOG.md conflict by keeping both this PR's quality-CI
consolidation entry and main's hourly-review-repair-callers entry
(#1673), newest first.

Also fold in a fix for a Devin Review finding on the new
exact-head-coverage-quality-gate.yml reusable workflow: route
pytest_target/coverage_include/compileall_targets through step-level
env vars instead of interpolating ${{ inputs.* }} directly into the
run: script, matching this repo's own established convention
(test_verifier_is_data_only_and_workflow_never_executes_downloaded_evidence
in test_exact_artifact_sbom_attestation_contract.py already enforces
this for exact-artifact-sbom-attestation.yml). Verified glob/word-split
behavior for the two callers is unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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