@agenticprimitives/ontology 1.0.0-alpha.46 → 1.0.0-alpha.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/cbox/controlled-vocabularies.ttl +10 -6
  2. package/cbox/interaction-shapes.shacl.ttl +22 -5
  3. package/cbox/naming-registry-shapes.shacl.ttl +38 -6
  4. package/cbox/run-provenance-shapes.shacl.ttl +10 -4
  5. package/cbox/value-rail-shapes.shacl.ttl +60 -0
  6. package/dist/artifacts.d.ts +2 -2
  7. package/dist/artifacts.d.ts.map +1 -1
  8. package/dist/artifacts.js +19 -0
  9. package/dist/artifacts.js.map +1 -1
  10. package/dist/household.d.ts.map +1 -1
  11. package/dist/household.js +7 -3
  12. package/dist/household.js.map +1 -1
  13. package/dist/index.d.ts +13 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +13 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/party-roles.d.ts.map +1 -1
  18. package/dist/party-roles.js +6 -3
  19. package/dist/party-roles.js.map +1 -1
  20. package/dist/stewardship.d.ts +34 -0
  21. package/dist/stewardship.d.ts.map +1 -0
  22. package/dist/stewardship.js +38 -0
  23. package/dist/stewardship.js.map +1 -0
  24. package/dist/transitions.d.ts +10 -1
  25. package/dist/transitions.d.ts.map +1 -1
  26. package/dist/transitions.js +12 -2
  27. package/dist/transitions.js.map +1 -1
  28. package/dist/vault-records.d.ts +33 -5
  29. package/dist/vault-records.d.ts.map +1 -1
  30. package/dist/vault-records.js +122 -96
  31. package/dist/vault-records.js.map +1 -1
  32. package/dist/versions.generated.d.ts +34 -34
  33. package/dist/versions.generated.js +33 -33
  34. package/dist/versions.generated.js.map +1 -1
  35. package/package.json +3 -3
  36. package/tbox/actor-context.ttl +1 -0
  37. package/tbox/content.ttl +5 -0
  38. package/tbox/core.ttl +34 -4
  39. package/tbox/estate.ttl +7 -1
  40. package/tbox/geo.ttl +6 -0
  41. package/tbox/household.ttl +5 -3
  42. package/tbox/identity.ttl +12 -1
  43. package/tbox/inference.ttl +7 -2
  44. package/tbox/naming.ttl +2 -2
  45. package/tbox/payload.ttl +35 -31
  46. package/tbox/payment.ttl +10 -6
  47. package/tbox/privacy-credential.ttl +21 -1
  48. package/tbox/skills.ttl +5 -0
  49. package/tbox/transition.ttl +60 -3
  50. package/tbox/values.ttl +2 -1
  51. package/versions.adoption.json +18 -0
package/tbox/core.ttl CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  ap: a owl:Ontology ;
18
18
  rdfs:label "Agentic Primitives — core ontology" ;
19
- owl:versionInfo "0.2.1" .
19
+ owl:versionInfo "0.4.0" .
20
20
 
21
21
  # ─── Classes ──────────────────────────────────────────────────────────
22
22
 
@@ -64,6 +64,13 @@ ap:ApplicationAgent a owl:Class ;
64
64
  rdfs:label "Application Agent" ;
65
65
  rdfs:comment "The prov:SoftwareAgent ROOT (wire value 'service' in AgentType / atl:agentKind — ADR-0046 amendment 2026-08-29). Closed root; derived types subclass it. 'Software agent' is the class; 'service' is what most of ours DO, so ServiceAgent is a derived type under this root, not the root itself." .
66
66
 
67
+ # ONT-8 (2026-11-10 review): every Smart Agent is EXACTLY one of a Person, an Organization or a Service (ADR-0046) — said
68
+ # in comments and enforced by a product-repo doctor rule (`demo-person-org-distinct`), but the T-box admitted an agent
69
+ # typed as two roots. The three roots are pairwise disjoint; every derived type inherits it (a team is never a person,
70
+ # a treasury never an organization — the same fact appr:ValueHolder states for value).
71
+ [] a owl:AllDisjointClasses ;
72
+ owl:members ( ap:PersonAgent ap:OrganizationAgent ap:ApplicationAgent ) .
73
+
67
74
  ap:ServiceAgent a owl:Class ;
68
75
  rdfs:subClassOf ap:ApplicationAgent ;
69
76
  rdfs:label "Service Agent" ;
@@ -190,7 +197,7 @@ ap:agentType a owl:ObjectProperty ;
190
197
  rdfs:label "agentType" ;
191
198
  rdfs:domain ap:Agent ;
192
199
  rdfs:range skos:Concept ;
193
- rdfs:comment "The DERIVED agent type (ap:agentTypeScheme, cbox — 7 values: person org team service workspace treasury registry). On-chain: atl:agentType on the SA subject (AgentProfileResolver, written by the SA itself, survives name changes). Distinct from ap:agentKind (the 3-value root scheme on the NAME node). The projection term external directory entries (ARD, A2A extension) carry. rootClassFor: team→org; service|workspace|treasury|registry→service. A suffix is checked AGAINST this record; it never overrides it." .
200
+ rdfs:comment "The DERIVED agent type (ap:agentTypeScheme, cbox — 10 values: person org team service workspace treasury registry church circle household). On-chain: atl:agentType on the SA subject (AgentProfileResolver, written by the SA itself, survives name changes). Distinct from ap:agentKind (the 3-value root scheme on the NAME node). The projection term external directory entries (ARD, A2A extension) carry. rootClassFor: team|church|circle|household→org; service|workspace|treasury|registry→service. A suffix is checked AGAINST this record; it never overrides it." .
194
201
 
195
202
  ap:serviceRole a owl:DatatypeProperty ;
196
203
  rdfs:label "serviceRole" ;
@@ -264,6 +271,15 @@ ap:revokes a owl:ObjectProperty ;
264
271
  rdfs:label "revokes" ;
265
272
  rdfs:comment "A two-sided (or labelled-unilateral) revocation of a relationship credential, written to both vaults; the departing party keeps her copy and the revocation, never the organization's records." .
266
273
 
