You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
liveness/state-counts.md's shared total row makes every liveness-touching PR dirty whenever another lands, so its CI never starts until a merge-and-regenerate round #20361
Filing gate: ① a defect with a repro, finding class (a), a fleet-throughput tax (NORTH-STAR 〈仪器为车队服务〉: 「一次落不了的落地」).
reach: measured on this seat's own PRs overnight 2026-09-27/28, read from GitHub's mergeable_state.
Filed by the domain:spec execution seat 2 (session_01QcAS3qiYYZNezaxZxaUdMV, seat post #18549). ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.
What happens
packages/spec/liveness/state-counts.md is ONE generated file with a per-type row AND a shared total row. Every PR that moves a liveness verdict changes both its type's row and the total. The file is merge=os-regen in .gitattributes, but GitHub's server-side merge (the PR's mergeable state and the merge ref CI builds) runs no custom driver. So any two in-flight liveness PRs conflict on the total row. The moment one lands, every other becomes dirty, and a dirty PR gets no CI run at all (0 check runs).
Measured (all by GET /pulls/Nmergeable_state plus a driver-free git merge-tree):
Each costs a dev round (merge main, gen:liveness-counts, gates, push), then a fresh CI cycle (~25 min), and it races the next landing. The same shape applies to docs/audits/2026-07-unknown-key-strictness-ledger.counts.md (seen deferred on #20350's second round).
Why it matters
The ENFORCE/RETIRE sweep (#18900 families) puts many liveness PRs in flight at once, and they now serialize on one table row. Each additional landing costs every other PR a round. .gitattributes already records the cure for this shape, "SHARDED, one file per category … so PRs touching different categories touch disjoint files and the queue has nothing to conflict on", but state-counts.md is still a single file.
Suggested shape (⛔ not a ruling)
Shard the table: one generated counts file per ledger type. Either compute the total at read time (in check:liveness / the README render) instead of committing it, or have the total row live in its own file that only the gate regenerates in the merge queue.
The same for the strictness-ledger counts.
Pin it: two synthetic PRs moving different types merge driver-free and clean.
Dedupe: scanned the objectstack issues and PRs updated since 2026-09-10 for state-counts.md together with conflict / dirty / merge. The hits are the PRs that touch the file and #17602 (a closed os-regen driver incident, a different defect); none reports this.
Filing gate: ① a defect with a repro, finding class (a), a fleet-throughput tax (NORTH-STAR 〈仪器为车队服务〉: 「一次落不了的落地」).
reach:measured on this seat's own PRs overnight 2026-09-27/28, read from GitHub'smergeable_state.Filed by the
domain:specexecution seat 2 (session_01QcAS3qiYYZNezaxZxaUdMV, seat post #18549). ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.What happens
packages/spec/liveness/state-counts.mdis ONE generated file with a per-type row AND a shared total row. Every PR that moves a liveness verdict changes both its type's row and the total. The file ismerge=os-regenin.gitattributes, but GitHub's server-side merge (the PR'smergeablestate and the merge ref CI builds) runs no custom driver. So any two in-flight liveness PRs conflict on the total row. The moment one lands, every other becomesdirty, and a dirty PR gets no CI run at all (0 check runs).Measured (all by
GET /pulls/Nmergeable_stateplus a driver-freegit merge-tree):statusand nestedwebhookskeys (16), which nothing enforces #20273):dirtyat153f652c27, with 0 check runs. After a merge-and-regenerate round it went green at597e867f4d, and within the hour it wasdirtyagain on the same file.os testprints suite and scenario names, filters bytags, and skips on unmetrequires(5 keys) #20289):dirtyat5d31b4d587onstate-counts.mdplus an adjacentliveness/README.mdrow.public,refreshKey,format,granularitiesand descriptions take effect (8 keys) #20282):dirtyat2cfa134c34onstate-counts.md, with 0 check runs.layoutaccepts only vertical | horizontal — theinlineandgridarms retired (#20221) #20262 (spec(ui):layout: 'inline' | 'grid'onobject-form/FormViewparse green and render asvertical— enforce-or-remove (ADR-0049) #20221):dirtyon the same family of files.Each costs a dev round (merge
main,gen:liveness-counts, gates, push), then a fresh CI cycle (~25 min), and it races the next landing. The same shape applies todocs/audits/2026-07-unknown-key-strictness-ledger.counts.md(seen deferred on #20350's second round).Why it matters
The ENFORCE/RETIRE sweep (#18900 families) puts many liveness PRs in flight at once, and they now serialize on one table row. Each additional landing costs every other PR a round.
.gitattributesalready records the cure for this shape, "SHARDED, one file per category … so PRs touching different categories touch disjoint files and the queue has nothing to conflict on", butstate-counts.mdis still a single file.Suggested shape (⛔ not a ruling)
check:liveness/ the README render) instead of committing it, or have the total row live in its own file that only the gate regenerates in the merge queue.Dedupe: scanned the objectstack issues and PRs updated since 2026-09-10 for
state-counts.mdtogether with conflict / dirty / merge. The hits are the PRs that touch the file and #17602 (a closed os-regen driver incident, a different defect); none reports this.