Skip to content

docs: record that scan gates acc and main, in the places that said otherwise - #99

Merged
sgort merged 1 commit into
accfrom
docs/record-scan-required
Sep 11, 2026
Merged

sgort merged 1 commit into
accfrom
docs/record-scan-required

Conversation

@sgort

@sgort sgort commented Sep 11, 2026

Copy link
Copy Markdown
Owner

scan became a required check in both rulesets today, acc supply-chain gate and main 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:

Where Said
semgrep.yml header "NOT yet a required check in either ruleset"
posture page intro "reporting but not yet required"
posture page summary row ⏳ reporting
posture page §2 "runs it as a reporting check before requiring it"

Left 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 "the acc ruleset requires … a passing audit check". 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.
  • Posture page. Intro, summary row and §2 are corrected. §4's account of the main gate, which listed audit as its only check as of 2026-09-09, gains a line recording that scan joined it.

Recorded because the posture page asked for it

The two rulesets differ in one parameter, deliberately. 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, 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_actors is empty on both. An unreachable semgrep.dev or a revoked token stops merges to main as well as acc, and here that includes promotion to production.

Proven without pushing

#80 was opened before semgrep.yml existed. It now reads blocked, with audit present and scan missing. The four Renovate pull requests that Renovate had already rebased onto the new acc carry a scan run and stay clean.

Verification

check-format and check-supply-chain --offline pass, and zizmor reports 0 findings.

…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.
@sgort sgort added documentation Improvements or additions to documentation ci Pipeline, supply-chain and release tooling labels Sep 11, 2026
@sgort
sgort merged commit 6c88bbf into acc Sep 11, 2026
2 checks passed
@sgort
sgort deleted the docs/record-scan-required branch September 11, 2026 12:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Pipeline, supply-chain and release tooling documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant