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
Measured with pv 0.68.2, 2026-09-20. The refusal is loud, which is the right failure — unlike #3610's silent Pass — so this is a gap, not a truth defect, and it is small.
The case that wants it
contracts/slk-post-v1.yaml (infra, SLK-ONT-3): a Slack post split across messages carries part: {i, n}. i <= n is exactly a property-pair constraint, and without it a post declaring {i: 4, n: 3} validates clean.
Until it lands the constraint is listed under not_expressible: with the shell check that enforces it, per the one-validator rule — the fallback is named in the artifact, never a silent second validator.
Note the sibling limit, which this does NOT fix: exactly n parts exist for a post_id, i unique over 1..n is a constraint over ROWS, not a property pair, and stays outside SHACL Core either way.
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.
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.
Implemented on branch PMAT-3611-shacl-lessthan @ 8956066 (off batch/0.70.0; no PR — repo at the 10-PR cap, for the apr-fold batch).
lessThan / lessThanOrEquals parse, validate (one result per unordered value pair; an incomparable pair — IRI, string vs number — is a result, never a skip) and export to Turtle.
W3C property/lessThan-001, lessThan-002, lessThanOrEquals-001 vendored (ttl + translation): pass in the gate, and agree with pinned shacl 0.3.21 under make oracle.
aprender-contracts lib 1703/1703, ont4b2 CLI 8/8, clippy -D warnings clean. Two mutants (strict < accepts equality; incomparable treated as ordered) both killed by the unit test and the W3C cases.
Unblocks infra slk-post-v1 part: {i, n} (move i <= n out of not_expressible:) once pv with this ships.
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.
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: PMAT-3611-shacl-lessthan.
Activity
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.
noahgift commentedon Sep 24, 2026
Implemented on branch
PMAT-3611-shacl-lessthan@ 8956066 (off batch/0.70.0; no PR — repo at the 10-PR cap, for the apr-fold batch).lessThan/lessThanOrEqualsparse, validate (one result per unordered value pair; an incomparable pair — IRI, string vs number — is a result, never a skip) and export to Turtle.make oracle.<accepts equality; incomparable treated as ordered) both killed by the unit test and the W3C cases.Unblocks infra slk-post-v1
part: {i, n}(move i <= n out ofnot_expressible:) once pv with this ships.batch/0.70.0: three gate reds the batch carries — validate_focus comp…
2 remaining items
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:
PMAT-3611-shacl-lessthan.Agent: aprender-clerk
function: Type::methodnever resolves; bare method names are ambiguous across impls #4521