The ruleset profile argued from a fourteen-commit repository that now has sixty-six - #70
Conversation
|
What was ruled out
The only tree difference between #68's passing branch and What the failure actually isThe checkout is not truncated. In the same job, on the same checkout, the new So the checkout has full history and That is this portfolio's dominant defect class pointed the other way: a state marker read What I did not doI did not touch that gate. Weakening or re-baselining a version-honesty check that landed The fix is not a looser assertion: it is to make the predicate ask what the message Prepared with AI assistance; reviewed before submission. |
|
This PR's red
Measured on a runner via a throwaway diagnostic branch (now deleted): It presented as flake because it is a race: whether it fired depended on whether PR #74 turns the capture off ( Once #74 is on Prepared with AI assistance; reviewed before submission. |
… has sixty-six .github/rulesets/README.md recommends required_signatures and argues against merge commits from measurements taken on 2026-08-15 and never re-read: "all fourteen commits on main" and "the three merge commits already on main". At d4f533f there are 66 and 12. Both conclusions survive; the evidence for them did not. The counts are now stated against the commit they were taken at, so main advancing does not falsify them. Re-measuring turned up a worse problem. A local git log --format='%G?' reports N, "no signature", for thirteen commits on main. They are not unsigned: they are SSH-signed with the owner's key, and git 2.55 classifies an SSH signature as N when no gpg.ssh.allowedSignersFile is configured. Supply any allowed-signers file and the same commit reports U. The other fifty-three are PGP-signed by GitHub's web-flow key and report E. Zero commits on main carry no signature, all 66 report verification.verified: true from the API, and that API verification is what GitHub's own required_signatures rule enforces. An audit that read N as unsigned would report thirteen unsigned commits that do not exist. tests/test_ruleset_evidence.py holds both halves without becoming a counter that jams the queue. The commit and merge counts are re-measured from the SHA the prose pins, so history advancing changes nothing, while a number edited without moving the pin, a pin moved without re-measuring, or a checkout too shallow to see that commit all fail. Every required status check context in main.json is derived from the workflow files, so a renamed job fails here rather than silently emptying the profile on the day it is applied. Each gate was run against the fault it exists to catch, with the sabotage asserted present in the file before the result was read. The ruleset is still not applied; re-confirmed today that rulesets is [] and main reports protected: false. Applying it is the owner's action and stays open as #15.
dfeae2d to
73aade5
Compare
What was wrong
.github/rulesets/README.mdis the document a person reads before deciding whether toapply
main.json. Two of its measurements were taken on 2026-08-15 and never re-read:required_signaturesfrom "all fourteen commits onmain" — there are 66;required_linear_historycosts nothing given "the three merge commitsalready on
main" — there are 12.Both conclusions survive re-measurement. Neither piece of evidence did.
The worse finding
Re-measuring turned up an inverted reading. A local
git log --format='%G?'over thisrepository reports
N— "no signature" — for thirteen commits onmain. Those commitsare not unsigned. They are SSH-signed with the owner's own key, and git 2.55 classifies
an SSH signature as
Nwhen nogpg.ssh.allowedSignersFileis configured; supply anyallowed-signers file and the same commit reports
U(good signature, untrusted key). Theother fifty-three are PGP-signed by GitHub's web-flow key and report
E, key not in thelocal keyring.
Measured against the API the document actually cites:
Zero commits on
maincarry no signature; all 66 verify. That API verification is alsowhat GitHub's own
required_signaturesrule enforces, so it is the instrument thatmatches the rule. An audit reading
Nas "unsigned" would report thirteen unsignedcommits that do not exist — a failed read published as a measurement, which is this
portfolio's most common defect, produced here by a check looking for it. The document now
names the instrument, the trap, and the one-call measurement.
What changed
.github/rulesets/README.md: both counts corrected and stated against the commit theywere measured at (
d4f533f, 2026-09-06), somainadvancing does not falsify themand no hand edit is owed per merge; the
%G?trap recorded; the "no ruleset applied"table re-confirmed today.
tests/test_ruleset_evidence.py: new.history is immutable, this is not a hand-maintained counter that every merge
re-jams. It fails on a number edited without moving the pin, a pin advanced without
re-measuring, a claimed measurement date earlier than the commit it claims to read,
or a checkout too shallow to see that commit.
main.jsonderived from the workflow files,so a renamed job fails here rather than silently emptying the profile on the day it
is applied — which is the failure mode the document itself warns about.
CHANGELOG.md: entry under[Unreleased].How it was verified
807 passed(full suite less the two Node/browser a11y gates, which neednpm ciandPlaywright);
ruff check,ruff format --checkclean.Each new gate was run against the fault it exists to catch, with the sabotage asserted
present in the file before the result was read, because a sabotage that silently no-ops
reads exactly like a pass:
**66 commits**→**14 commits**test_the_documents_commit_count_is_what_that_commit_carriesFAILED**12** merge commits→**3** merge commitstest_the_documents_merge_commit_count_is_what_that_commit_carriesFAILEDzizmorrequired context inmain.jsontest_every_required_context_is_a_job_that_exists+…[zizmor]FAILED%G?trap paragraphtest_the_document_does_not_read_local_signature_status_as_truthFAILEDRestored, all 12 pass.
What this does not do
The ruleset is still not applied, and this PR does not apply it. Re-confirmed
2026-09-06:
repos/ChelseaKR/perimeter/rulesetsis[]andmainreports"protected": false. Applying it is the owner's action — a POST adds a ruleset ratherthan replacing one — and #15 stays open for it.
bypass_actorsis untouched and stillcarries exactly the owner's
RepositoryRole5 /alwaysentry.Refs #15.
Prepared with AI assistance; reviewed before submission.