274
+ # The OVERSIGHT DELEGATION itself — what makes a wire evidence of stewardship (audit 2026-11-10 RUNC-1, spec 445).
275
+ # Until this class existed "is this a stewardship wire" was answered by what the wire was NOT (no record scope), and a
276
+ # payment mandate or a message grant from the same organization is also not that. Named so the recogniser binds to
277
+ # what the wire IS: `OVERSIGHT_DELEGATION` in `src/stewardship.ts` lists the caveat kinds, and nothing else passes.
278
+ ap:OversightDelegation a owl:Class ;
279
+ rdfs:subClassOf prov:Entity ;
280
+ rdfs:label "OversightDelegation" ;
281
+ rdfs:comment "The delegation an organization-class or service-class agent signs to the person who stewards it (spec 246): time-boxed (the timestamp caveat is REQUIRED — a wire with no time box is not one; src/stewardship.ts, ONT-7), moving no value, and pinned to the GOVERNANCE contracts of its estate (the relationship registry and the name registry) — and carrying no other caveat. Its digest is ap:stewardshipDelegation. What it is NOT: a payment mandate (targets an asset, names methods), a message grant (targets an agent, names methods), a data grant (carries a vault-record scope), or any delegation that merely comes from the organization — being delegated SOMETHING by an organization is not stewarding it. A wire with a caveat this class does not name is not one." .
282
+
267
283
  ap:steward a owl:ObjectProperty ;
268
284
  rdfs:domain ap:Stewardship ; rdfs:range ap:PersonAgent ;
269
285
  rdfs:label "steward" ;
@@ -277,6 +293,14 @@ ap:stewardshipDelegation a owl:DatatypeProperty ;
277
293
  rdfs:label "stewardshipDelegation" ;
278
294
  rdfs:comment "The digest of the oversight delegation that evidences the stewardship (spec 246) — the record, not the authority." .
279
295
 
296
+ # HELD AND NEVER TOLD (audit 2026-11-10 REM-2, spec 445). The vault holds some records for code to USE — a seed
297
+ # identifiers derive from, key material, a blind, a credential made to be proved about — and a question about the
298
+ # vault is answered by a model. Without a class for them they were ordinary things, and a question could open them.
299
+ ap:HeldSecret a owl:Class ;
300
+ rdfs:subClassOf prov:Entity ;
301
+ rdfs:label "HeldSecret" ;
302
+ rdfs:comment "A vault record whose content is material to be USED and never TOLD: a secret other identifiers derive from, key material, a commitment's blind, a credential whose point is that only predicates about it are disclosed. The role a vault-record binding gives such a record (`role: 'secret'`, src/vault-records.ts): not listed to a question, not opened by one, not passed to an answer composer or a model provider — for its owner as much as anyone. What it is NOT: a statement about who may read the record (the delegation decides that, per record, ADR-0041), a claim that the record is encrypted differently, or a reason to keep it out of the vault (losing one is a bereavement, ADR-0055)." .
303
+
280
304
  ap:CustodyMember a owl:Class ;
281
305
  rdfs:label "CustodyMember" ;
282
306
  rdfs:comment """One opaque, public, chain-reproducible token standing for the fact that a credential
@@ -302,7 +326,10 @@ ap:CustodyMember a owl:Class ;
302
326
  ap:primaryPayee a owl:ObjectProperty ;
303
327
  rdfs:label "primaryPayee" ;
304
328
  rdfs:domain ap:Agent ;
305
- rdfs:range ap:Agent ;
329
+ # ONT-4 (2026-11-10 review): the range is a TREASURY — assets live only in treasuries (appr:ValueHolder ≡
330
+ # ap:Treasury, spec 373 / 420). It read ap:Agent, so a resolver built from the T-box alone could land on a
331
+ # person (the 2026-09-08 `carol.me` payment). The domain stays any agent: whose preference it is.
332
+ rdfs:range ap:Treasury ;
306
333
  rdfs:comment """The agent this one wants to be PAID INTO — "when someone sends me money, it goes here".
307
334
  An agent may hold several treasuries; only its owner knows which is the one to receive, and until
308
335
  this existed a payer had to guess or be asked, which put the choice on the wrong person entirely.
@@ -320,7 +347,10 @@ ap:primaryPayee a owl:ObjectProperty ;
320
347
  ap:primaryPayer a owl:ObjectProperty ;
321
348
  rdfs:label "primaryPayer" ;
322
349
  rdfs:domain ap:Agent ;
323
- rdfs:range ap:Agent ;
350
+ # ONT-4 (2026-11-10 review): the range is a TREASURY — assets live only in treasuries (appr:ValueHolder ≡
351
+ # ap:Treasury, spec 373 / 420). It read ap:Agent, so a resolver built from the T-box alone could land on a
352
+ # person (the 2026-09-08 `carol.me` payment). The domain stays any agent: whose preference it is.
353
+ rdfs:range ap:Treasury ;
324
354
  rdfs:comment """The account this agent USUALLY PAYS FROM — "when I send money, take it from here".
325
355
 
326
356
  The mirror of ap:primaryPayee, and the half that was missing. The ontology could say which of
package/tbox/estate.ttl CHANGED
@@ -29,7 +29,7 @@
29
29
 
30
30
  apest: a owl:Ontology ;
31
31
  rdfs:label "Agentic Primitives — estate projection" ;
32
- owl:versionInfo "0.1.0" ;
32
+ owl:versionInfo "0.2.0" ;
33
33
  rdfs:comment "What an estate vouches for on neutral ground, and the opening it keeps for the holder. Spec 410 §4." .
34
34
 
35
35
  apest:ProjectionSubmission a owl:Class ;
@@ -47,6 +47,12 @@ apest:vouchedDigest a owl:DatatypeProperty ;
47
47
  rdfs:label "vouched digest" ;
48
48
  rdfs:comment "The 32-byte thing vouched for: the delegation hash in the live-grant set, the relationship credential digest in the membership set. Named in the estate's record and never on public ground — the tree carries only its blinded commitment." .
49
49
 
50
+ # ONT-2 (2026-11-10 review): the record that carries the blind is a held secret, in its own class.
51
+ apest:HeldProjectionSubmission a owl:Class ;
52
+ rdfs:subClassOf apest:ProjectionSubmission , ap:HeldSecret ;
53
+ rdfs:label "HeldProjectionSubmission" ;
54
+ rdfs:comment "THE ESTATE'S HELD COPY of a submission, WITH ITS BLIND (`federation.projection-submission:`): the opening that, with the digest, reproduces the leaf's commitment. Held and never told — the blind is the one value here that exists nowhere else, and a question that opened the record would hand it to a model. What it is NOT: the commitment (keccak256(digest ‖ blind), public on neutral ground), the projection's roots, or a statement about who may read the record (spec 277)." .
55
+
50
56
  apest:leafBlind a owl:DatatypeProperty ;
51
57
  rdfs:domain apest:ProjectionSubmission ; rdfs:range xsd:string ;
52
58
  rdfs:label "leaf blind" ;
package/tbox/geo.ttl CHANGED
@@ -5,10 +5,16 @@
5
5
  # skill↔geo mapping.
6
6
 
7
7
  @prefix apg: <https://agenticprimitives.dev/ns/geo#> .
8
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
8
9
  @prefix ap: <https://agenticprimitives.dev/ns/core#> .
9
10
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
10
11
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
11
12
 
13
+ # ONT-13 (2026-11-10 review): this module had no ontology header, so its manifest row carried versionInfo null.
14
+ apg: a owl:Ontology ;
15
+ rdfs:label "Agentic Primitives — geo substrate (spec 251)" ;
16
+ owl:versionInfo "0.1.0" .
17
+
12
18
  apg:GeoFeature a rdfs:Class ;
13
19
  rdfs:label "GeoFeature" ;
14
20
  rdfs:comment "A versioned, PUBLIC, generic geographic feature. Anchored on chain by GeoFeatureRegistry (geometryHash + coverage/source roots + coarse bbox; exact geometry off chain via metadataURI). Neutral public geography only." .
@@ -31,6 +31,7 @@
31
31
  @prefix prov: <http://www.w3.org/ns/prov#> .
32
32
 
33
33
  aphh: a owl:Ontology ;
34
+ owl:versionInfo "0.2.0" ;
34
35
  rdfs:label "Agentic Primitives — Household" ;
35
36
  rdfs:comment "The people someone lives with, as they record it: a private-tier body whose members may be agents, with roles and family relations that let a resolver understand 'my daughter' without a directory search (spec 363 W4)." .
36
37
 
@@ -43,8 +44,9 @@ aphh:Household a owl:Class ;
43
44
 
44
45
  An ORGANIZATION in the PROV sense (a social entity with members), NOT a new agent class and not a
45
46
  new kind of Smart Agent: the trichotomy stands (ADR-0046). It may be coordinated by an agent — a
46
- `.circle` for a family that wants a shared inbox, an `.org` if it starts holding money — and it may
47
- have none at all, which is the ordinary case and must stay free.
47
+ `.circle` for a family that wants a shared inbox, or the family's own ap:HouseholdAgent (spec 368);
48
+ money it holds lives in a treasury that agent charters, never on the agent itself (spec 373) — and
49
+ it may have none at all, which is the ordinary case and must stay free.
48
50
 
49
51
  It is a RECORD ITS MEMBERS KEEP, not a global fact. Each member's vault holds their own household
50
52
  record; two records may disagree, and the resolver always says whose it read.""" .
