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 extract emits a PARTIAL graph on an unparseable binding.yaml (one dropped quote → 356 triples silently gone, --check agrees with itself) — it must refuse, naming the line #3640
contracts/binding.yaml on PR #3350's branch lost one closing " (commit d3cc76f1f, the QE2E-INV-001 note) and stopped being valid YAML at line 764. pv extract did not refuse. It emitted a graph with every bound symbol after the broken entry silently gone — prune::run, distill::run, harness_ir::*, ptx_explain::run — 356 triples smaller than main, and --check (committed == fresh) would have agreed with itself. Found by aprender-d4 on 2026-09-20 ~22:50Z only because the rebase regenerated contracts.nt under a pinned in-tree pv and the count was compared to main by hand. Fixed in da1ee1506 (one character; 156 entries parse again; extraction byte-identical to main).
This is tonight's absence-scored-as-conformance class with a fresh mechanism: a malformed input producing a confidently smaller output, confirmed by the instrument that caused it. Sibling of #3639 (producer failure invisible to the consumer) and of the stale-pv 107-triples-short case on #3600.
done_when
pv extract (and every pv reader of binding.yaml) exits non-zero on a binding.yaml that does not parse, naming the file and line, and writes NO graph — mutation: drop one " at an arbitrary entry → RED with the line number; restore → GREEN, byte-identical graph
the partial-parse path cannot be reached: a parse error is not an empty-tail; the case table covers unterminated string, bad indent, duplicate key
pv extract contracts --check on the mutated tree is RED for the parse reason, not for a count delta
Refs #3350 (the branch that carried it), #3639, #3641 (the consumer-side floor).
Neighbour finding from aprender-d4 on #3395 (01:55Z), recorded here as the census-vocabulary sibling rather than a new row: the 24 new crux contracts carry no metadata.kind and registry: false, so pv census files them under kind kernel by default, while main's 294 crux contracts (registry: true) file under registry — 24 DRAFT contracts with no tests now count as kernel contracts in by_kind; the census has no draft/intake bucket. A default that classifies an unlabelled input into the most-trusted class is the placeholder-is-most-permissive shape. Not in #3395's scope; whoever takes #3640 should decide whether the census refuses a kind-less contract (as ONT-6b made the linter say 'the kind was assumed') or adds a draft bucket.
Activity
noahgift commentedon Sep 21, 2026
Neighbour finding from aprender-d4 on #3395 (01:55Z), recorded here as the census-vocabulary sibling rather than a new row: the 24 new crux contracts carry no
metadata.kindandregistry: false, sopv censusfiles them under kindkernelby default, while main's 294 crux contracts (registry: true) file underregistry— 24 DRAFT contracts with no tests now count as kernel contracts inby_kind; the census has no draft/intake bucket. A default that classifies an unlabelled input into the most-trusted class is the placeholder-is-most-permissive shape. Not in #3395's scope; whoever takes #3640 should decide whether the census refuses a kind-less contract (as ONT-6b made the linter say 'the kind was assumed') or adds adraftbucket.noahgift commentedon Sep 23, 2026
milestone → 0.71.0 per docs/roadmaps/milestone-triage-2026-09-23.md (#4024), operator approval 2026-09-23 (relayed by aprender-cf). Reason: debt ratchet pillars B/C (#3997: pv at the deepest level, ontology merge), slice 2
noahgift commentedon Sep 24, 2026
Closed by paiml-implement — folded into epic #2556 (triage evidence/triage-1623.md)