Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
8607271
chore(protection): retire the last exemption — the allow-list is now …
hyperpolymath Oct 24, 2026
37c45a4
docs: record the decision-layer fix everywhere a reader or agent woul…
hyperpolymath Oct 24, 2026
d9a78dd
fix(protection): the bypass removal missed three rulesets, one of the…
hyperpolymath Oct 24, 2026
da9073d
docs(ci): correct audit claims and clarify context exemption scope
coderabbitai[bot] Oct 24, 2026
8ed2f3a
Merge remote audit updates and preserve context review corrections
coderabbitai[bot] Oct 24, 2026
620060f
fix(protection): a failed read-back must not report success
hyperpolymath Oct 24, 2026
d4b3d28
fix(gate): a data-dependent rule blocks every PR and was invisible
hyperpolymath Oct 24, 2026
553bbd7
docs(gate): the failure message names both shapes of finding
hyperpolymath Oct 24, 2026
0aca273
docs(audit): the data-dependent rules are not repairable in-repo
hyperpolymath Oct 24, 2026
d49f8f7
fix(gate): a data-rule-only finding must fail strict mode
hyperpolymath Oct 24, 2026
88699f4
Update scripts/fix-required-context-name.sh
hyperpolymath Oct 25, 2026
0857173
docs(gate): clarify data-rule inspection and audit behavior
coderabbitai[bot] Oct 25, 2026
dc8caa8
fix(ci): Harden required-context audits and ruleset repair verification
coderabbitai[bot] Oct 25, 2026
477ff71
Merge remote branch updates and preserve required-context review fixes
coderabbitai[bot] Oct 25, 2026
97cd2e4
feat(ci): measure and publish real line coverage
hyperpolymath Oct 25, 2026
583101e
fix(ci): name the coverage context by slug, and publish the number
hyperpolymath Oct 25, 2026
57059c6
feat(ci): report the line counts, not just the percentage
hyperpolymath Oct 25, 2026
48fa3c9
docs(audit): correct the claim that coverage is unrepairable, with th…
hyperpolymath Oct 25, 2026
ffe1094
fix(gate): stop claiming nothing uploads while a workflow does
hyperpolymath Oct 25, 2026
faf2a1b
fix(ci): measure the commit the upload is attributed to
hyperpolymath Oct 25, 2026
64ada82
feat(gate): tell an unverified rule from an unsatisfiable one
hyperpolymath Oct 25, 2026
609deeb
Update scripts/check-required-contexts.sh
hyperpolymath Oct 25, 2026
0f433ca
Update scripts/check-required-contexts.sh
hyperpolymath Oct 25, 2026
98ebde4
fix(ci): Verify Code Quality evidence across all workflow pages
coderabbitai[bot] Oct 25, 2026
04acc6b
Merge remote head and preserve required-context evidence hardening
coderabbitai[bot] Oct 25, 2026
83afb5d
Update scripts/check-required-contexts.sh
hyperpolymath Oct 25, 2026
107d4c7
fix(ci): Match the correct GitHub Code Quality workflow path
coderabbitai[bot] Oct 25, 2026
c3e9fad
Merge commit '83afb5d2efb9b11d2b51d8d2706e2f21f34d52ca' into arena/94…
coderabbitai[bot] Oct 25, 2026
ddc6180
test(ci): Correct Code Quality workflow paths in required-context fix…
coderabbitai[bot] Oct 25, 2026
1d9ef56
Merge commit 'c3e9fad20d74964013bb91a29547a3bc60aa3579' into arena/94…
coderabbitai[bot] Oct 25, 2026
3dfb5fd
fix(gate): evidence only where a rule applies, and never a guessed br…
hyperpolymath Oct 25, 2026
95847d1
fix(gate): stop trusting a green coverage run that uploaded nothing
hyperpolymath Oct 25, 2026
d8d08ba
fix(ci): recognize exact canonical origins after standards owner rename
coderabbitai[bot] Oct 25, 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
72 changes: 44 additions & 28 deletions .machine_readable/required-contexts-allow.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@
#
# Every line is a debt with a name and a reason: `context`
#
# THE LIST IS EMPTY, AND THAT IS THE POINT
# ----------------------------------------
# This file's preamble has always said that removing the last entry is the
# goal and not an edge case. The one entry has now been removed, because the
# defect it recorded was repaired at the decision layer rather than declared
# here. Empty is the correct resting state; if an entry comes back, it is a
# regression with a review trail, not a configuration.
#
# WHY THIS FILE EXISTS INSTEAD OF `continue-on-error: true`
# ---------------------------------------------------------
# The alternative was an always-green advisory job, and this repository has
Expand All @@ -15,33 +23,41 @@
# was never wired, so it never disagreed with anything.)
#
# So the job FAILS on any unsatisfiable required context that is not listed
# here, and passes only for the ones below, which are reported on every run.
# A new entry cannot be added quietly: this file is the review surface.
#
# Removing the last entry is the point, not an edge case.
#
# The known entry is a branch RULE, not a missing workflow. The scan it names
# does run on every pull request — as `Hypatia verdict grid / Hypatia
# Neurosymbolic Analysis`, the fork-governance lane. The required context names
# the OTHER call site of the same reusable workflow: hypatia-scan.yml, whose
# `scan` job is deliberately push/schedule-only so the same findings are not
# uploaded to code scanning twice per pull request. So the defect is a context
# name pointing at the post-merge call site of a scan that is gated pre-merge
# under a different name.
#
# Consequence, measured on #1336: 65 checks green, reviewDecision clear,
# mergeable, and still BLOCKED — because the required check can never appear.
# Every pull request in this repository is in that state, and the only way work
# lands is the ruleset's `always` bypass, which discards the other nineteen
# required checks in the same action. That is the whole failure mode this
# repository keeps re-learning: the bypass is not an escape hatch used
# occasionally, it is the actual merge path, and it makes the nineteen
# decorative.
#
# Repair (decision layer, needs repository admin — the ruleset, not this file):
# replace the context below with `Hypatia verdict grid / Hypatia Neurosymbolic
# Analysis` in ruleset 23787415, leaving the other nineteen untouched.
# here. A new entry cannot be added quietly: this file is the review surface,
# and the gate also warns when a listed context stops being required, so this
# file cannot quietly rot into a museum of old exemptions either.
#
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
# RECORD OF THE RETIRED ENTRY
# ---------------------------
# Context: `scan / Hypatia Neurosymbolic Analysis`
# Retired: 2026-10-24
#
# It named the second call site of hypatia-scan-reusable.yml. `hypatia-scan.yml`
# declares that job as push/schedule-only on purpose, so the same findings are
# not uploaded to code scanning twice per pull request; the pull-request call
# site is the fork-governance lane, which publishes
# `Hypatia verdict grid / Hypatia Neurosymbolic Analysis`. A required check is
# matched by name, and the names differ, so the required one could never be
# produced while a pull request was open.
#
# Measured consequence: #1336 reached 65 passing checks, a cleared
# reviewDecision and mergeable=MERGEABLE while mergeStateStatus stayed BLOCKED.
# #1337, which carried the repair, merged 80 minutes BEFORE the ruleset was
# corrected — so the fix provably did not enable its own merge. Both landed
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
# through the ruleset's `always` bypass, which discards every required check in
# the same action.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
#
# Retired by the decision layer, as this file asked:
# ruleset 23787415, required_status_checks:
# scan / Hypatia Neurosymbolic Analysis
# -> Hypatia verdict grid / Hypatia Neurosymbolic Analysis
# bypass_actors: always on RepositoryRole:5 -> removed
# strict_required_status_checks_policy: false -> true
# + `Repo self-tests` required (21 contexts, all producible on a pull request)
#
# Doing it in this file instead would have required continuing to bypass, and a
# list of declared exceptions is only safer than a bypass while it stays short.
#
# Format: one context per line; `#` starts a comment; blank lines ignored.

