P0 — a truth defect in the instrument. Measured on lambda-labs 2026-09-20 with pv 0.68.2.
pv lint --gate shapes reports verdict: Pass for a contract whose entity is type: jsonl, grading zero focus nodes. Nothing in the output says so, so a shape over a jsonl entity is decoration that reads as coverage.
Reproduction, exactly as planted
contracts/slk-inbound-v1.yaml declares:
- {path: slk:outcome, pattern: "^(answered:(status|findings|prs|fleet|red|ask)|refused:...)$"}
Plant a row the pattern forbids into the jsonl entity:
{"schema":"slk/inbound-v1","kind":"inbound","channel":"C0C37U9HWMP","user":"U1","ts":"1.0","text":"x","outcome":"answered:do"}
| entity type |
verdict |
type: jsonl |
Pass |
same row, type: json |
Fail — ont:slk/outcome: "answered:do" does not match /^(answered:...)$/ |
focus_nodes_n stayed at 8 with four rows in the file; converting to type: json took it to 10.
Two arms
1. Vacuity refusal. Any contract whose target resolves to 0 focus nodes renders Unknown{NoFocusNodes} (exit 2), never Pass. A gate that cannot fail is not a gate — this is the fleet's signature defect inside the instrument that exists to catch it. Fixture: the jsonl case above.
2. jsonl extractor. One row per line = one focus node.
Until arm 2 lands, the workaround is one representative json entity under shape with the ledger enforced outside pv — and the contracts carry unmeasured: [jsonl-rows] so the limit is in the artifact rather than in someone's memory.
Arm 1 is the one that matters: with it, the workaround is unnecessary because the gate would have said so on day one.
P0 — a truth defect in the instrument. Measured on lambda-labs 2026-09-20 with
pv 0.68.2.pv lint --gate shapesreportsverdict: Passfor a contract whose entity istype: jsonl, grading zero focus nodes. Nothing in the output says so, so a shape over a jsonl entity is decoration that reads as coverage.Reproduction, exactly as planted
contracts/slk-inbound-v1.yamldeclares:- {path: slk:outcome, pattern: "^(answered:(status|findings|prs|fleet|red|ask)|refused:...)$"}Plant a row the pattern forbids into the jsonl entity:
{"schema":"slk/inbound-v1","kind":"inbound","channel":"C0C37U9HWMP","user":"U1","ts":"1.0","text":"x","outcome":"answered:do"}type: jsonltype: jsonont:slk/outcome: "answered:do" does not match /^(answered:...)$/focus_nodes_nstayed at 8 with four rows in the file; converting totype: jsontook it to 10.Two arms
1. Vacuity refusal. Any contract whose target resolves to 0 focus nodes renders
Unknown{NoFocusNodes}(exit 2), never Pass. A gate that cannot fail is not a gate — this is the fleet's signature defect inside the instrument that exists to catch it. Fixture: the jsonl case above.2.
jsonlextractor. One row per line = one focus node.Until arm 2 lands, the workaround is one representative
jsonentity under shape with the ledger enforced outside pv — and the contracts carryunmeasured: [jsonl-rows]so the limit is in the artifact rather than in someone's memory.Arm 1 is the one that matters: with it, the workaround is unnecessary because the gate would have said so on day one.