Depends on every check issue in this milestone and in the scaffolding milestone.
Two of those are still open, #12, which lands Analyze (go), and #44:
gh issue list --repo Flowfin/site --state open --limit 200 \
--json number,title,milestone \
--jq '.[]|select(.milestone.title=="Quality parity"
or .milestone.title=="Scaffolding and the gate")|"\(.number)\t\(.title)"'
12 Add code scanning under the check name Analyze (go)
18 Add the LICENSE file once the licence is chosen
44 Mutation testing on the generator
47 Name the required checks on the default branch
62 Add the code of conduct this repository does not have
135 Default branch: Required check names did not succeed
Run 2026-08-23. Of the six, #18 and #62 land a document rather than a check,
#47 is this issue, and #135 reports a run rather than landing one. The
dependency was written here as a description of a set rather than as numbers,
so nothing could follow it and nothing could tell when it stopped being true.
Today nothing is required to merge here, re-taken 2026-08-31 because the paste
that stood here showed three rule types and was undated, and the branch gained a
fourth on 2026-08-28:
gh api repos/Flowfin/site/rulesets/20572614 --jq '[.rules[].type]'
["deletion","non_fast_forward","pull_request","required_signatures"]
gh api repos/Flowfin/site/rulesets/20572614 --jq '[.rules[]|select(.type=="required_status_checks")|.parameters.required_status_checks[].context]'
[]
The fourth rule is the signature one and is the paragraph further down rather
than this one. What this paragraph is about is the rule that is still absent, and
the empty list above is what the last clause of the done condition compares
against.
The pull request rule is in place and asks for zero approvals, so a change can
land with no check having reported at all. Every workflow in the tree could be
red and the merge button would still be green. Until the contexts are named in
the ruleset, the gate is a set of workflows that run rather than a gate.
The contexts to require, once each one exists and has been shown to bite:
build, Reproducible build, Analyze (go), DCO sign-off,
Deterministic PR-hygiene checks, Enforce greppable invariants,
Reject Trojan Source Unicode, Audit workflows (zizmor), prettier,
dependency-review, Package (site) / Build bundle,
Package (site) / Generate SBOM, Static analysis (semgrep).
Every name on that list is either a workflow already in this tree or an issue in
this plan that lands one, and the parity ledger is where the mapping is argued.
A name here with neither behind it is the failure this issue exists to avoid.
Two notes on sequencing. A context named in a ruleset before the workflow
reports it blocks every pull request forever, so each name goes in after its
first green run on a real pull request. And a check that is skipped by a path
filter never reports, which a ruleset reads as never satisfied, so no required
check may sit behind a path filter.
Signature verification and the bypass list belong to the same change, and they
are not the same kind of thing. The empty bypass list is parity, and the value
of having none is that the gate applies to everyone. Signature verification
would have been an addition rather than parity, and it arrived on both branches
before this issue did anything:
gh api repos/Flowfin/jellyfin-plugin-sso/rulesets/18802863 --jq '{bypass:.bypass_actors,types:[.rules[].type]}'
{"bypass":[],"types":["deletion","non_fast_forward","required_status_checks","pull_request","required_signatures"]}
gh api repos/Flowfin/site/rulesets/20572614 --jq '{bypass:.bypass_actors,types:[.rules[].type]}'
{"bypass":[],"types":["deletion","non_fast_forward","pull_request","required_signatures"]}
Run 2026-08-30. So there is no difference for the ledger to record in either
direction, and what is left of this clause is the empty bypass list, which both
branches already carry. The paste that stood here showed the target with four
rule types and carried no date; where that was found is the comment of
2026-08-30.
Done when
The command above prints required_status_checks among the rule types, the
context list matches the names above, bypass_actors is empty, and a pull
request with one failing check cannot be merged.
Depends on every check issue in this milestone and in the scaffolding milestone.
Two of those are still open, #12, which lands
Analyze (go), and #44:Run 2026-08-23. Of the six, #18 and #62 land a document rather than a check,
#47 is this issue, and #135 reports a run rather than landing one. The
dependency was written here as a description of a set rather than as numbers,
so nothing could follow it and nothing could tell when it stopped being true.
Today nothing is required to merge here, re-taken 2026-08-31 because the paste
that stood here showed three rule types and was undated, and the branch gained a
fourth on 2026-08-28:
The fourth rule is the signature one and is the paragraph further down rather
than this one. What this paragraph is about is the rule that is still absent, and
the empty list above is what the last clause of the done condition compares
against.
The pull request rule is in place and asks for zero approvals, so a change can
land with no check having reported at all. Every workflow in the tree could be
red and the merge button would still be green. Until the contexts are named in
the ruleset, the gate is a set of workflows that run rather than a gate.
The contexts to require, once each one exists and has been shown to bite:
build,Reproducible build,Analyze (go),DCO sign-off,Deterministic PR-hygiene checks,Enforce greppable invariants,Reject Trojan Source Unicode,Audit workflows (zizmor),prettier,dependency-review,Package (site) / Build bundle,Package (site) / Generate SBOM,Static analysis (semgrep).Every name on that list is either a workflow already in this tree or an issue in
this plan that lands one, and the parity ledger is where the mapping is argued.
A name here with neither behind it is the failure this issue exists to avoid.
Two notes on sequencing. A context named in a ruleset before the workflow
reports it blocks every pull request forever, so each name goes in after its
first green run on a real pull request. And a check that is skipped by a path
filter never reports, which a ruleset reads as never satisfied, so no required
check may sit behind a path filter.
Signature verification and the bypass list belong to the same change, and they
are not the same kind of thing. The empty bypass list is parity, and the value
of having none is that the gate applies to everyone. Signature verification
would have been an addition rather than parity, and it arrived on both branches
before this issue did anything:
Run 2026-08-30. So there is no difference for the ledger to record in either
direction, and what is left of this clause is the empty bypass list, which both
branches already carry. The paste that stood here showed the target with four
rule types and carried no date; where that was found is the comment of
2026-08-30.
Done when
The command above prints
required_status_checksamong the rule types, thecontext list matches the names above,
bypass_actorsis empty, and a pullrequest with one failing check cannot be merged.