fix(ci): follow the server after the reviewer context was de-required (BACKLOG #1452) - #887
Open
wshallwshall wants to merge 2 commits into
Open
fix(ci): follow the server after the reviewer context was de-required (BACKLOG #1452)#887wshallwshall wants to merge 2 commits into
wshallwshall wants to merge 2 commits into
Conversation
The owner removed `a reviewer has read this` from main's branch protection on 2026-09-04. The checked-in claim did not follow, so it overstated the required set by one context and read as blocking when nothing was. Re-measured the server at 2026-09-04 18:48 CDT: 13 contexts, strict true, enforce_admins true, approvals 0. - .github/required-contexts.txt: drop the context, and record the de-requiring and its cost under DELIBERATELY NOT REQUIRED. - tests/test_required_contexts.py: pin 13, not 14. - docs/CI.md: drop the bullet, rewrite the review-gate paragraph. - tests/test_security_posture.py: 13 contexts over 11 distinct jobs. - tests/negative_controls.toml: remove the entry, since the registry refuses a control for a context nobody requires. The tests it named are kept, because review-gate.yml still exists and still runs. review-gate.yml and branch protection are untouched. Watched fail: scripts/ci/check_required_contexts_drift.py exits 1 on the pre-fix file naming that context, and 0 on the corrected file, 13 against 13. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…d here Records the measurement, the five in-repo claims that had to move with the canonical file, and why the review-gate negative controls were de-registered rather than deleted. Also records the residue nobody has ruled on: CLAUDE.md still describes the Reviewer seat and the reviewed-label gate, and unread-signal.yml plus check_unread_prs.py exist to notify a reviewer about a gate that now blocks nothing. Two earlier allocations on this subject are named so a later reader does not read three numbers as three defects: 1449, allocated by a peer seat and left unfiled, and 1451, which this seat allocated from the primary checkout by mistake and cannot commit, because ledger ownership keys on the allocating worktree or its branch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The owner removed
a reviewer has read thisfrommain's branch protection on 2026-09-04. The checked-in claim did not follow, so.github/required-contexts.txtover-reported the required set by exactly one context. This makes the file, its pinned count, and the four other in-repo claims reconciled against it agree with the server again.Filed as BACKLOG #1452, whose row is the last commit here.
The server, re-measured rather than taken on trust
gh api repos/MEFORORG/MessageFoundry/branches/main/protection, read at 2026-09-04 18:48 CDT:a reviewer has read this; the other twelve matched both waysstrictenforce_adminsrequired_approving_review_countWhy this is wider than two lines
Removing one context from the canonical file moves five in-repo claims reconciled against it. I found them by running the suite and reading its failures, not by guessing.
.github/required-contexts.txttests/test_required_contexts.pydocs/CI.mdtests/test_security_posture.pytests/negative_controls.tomltests/test_merge_gate_controls.pyThe negative controls were de-registered, not deleted.
review-gate.ymlstill runs, so the nine nodes that entry named still hold its real behaviour inside the requiredtestlegs.test_the_review_gate_still_reports_under_the_required_context_stringdid assert the context was required, which is now false; it kept its three structural assertions and was renamed to..._under_its_declared_context_string. A re-arm is still caught, by the registry reconciliation failing on a required context with no control.An unrequired gate caught this, and the required suite could not
tests/test_required_contexts.pycompares in-repo text to in-repo text, so all nine tests stayed green while the claim was false.scripts/ci/check_required_contexts_drift.pyreads the server and fails closed, and it was red onmainfor this drift. It is deliberately not one of the 13, so it reported and blocked nothing.Watched fail rather than argued:
a reviewer has read thisunder NAMED IN THE FILE, NOT REQUIRED ON THE SERVERChecks
ruff check .ruff format --check .mypy messagefoundrypytest tests/test_required_contexts.pypytest tests/test_push_guard.pycheck_required_contexts_drift.pybacklog_status_check.pybacklog_citation_check.py --base origin/main--no-verifyNot run locally: the hosted-runner-only legs.
windows-service-smokeand the server-DB legs need reading after CI reports.Expect a red
a reviewer has read thison this PRThe workflow still exists and still reddens an unlabelled pull request. It blocks nothing now. Do not label this PR to silence it, and do not treat it as a failure of this change.
CI is queue-deep at the time of writing, so every check will sit pending for roughly forty minutes. Pending is not nearly-green.
Deliberately not done
review-gate.ymlis untouched. Whether it is retired is an open owner decision.CLAUDE.mdis not rewritten here. It is now stale on this subject: section 5 still describes the Reviewer seat and still states that thereviewedlabel gates a merge. No test I had to satisfy forced the edit, so it stays a named follow-on rather than an unreviewed rewrite folded into a drift fix..github/workflows/unread-signal.ymlandscripts/ci/check_unread_prs.pyare the same shape: they notify a reviewer about a gate that no longer blocks. The #1452 row records all three.Two burned numbers, named so nobody reads three defects
mainin a tree that must never commit it. Unusable, and recorded rather than hidden.scripts/coord/alloc_strand_sweep.pyalready exists for stranded allocations.🤖 Generated with Claude Code