scan / Hypatia Neurosymbolic Analysis
# An empty file (or one holding only comments) asserts that every required
# context is satisfiable on a pull request.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
54 changes: 54 additions & 0 deletions docs/audits/audit-ci-context-producibility-2026-09-20.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -535,3 +535,57 @@ does not do this: it derives contexts from checks that run and then has to pick
a ruleset, and with six additive branch rulesets it cannot justify a choice, so
it reports `AMBIGUOUS` and declines. A scripted single-field edit is the safe
instrument; a general-purpose rewriter is not.

=== Applied: the decision layer, verified

The repair ran on 2026-10-24 and was verified by reading the ruleset back, not
by trusting the script's success message.

[cols="2,1,1",options="header"]
|===
| Field | Before | After

| `required_status_checks` (Hypatia)
| `scan / Hypatia Neurosymbolic Analysis`
| `Hypatia verdict grid / Hypatia Neurosymbolic Analysis`

| `bypass_actors`
| `RepositoryRole:5`, `always`
| none
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved

| `strict_required_status_checks_policy`
| `false`
| `true`

| Required contexts
| 20 (1 unproducible)
| 21, all producible on a pull request
|===

`Repo self-tests` was added as the twenty-first. It is the check that caught both
regressions in this audit — the `|| true` that swallowed the gate's exit, and
inline Python that was banned repository-wide — and under the old ruleset it
could not block either. A check that detects a defect and cannot stop it is a
reporter, not a gate; it is now load-bearing.

The gate re-run against the repaired ruleset reports `inspected: true`,
`producible=23`, `app-owned=1`, and **zero findings**. `.machine_readable/
required-contexts-allow.txt` is therefore header-only: the entry it carried is
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
retired and recorded there, not silently deleted, because a declaration that
disappears without a trace is indistinguishable from one that was never true.

==== The timestamp that settles the argument

#1337 carried the repair and merged at **21:38:20Z**. The ruleset was corrected
at **22:57** — seventy-nine minutes later. The fix therefore provably did not
enable its own merge, and that merge again went through the `always` bypass.

That is the cleanest available proof of this document's thesis. The repository
did not merge broken work because it lacked checks: it had twenty of them, and
sixty-five green on the pull request in question. It merged broken work because
every path to `main` ran through a bypass that discarded all twenty in one
action, and the only reason the bypass was needed was a required context that
nothing could produce. Both halves of that are now gone — the unproducible
context by the ruleset edit, the bypass by deleting it — and the next pull
request is the first in this repository's history that has no legal path to
`main` which skips its own checks.
Loading