Source document
- status published, draft
- action publish, customize, delete
- listed (published, publish), (published, customize), (draft, *)
Topic · decision tables
Gist
A decision table maps every reachable input combination to an output. Proof treats that table as a first-class artifact in domain.tables. proof check tables specs/system requirement_state names a missing cell, a duplicate cell, or a drift cell between two linked tables. Camunda still runs DMN. A spreadsheet still lists the rows someone remembered. Jama still authors.
proof check tables specs/system requirement_state
Keep Camunda if you execute business rules at runtime. Keep Jama if you author the programme. Proof does not paper a silent cell with a default you did not write.
01 · The cell nobody wrote
A source document can enumerate the cases it already thought of. It cannot prove the cases it never mentioned.
The vectors-from-the-shall H1 lives on requirements based testing. The condition-independence H1 lives on MC/DC for Go. This page is the lookup surface: finite inputs, one output per cell, every cell decided or named.
Declare the table in the component .vars.yaml. Inputs are enum or bool. Completeness without a default: is one bounded Z3 query. A sat model decodes to named input=value pairs. Consistency is validation-derived: two rows on the same cell fail proof validate, and the check does not pretend that is SMT. Equivalence is one query per equivalent_to link.
proof check tables specs/system requirement_state
proof audit --check table_complete --verbose
proof var table show
On this install the 144-cell verification_state_derivation table is the tripwire for the derivation switch. A table that only transcribes the source document's listed rows will never find the silent cell.
02 · The exhibit
The spreadsheet still matches the rows the source already listed. The check will name the combination nobody wrote. Click the tabs.
Source document
This push
(published, delete) is reachable. The sheet never said so.
Silent cellSource document
Still last week's listed rows. Still no delete-on-published.
Keep the sheetProof
Same matrix. A silent cell, or a named one. Click the tabs.
| Surface | What they do | What Proof does |
|---|---|---|
| Decision tables | Map finite conditions to actions. Wikipedia, GeeksforGeeks, Hillel Wayne. | proof check tables on domain.tables. Completeness is Z3. A missing cell is named. |
| Camunda / DMN | Execute a decision table at runtime as a process engine | Not this product. Proof does not deploy DMN, and it does not replace the engine. |
| IBM ODM / BAW | Scheduled rule logic in an enterprise decision manager | Not this product. A YAML table in git is not a rule app. |
| Decision table testing | Black-box cases from the listed condition combinations | Same cluster, shorter head. Vectors from a compiled shall live on
requirements based testing
as proof testgen. |
| Spreadsheet | Rows the author remembered, no proof the product is covered | The sheet stays a working artifact. The committed table is the subset a requirement references. |
| MC/DC | Independence of boolean conditions in a decision | That H1 lives on MC/DC for Go. A complete table is not MC/DC. |
| Jama / DOORS | Author and store the programme | Jama still authors. Proof holds the table to the graph and fails the merge when a cell is silent or drifting. |
The teaching table in the public check docs is a lifecycle matrix: status × action → allowed. Completeness without a default is total. Do not add default: false to hide (published, delete). That converts a finding into an invented decision.
domain:
tables:
- name: theme_lifecycle
inputs:
- {name: status, type: enum, values: [published, draft]}
- {name: action, type: enum, values: [publish, customize, delete]}
output: {name: allowed, type: bool}
rows:
- {status: draft, action: publish, allowed: true}
- {status: draft, action: customize, allowed: true}
- {status: draft, action: delete, allowed: true}
- {status: published, action: publish, allowed: true}
- {status: published, action: customize, allowed: true}
proof check tables specs/system requirement_state
proof audit --check table_complete --verbose
proof var table show
Five listed rows. Six cells in the product. The sixth is the finding. Equivalence is a different ask: two documents, one permission matrix, equivalent_to, a drift cell with both outputs. We have not run this against a frozen Camunda / IBM ODM corpus, and we have not claimed the check executes DMN. The loss is named, not scored.
03 · The honest loss
Proof proves cells on a declared table. It does not fire those cells in production. Jama still authors. Camunda still executes.
Consistency is validation-derived. Two concrete enum/bool rows on the same cell fail proof validate. No SMT query runs for that verdict, and none is pretended. Int-range row conditions are deferred. Cell spaces larger than 65536 must be partitioned. FRETish cannot compare an enum to a value literal; the requirement references the table's output boolean. A table no requirement consumes is an orphan. Object-code coverage on C still wants the qualified toolchain. That H1 lives on
MC/DC for Go
and on
Proof vs LDRA.
The vectors-from-the-shall H1 stays on requirements based testing. Jama still authors.
04 · Nearby questions
What is decision table testing? Same cluster, shorter head. Same command. Not a twin. ISTQB cases from listed combinations are not completeness of the product.
What is requirements based testing? Vectors from the compiled shall, one program. requirements based testing.
How do I measure MC/DC coverage for my Go code? Independence of conditions, not cells in a lookup. MC/DC for Go.
How do I write machine-checkable requirements? FRETish compiles the shall. The table is the enum lookup FRETish cannot write as status = published.
FRETish.
How do I know every requirement is actually covered by code and a test? Traceability is a different H1. every requirement covered.
Is Proof a Camunda alternative? No. Camunda executes DMN. Proof names a silent cell in git.