evidenceList
A list of evidence or verification items — reproduction steps, manual checks, citations. Use `each.falsifiable` to reject vague items and `each.sourced` to require a resolvable citation per item. Close with `endevidenceList`.
Leaf tag · open <!-- mdv: evidenceList … --> · close <!-- mdv: endevidenceList -->
<!-- mdv: evidenceList minItems=1 each.falsifiable -->
- Ran full diagnostic; 412 of 412 subsystems nominal, 0 faults.
<!-- mdv: endevidenceList -->Props
| Prop | Syntax | Category | Description |
|---|---|---|---|
covers | covers=<option> | list | Require the list to mention every top-level area present in a context-supplied changed-file list, so a change summary cannot silently omit a whole touched area. A missing context key reports missing-context-value rather than passing silently, and so does a key whose value is not a JSON array of paths. |
covers.in | covers.in=<option> | list | Require the list to mention every top-level area present in a source-supplied changed-file list (a logical name or contract-relative file), so a change summary cannot silently omit a whole touched area. An unbound optional (trailing ?) source skips silently; a bound source grounds the check with no JSON-in-string plumbing. |
each.definition | each.definition | list | Require every list item to be a **Term** — description (or : description) pair — a bold term, a delimiter, and a non-empty description. The dominant enumerate-named-things README idiom. |
each.definition.delimiter | each.definition.delimiter=<option> | list | Restrict the delimiter each.definition accepts between the term and its description — emdash, colon, or any (default). |
each.in | each.in=<option> | list | Require every list item, taken whole, to be a member of the source — for lists that mirror a catalogue line-for-line; the source's projection defines the line shape once. |
each.mask.anyOf | each.mask.anyOf=<option> | list | Require every list item to match ANY of several masks (sentinel row OR structured entry); the miss diagnostic names the closest alternative for that item. |
each.mask | each.mask=<option> | list | Require every list item to match a mask shape (e.g. "<mention> <text> by <date>") - each.minWords/maxWords for shape instead of length. |
each.sentences | each.sentences=<option> | list | Require every list item to contain EXACTLY N sentences (line breaks count as sentence boundaries — see the rule's help text). |
each.minWords | each.minWords=<option> | list | Require every list item to reach at least N words, so no item is a one-word token gesture. |
each.maxWords | each.maxWords=<option> | list | Require every list item to stay within N words — mirrors each.minWords to keep items scannable. |
minItems | minItems=<option> | list | Require at least N list items (or checkboxes) — e.g. at least one reproduction step. |
maxItems | maxItems=<option> | list | Allow at most N list items (or checkboxes) — mirrors minItems to bound a list's length. |
each.falsifiable | each.falsifiable | list | Require every list item to be concrete and falsifiable — verifiable claims, not token gestures. Heuristic, so it warns by default; harden with error=each.falsifiable. |
each.sourced | each.sourced | list | Require every list item to carry a resolvable citation (link, reference, or footnote). Deterministic, so it errors by default; soften with warn=each.sourced. A true-but-uncitable claim ends with (attested: <who/how>) instead. |
Prop details
covers
Require the list to mention every top-level area present in a context-supplied changed-file list, so a change summary cannot silently omit a whole touched area. A missing context key reports missing-context-value rather than passing silently, and so does a key whose value is not a JSON array of paths.
covers=<option> · category: list · status: nursery · also on: list · src/pipeline/rules/list/coverage.ts
<!-- mdv: list covers=changedFiles -->
## Changes
- Reworked the `src/` compile pipeline entry.
- Regenerated `docs/` reference pages.
<!-- mdv: endlist -->covers.in
Require the list to mention every top-level area present in a source-supplied changed-file list (a logical name or contract-relative file), so a change summary cannot silently omit a whole touched area. An unbound optional (trailing ?) source skips silently; a bound source grounds the check with no JSON-in-string plumbing.
covers.in=<option> · category: list · status: nursery · also on: list · src/pipeline/rules/list/coverage.ts
<!-- mdv: list covers.in=changedFiles? -->
## Changes
- Reworked the `src/` compile pipeline entry.
<!-- mdv: endlist -->each.definition
Require every list item to be a **Term** — description (or : description) pair — a bold term, a delimiter, and a non-empty description. The dominant enumerate-named-things README idiom.
each.definition · category: list · status: stable · also on: list · src/pipeline/rules/list/each/each-definition.ts
Checks that every list item is a **Term** — description (or : description) definition pair:
a bold term (optionally wrapping inline code, or a bold link), a delimiter (em-dash or colon), and
a non-empty description. The single most common enumerate-named-things list idiom in real READMEs,
expressible without a brittle hand-written pattern. Restrict the delimiter with the companion
each.definition.delimiter=emdash|colon (default any accepts either). Targets a list/evidenceList.
<!-- mdv: list each.definition -->
- **driftline-core** — parsing, contract compilation, and the validation engine.
- **driftline-cli** — terminal front end; owns exit codes and output formatting.
<!-- mdv: endlist -->each.definition.delimiter
Restrict the delimiter each.definition accepts between the term and its description — emdash, colon, or any (default).
each.definition.delimiter=<option> · category: list · status: stable · also on: list · src/pipeline/rules/list/each/each-definition.ts
Restricts which delimiter {@link eachDefinition} accepts between the term and the description:
emdash, colon, or any (the default). A configuration carrier for the each.definition flag
— it emits no diagnostics of its own; each.definition reads its value.
<!-- mdv: list each.definition each.definition.delimiter=colon -->
- **`--watch`**: re-run validation when any input file changes.
<!-- mdv: endlist -->each.in
Require every list item, taken whole, to be a member of the source — for lists that mirror a catalogue line-for-line; the source's projection defines the line shape once.
each.in=<option> · category: list · status: stable · also on: list · src/pipeline/rules/list/each/each-in.ts
Every list item, taken whole, must be a member of the source — the list-shaped twin of
entitiesIn. Built for lists that mirror a catalogue line-for-line (a crew roster, a service
inventory): the source's projection template defines the line shape ONCE in config, and this
rule needs no shape of its own — structure (the list) is the detector, membership is the law.
A drifted line (a role changed in the catalogue, a retired entry kept) reports with the nearest
synthesized member as the suggestion. Honest-null without a sources capability.
<!-- mdv: list required each.in=rosterLines? -->
- Captain Vex, callsign Ember — commanding officer (active)
<!-- mdv: endlist -->each.mask.anyOf
Require every list item to match ANY of several masks (sentinel row OR structured entry); the miss diagnostic names the closest alternative for that item.
each.mask.anyOf=<option> · category: list · status: stable · also on: list · src/pipeline/rules/list/each/each-mask-any-of.ts
F2 (sol triage S-12): the per-item twin of pattern.mask.anyOf — every list item must match ANY
of several quoted mask alternatives, tried in order. Ports pattern.mask.anyOf's alternatives
parsing/validation (pattern-mask-any-of.ts) onto each.mask's per-item application
(each-mask.ts): the exact "sentinel row OR structured entry" shape (an empty-state line, or a
real item) that a single each.mask cannot express. A miss names the CLOSEST alternative for
that one item (longest shared prefix, ties to first listed) — never the whole list. v2-only
(GRAMMAR-SPEC's alternative-list form).
<!-- mdv: list required each.mask.anyOf=["No escalations this week.", "To <name>: <text> by <date>"] -->
- To Chief Vega: decision on spare-actuator budget by 2311-05-02.each.mask
Require every list item to match a mask shape (e.g. "<mention> <text> by <date>") - each.minWords/maxWords for shape instead of length.
each.mask=<option> · category: list · status: stable · also on: list · src/pipeline/rules/list/each/each-mask.ts
Anchored pattern.mask, applied per list item instead of once over the whole section: every item
must match the mask shape, not just the section as a whole. Composes the same :in(ref)
membership modifier pattern.mask supports (<mention:in(./team.json)>) — once an item's shape
matches, its captured value is checked against ctx.document.sources(ref) and reported as
unknown-entity on a miss. A shape miss on an item never runs membership for that item; a run
with no sources capability supplied degrades to a silent no-op (honest-null), same as
pattern.mask/entitiesIn.
<!-- mdv: list each.mask="<mention> <text> by <date>" -->
## Action items
- @maya add queue-depth alert by 2026-07-21
- @sam run failover drill by 2026-08-01
<!-- mdv: endlist -->each.sentences
Require every list item to contain EXACTLY N sentences (line breaks count as sentence boundaries — see the rule's help text).
each.sentences=<option> · category: list · status: stable · also on: list · src/pipeline/rules/list/each/each-sentences.ts
F3 (sol triage S-4, count family): every list item's prose must contain EXACTLY N sentences —
"each win is exactly one sentence" (weekly-report trial). Reuses the P18 sentence projector's own
splitter (splitIntoSentences in src/markdown/blocks/sentences.ts) — no second sentence-splitting
implementation. Per the ratified severity doctrine, counts are proxies for the real property
("is this one clean clause"), never constitutive facts, so this rule's catalog codes default to
WARN, not error.
CAVEAT (document in schema help text too): the projector treats a physical line break as a sentence boundary, same as every other P18 consumer — a soft-wrapped item split across two physical lines counts as two sentences even with no terminal punctuation between them.
<!-- mdv: list required each.sentences=1 -->
- Shipped the retry-budget fix; on-call load dropped 40%.
<!-- mdv: endlist -->each.minWords
Require every list item to reach at least N words, so no item is a one-word token gesture.
each.minWords=<option> · category: list · status: stable · also on: list · src/pipeline/rules/list/each/each-words.ts
<!-- mdv: evidenceList each.minWords=4 -->
- Ran `npm test`; all 500 beacon checks pass.
- Checked the CI orbit; it is green.
<!-- mdv: endevidenceList -->each.maxWords
Require every list item to stay within N words — mirrors each.minWords to keep items scannable.
each.maxWords=<option> · category: list · status: stable · also on: list · src/pipeline/rules/list/each/each-words.ts
Checks that every list item stays within a maximum word count; mirrors each.minWords. Targets a
list or evidenceList (and the checkbox kinds).
<!-- mdv: evidenceList each.maxWords=20 -->
- Ran `npm test`; all 500 flight checks pass.
- Checked the orbital CI run; it is green.
<!-- mdv: endevidenceList -->minItems
Require at least N list items (or checkboxes) — e.g. at least one reproduction step.
minItems=<option> · category: list · status: stable · also on: list, taskList · src/pipeline/rules/list/items/items.ts
<!-- mdv: evidenceList minItems=2 -->
- Ran `npm test`; 412 thruster checks pass.
- Checked the relay CI run; green.
<!-- mdv: endevidenceList -->maxItems
Allow at most N list items (or checkboxes) — mirrors minItems to bound a list's length.
maxItems=<option> · category: list · status: stable · also on: list, taskList · src/pipeline/rules/list/items/items.ts
<!-- mdv: evidenceList maxItems=6 -->
- Ran `npm test`; 412 beacon checks pass.
- Checked the station CI run; green.
<!-- mdv: endevidenceList -->each.falsifiable
Require every list item to be concrete and falsifiable — verifiable claims, not token gestures. Heuristic, so it warns by default; harden with error=each.falsifiable.
each.falsifiable · category: list · status: stable · also on: list · src/pipeline/rules/plugins/evidence/each-falsifiable.ts
Checks that every list item is concrete and falsifiable — a claim someone could actually verify
or refute, not a token gesture. The one spelling of this predicate.
Heuristic, so it reports a WARNING by default; harden with error=each.falsifiable.
<!-- mdv: evidenceList each.falsifiable -->
- Ran `npm test`; 412 nav checks pass, 0 fail.
<!-- mdv: endevidenceList -->each.sourced
Require every list item to carry a resolvable citation (link, reference, or footnote). Deterministic, so it errors by default; soften with warn=each.sourced. A true-but-uncitable claim ends with (attested: <who/how>) instead.
each.sourced · category: list · status: stable · also on: list · src/pipeline/rules/plugins/evidence/each-sourced.ts
Checks that every list item carries a citation that resolves (a link, reference, or footnote
pointing at something real). The one spelling of this predicate.
Deterministic, so it is a hard error by default; soften with warn=each.sourced.
A true-but-uncitable claim's honest path is a trailing (attested: <who/how>) marker (P5
escape valve; see uncitedAttestation in markdown/blocks/citations.ts) — never a fabricated citation.
<!-- mdv: list each.sourced -->
- Antenna latency dropped after packet batching was enabled [1].
<!-- mdv: endlist -->