@@ -129,7 +131,7 @@ aphh:kinRelation a owl:ObjectProperty ;
129
131
 
130
132
  aphh:householdPayee a owl:ObjectProperty ;
131
133
  owl:propertyChainAxiom ( aphh:householdMember ap:primaryPayee ) ;
132
- rdfs:domain aphh:Household ; rdfs:range ap:Agent ;
134
+ rdfs:domain aphh:Household ; rdfs:range ap:Treasury ; # ONT-4: the chain ends at an account (it read ap:Agent)
133
135
  rdfs:label "householdPayee" ;
134
136
  rdfs:comment """The accounts a household's members want paid — a member, then the account that member
135
137
  marked (ap:primaryPayee).
package/tbox/identity.ttl CHANGED
@@ -59,7 +59,7 @@ aporg:memberOf a owl:ObjectProperty ;
59
59
  rdfs:label "memberOf" ;
60
60
  rdfs:domain ap:Agent ;
61
61
  rdfs:range ap:OrganizationAgent ;
62
- rdfs:comment "An Agent is a member of an Organization Agent. Membership is informational; authority lives in custody/relationships." .
62
+ rdfs:comment "An Agent is a member of an Organization Agent. Membership is informational and authorizes nothing: authority to act for the organization is a delegation (ADR-0041) — never this edge, and never custody (see ap:CustodyMember). DERIVED and private-by-default — the governing definition is in tbox/org.ttl (true iff an active, valid, disclosable aporg:OrganizationMembership exists; never asserted globally, never projected to the public knowledge base, ADR-0040)." .
63
63
 
64
64
  # ─── At the company's door (spec 442 §11) ─────────────────────────────────────────────────────────
65
65
  # Four terms for what a person's agent IS at an external door (OAuth, HTTP-signature, checkout) and what it
@@ -78,6 +78,17 @@ ap:PairwiseSubject a owl:Class ;
78
78
  rdfs:label "PairwiseSubject" ;
79
79
  rdfs:comment "The opaque identifier a person is known by at ONE company (an OAuth issuer): HKDF over a 32-byte secret in the person's vault, salted by the issuer, so it is stable there, different everywhere else, and non-reversible to the Smart Agent, to any name or to any other company's subject without the secret (spec 442 §4; derivePairwiseSubject). It is NOT an alias of the SA, NOT a name and NOT linkable across issuers — the vocabulary carries no property from it to the person, on purpose (the same rule as appc:PairwiseAccount). Rotating the secret produces a new subject everywhere, which is the point of having one." .
80
80
 
81
+ # ONT-2 (2026-11-10 review): the SECRET a pairwise subject derives from has its own class. It was bound to
82
+ # ap:PairwiseSubject — the class of the value a company is SHOWN — so a reader reasoning from the class had nothing
83
+ # telling it the record is held and never told.
84
+ ap:PairwiseSecret a owl:Class ;
85
+ rdfs:subClassOf ap:HeldSecret ;
86
+ owl:disjointWith ap:PairwiseSubject ;
87
+ rdfs:label "PairwiseSecret" ;
88
+ rdfs:comment "The person's 32-byte secret every pairwise subject is derived from (HKDF, salted by the issuer; spec 442 §4; derivePairwiseSubject) — one per person, held in her own vault (`identity.pairwise-secret`). Read by its exact key by the derivation under its own grant; never listed to a question, never opened by one, never handed to a model. What it is NOT: a pairwise subject (ap:PairwiseSubject is the derived, disclosed-to-one-company value, and the two classes are disjoint), an identifier of any kind, or a statement about who may read the record (the delegation decides that, ADR-0041). Rotating it is a new subject everywhere." .
89
+
90
+ ap:HeldSecret owl:disjointWith ap:PairwiseSubject .
91
+
81
92
  ap:ExternalOperation a owl:Class ;
82
93
  rdfs:subClassOf prov:Entity ;
83
94
  rdfs:label "ExternalOperation" ;
@@ -23,7 +23,7 @@
23
23
 
24
24
  apinf: a owl:Ontology ;
25
25
  rdfs:label "Agentic Primitives — inference (the model gateway's records)" ;
26
- owl:versionInfo "0.2.0" ;
26
+ owl:versionInfo "0.3.0" ;
27
27
  rdfs:seeAlso <https://github.com/agentictrustlabs/ap-town/blob/master/specs/434-ap-model-gateway-and-the-town-pulse.md> ;
28
28
  rdfs:comment "Profiles, the model catalog, entitlements, inference receipts, policy changes and the estate heartbeat. Records of a town service; nothing here grants." .
29
29
 
@@ -52,7 +52,12 @@ apinf:PolicyChange a owl:Class ;
52
52
  # ─── The receipt ─────────────────────────────────────────────────────────────────────────────────────────────────────
53
53
 
54
54
  apinf:InferenceReceipt a owl:Class ;
55
- rdfs:subClassOf apix:Receipt ;
55
+ # ONT-5 (2026-11-10 review): it IS a receipt — evidence that one model call occurred (spec 434: "every call leaves a
56
+ # receipt"), never that it was authorized, which is apix:Receipt's own rule. Seated under ExecutionReceipt (work
57
+ # started, progressed or completed: one attempt ran and answered, failed or was refused) so it satisfies
58
+ # apix:ReceiptShape's "use a TYPED receipt" — a bare apix:Receipt subclass says nothing about what it proves.
59
+ # Like every receipt it must name what it attests (apix:attests — the call it records).
60
+ rdfs:subClassOf apix:ExecutionReceipt ;
56
61
  rdfs:label "InferenceReceipt" ;
57
62
  rdfs:comment "One attempt at one model under one profile version for one principal: usage, cost, latency, outcome, the policy decision that admitted it, and — when it was a declared fallback — the receipt of the attempt it replaced. Evidence that a call occurred and what it cost; never that it was authorized. No prompt or response text." .
58
63
 
package/tbox/naming.ttl CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  <https://agenticprimitives.dev/ns/naming> a owl:Ontology ;
32
32
  rdfs:label "Agentic Primitives — typed agent naming (spec 346)" ;
33
- owl:versionInfo "0.1.0" ;
33
+ owl:versionInfo "0.1.1" ;
34
34
  rdfs:comment "Typed suffixes, contextual name issuance, contextual references. A name is a facet (ADR-0006/ADR-0010): decorative, resolvable, replaceable — never the identifier and never authority." .
35
35
 
36
36
  # ─── The typed suffix ────────────────────────────────────────────────────────
@@ -39,7 +39,7 @@ apnam:tld a owl:DatatypeProperty ;
39
39
  rdfs:domain apnam:NameFacet ;
40
40
  rdfs:range xsd:string ;
41
41
  rdfs:label "tld" ;
42
- rdfs:comment "The canonical suffix; names the derived type — derivedTypeForTld. NEVER authority. Values are the prefLabels of apnam:tldScheme (cbox): me org team svc workspace treasury registry; 'ws' is an alias of 'workspace', never stored. Legacy roots (.agent, .impact) carry no tld and are exempt from apnam:TypedAgentNameShape." .
42
+ rdfs:comment "The canonical suffix; names the derived type — derivedTypeForTld. NEVER authority. Values are the prefLabels of apnam:tldScheme (cbox): me org team svc workspace treasury registry church circle; 'ws' is an alias of 'workspace', never stored. The only remaining untyped legacy root (.agent) carries no tld and is exempt from apnam:TypedAgentNameShape." .
43
43
 
44
44
  apnam:namesDerivedType a owl:ObjectProperty ;
45
45
  rdfs:domain skos:Concept ;
package/tbox/payload.ttl CHANGED
@@ -7,17 +7,20 @@
7
7
  # the caveat does not name is refused — an undeclared payload is not within it.
8
8
  #
9
9
  # THESE ARE CLASSES OF INFORMATION, NOT OF VALUES. `apval:EmailAddress` says how an argument is READ ("is this
10
- # well-formed?"); `appay:ContactEmail` says what it DISCLOSES when it leaves ("someone's address is now in the
10
+ # well-formed?"); `apload:ContactEmail` says what it DISCLOSES when it leaves ("someone's address is now in the
11
11
  # message"). One value can carry several: a free-text body may carry an email address the person typed. The
12
12
  # declaration is the ADAPTER AUTHOR's claim about the argument's kind, never an inspection of its content — a
13
13
  # classifier reading bodies for phone numbers is exactly the heuristic this vocabulary exists to replace.
14
14
  #
15
- # The one class every free-text argument carries is appay:FreeText: the person's own words, which may carry
15
+ # The one class every free-text argument carries is apload:FreeText: the person's own words, which may carry
16
16
  # anything. A mandate that permits FreeText permits what the person chose to write; a mandate that does not
17
17
  # refuses a body the planner composed. That is the honest floor, and it is why "text" arguments are declared
18
18
  # rather than left undeclared (undeclared = denied under any caveat).
19
19
 
20
- @prefix appay: <https://agenticprimitives.dev/ns/payload#> .
20
+ # ONT-10 (2026-11-10 review): this module's prefix was `appay:`, which every other file binds to …/ns/payment#; it is
21
+ # `apload:` now so one prefix names one namespace repo-wide. IRIs are UNCHANGED. The compact ids src/payload-classes.ts
22
+ # publishes (`appay:FreeText`, …) are a wire format carried by tool tables and caveats and are NOT renamed here.
23
+ @prefix apload: <https://agenticprimitives.dev/ns/payload#> .
21
24
  @prefix apval: <https://agenticprimitives.dev/ns/value#> .
22
25
  @prefix ap: <https://agenticprimitives.dev/ns/core#> .
23
26
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@@ -25,75 +28,76 @@
25
28
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
26
29
  @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
27
30
 
28
- appay: a owl:Ontology ;
31
+ apload: a owl:Ontology ;
32
+ owl:versionInfo "0.1.1" ;
29
33
  rdfs:label "Agentic Primitives — Payload classes (what a write carries)" ;
30
34
  rdfs:comment "The kinds of information an act may carry out of the estate: declared per argument by a tool's adapter, permitted by a mandate's payload-classes caveat, compared by the verifier (spec 410 §7). Classes of DISCLOSURE, not of value syntax (apval:)." .
31
35
 
32
- appay:PayloadClass a owl:Class ;
36
+ apload:PayloadClass a owl:Class ;
33
37
  rdfs:label "PayloadClass" ;
34
38
  rdfs:comment "A kind of information a write may carry. Every payload class is a subclass; a caveat names subclasses, never this root (naming the root would permit everything, which is the absence of a caveat said twice)." .
35
39
 
36
- appay:FreeText a owl:Class ;
37
- rdfs:subClassOf appay:PayloadClass ;
40
+ apload:FreeText a owl:Class ;
41
+ rdfs:subClassOf apload:PayloadClass ;
38
42
  rdfs:label "FreeText" ;
39
43
  rdfs:comment "The person's own words, or a body composed on their behalf: may carry anything. The floor every text argument declares. A mandate that does not permit it refuses composed bodies." .
40
44
 
41
- appay:CredentialClaims a owl:Class ;
42
- rdfs:subClassOf appay:PayloadClass ;
45
+ apload:CredentialClaims a owl:Class ;
46
+ rdfs:subClassOf apload:PayloadClass ;
43
47
  rdfs:label "CredentialClaims" ;
44
48
  rdfs:comment "Claim values an organization VOUCHES FOR leave with the write, inside a credential it issues to a member (spec 444) — an age, a membership flag. Attributes about a person, written into a credential the person then holds; a mandate that permits only MembershipTerms does not permit them." .
45
49
 
46
- appay:ContactEmail a owl:Class ;
47
- rdfs:subClassOf appay:PayloadClass ;
50
+ apload:ContactEmail a owl:Class ;
51
+ rdfs:subClassOf apload:PayloadClass ;
48
52
  rdfs:label "ContactEmail" ;
49
53
  rdfs:comment "Someone's email address leaves with the write (an invitation carrying it; a message body that names one)." .
50
54
 
51
- appay:ContactPhone a owl:Class ;
52
- rdfs:subClassOf appay:PayloadClass ;
55
+ apload:ContactPhone a owl:Class ;
56
+ rdfs:subClassOf apload:PayloadClass ;
53
57
  rdfs:label "ContactPhone" ;
54
58
  rdfs:comment "Someone's phone number leaves with the write." .
55
59
 
56
- appay:PostalAddress a owl:Class ;
57
- rdfs:subClassOf appay:PayloadClass ;
60
+ apload:PostalAddress a owl:Class ;
61
+ rdfs:subClassOf apload:PayloadClass ;
58
62
  rdfs:label "PostalAddress" ;
59
63
  rdfs:comment "Where someone lives or receives mail leaves with the write." .
60
64
 
61
- appay:EventDetails a owl:Class ;
62
- rdfs:subClassOf appay:PayloadClass ;
65
+ apload:EventDetails a owl:Class ;
66
+ rdfs:subClassOf apload:PayloadClass ;
63
67
  rdfs:label "EventDetails" ;
64
68
  rdfs:comment "When and where a gathering happens, and its title — what an invitation or a calendar entry carries." .
65
69
 
66
- appay:GivingHistory a owl:Class ;
67
- rdfs:subClassOf appay:PayloadClass ;
70
+ apload:GivingHistory a owl:Class ;
71
+ rdfs:subClassOf apload:PayloadClass ;
68
72
  rdfs:label "GivingHistory" ;
69
73
  rdfs:comment "What someone has given, to whom, when — a treasury's or a person's giving records." .
70
74
 
71
- appay:Money a owl:Class ;
72
- rdfs:subClassOf appay:PayloadClass ;
75
+ apload:Money a owl:Class ;
76
+ rdfs:subClassOf apload:PayloadClass ;
73
77
  rdfs:label "Money" ;
74
78
  rdfs:comment "Value moves with the write: an amount of an asset. The AMOUNT is bounded by the spend policy and the value caveat; this class says only that the write is a transfer, so a payload caveat that omits it refuses a payment outright." .
75
79
 
76
- appay:File a owl:Class ;
77
- rdfs:subClassOf appay:PayloadClass ;
80
+ apload:File a owl:Class ;
81
+ rdfs:subClassOf apload:PayloadClass ;
78
82
  rdfs:label "File" ;
79
83
  rdfs:comment "A document or attachment leaves with the write, whatever it contains — the file's own classes are not inspected." .
80
84
 
81
- appay:MembershipTerms a owl:Class ;
82
- rdfs:subClassOf appay:PayloadClass ;
85
+ apload:MembershipTerms a owl:Class ;
86
+ rdfs:subClassOf apload:PayloadClass ;
83
87
  rdfs:label "MembershipTerms" ;
84
88
  rdfs:comment "The terms of a membership or a household relation (a role, a kinship word) leave with the write." .
85
89
 
86
- appay:PersonalPreference a owl:Class ;
87
- rdfs:subClassOf appay:PayloadClass ;
90
+ apload:PersonalPreference a owl:Class ;
91
+ rdfs:subClassOf apload:PayloadClass ;
88
92
  rdfs:label "PersonalPreference" ;
89
93
  rdfs:comment "Something the person wants remembered about how they are answered, what they call things, when their routines run — written into their own agent's records." .
90
94
 
91
- appay:Instruction a owl:Class ;
92
- rdfs:subClassOf appay:PayloadClass ;
95
+ apload:Instruction a owl:Class ;
96
+ rdfs:subClassOf apload:PayloadClass ;
93
97
  rdfs:label "Instruction" ;
94
98
  rdfs:comment "A standing instruction or a routine's rule: words that will shape future acts, written into the agent's own records." .
95
99
 
96
- appay:CodeChange a owl:Class ;
97
- rdfs:subClassOf appay:PayloadClass ;
100
+ apload:CodeChange a owl:Class ;
101
+ rdfs:subClassOf apload:PayloadClass ;
98
102
  rdfs:label "CodeChange" ;
99
103
  rdfs:comment "Source files or a pull request leave with the write — a build artifact, a PR body." .
package/tbox/payment.ttl CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  appay: a owl:Ontology ;
16
16
  rdfs:label "Agentic Primitives — payment ontology" ;
17
- owl:versionInfo "0.1.0" ;
17
+ owl:versionInfo "0.2.0" ;
18
18
  rdfs:comment "Layer 9b of the spine. PaymentMandate + ContextBinding + MandateConstraints + Mode discrimination + PaymentReceipt." .
19
19
 
20
20
  # ─── Core classes ─────────────────────────────────────────────────────
@@ -36,7 +36,7 @@ appay:ClosedPaymentMandate a owl:Class ;
36
36
  appay:PaymentReceipt a owl:Class ;
37
37
  rdfs:subClassOf apvc:VerifiableCredential ;
38
38
  rdfs:label "PaymentReceipt" ;
39
- rdfs:comment "Immutable VC issued by rail executor on successful redemption. Asserted to AttestationRegistry; PMT-INV-11: no revoke entrypoint." .
39
+ rdfs:comment "Immutable VC issued by rail executor on successful redemption. Asserted to AttestationRegistry; PMT-INV-11: no revoke entrypoint. What it is NOT (ONT-6, 2026-11-10 review): the record a payment leaves with both parties — that is apix:PaymentReceipt (`payment.receipt:*`), the one class a payment transition establishes and goal regression reads. Same English word, two artifacts: this one is the rail's credential." .
40
40
 
41
41
  appay:MandateConstraints a owl:Class ;
42
42
  rdfs:label "MandateConstraints" ;
@@ -52,15 +52,19 @@ appay:PaymentRail a owl:Class ;
52
52
 
53
53
  # ─── Properties ───────────────────────────────────────────────────────
54
54
 
55
+ # ONT-4 (2026-11-10 review): a mandate names the ACCOUNTS — the treasury funds leave and the treasury they reach —
56
+ # never their owners. The owner who signs is appay:granter. Ranges read ap:Agent until 2026-11-10.
55
57
  appay:payer a owl:ObjectProperty ;
56
58
  rdfs:domain appay:PaymentMandate ;
57
- rdfs:range ap:Agent ;
58
- rdfs:label "payer" .
59
+ rdfs:range ap:Treasury ;
60
+ rdfs:label "payer" ;
61
+ rdfs:comment "The treasury the funds leave (spec 373: value moves between treasuries; an organization or person pays from a treasury it charters). Not the person or organization that owns it — that party signs, as appay:granter. A fact the mandate states, never authority: the signature is." .
59
62
 
60
63
  appay:payee a owl:ObjectProperty ;
61
64
  rdfs:domain appay:PaymentMandate ;
62
- rdfs:range ap:Agent ;
63
- rdfs:label "payee" .
65
+ rdfs:range ap:Treasury ;
66
+ rdfs:label "payee" ;
67
+ rdfs:comment "The treasury the funds reach — a person or organization is who money is FOR, a treasury is where it GOES (spec 373; PARTY_ROLES treasury.payment.execute/payee). Pinned when the mandate is signed, never chosen after." .
64
68
 
65
69
  appay:granter a owl:ObjectProperty ;
66
70
  rdfs:domain appay:PaymentMandate ;
@@ -40,7 +40,7 @@
40
40
 
41
41
  appc: a owl:Ontology ;
42
42
  rdfs:label "Agentic Primitives — anonymous credentials" ;
43
- owl:versionInfo "0.1.0" ;
43
+ owl:versionInfo "0.2.0" ;
44
44
  rdfs:comment "Issuer-key facets, holder-bound credentials, proof requests and predicate programs, zero-knowledge presentations with their nullifiers and status, the issuer's live-credential row, the presentation mandate, and the predicate as admission evidence. Specs 304 / 305 / 442 §7.2 / 443 W5." .
45
45
 
46
46
  # ═══ The issuer side ══════════════════════════════════════════════════════════════════════════════
@@ -179,6 +179,26 @@ appc:deviceKeyThumbprint a owl:DatatypeProperty ;
179
179
  rdfs:domain appc:DeviceKey ; rdfs:range xsd:string ;
180
180
  rdfs:label "device key thumbprint" .
181
181
 
182
+ # ONT-2 (2026-11-10 review): the three things a holder keeps and never tells, each its own class under ap:HeldSecret,
183
+ # distinct from what a verifier SEES (appc:PairwiseAccount, a presentation, a thumbprint).
184
+ appc:HolderSecret a owl:Class ;
185
+ rdfs:subClassOf ap:HeldSecret ;
186
+ owl:disjointWith appc:PairwiseAccount ;
187
+ rdfs:label "HolderSecret" ;
188
+ rdfs:comment "THE SECRET THE PAIRWISE ACCOUNTS DERIVE FROM: one per holder (`credential.holder-secret:`), combined with a verifier's origin to make the account that verifier sees. Held in her vault, read by its exact key by the derivation, never listed to a question, opened by one or handed to a model. What it is NOT: a pairwise account (appc:PairwiseAccount is the derived value a door's receipt carries; the classes are disjoint), a key that signs anything, or a statement about who may read the record (ADR-0041)." .
189
+
190
+ appc:DeviceKeyMaterial a owl:Class ;
191
+ rdfs:subClassOf appc:DeviceKey , ap:HeldSecret ;
192
+ rdfs:label "DeviceKeyMaterial" ;
193
+ rdfs:comment "THE PRIVATE HALF OF A DEVICE KEY, held as a vault record (`credential.device-key:`) in a deployment that predates the managed key service. Still a appc:DeviceKey (it carries the key's thumbprint, which IS public — the identifier a credential binds), but the record also holds the material that signs, so it is held and never told. What it is NOT: the thumbprint, a managed key (whose material never reaches a vault), or permission to sign (a presentation mandate is, judged per signature)." .
194
+
195
+ appc:HeldAnonymousCredential a owl:Class ;
196
+ rdfs:subClassOf appc:AnonymousCredential , ap:HeldSecret ;
197
+ rdfs:label "HeldAnonymousCredential" ;
198
+ rdfs:comment "THE HOLDER'S OWN COPY of an anonymous credential (`credential.anonymous:`), claim values included — the thing a presentation proves predicates ABOUT without showing. Held and never told: a question that opened it would disclose exactly the claims the credential exists to keep. What it is NOT: the credential's digest (public — the issuer's live set holds it), a presentation, or the issuer's record of the issuance." .
199
+
200
+ ap:HeldSecret owl:disjointWith appc:PairwiseAccount .
201
+
182
202
  appc:PairwiseAccount a owl:Class ;
183
203
  rdfs:subClassOf prov:Entity ;
184
204
  rdfs:label "PairwiseAccount" ;
package/tbox/skills.ttl CHANGED
@@ -145,6 +145,11 @@ aps:matchedSkill a owl:ObjectProperty ;
145
145
  @prefix sh: <http://www.w3.org/ns/shacl#> .
146
146
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
147
147
 
148
+ # ONT-13 (2026-11-10 review): this module had no ontology header, so its manifest row carried versionInfo null.
149
+ aps: a owl:Ontology ;
150
+ rdfs:label "Agentic Primitives — generic skills substrate (spec 251)" ;
151
+ owl:versionInfo "0.1.0" .
152
+
148
153
  aps:Capability a owl:Class ;
149
154
  rdfs:label "Capability" ;
150
155
  rdfs:comment "The stable, provider-independent identity of an achievable OUTCOME. Not a service, not a plan, not a taxonomy term, not an execution, and not a subject domain. Its identity NEVER depends on one provider, one jurisdiction, one language, or one playbook — those are apctx: facets of a realization. A capability is not a prov:Activity: it is what COULD be achieved; an activity is an occurrence that attempted it (architecture §5)." .
@@ -14,7 +14,7 @@
14
14
 
15
15
  aptr: a owl:Ontology ;
16
16
  rdfs:label "Agentic Primitives — capability transitions" ;
17
- owl:versionInfo "0.1.0" ;
17
+ owl:versionInfo "0.2.0" ;
18
18
  rdfs:comment "Capabilities as transitions between situations, with authority as a precondition and evidence as the proof (spec 420 §2). Bound by IRI from packages/ontology/src/transitions.ts." .
19
19
 
20
20
  aptr:CapabilityTransition a owl:Class ;
@@ -34,9 +34,13 @@ aptr:StandingPrecondition a owl:Class ; rdfs:subClassOf aptr:Precondition ;
34
34
  rdfs:comment "The asker's derived standing (self · steward · member) at the agent an argument names. A standing the asker lacks makes the step unauthorizable — named before any signature is asked for, and never acted around." .
35
35
 
36
36
  aptr:establishes a owl:ObjectProperty ;
37
- rdfs:domain aptr:CapabilityTransition ; rdfs:range apsit:Situation ;
37
+ # ONT-6 (2026-11-10 review): the range read apsit:Situation, but six of the nine transitions establish something
38
+ # else — an invitation and a payment receipt (entities), a message event (an activity), a chartered team, treasury
39
+ # or household (agents). And the value is a CLASS (`establishes.situation` in transitions.ts names a T-box class),
40
+ # not an instance. So the range is owl:Class: the KIND of thing the act brings about.
41
+ rdfs:domain aptr:CapabilityTransition ; rdfs:range owl:Class ;
38
42
  rdfs:label "establishes" ;
39
- rdfs:comment "The situation this capability brings about (with role bindings from its arguments). A SUBMISSION establishes the proposal (an invitation), never the outcome the other party still has to bring about (a membership)." .
43
+ rdfs:comment "The CLASS of what this capability brings about, with role bindings from its arguments: a situation (apsit:Situation subclass — a membership), an entity (an invitation; apix:PaymentReceipt, the record a payment leaves with both parties), an event (a message), or a chartered agent class (a team, a treasury, a household, under `roles.parent`). Goal regression asks whether an instance of it is present in the record. A SUBMISSION establishes the proposal (an invitation), never the outcome the other party still has to bring about (a membership). What it is NOT: an assertion that the act is permitted." .
40
44
 
41
45
  aptr:requires a owl:ObjectProperty ;
42
46
  rdfs:domain aptr:CapabilityTransition ; rdfs:range aptr:Precondition ;
@@ -61,3 +65,56 @@ aptr:evidence a owl:DatatypeProperty ;
61
65
  rdfs:domain aptr:CapabilityTransition ; rdfs:range xsd:string ;
62
66
  rdfs:label "evidence" ;
63
67
  rdfs:comment "What proves the effect landed, by kind: chain-edge (an ACTIVE relationship edge) · countersigned-credential (both parties' vaults) · receipt (the counterparty's) · transfer (an on-chain token event) · own-record (the asker's own vault). Read back by spec 420 W4 before 'done'." .
68
+
69
+ # ─── Preconditions, fully stated (ONT-6, 2026-11-10 review) ───────────────────────────────────────────────────────────
70
+ # The fields of CapabilityTransitionV1 that carry "authority as a precondition" — authority, standing, at, of, in — bound
71
+ # to nothing, and aptr:StandingPrecondition had no properties, so "requires a steward at the org" and "requires a mandate
72
+ # of this kind" could not be SAID in the ontology. Each field now has a term. Still behaviour, never authority: no
73
+ # verifier reads these; they let a plan name, before any signature is asked for, the authority a step would need.
74
+
75
+ aptr:situation a owl:ObjectProperty ;
76
+ rdfs:domain aptr:SituationPrecondition ; rdfs:range owl:Class ;
77
+ rdfs:label "situation" ;
78
+ rdfs:comment "The class of situation the precondition reads (`situation` in transitions.ts) — e.g. aporg:OrganizationMembership." .
79
+
80
+ aptr:of a owl:DatatypeProperty ;
81
+ rdfs:domain aptr:SituationPrecondition ; rdfs:range xsd:string ;
82
+ rdfs:label "of" ;
83
+ rdfs:comment "The argument naming the situation's SUBJECT (the member a membership is of)." .
84
+
85
+ aptr:in a owl:DatatypeProperty ;
86
+ rdfs:domain aptr:SituationPrecondition ; rdfs:range xsd:string ;
87
+ rdfs:label "in" ;
88
+ rdfs:comment "The argument naming the situation's CONTEXT party (the organization a membership is in). Absent: any context." .
89
+
90
+ aptr:StandingLevel a owl:Class ;
91
+ rdfs:label "StandingLevel" ;
92
+ rdfs:comment "A derived standing an asker may hold at an agent: self (it is her own agent), steward (she stewards it — custody, charter or an oversight delegation), member (she is a member of it). Derived from the record (packages/context deriveStanding), never asserted by the asker." .
93
+ aptr:self a aptr:StandingLevel ; rdfs:label "self" .
94
+ aptr:steward a aptr:StandingLevel ; rdfs:label "steward" .
95
+ aptr:member a aptr:StandingLevel ; rdfs:label "member" .
96
+
97
+ aptr:standing a owl:ObjectProperty ;
98
+ rdfs:domain aptr:StandingPrecondition ; rdfs:range aptr:StandingLevel ;
99
+ rdfs:label "standing" ;
100
+ rdfs:comment "The standing the asker must hold (`standing` in transitions.ts). Lacking it makes the step unauthorizable — named before any signature, never acted around." .
101
+
102
+ aptr:at a owl:DatatypeProperty ;
103
+ rdfs:domain aptr:StandingPrecondition ; rdfs:range xsd:string ;
104
+ rdfs:label "at" ;
105
+ rdfs:comment "The argument naming the agent the standing is held AT, or `room` for the agent being asked (`at` in transitions.ts)." .
106
+
107
+ aptr:AuthorityPrecondition a owl:Class ; rdfs:subClassOf aptr:Precondition ;
108
+ rdfs:label "AuthorityPrecondition" ;
109
+ rdfs:comment "The KIND of authority artifact the step must be carried under — \"requires a mandate of type X\" (spec 420 §2). Stated so goal regression can say, before asking for any signature, what will be asked for. What it is NOT: the mandate, or a check of one — the mandate is judged per step by the verifier (ADR-0041), which never reads this." .
110
+
111
+ aptr:mandateClass a owl:ObjectProperty ;
112
+ rdfs:domain aptr:AuthorityPrecondition ; rdfs:range owl:Class ;
113
+ rdfs:label "mandateClass" ;
114
+ rdfs:comment "The class of the authority artifact required (`mandate` in transitions.ts) — e.g. apeng:Mandate, the per-intent projection of a standing delegation that the harness signs for a step. A class, not an instance." .
115
+
116
+ aptr:spendsAuthorityOf a owl:DatatypeProperty ;
117
+ rdfs:domain aptr:CapabilityTransition ; rdfs:range xsd:string ;
118
+ rdfs:label "spendsAuthorityOf" ;
119
+ rdfs:comment "The argument whose authority the act spends — the PARTY_ROLES `acting` side — or `self` for a self-acting write (`authority` in transitions.ts). Whose signature the mandate needs; never a grant of it." .
120
+
package/tbox/values.ttl CHANGED
@@ -1,6 +1,6 @@
1
1
  # T-box — WHAT AN ARGUMENT IS, when it is not a party (spec 363 W2).
2
2
  #
3
- # `PARTY_ROLES` already says what an argument's PARTY may be — a payer is a Treasury or an Organization,
3
+ # `PARTY_ROLES` already says what an argument's PARTY may be — a payer is a Treasury (spec 373: an organization pays from the treasury it charters, never from itself),
4
4
  # an invitee is a Person (or, since spec 372, a Service agent). Nothing said what the REST of an argument is, so every argument that was not an
5
5
  # agent was a string, and every branch that touched one re-invented how to read it.
6
6
  #
@@ -23,6 +23,7 @@
23
23
  @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
24
24
 
25
25
  apval: a owl:Ontology ;
26
+ owl:versionInfo "0.1.0" ;
26
27
  rdfs:label "Agentic Primitives — Argument values" ;
27
28
  rdfs:comment "The kinds of value a capability argument can hold when it is not an agent: a quantity, an asset, an address for mail, a label, a flag, a kind of agent. One term, one reader (spec 363 §3)." .
28
29
 
@@ -186,6 +186,24 @@
186
186
  "steward": "richardpedersen3@gmail.com",
187
187
  "publishedAt": "2026-10-26",
188
188
  "note": "spec 401 amended — tbox/org.ttl 0.5.0: there is no one-sided 'contact'. aporg:Contact, contactAgent, contactOf, contactRole, ContactRole and the role-* individuals are REMOVED; aporg:Friendship (two-way, between two PersonAgents, DERIVED iff both have a standing aporg:FriendshipOffer naming the other) replaces them, with FriendshipOffer (one person's own record + the grant they signed; offeredBy, offeredTo, offerGrant, offerStatus standing|withdrawn, offerWithdrawnAt), FriendType (friend, family, coach, other — declarative, every one two-way) and FriendshipState (request-sent, request-received, friends, ended — derived from the two offers). Shape: aporg:FriendshipOfferShape. Breaking for any binding to aporg:Contact."
189
+ },
190
+ {
191
+ "manifestDigest": "0xfd42411027b8d71e9f5b343b871a12612ea72fd444924e21d6ceeb1e5ea0b6fb",
192
+ "steward": "richardpedersen3@gmail.com",
193
+ "publishedAt": "2026-11-10",
194
+ "note": "spec 445 (audit 2026-11-10 RUNC-1, REM-2) — tbox/core.ttl 0.3.0, additive: ap:OversightDelegation (the delegation an organization signs to its steward — time-boxed, no value, pinned to the estate's governance contracts and carrying no other caveat; what a stewardship recogniser binds to instead of excluding other wires) and ap:HeldSecret (a vault record whose content is used and never told: the role 'secret' of a vault-record binding — not listed to, opened by, or passed on from a question). Nothing removed or renamed."
195
+ },
196
+ {
197
+ "manifestDigest": "0xc320befe674b92adb345b301519945728ee7fe3872cf2cf82464fc7f0ec980ca",
198
+ "steward": "richardpedersen3@gmail.com",
199
+ "publishedAt": "2026-11-10",
200
+ "note": "spec 445 (audit 2026-11-10 coverage gap, reviewer report 14) — ANNOTATIONS ONLY, no class, property, axiom or shape changed: tbox/naming.ttl 0.1.1 (apnam:tld comment: the retired .impact root removed — .agent is the only remaining untyped legacy root; the value list names all nine tldScheme suffixes), tbox/core.ttl 0.3.1 (ap:agentType comment: nine derived types, matching ap:agentTypeScheme), tbox/identity.ttl (aporg:memberOf comment no longer says authority lives in custody — it is a delegation, ADR-0041; points at the governing definition in org.ttl), tbox/values.ttl and tbox/household.ttl (comments no longer say an organization pays from or holds money itself — spec 373, assets live only in treasuries)."
201
+ },
202
+ {
203
+ "manifestDigest": "0x654d0c2113665b0ffca61c12e85590769404f1e9e55062bd13cecd6d96ab1a40",
204
+ "steward": "richardpedersen3@gmail.com",
205
+ "publishedAt": "2026-11-10",
206
+ "note": "spec 445 §9 decision 8 (reviewer report 14, ONT-1…ONT-8, ONT-10, ONT-11, ONT-13) — ONE release. BREAKING for bindings that read these ranges or rebind secret rows: ap:primaryPayee / ap:primaryPayer (core 0.4.0), appay:payer / appay:payee (payment 0.2.0) and aphh:householdPayee (household 0.2.0) now range over ap:Treasury (spec 373: assets live only in treasuries). ap:PersonAgent, ap:OrganizationAgent and ap:ApplicationAgent are pairwise disjoint (owl:AllDisjointClasses). Secrets get classes of their own under ap:HeldSecret: ap:PairwiseSecret (identity; disjoint from ap:PairwiseSubject), appc:HolderSecret (disjoint from appc:PairwiseAccount), appc:DeviceKeyMaterial, appc:HeldAnonymousCredential (privacy-credential 0.2.0), apest:HeldProjectionSubmission (estate 0.2.0); ap:HeldSecret disjoint from ap:PairwiseSubject and appc:PairwiseAccount; the five secret vault records rebound. apinf:InferenceReceipt ⊑ apix:ExecutionReceipt (inference 0.3.0). transition 0.2.0: aptr:establishes ranges over owl:Class; new aptr:situation, of, in, standing (aptr:StandingLevel self|steward|member), at, AuthorityPrecondition, mandateClass, spendsAuthorityOf; the payment transition establishes apix:PaymentReceipt (the vault record's class). ap:OversightDelegation comment: the timestamp caveat is REQUIRED (recogniser changed to match). payload.ttl prefix appay: → apload: (IRIs unchanged; 0.1.1). versionInfo added to actor-context, values, household, payload; ontology headers added to content, geo, skills."
189
207
  }
190
208
  ]
191
209
  }