Skip to content

[issue-95] fix(ci): make the review gate runnable, re-verify main weekly - #96

Closed
vinicq wants to merge 2 commits into
mainfrom
fix/gate-trigger-and-cron
Closed

[issue-95] fix(ci): make the review gate runnable, re-verify main weekly#96
vinicq wants to merge 2 commits into
mainfrom
fix/gate-trigger-and-cron

Conversation

@vinicq

@vinicq vinicq commented Aug 11, 2026

Copy link
Copy Markdown
Owner

Closes #95. Fourth repo carrying this file, and the same two problems as falsegreen-js#98.

The gate cannot report

codex-review-gate.yml: 89 failing runs, 1 success, failures with zero jobs. That is GitHub refusing to validate the file, not a check that fails. on: declared pull_request_review_thread, a real webhook event that Actions does not accept as a trigger.

Repo State
falsegreen deleted the workflow (65482f0, "never ran on PR, only produced phantom push failures")
falsegreen-skill repaired; the gate then ran for the first time and immediately failed on unresolved Codex threads, as designed
falsegreen-js repaired, falsegreen-js#98
robotframework-falsegreen this PR

I repaired rather than deleted, which diverges from falsegreen. The gate does real work once it runs, and falsegreen-skill demonstrated that within the hour of being fixed. The two approaches should converge, and that is a call worth making deliberately rather than by whichever repo was touched last.

main is never re-verified

ci.yml ran on push to main and on pull_request only, so no push means no run and the badge keeps showing the last green result however stale.

falsegreen paid for this concretely: ruff 0.16 widened its default rule set, main went to 106 lint findings with no commit involved, and it surfaced weeks later on an unrelated Dependabot PR where it read as that PR's fault. A weekly schedule caps that window at 7 days.

Honest limitation, now in the header

The old comment promised the gate "clears as soon as a thread is resolved". Actions observes no event when a thread is resolved, and reaching for pull_request_review_thread to get that behaviour is exactly what broke the file. The header now states what happens: after resolving, the gate clears on the next push or a manual re-run.

Verification

  • Both workflows validate against the Actions schema: 0 errors, from 1 before.
  • No step branches on github.event_name or github.event.pull_request, so a scheduled run needs no adaptation.
  • The real proof is this PR: if the file is valid, gate shows up as a check and runs. If I got it wrong, it stays absent.

Rollback

Clean revert of one commit: one YAML line, a comment, three lines of trigger. Reverting restores a workflow that never ran, so nothing is at risk either way.

vinicq added 2 commits August 11, 2026 17:53
codex-review-gate has 89 failing runs and 1 success, and the failures carry zero
jobs: a file GitHub refuses to validate, not a check that fails. `on:` declared
pull_request_review_thread, a webhook event Actions does not accept as a trigger.
Fourth repo with this file; falsegreen deleted it, falsegreen-skill and
falsegreen-js repaired it.

Keeps the three valid triggers and corrects the header, which promised the gate
clears the moment a thread is resolved. Actions observes no such event, and
chasing that promise is what broke the file.

Adds a weekly schedule to ci.yml. Running only on push to main means a floating
tool can break main while the badge stays green: falsegreen went to 106 lint
findings from a ruff default change with no commit involved, unreported because
there was no push. Checked that no step branches on github.event_name.

Both workflows validate against the Actions schema with 0 errors.

Closes #95
…ak main

The Lint step on this PR failed with 67 findings and nothing in the repo caused
it. pyproject had no [tool.ruff] section at all and declared `ruff>=0.5` with no
ceiling, so the lint surface was whatever ruff defaulted to. ruff 0.16 widened
that set and CI installs 0.16.2.

Proved by removal on this tree with the version CI uses: with the select block,
`ruff check src tests` is clean; stash it and the same command reports 67 errors
(UP031, E402, BLE001, I001, SIM114, RUF100). None are new code, they are rules
that were never selected.

Declares select = ["E4", "E7", "E9", "F"], what the repo was already held to,
rather than capping ruff: a cap freezes the tool and leaves the surface implicit,
so the break returns the day someone lifts it. Same call as vinicq/falsegreen#148.

Full suite verified in a clean venv with `pip install -e ".[dev]"`: 257 passed.
@vinicq

vinicq commented Aug 11, 2026

Copy link
Copy Markdown
Owner Author

Scope grew by one commit, and the reason is worth recording rather than quietly folding in.

Opening this PR made the gate runnable, which meant CI got far enough to run Lint for the first time in a while, and Lint failed with 67 findings on a PR that touches only workflow YAML. Not this PR's fault: pyproject.toml had no [tool.ruff] section at all and declared ruff>=0.5 with no ceiling, so the lint surface was whatever ruff defaulted to. ruff 0.16 widened that set, and CI installs 0.16.2.

Proved by removal on this tree with the version CI uses:

State ruff check src tests
with the new select block clean
stash it 67 errors: UP031, E402, BLE001, I001, SIM114, RUF100

None of those are new code. They are rules that were never selected and now are.

select = ["E4", "E7", "E9", "F"] declares what the repo was already being held to, rather than capping ruff. A cap freezes the tool and leaves the surface implicit, so the same break returns the day someone lifts it. Same call as vinicq/falsegreen#148, where the identical drift left main with 106 findings.

Adopting the wider rule set is worth doing on its own merits, with the findings triaged in a dedicated PR.

Worth noting what this sequence demonstrates: a broken gate hid a broken lint. Repairing the reporting surface is what surfaced the real defect, which is the argument for fixing checks that cannot report even when they look like noise.

Full suite verified in a clean venv with pip install -e ".[dev]": 257 passed. An earlier local run showing failures was my own environment, PYTHONPATH=src without an editable install, not the repo.

@vinicq

vinicq commented Aug 11, 2026

Copy link
Copy Markdown
Owner Author

Superseded, and by my own reasoning being overturned rather than by anything new breaking.

This PR repaired the gate. The architect verdict is to delete it instead: it is a hand-rolled reimplementation of required_conversation_resolution, with a lag its own header confesses and an assumption about Codex re-posting that was never guaranteed. Repairing it was choosing the more complex and slower version of the same control. The repair still earned its keep as a diagnostic, because it is what proved the gate catches real threads, and without that the comparison would have been a guess.

Split three ways:

Branch fix/gate-trigger-and-cron stays undeleted for now: it holds the repaired workflow, so the deletion is recoverable if it turns out to be the wrong call.

@vinicq vinicq closed this Aug 11, 2026
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.

ci: codex-review-gate produces zero-job startup failures, never runs; main is never re-verified

1 participant