Repository navigation
EPIC E0 0.70: Ontology (ONT-001) #3269
Description
owner: apr-embed (re-owned 2026-10-09 by clerk aprender-3e for cop aprender-13: works child #3715 (ladder cells, 2026-10-09))
Spec: APR-EPIC-001 §2 · Epic: E0 · Train: 0.70 · Successor at cut: S2
Theme
Ontology (ONT-001)
done_when
rows bound/total ≥ 0.80 (pv lint --gate shapes at the tag sha); entity types 9/9; ghost bindings = 0; shapes over zero focus nodes = RED; ONT-10 releases aprender-contracts-cli; #3715's SHACL shape refuses the 0.70 tag on any missing cell; #3559 ruling recorded.
Budget
At most 13 open children (docs/roadmaps/epics.yaml). Repo-wide cap 100 open issues; andon at 95.
Absorbs
#4071, #4072, #4073, #3847, #4069, #3972, #4047, #4070, #4075, #4330, #4074, #4077, #4078, #4079, #3715, #3856, #3559, #3560, #4319, #4379, #4420, #3610, #3611, #3624, #4100
Prior body
Why this is filed
ONT-001 v4.3 (infra/docs/specifications/paiml-ontology.md) §6 assigns aprender every ontology row but three. Measured on main @ fa6e35f23, 2026-09-14: 1 of 17 rows merged, and 1 ticket in this repo (#3222, closed, no milestone). Sixteen rows of upstream-assigned work had no ticket, no milestone and no owner here — untriaged, which is P0 by standing rule. This epic is the triage, not a promise to finish by the due date (see Horizon).
Baseline — derive, don't quote
| ONT-001 requires | aprender has | derive with |
|---|---|---|
contracts may carry entity: / shape: / evidence: |
0 / 0 / 0 of 1818 | grep -rlE '^entity:' contracts --include='*.yaml' | wc -l |
pv census (ONT-1) |
absent | pv --help |
pv extract → contracts.nt (R-18) |
absent | pv --help |
crates/aprender-contracts/src/ontology/ (decision 4) |
does not exist | ls |
| 16 entity types named, 14 extractors (7 in v1alpha1 scope) | 0 | §3.7 |
| every ONT row implemented (§6) | 1 of 17 — ONT-2a (#3224) | git log --grep='ONT-' origin/main |
pv kaizen is the kaizen loop |
code-only: bindings, call sites, E0/E1/E2 | crates/aprender-contracts-cli/src/commands/kaizen.rs |
Two of these are load-bearing:
pv kaizenis blind to every surface that is not Rust. The release train sweeps the(crate, feature)matrix, examples,README.md,CLAUDE.md, workflows, model files and CSVs — and the loop that is supposed to improve on each sweep cannot see one of them. ONT-001 R-17 is exactly this: one structure, any entity type.- infra
maintracks ONT-001 v3.1 (f1269d0, infra#570); v4.3 — the version this epic and APR-RELEASE-001 §11 are measured against, sha256512a16d5e09c…— is an untracked draft on one box. A quorum lane on gx10, yoga or mini cannot fetch the premise, so every ontology verdict it returns is unverifiable by construction. This is the one P0 here and it is fixed ininfra(ONT-P), not in this repo — PR fromdocs/track-ont-001-ontology-spec. (Corrected 2026-09-14: first reported as "untracked, no history"; v3.1 is tracked.)
The 16 rows (owner: aprender)
Phase B — ONT-1 census · ONT-6 verdict lattice · ONT-2b formal: parse · ONT-2c
Phase C — ONT-3a extract:code · ONT-3b extract:lean / model_of (closes PVL F5) · ONT-4 Σ · ONT-4b extract:pv-contract · ONT-4c readme / llm-context / apr-model / csv · ONT-4d subsumption + inherited shapes · ONT-4e requires/ensures + Liskov on refines
Phase D — ONT-5 consistency + witness · ONT-7 · ONT-8 PROV-O · ONT-9 self-application · ONT-10 release
Not ours: ONT-P, ONT-0 (infra) · ONT-11 (pmat).
Process
APR-RELEASE-001 §11 (PR #3268) governs the cadence: one row per train, every gate lands unarmed (R-8), five ratchet counters move only through make ont-ratchet (R-6), and every surface sweep closes with an ontology delta or a named ont-delta: none <reason>. §11.4 is the payoff — quorum premises cite contract ids instead of prose, verdicts are ONT-6 lattice elements, and reduce is meet = min rather than a vote count.
Horizon — stated, not promised
16 rows at one per train, trains every 2–3 days ⇒ ≈40 days [A]. Milestone capacity at 6.1 closures/day (trailing 7 d, measured 2026-09-14): 0.68.0 over by 45 d, 0.69.0 over by 5 d, 0.70.0 fits by 28 — so this epic is filed to 0.70.0 and its rows spill forward by §6.3 like any other work. Filed as one epic rather than 16 issues on purpose: arrival already outruns closure 2:1.
🤖 Generated with Claude Code
Parked
Closed over budget (APR-EPIC-001 rule 5). Reopen = pull (rule 7).
- ONT-4c4: kernel symbols as focus nodes — extract:kernel over extract:code (ont:KernelSymbol ⊑ ont:Symbol, v4.15) #4069 ONT-4c4: kernel symbols as focus nodes — extract:kernel over extract:code (ont:K — over E0 budget (rank 16/25)
- ONT-4d: subsumption in Σ; shapes inherit down the hierarchy #4070 ONT-4d: subsumption in Σ; shapes inherit down the hierarchy — over E0 budget (rank 14/25)
- ONT-3a: extract:code — bindings resolve fail-closed across the workspace, via syn #4072 ONT-3a: extract:code — bindings resolve fail-closed across the workspace, via sy — over E0 budget (rank 20/25)
- ONT-3b: formalization.yaml gains model_of; a statement with no model earns no L4 #4073 ONT-3b: formalization.yaml gains model_of; a statement with no model earns no L4 — over E0 budget (rank 22/25)
- ONT-9: the ontology has a contract; checker soundness by Kani and planted-solution generation #4078 ONT-9: the ontology has a contract; checker soundness by Kani and planted-soluti — over E0 budget (rank 23/25)
- ONT-10: release aprender-contracts-cli with ONT-0..9 (incl. 4d, 4e) — CI tags, operator publishes (RP-001) #4079 ONT-10: release aprender-contracts-cli with ONT-0..9 (incl. 4d, 4e) — CI tags, o — over E0 budget (rank 15/25)
- contracts/binding.yaml: apr-model-graph-v1 forward_pass_completeness claims implemented, but fn forward_pass does not exist (ghost binding) #4094 contracts/binding.yaml: apr-model-graph-v1 forward_pass_completeness claims impl — over E0 budget (rank 21/25)
- pv lint --gate shapes: the GLOBAL NoFocus decline prints no report — by_shape/declines exist only on the per-shape path (#3610 follow-up) #4100 pv lint --gate shapes: the GLOBAL NoFocus decline prints no report — by_shape/de — over E0 budget (rank 24/25)
- ONT-3a: 24 ghost bindings — implemented in binding.yaml, no item in the workspace #4319 ONT-3a: 24 ghost bindings — implemented in binding.yaml, no item in the workspac — over E0 budget (rank 25/25)
- ONT-4f: GitHub's own objects — repo, issue, pull-request, milestone — as typed focus nodes (ONT-001 v4.16) #4330 ONT-4f: GitHub's own objects — repo, issue, pull-request, milestone — as typed f — over E0 budget (rank 17/25)
- 213 restored binding.yaml rows name symbols that do not resolve (bindings-gate ghosts, #4369 follow-up) #4379 213 restored binding.yaml rows name symbols that do not resolve (bindings-gate g — over E0 budget (rank 18/25)
- bindings resolver: bin-only modules and OUT_DIR-generated items are invisible to the ONT-3a walk (5 allowlisted rows) #4420 bindings resolver: bin-only modules and OUT_DIR-generated items are invisible to — over E0 budget (rank 19/25)
Activity
noahgift commentedon Sep 20, 2026
Governed by
30-day-plan.mdv2.2 §5.4 — and row zero is now measuredPriority: co-equal with the P0 dogfood work (operator, 2026-09-20): ontology to 80%, SHACL first. Spec §0.1 currently says higher-priority fleet work outranks ONT — that needs a dated
[A]amendment, because it no longer does.Row zero — the fleet cannot run the gates at all
The plan flags that the fleet
pvpin predates the shapes gate. Measured on the pinned binary, it is harder than that:extractdoes not exist and--gateis not a flag in 0.65.2. So every fleet-side SHACL gate errors; it does not report UNMEASURED. Filed as #3567 (P0), and it blocks this epic's 80% target, which is defined against the installed, fleet-pinnedpv.Correction carried here too: the 0.68.2 contract receipts (
pv extract --checkrc 0, shapesPass,armed_shapes= ont-shapes-v1 / ladder-measured / ladder-green) were produced by a HEAD-built pv 0.68.2, the right tool for that bump and no evidence at all about the fleet.One baseline, one definition of 80%
Three baselines are live across issues and specs — 7/17, 11/25, "~80%". One survives: the ledger. And 80% is redefined as probes passing on a frozen capability ledger (N fixed at a sha), run against the installed binary — not a row count, not a percentage of a moving denominator.
Current state
[C]: 25 rows, 11 bound (37%), ~1,300 contracts, 6 of 9 entity types.Breadth before depth, in this order
pmat sync) — cross-repo; needs a pmat release and a four-layer pin bump. Start the ticket now, because the pin chain is the long pole, not the code.Unknown{NotArmed}), printed bypv proof-status. Needs an operator ruling on the dependency amendment (plan decision 1).ONT-4c3 is held on
evidence/kernels/gated_rmsnorm/lambda.json; there are 0 files underevidence/kernels/today. Owner: the CUDA lane / the cuda-oxide probe (#3062).The thing that will actually stall this work
contracts/census.jsonandcontracts/lint-baseline.jsonare rewritten by ONT rows and by every PP-QUANT contract PR, against one-PR-at-a-time CI and a 62-min p95 gate. That is a rebuild storm, and the plan blocks the ontology slot until it is decided (plan decision 8): regenerate in the merge step, or serialise ONT behind slice M. Open — and it gates this epic more tightly than any technical row.Also governing:
pvis the band under every repo and ships from this one, so apvrelease is a fleet event and the pin bump follows every train that changes it (§5.12) — #3567 is a recurring obligation, not a one-off.Train-level context: #3080.
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
52 remaining items