Squashed 'scanners/commons/' changes from 532d70d..4641a7b

4641a7b release(0.3.0): a detection pattern changed value — that is new here
1482c0b feat(schema,spec): give the §1.1 MUST a shape, since v0.2.0 shipped it without one
25a2cf9 feat(conformance): the witness case, and the derivation rule that had no room for it
c1b2385 fix(lexicon): converge script-tag on its source — re-extraction, not revision
6f79a6e fix(lexicon,docs): the script-tag row reversed — commons is now the sole diverger

git-subtree-dir: scanners/commons
git-subtree-split: 4641a7b5184047460e3f10038b615a61e7a4ac21
This commit is contained in:
Kjell Tore Guttormsen 2026-08-11 14:03:23 +02:00
commit bbd03f9b52
9 changed files with 585 additions and 25 deletions

View file

@ -48,6 +48,22 @@ Two constraints keep the verdict from becoming an exit:
MUST run every case scoped to it, including the ones it fails. Per-case opt-out is exactly
the silent skip §1 forbids.
**The shape of the declaration.** A runtime publishing a declaration MUST use the shape in
[`schema/conformance-declaration.schema.json`](../schema/conformance-declaration.schema.json):
runtime, the commons commit measured, the declared table set, and the four verdict counts with
their total. The requirement is the shape, not a validation step — nothing in this repository
runs, so no runtime is gated on it. It exists because a free-form declaration makes
`83 passed, 6 not-applicable` unparseable by anyone but its author, and a result only its
author can read is not a cross-runtime measurement. That schema also carries the two arithmetic
invariants this section implies but cannot state in prose without ambiguity: the counts MUST sum
to the total, and the total MUST equal the corpus case count at the commit measured.
A runtime SHOULD derive its declared set from the same constant its runner uses to accept or
reject a `scope`, rather than maintain a second list beside it, and SHOULD record which of the
two it did. The anti-narrowing constraint above is then structural rather than promised:
narrowing the declaration is narrowing what the runtime accepts, which is a change to code with
tests behind it instead of an edit to a published file nobody re-reads.
**What the verdict does not say.** `not-applicable` records that a runtime does not implement
a named commons table. It is not a statement that the runtime is blind to the phenomenon
behind it — a runtime may well detect the same construct through some other mechanism that