docs: record that scan gates acc and main, in the places that said otherwise - #99
Merged
Merged
Conversation
…herwise scan became a required check in both rulesets today -- acc supply-chain gate and main promotion gate -- once the Semgrep baseline had been triaged from 86 findings to 5, none blocking. That changed no file, because a ruleset is GitHub state rather than something in the tree, and it left four statements saying the opposite: - semgrep.yml's header: "NOT yet a required check in either ruleset" - the posture page intro: "reporting but not yet required" - its summary row: reporting, not blocking - its section 2: "runs it as a reporting check before requiring it" Left alone, the workflow would have told every reader the scan was advisory while it blocks merges to production -- the same class of stale label ttl-editor#129 corrected there. Only comment lines change in semgrep.yml; it now also says why there is no fork caveat here: this repository has no forks. SECURITY-PIPELINE.md's enforcement section said "the acc ruleset requires a pull request and a passing audit check". There are two rulesets and now two checks. It gains a "What the rulesets require" section: both rulesets with ids, refs, required checks and merge methods. It also records the one parameter in which the two rulesets differ, which the posture page had said was worth recording somewhere durable or it would read as drift. require_extra_approval_for_unattributed_changes is true on acc and false on main: the main ruleset was created without it, GitHub stored it as true, and with no second maintainer to approve anything that would have deadlocked the promotion the ruleset exists to protect. Both rulesets were written today with a full explicit payload and read back afterwards; each changed in the required-checks field and no other, and this parameter survived. And the cost: bypass_actors is empty on both, so an unreachable semgrep.dev or a revoked token stops merges to main as well as acc -- here that includes promotion to production. Section 4's account of the main promotion gate, which lists audit as its only required check as of 2026-09-09, gains a line recording that scan joined it. Proven without pushing: #80, opened before semgrep.yml existed, now reads blocked with audit present and scan missing, while the four Renovate pull requests already rebased onto the new acc carry a scan run and stay clean.
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.
scanbecame a required check in both rulesets today,acc supply-chain gateandmain promotion gate. That happened once the Semgrep baseline had been triaged from 86 findings to 5, none of them blocking.That change touched no file, because a ruleset is GitHub state and not part of the tree. It left four statements saying the opposite:
semgrep.ymlheader⏳ reportingLeft alone, the workflow would tell every reader the scan is advisory while it blocks merges to production. That is the same class of stale label ttl-editor#129 corrected there.
What changed
semgrep.yml. Only comment lines change, and the file still parses. The header now also says why there is no fork caveat here: this repository has no forks. It points at ttl-editor#128 in case that ever changes.SECURITY-PIPELINE.md. Its enforcement section said "theaccruleset requires … a passingauditcheck". There are two rulesets and now two checks. A new section, "What the rulesets require", lists both rulesets with their ids, refs, required checks and merge methods.maingate, which listedauditas its only check as of 2026-09-09, gains a line recording thatscanjoined it.Recorded because the posture page asked for it
The two rulesets differ in one parameter, deliberately.
require_extra_approval_for_unattributed_changesistrueonaccandfalseonmain. Themainruleset was created without it, GitHub stored it astrue, and with no second maintainer to approve, that would have deadlocked the promotion. The posture page said this was worth recording somewhere durable, or it would read as drift.Both rulesets were written with a full explicit payload and read back afterwards. Each changed in the required-checks field and in no other, and this parameter survived.
The cost:
bypass_actorsis empty on both. An unreachable semgrep.dev or a revoked token stops merges tomainas well asacc, and here that includes promotion to production.Proven without pushing
#80 was opened before
semgrep.ymlexisted. It now reads blocked, withauditpresent andscanmissing. The four Renovate pull requests that Renovate had already rebased onto the newacccarry ascanrun and stayclean.Verification
check-formatandcheck-supply-chain --offlinepass, and zizmor reports 0 findings.