Found while clearing src/api/** for #15677 (stack card 2/6 of #14478); out of that card's scope, which is the api/ directory only.
The claim and the ledger disagree
docs/qa/platform-checklist/areas/records-forms.json:3171 cites the hook liveness ledger like this:
packages/spec/liveness/hook.json#retryPolicy (object/events/body/priority/async/condition/retryPolicy/timeout/onError all 'live'; label/description 'dead' but kept as docs)
packages/spec/liveness/hook.json on origin/main says otherwise:
| prop |
status |
timeout |
dead |
timeoutMs |
live |
PR #15626 renamed hook.timeout to hook.timeoutMs under ruling B on #14478, tombstoned the old spelling and split the ledger row in two (a live row for timeoutMs, a dead row for timeout, following the documented pattern). The checklist row was not moved with it, so it now asserts as live a key the ledger records as retired, and does not mention the key that replaced it.
Why it is worth a card rather than a shrug
The row is a ref — the coordinate a checklist runner opens to decide what the item is supposed to prove. A runner reading it looks for timeout in the hook ledger, finds a dead row, and has to reconstruct which of the two spellings the item meant. Nothing catches this: the checklist's citations are prose, and no gate compares a checklist ref against the ledger it names.
Reproduce
git show origin/main:docs/qa/platform-checklist/areas/records-forms.json | sed -n '3171p'
python3 -c "import json;p=json.load(open('packages/spec/liveness/hook.json'))['props'];print({k:p[k]['status'] for k in ('timeout','timeoutMs')})"
Measured on origin/main at cc5b3dd0c (2026-09-05). Pre-existing — not introduced by #15677, whose diff does not touch hook.json or records-forms.json.
Suggested fix
Rewrite the citation to name timeoutMs as live and timeout as the retired tombstone, matching how the ledger now reads. Worth checking the sibling rows in the same file for the same rename residue while there.
Related: #15626, #14478, #15677.
Generated by Claude Code
Found while clearing
src/api/**for #15677 (stack card 2/6 of #14478); out of that card's scope, which is theapi/directory only.The claim and the ledger disagree
docs/qa/platform-checklist/areas/records-forms.json:3171cites the hook liveness ledger like this:packages/spec/liveness/hook.jsononorigin/mainsays otherwise:timeoutdeadtimeoutMslivePR #15626 renamed
hook.timeouttohook.timeoutMsunder ruling B on #14478, tombstoned the old spelling and split the ledger row in two (aliverow fortimeoutMs, adeadrow fortimeout, following the documented pattern). The checklist row was not moved with it, so it now asserts aslivea key the ledger records as retired, and does not mention the key that replaced it.Why it is worth a card rather than a shrug
The row is a
ref— the coordinate a checklist runner opens to decide what the item is supposed to prove. A runner reading it looks fortimeoutin the hook ledger, finds adeadrow, and has to reconstruct which of the two spellings the item meant. Nothing catches this: the checklist's citations are prose, and no gate compares a checklistrefagainst the ledger it names.Reproduce
Measured on
origin/mainatcc5b3dd0c(2026-09-05). Pre-existing — not introduced by #15677, whose diff does not touchhook.jsonorrecords-forms.json.Suggested fix
Rewrite the citation to name
timeoutMsas live andtimeoutas the retired tombstone, matching how the ledger now reads. Worth checking the sibling rows in the same file for the same rename residue while there.Related: #15626, #14478, #15677.
Generated by Claude Code