Repository navigation
ONT-001 to 80% in 0.69 (≈7 more rows) with SHACL armed and falsifiable — and the §11 one-row-per-train conflict this creates #3559
Description
Operator requirement (2026-09-20): 80% of the ontology spec lands in 0.69, and SHACL is the highest priority — equal to the dogfood work.
Where we are — derived, not quoted
ONT-001 v4.3 (infra/docs/specifications/paiml-ontology.md §6) assigns aprender 17 rows. Rows with work merged on origin/main, derived with git log --grep='ONT-' origin/main:
ONT-1 ONT-2a ONT-2b ONT-4 ONT-4b (+4b2) ONT-4c1 (partial) ONT-6
≈ 7 of 17 ≈ 41%. (ONT-0 is infra's, ONT-11 is pmat's, ONT-P is not ours.)
80% of 17 = 13.6 → 14 rows, so 0.69 must land ≈7 more, from: ONT-2c, ONT-3a (extract:code), ONT-3b (extract:lean / model_of), ONT-4c (complete: readme / llm-context / apr-model / csv — only the model-receipt half landed as 4c1), ONT-4d, ONT-5 (consistency + witness), ONT-7, ONT-8 (PROV-O), ONT-9 (self-application), ONT-10 (release).
SHACL first, within that set
"Highest priority" resolves to: the shapes gate must be armed and non-vacuous over the whole corpus, not green because it looked at a subset.
pv extract contracts --checkexit 0 andpv lint contracts --gate shapes --format jsonPasswithunarmed_violationstrending to 0 — today 0.68.2 shipsarmed_shapes: [ont-shapes-v1, ladder-measured, ladder-green]with 98 unarmed warnings onbound-symbols-resolve. Arming that shape is the visible next ratchet.- Every shape ships with a falsifier: a fixture that violates it and turns the gate RED. A shape with no red-turning fixture is decoration (this repo's recurring defect class).
- The corpus the shapes run over must include the surfaces of ONT-001 to 80% in 0.69 (≈7 more rows) with SHACL armed and falsifiable — and the §11 one-row-per-train conflict this creates #3559 (docs, examples, cookbook), not only
contracts/.
The conflict this creates, stated rather than hidden
APR-RELEASE-001 §11 governs ontology cadence at one row per train, every gate landing unarmed (R-8), five ratchet counters moving only through make ont-ratchet (R-6). Seven rows in one train is seven trains' worth of that cadence. One of these must give, and the team should pick which:
- amend §11 for 0.69 — a named, dated exception with the ratchet rules kept (rows may batch, arming still requires a falsifier); or
- keep §11 and accept that 80% arrives across 0.69–0.71 rather than in 0.69; or
- re-scope the 17 — if some Phase D rows (
ONT-7…ONT-10) are not actually aprender's, 80% is a different number and should be recomputed before anyone commits to it.
My recommendation is (1) with the arming discipline untouched: the cadence exists to stop unfalsifiable gates landing in bulk, and that risk is controlled by the falsifier requirement, not by the one-per-train count. But it is a spec amendment and it needs a decision, not an assumption.
Acceptance
- ≥ 14 of the 17 aprender-owned ONT rows merged on
main, each with its gate armed and a red-turning fixture committed in the same change. pv extract contracts --checkrc 0 and the shapes gatePassat the 0.69 tag, over a corpus that includes docs/examples/cookbook.- The count is derived by command in the release receipt, not asserted in prose.
Activity
noahgift commentedon Sep 20, 2026
Correction: the ontology slot is NOT blocked. Decision 8 is ruled (2026-09-20) and the ruling states it explicitly — the fleet
pvpin bump (#3567), the pmat ticket for ONT-11, and the capability ledger touch neithercontracts/census.jsonnorcontracts/lint-baseline.json. Earlier notes here and on #3080 said the slot waited on decision 8; that is now wrong.Start now, in this order: (1) #3567 — the fleet pin, because the 80% target is defined against the installed
pvand today that binary has noextractand no--gate; (2) the ONT-11 pmat ticket, because the four-layer pin chain is the long pole, not the code; (3) the capability ledger, frozen at a sha — that is the denominator, and until it exists "80%" has no numerator either.Decision 8's own work is #3569 and it is this slot's first aprender PR:
census.jsonbecomes derived (CI computes it, a guard refuses any PR diff touching it, the train is its single writer at T-0);lint-baseline.jsonkeeps only decisions likearmed_shapeswhile the monotone counts become a base-vs-head never-down check. Measured to confirm the split: of the last 20 merged commits, census.json moved in 4 and lint-baseline.json in 5, and every lint-baseline key that moved was a count exceptarmed_shapes.Interim rule in force now: any PR touching either file is labelled
touches-shared-contractsand merges in a queue group of one behind slice M.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 23, 2026
triage 2026-09-23 (aprender-dd): kept in 0.70.0 and labelled ont-0.70. Operator, verbatim (relayed by the cop aprender-cf): "the ontology spec MUST be finished in .7". Classified as ontology/SHACL spec work: its title names ONT/ontology/SHACL/capability cells, or its body cites an ONT- row.
noahgift commentedon Sep 23, 2026
Correction to the triage comment above (aprender-dd): this issue was MOVED from 0.71.0 to 0.70.0, not "kept". A failed first attempt applied the milestone before its label step errored, so the second pass read it as already in 0.70.0. The move and the reason stand.
fix(ONT-4b2): extract:code resolves `Type::method` bindings — 33 meth…
16 remaining items
noahgift commentedon Oct 13, 2026
Lane update (E0 #3269 look-ahead). Slice on branch
fix/3559-binding-dotdot-refs(4 commits on main 7f9a15a, no PR yet; a PR waits for a slot).Cause. 12 binding rows named their contract as
../x.yaml. Contract ids are normalized by stripping only.yaml/.yml, so every consumer that compares bindings by stem matched nothing, and the ontology typed the node ascontract/..%2Fx, which is not anont:Contract.Change.
contracts/aprender/binding.yaml, 3 incontracts/binding.yaml) now name the stem. Every target contract and equation exists.crates/aprender-core/build.rs: the 4ALLOWED_GAPSkeys that carried../now use the stem; without this AllImplemented fails the build. The emitter is split into helpers so the file passes the complexity hook, with no behaviour change.contracts/contracts.ntregenerated: 9..%2FIRIs are gone.Measured (
pv lint contracts/ --gate shapes --format json, base vs fix): verdict Pass both, 0 armed violations both; unarmed 567 → 558;bound-symbols-resolve70 → 61; focus nodes 3876 both.pv extract contracts --checkrc 0 andcargo check -p aprender-corerc 0 at the branch head (AllImplemented 221/233, 12 allowed gaps, 0 unallowed).Not in this slice. The remaining 61: 52 are bound symbols that do not resolve; the rest point at contracts that live elsewhere or do not exist (
wgpu-transformer-trainer-v1,wgpu-forward-pass-v1,sampling-v1,gemm-v1).The owner label on this issue is a clerk default, not a claim.
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. The operator quote in its history is a milestone-wide triage note, not words about this issue.
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. Pushed branch:
0d/3559-ghosts,fix/3559-binding-dotdot-refs.Agent: aprender-clerk
noahgift commentedon Oct 14, 2026
Row moved: #5308 was split into named masters (TRIAGE-100 master naming), so this ticket's checklist row is now on #5335.
Agent: aprender-clerk