I2731 — Every failure class in the published failure table names its test or its stated limitation
Give the runtime's published failure table a proof column, in which every failure class names the tests that drive it or states the limitation that nothing does, and hold the column with a case that refuses a row with neither and a citation that does not resolve.
DONE wave 0 · p1 · implementation profile · parallel safe
Objective
Give the runtime's published failure table a proof column, in which every failure class names the tests that drive it or states the limitation that nothing does, and hold the column with a case that refuses a row with neither and a citation that does not resolve.
Why
Leaf FV.3 of 2026-10-15 found the milestone's evidence token failure_class_table owned by no issue: docs/MCP.md's 'Failure behaviour' table said what each failure does and nothing about what shows it, docs/DEVELOPMENT_RUNTIME.md had no such table, and no case refused a row with no proof. The runtime baseline audit of 2026-10-09 (master 1fb8d6be44) named classes no test drives: disk full, a read-only journal directory, a frozen worker, a kill between lease creation and its first write. A table of behaviours with no proof column reads as a list of guarantees.
Current state
docs/MCP.md 'Failure behaviour' has a proof column over 28 failure classes: 23 cite tests under apps/majordomus-cli/tests/ or cases under test/cases/, and 5 state a limitation (a frozen request handler, a full disk, a read-only mesh journal directory, a kill between lease creation and its first write, a failing lease keep-alive write). The read-only journal row names PRs #1179 and #1196 (I2706, case 3052) as pending; on this tree no test drives it. docs/DEVELOPMENT_RUNTIME.md points at the table. Case 3056 refuses a row with neither a resolvable citation nor a reasoned limitation, a citation of a test function or case file the tree does not hold, a limitation with no reason, and a table without its proof column.
Desired state
The published failure table has no row without a test or a stated limitation, and a case refuses one; a limitation row is replaced by a citation when a test for its class lands.
Scope
- docs/MCP.md
- docs/DEVELOPMENT_RUNTIME.md
- test/cases
Out of scope
- Writing the missing tests themselves (disk full, a frozen handler, a kill between lease creation and its first write, a failing keep-alive write); each is its own issue when taken
- Readiness and request deadlines, which I2157 and I2156 own
- Journal durability, which I2706 delivers in PRs #1179 and #1196
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- Every row of the 'Failure behaviour' table in docs/MCP.md names a test or case this tree holds, or a limitation with its reason
- Case 3056 fails on a row with neither, on a cited test function or case file that does not exist, and on a table without its proof column
Validation
- bin/majordomus plan validate
- bash test/run.sh 3056_every_failure_class_names_its_proof
Evidence required
- failure_class_table
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| failure_class_table | ci | validate run 39438896504 at master 9a5a9b77520: suite shards 1-4 (jobs 118683336189 118683338077 118683336157 118683336457) run every case, incl. 3056_every_failure_class_names_its_proof (a53fd3b8052) | success (the run's only red job is pages, which runs no test) | a81b1e3 |
Timeline
- started
- 2026-10-20T16:17:47Z
- verified
- —
- completed
- 2026-10-20T16:32:41Z
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2731.yaml. Read it back with majordomus plan show I2731.