Hard prerequisite for the 0.69 ontology goal (#3559) and the docs-SHACL goal (#3560). Measured 2026-09-20.
The 30-day plan v2 calls this "row zero" and states the fleet pv pin predates the shapes gate. Measured here, it is sharper than that — the subcommands do not exist:
$ pv --version # /home/noah/.cargo/bin/pv, the installed binary
pv 0.65.2 (aprender provable-contracts verifier)
$ pv lint contracts --gate shapes --format json
error: unexpected argument '--gate' found
$ pv extract contracts --check
error: unrecognized subcommand 'extract'
tip: a similar subcommand exists: 'extract-pytorch'
Fleet state:
| host |
pv |
| lambda (this box) |
0.65.2 |
| gx10 |
0.65.2 |
| yoga |
not installed (pv: command not found) |
| declared in forjar |
pv 0.65.2 on mini and gx10 (machines/*/forjar.yaml) |
So a gate that shells out to pv extract … --check or pv lint --gate shapes on any fleet host errors; it does not report UNMEASURED, and depending on how the caller reads the exit status it may not report anything at all.
Correction to receipts I produced earlier today
The 0.68.2 bump's contract receipts — pv extract contracts --check rc 0 and pv lint contracts --gate shapes Pass with armed_shapes: [ont-shapes-v1, ladder-measured, ladder-green] — were produced with /mnt/nvme-raid0/targets/aprender/release/pv, a HEAD-built 0.68.2, not the fleet-pinned binary. For the bump that is the correct tool (it is the version being released) and those receipts stand as what they say. But they say nothing about the fleet, and #3559's target is explicitly "≥80% of a frozen capability ledger passes on the installed, fleet-pinned pv" — which today cannot run the commands at all. Anyone reading "shapes gate green" as a fleet property would be wrong.
This is the same discipline the train has been applying all day: pin the binary, and say which one produced the number ([. scripts/apr_bin.sh] exists for apr for exactly this reason; pv has no equivalent).
Asks
- Bump the fleet
pv pin through all four layers to a version that carries extract and --gate (0.68.2 is on crates.io as of today), and install it on yoga, which has none.
- A
pv resolver with the same contract as scripts/apr_bin.sh — prove the binary that ran is the one intended, and refuse a bare pv on PATH. Four apr binaries once coexisted on this box and a bare apr resolved to a 26-day-old copy; pv is now in the same position with no guard.
- A capability probe, not a version string. The gate asserts
pv extract --help and pv lint --gate shapes --help both succeed before it trusts a verdict — a version comparison would have passed 0.65.2 on any >= 0.6x rule. Falsifier: point it at 0.65.2 and require RED.
Until (1) lands, #3559's percentage cannot be measured on the fleet and #3560's docs corpus cannot be extracted there.
Refs #3080, #3559, #3560
Hard prerequisite for the 0.69 ontology goal (#3559) and the docs-SHACL goal (#3560). Measured 2026-09-20.
The 30-day plan v2 calls this "row zero" and states the fleet
pvpin predates the shapes gate. Measured here, it is sharper than that — the subcommands do not exist:Fleet state:
pvpv: command not found)pv 0.65.2on mini and gx10 (machines/*/forjar.yaml)So a gate that shells out to
pv extract … --checkorpv lint --gate shapeson any fleet host errors; it does not report UNMEASURED, and depending on how the caller reads the exit status it may not report anything at all.Correction to receipts I produced earlier today
The 0.68.2 bump's contract receipts —
pv extract contracts --checkrc 0 andpv lint contracts --gate shapesPasswitharmed_shapes: [ont-shapes-v1, ladder-measured, ladder-green]— were produced with/mnt/nvme-raid0/targets/aprender/release/pv, a HEAD-built 0.68.2, not the fleet-pinned binary. For the bump that is the correct tool (it is the version being released) and those receipts stand as what they say. But they say nothing about the fleet, and #3559's target is explicitly "≥80% of a frozen capability ledger passes on the installed, fleet-pinnedpv" — which today cannot run the commands at all. Anyone reading "shapes gate green" as a fleet property would be wrong.This is the same discipline the train has been applying all day: pin the binary, and say which one produced the number ([
. scripts/apr_bin.sh] exists foraprfor exactly this reason;pvhas no equivalent).Asks
pvpin through all four layers to a version that carriesextractand--gate(0.68.2 is on crates.io as of today), and install it on yoga, which has none.pvresolver with the same contract asscripts/apr_bin.sh— prove the binary that ran is the one intended, and refuse a barepvonPATH. Fouraprbinaries once coexisted on this box and a bareaprresolved to a 26-day-old copy;pvis now in the same position with no guard.pv extract --helpandpv lint --gate shapes --helpboth succeed before it trusts a verdict — a version comparison would have passed 0.65.2 on any>= 0.6xrule. Falsifier: point it at 0.65.2 and require RED.Until (1) lands, #3559's percentage cannot be measured on the fleet and #3560's docs corpus cannot be extracted there.
Refs #3080, #3559, #3560