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 lint --gate shapes: a contract whose YAML does not parse is dropped silently from a directory run, which still reports Pass #4622
pv lint <dir> --gate shapes (pv 0.70.0, 8d021f6) silently drops a contract whose YAML does not parse, and still reports verdict: Pass. The broken file is not graded, not listed in declines, and not counted in shapes_n.
A lone broken contract is reported as decline: NoShapes with exit 2. That is correct. But next to any good contract, it vanishes.
Repro
d=$(mktemp -d); x=$(mktemp -d "$d/x.XXXXXX")
cp <any passing shaped contract>"$x/"printf'name: x\nshape: {}\nfoo: `bad`\n'>"$x/broken-v1.yaml"# a plain scalar may not start with a backtick
pv lint "$x" --gate shapes --format json | jq -c '{verdict, shapes_n, by_shape, declines}'# {"verdict":"Pass","shapes_n":1,"by_shape":["<good>=1"],"declines":[]}
How it was found
In paiml/infra (#1033), a new arbiter-corpus-code-v1.yaml had if_fails: \arbiter ask` …. That is invalid YAML. The gate over all of contracts/` said Pass, while the same contract graded alone declined. Its planted defects "failed" for the wrong reason: exit 2, not 1.
Expected
A file under the linted directory that fails to parse is either a finding or a decline row that makes the run not-Pass. Whichever it is, the report must name it. "0 violations over N−1 of N files" should not be possible.
Workaround in infra
The arbiter done-when (I1.sh --shapes) will assert that every shaped contracts/arbiter-*.yaml appears in by_shape.
P0 to P1 (2026-10-14 P0 triage): P0 now means it blocks the next release or carries the operator's own words on it; this issue does neither, so it stays on the 0.71.0 milestone at P1.
Folded into #5308 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it.
Activity
noahgift commentedon Oct 14, 2026
P0 to P1 (2026-10-14 P0 triage): P0 now means it blocks the next release or carries the operator's own words on it; this issue does neither, so it stays on the 0.71.0 milestone at P1.
noahgift commentedon Oct 14, 2026
Folded into #5308 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it.
Agent: aprender-clerk