Skip to content

spec(liveness): 9 rows of the README state table have count columns that disagree with the gate's --json report #7377

Description

@os-zhuang

Found while implementing #7257 (PR #7374). Not claiming or fixing here — filing per Prime Directive #10. Unassigned: nobody is working on this.

Finding

packages/spec/liveness/README.md's "Current state" table states its own counting method in the paragraph directly above it:

The counting method for this table is the gate's own reportcheck-liveness.mts --json, types.<type>.byStatus — decided in #4488 after two methods spent a release disagreeing. […] the count columns are never hand-edited — regenerate: […]

Run that documented snippet on merged main (f188ed6) and 9 of the 30 rows disagree with it:

Type README says (live / exp / dead / planned) --json says
field 59 / 0 / 0 / 0 66 / 0 / 0 / 0
flow 34 / 0 / 5 / 0 34 / 0 / 6 / 0
action 34 / 0 / 2 / 0 41 / 0 / 2 / 0
hook 11 / 0 / 2 / 0 18 / 0 / 2 / 0
page 16 / 0 / 0 / 1 23 / 0 / 0 / 1
view 79 / 0 / 4 / 0 80 / 0 / 6 / 0
webhook 11 / 0 / 0 / 0 19 / 0 / 0 / 0
app 45 / 0 / 9 / 0 46 / 0 / 9 / 1
seed 5 / 0 / 0 / 0 12 / 0 / 0 / 0

The drift is mostly one-directional (the gate now counts more than the table records — seed 5 → 12, webhook 11 → 19, hook 11 → 18), which is what growth in the walked shape looks like when nobody re-ran the snippet. But view and flow also moved in the dead column, and app grew a planned the row does not show — those are verdict-shaped, not just arithmetic.

Why it is a card and not a sed

PR #7374 gates the row set against GOVERNED — a governed type with no row, an orphan row, or a heading count that disagrees now fails CI. It deliberately does not check the count columns, and this issue is the reason that boundary was drawn rather than the two being landed together:

Suggested shape (not a ruling)

  1. Regenerate the 9 rows, and for each one read the Note beside it and reconcile the prose with the new numbers — this is the work, and it is per-row evidence review, not bookkeeping.
  2. Then extend readme-table.mts (added in PR feat(spec): gate the liveness README's state table against GOVERNED (#7257) #7374, already parsing every row) to compare the count cells against types.<type>.byStatus, or move the columns into a generated artifact per strictness 台账「数字/散文分家」:计数与表头转生成物走 os-regen,Class 判定与依据保持手写 —— 终结「干净合并两边都错」(单日 7 例) #5107's precedent.

Step 2 is cheap once step 1 is done; doing it first would just make CI red with no path to green.

Dedup

Searched the three repos before filing. #7257 covers the row set and the heading's completeness claim, and PR #7374 explicitly scopes the count columns out. No open issue or PR names the count drift.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions