You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pv score: a missing binding registry scores 0.00, and a valid registry is refused over one enum variant #2704
pv score does not auto-discover contracts/binding.yaml, so every contract scores 0.00 on D5 unless --binding is passed. The parenthetical is honest; the number is not. 0.00 aggregates into the contract grade exactly as a genuine zero does, so a contract with all 54 equations bound is indistinguishable from one with none.
The right behaviour is to exclude D5 from the aggregate when no registry was supplied, not to score it 0 — a dimension that was not measured is not a dimension that measured badly.
This is the same shape as a family of defects rmedia has been closing all year: a value describing missing input consumed as though it described the thing measured. It is worth fixing in pv precisely because pv is the tool that decides release soundness — if it scores absence as badness, every consumer inherits that.
2. A valid registry is refused over one enum variant
$ pv score contracts/pill-geometry-v1.yaml --binding contracts/binding.yaml
error: bindings[78].status: unknown variant `superseded`,
expected one of `implemented`, `partial`, `not_implemented`, `pending`
at line 685 column 13
So the workaround for (1) — pass --binding — fails on this repo's registry.
superseded is a real lifecycle state, not a typo: an equation that has been replaced by a later one is neither implemented, partial, not-implemented, nor pending. rmedia's own scripts/lint-contract-bindings.sh counts it deliberately:
lint-contract-bindings: OK (54 specs, all bound; 210 bindings;
175 implemented, 27 partial, 6 not implemented, 2 superseded)
Either the enum should gain superseded, or pv should say what a consumer is meant to write for a replaced binding. Silently collapsing it into not_implemented would be wrong — that reads as unfinished work rather than deliberately retired work, and it would show up as a coverage gap that no one can close.
Net effect today
D5 Binding is 0.00 for every contract in rmedia, by two independent routes, and neither is "nothing is bound". Related: the pv hardening epic #2556, which does not currently list either of these.
Triage correction: the earlier triage-wrong-repo-2704 marker was wrong. pv has lived in-tree since the monorepo consolidation (crates/aprender-contracts-cli), so this belongs here. Milestoned to 0.68.0, the backlog train.
triage 2026-09-23 (aprender-dd, standing triage owner): milestoned to 0.70.0, theme Fast Train (CI, gates, pv, release tooling, hygiene); it moved out of backlog (the 2026-09-17 overflow bucket, not a release).
Activity
noahgift commentedon Sep 10, 2026
This issue belongs in paiml/pv, not paiml/aprender.
noahgift commentedon Sep 10, 2026
Triage correction: the earlier
triage-wrong-repo-2704marker was wrong.pvhas lived in-tree since the monorepo consolidation (crates/aprender-contracts-cli), so this belongs here. Milestoned to 0.68.0, the backlog train.noahgift commentedon Sep 23, 2026
triage 2026-09-23 (aprender-dd, standing triage owner): milestoned to 0.70.0, theme Fast Train (CI, gates, pv, release tooling, hygiene); it moved out of
backlog(the 2026-09-17 overflow bucket, not a release).noahgift commentedon Sep 24, 2026
Closed by paiml-implement — folded into epic #2556 (triage evidence/triage-1418.md)