Validate a status table
Enforce the columns, allowed values, required cells, and uniqueness of a Markdown table.
A status board that lets you type "sleeping" in the reactor's Status column is not a status board. It's a rumour.
Prompt for your coding agentOpen in Claude ↗
Add a mediva contract beside systems-board.md (systems-board.mdv.md) that locks its table's columns and allowed status values, then run npx mediva check systems-board.md --schema systems-board.mdv.md and fix every finding.
<!-- mdv: section required -->
## Systems Board
<!-- mdv: table required columns.has=[System, Owner, Status] rows.min=1 strict rows.System.unique rows.Owner.required rows.Status.in=[nominal, degraded, offline] -->
| System | Owner | Status |
| ------ | ----- | ------ |
| Reactor | Dana | nominal |
| Life Support | Cole | nominal |## Systems Board
| System | Owner | Status | Notes |
| ------ | ----- | ------ | ----- |
| Reactor | Dana | sleeping | |
| Reactor | | nominal | dup |systems-board.md
Shape: fix the form; this does not change what the document claims
3 error Column "Notes" not allowed in "Systems Board" table-extra-columns
help: Move the data into a declared column, or remove the column
✖ 1 problem (1 error, 0 warnings)
mdv explain <rule-id> for detailsFour lies, four findings, exit 1.
| Atom | Checks |
|---|---|
required | the section holds a table |
columns. | those columns, in order; extras allowed unless strict |
strict | no other columns |
rows. / rows. | row count |
rows. | the cell is non-empty in every row |
rows. | the cell is one of the values |
rows. | the cell matches a regex |
rows. | no value repeats down the column |
Blank cells are skipped by in, pattern and unique; pair with required to demand a value. A column the table lacks raises table-unknown-column.
npx mediva check systems-board.md --schema systems-board.mdv.mdOr name the contract systems-board. and let the scan find it.