Skip to content

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

Closed as not planned
1 of 1 issue completed

Description

@noahgift

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 --check exit 0 and pv lint contracts --gate shapes --format json Pass with unarmed_violations trending to 0 — today 0.68.2 ships armed_shapes: [ont-shapes-v1, ladder-measured, ladder-green] with 98 unarmed warnings on bound-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:

  1. amend §11 for 0.69 — a named, dated exception with the ratchet rules kept (rows may batch, arming still requires a falsifier); or
  2. keep §11 and accept that 80% arrives across 0.69–0.71 rather than in 0.69; or
  3. 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 --check rc 0 and the shapes gate Pass at 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.

Refs #3080, #3269, #3559

Activity

  1. added this to the 0.69.0 milestone on Sep 20, 2026
  2. noahgift commented on Sep 20, 2026

    @noahgift
    MemberAuthor

    Correction: the ontology slot is NOT blocked. Decision 8 is ruled (2026-09-20) and the ruling states it explicitly — the fleet pv pin bump (#3567), the pmat ticket for ONT-11, and the capability ledger touch neither contracts/census.json nor contracts/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 pv and today that binary has no extract and 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.json becomes derived (CI computes it, a guard refuses any PR diff touching it, the train is its single writer at T-0); lint-baseline.json keeps only decisions like armed_shapes while 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 except armed_shapes.

    Interim rule in force now: any PR touching either file is labelled touches-shared-contracts and merges in a queue group of one behind slice M.

  3. modified the milestones: 0.69.0, 0.70.0, 0.71.0 on Sep 20, 2026
  4. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    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

  5. modified the milestones: 0.71.0, 0.70.0 on Sep 23, 2026
  6. added
    ont-0.70Ontology spec work that must finish in 0.70 (operator 2026-09-23)
    on Sep 23, 2026
  7. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    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.

  8. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    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.

  9. 16 remaining items

  10. modified the milestones: 0.70.0, 0.71.0 on Oct 4, 2026
  11. noahgift commented on Oct 13, 2026

    @noahgift
    MemberAuthor

    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 as contract/..%2Fx, which is not an ont:Contract.

    Change.

    • 12 rows (9 in contracts/aprender/binding.yaml, 3 in contracts/binding.yaml) now name the stem. Every target contract and equation exists.
    • crates/aprender-core/build.rs: the 4 ALLOWED_GAPS keys 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.nt regenerated: 9 ..%2F IRIs 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-resolve 70 → 61; focus nodes 3876 both. pv extract contracts --check rc 0 and cargo check -p aprender-core rc 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.

  12. added
    P1High priority
    and removed
    P0Critical priority
    on Oct 14, 2026
  13. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    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.

  14. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    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

  15. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High priorityont-0.70Ontology spec work that must finish in 0.70 (operator 2026-09-23)owner:aprender-a7owner sessionsize:MK̂ 3-4 h

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions