@agenticprimitives/ontology 1.0.0-alpha.4 → 1.0.0-alpha.41

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 (183) hide show
  1. package/README.md +59 -21
  2. package/cbox/agent-facet-shapes.shacl.ttl +130 -0
  3. package/cbox/capability-catalog-shapes.shacl.ttl +284 -0
  4. package/cbox/card-projection-shapes.shacl.ttl +216 -0
  5. package/cbox/consultation-shapes.shacl.ttl +85 -0
  6. package/cbox/content-vocabulary.ttl +52 -0
  7. package/cbox/controlled-vocabularies.ttl +224 -4
  8. package/cbox/discovery-graph-shapes.shacl.ttl +284 -0
  9. package/cbox/familyoffice-shapes.shacl.ttl +92 -0
  10. package/cbox/familyoffice-vocabulary.ttl +48 -0
  11. package/cbox/geo-vocabulary.ttl +36 -0
  12. package/cbox/guidance-vocabulary.ttl +22 -0
  13. package/cbox/interaction-shapes.shacl.ttl +218 -0
  14. package/cbox/interaction-vocabulary.ttl +159 -0
  15. package/cbox/judgment-shapes.shacl.ttl +83 -0
  16. package/cbox/naming-registry-shapes.shacl.ttl +272 -0
  17. package/cbox/org-team-shapes.shacl.ttl +184 -0
  18. package/cbox/privacy-credential-shapes.shacl.ttl +187 -0
  19. package/cbox/profile-facet-vocabulary.ttl +50 -0
  20. package/cbox/registry-vocabulary.ttl +86 -0
  21. package/cbox/run-measures-shapes.shacl.ttl +59 -0
  22. package/cbox/run-provenance-shapes.shacl.ttl +264 -0
  23. package/cbox/scope-vocabulary.ttl +112 -0
  24. package/cbox/skill-grounding-vocabulary.ttl +18 -0
  25. package/cbox/skill-vocabulary.ttl +50 -0
  26. package/context.jsonld +37 -1
  27. package/dist/arg-types.d.ts +60 -0
  28. package/dist/arg-types.d.ts.map +1 -0
  29. package/dist/arg-types.js +143 -0
  30. package/dist/arg-types.js.map +1 -0
  31. package/dist/artifacts.d.ts +9 -2
  32. package/dist/artifacts.d.ts.map +1 -1
  33. package/dist/artifacts.js +153 -2
  34. package/dist/artifacts.js.map +1 -1
  35. package/dist/contact-fields.d.ts +28 -0
  36. package/dist/contact-fields.d.ts.map +1 -0
  37. package/dist/contact-fields.js +38 -0
  38. package/dist/contact-fields.js.map +1 -0
  39. package/dist/decisions.d.ts +69 -0
  40. package/dist/decisions.d.ts.map +1 -0
  41. package/dist/decisions.js +98 -0
  42. package/dist/decisions.js.map +1 -0
  43. package/dist/evaluation-context.d.ts +134 -0
  44. package/dist/evaluation-context.d.ts.map +1 -0
  45. package/dist/evaluation-context.js +136 -0
  46. package/dist/evaluation-context.js.map +1 -0
  47. package/dist/governance.d.ts +84 -0
  48. package/dist/governance.d.ts.map +1 -0
  49. package/dist/governance.js +88 -0
  50. package/dist/governance.js.map +1 -0
  51. package/dist/grounded-vocabulary.d.ts +29 -0
  52. package/dist/grounded-vocabulary.d.ts.map +1 -0
  53. package/dist/grounded-vocabulary.js +110 -0
  54. package/dist/grounded-vocabulary.js.map +1 -0
  55. package/dist/household.d.ts +19 -0
  56. package/dist/household.d.ts.map +1 -0
  57. package/dist/household.js +41 -0
  58. package/dist/household.js.map +1 -0
  59. package/dist/index.d.ts +1091 -3
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1323 -5
  62. package/dist/index.js.map +1 -1
  63. package/dist/outcomes.d.ts +47 -0
  64. package/dist/outcomes.d.ts.map +1 -0
  65. package/dist/outcomes.js +40 -0
  66. package/dist/outcomes.js.map +1 -0
  67. package/dist/participant-vocabulary.d.ts +57 -0
  68. package/dist/participant-vocabulary.d.ts.map +1 -0
  69. package/dist/participant-vocabulary.js +66 -0
  70. package/dist/participant-vocabulary.js.map +1 -0
  71. package/dist/party-roles.d.ts +115 -0
  72. package/dist/party-roles.d.ts.map +1 -0
  73. package/dist/party-roles.js +343 -0
  74. package/dist/party-roles.js.map +1 -0
  75. package/dist/payload-classes.d.ts +22 -0
  76. package/dist/payload-classes.d.ts.map +1 -0
  77. package/dist/payload-classes.js +30 -0
  78. package/dist/payload-classes.js.map +1 -0
  79. package/dist/plan-shapes.d.ts +18 -0
  80. package/dist/plan-shapes.d.ts.map +1 -0
  81. package/dist/plan-shapes.js +38 -0
  82. package/dist/plan-shapes.js.map +1 -0
  83. package/dist/principles.generated.d.ts +11 -0
  84. package/dist/principles.generated.d.ts.map +1 -0
  85. package/dist/principles.generated.js +293 -0
  86. package/dist/principles.generated.js.map +1 -0
  87. package/dist/published-works.d.ts +13 -0
  88. package/dist/published-works.d.ts.map +1 -0
  89. package/dist/published-works.js +18 -0
  90. package/dist/published-works.js.map +1 -0
  91. package/dist/relations.d.ts +44 -0
  92. package/dist/relations.d.ts.map +1 -0
  93. package/dist/relations.js +104 -0
  94. package/dist/relations.js.map +1 -0
  95. package/dist/run-measures-context.d.ts +74 -0
  96. package/dist/run-measures-context.d.ts.map +1 -0
  97. package/dist/run-measures-context.js +77 -0
  98. package/dist/run-measures-context.js.map +1 -0
  99. package/dist/run-provenance-context.d.ts +315 -0
  100. package/dist/run-provenance-context.d.ts.map +1 -0
  101. package/dist/run-provenance-context.js +323 -0
  102. package/dist/run-provenance-context.js.map +1 -0
  103. package/dist/transitions.d.ts +42 -0
  104. package/dist/transitions.d.ts.map +1 -0
  105. package/dist/transitions.js +100 -0
  106. package/dist/transitions.js.map +1 -0
  107. package/dist/vault-records.d.ts +74 -0
  108. package/dist/vault-records.d.ts.map +1 -0
  109. package/dist/vault-records.js +777 -0
  110. package/dist/vault-records.js.map +1 -0
  111. package/dist/versions.generated.d.ts +262 -0
  112. package/dist/versions.generated.d.ts.map +1 -0
  113. package/dist/versions.generated.js +318 -0
  114. package/dist/versions.generated.js.map +1 -0
  115. package/evaluation.jsonld +133 -0
  116. package/mappings/actor-context-standards.ttl +89 -0
  117. package/mappings/agent-discovery-standards.ttl +127 -0
  118. package/mappings/collaboration-crosswalk-actors.ttl +30 -0
  119. package/mappings/collaboration-crosswalk-authority.ttl +31 -0
  120. package/mappings/collaboration-crosswalk-guidance.ttl +29 -0
  121. package/mappings/collaboration-crosswalk-intent.ttl +29 -0
  122. package/mappings/collaboration-crosswalk-messaging.ttl +37 -0
  123. package/mappings/collaboration-crosswalk-organization.ttl +66 -0
  124. package/mappings/collaboration-crosswalk-protocols.ttl +49 -0
  125. package/mappings/collaboration-crosswalk-skills.ttl +50 -0
  126. package/mappings/collaboration-profile.ttl +82 -0
  127. package/mappings/commerce-engagement-crosswalk.ttl +83 -0
  128. package/mappings/spine-standards.ttl +83 -0
  129. package/package.json +31 -9
  130. package/run-measures.jsonld +34 -0
  131. package/run-provenance.jsonld +314 -0
  132. package/tbox/actor-context.ttl +145 -0
  133. package/tbox/agent-resolution.ttl +308 -0
  134. package/tbox/agreement.ttl +77 -0
  135. package/tbox/attestation.ttl +156 -0
  136. package/tbox/card-projection.ttl +350 -0
  137. package/tbox/constraints.ttl +150 -0
  138. package/tbox/contact.ttl +61 -0
  139. package/tbox/content.ttl +76 -0
  140. package/tbox/context.ttl +508 -0
  141. package/tbox/coordination.ttl +263 -0
  142. package/tbox/core.ttl +325 -7
  143. package/tbox/dcat-imports.ttl +19 -0
  144. package/tbox/discovery.ttl +273 -0
  145. package/tbox/dqv-imports.ttl +29 -0
  146. package/tbox/earl-imports.ttl +32 -0
  147. package/tbox/engagement.ttl +349 -0
  148. package/tbox/entitlement.ttl +41 -0
  149. package/tbox/estate.ttl +78 -0
  150. package/tbox/evaluation.ttl +330 -0
  151. package/tbox/execution.ttl +720 -0
  152. package/tbox/familyoffice.ttl +87 -0
  153. package/tbox/fulfillment.ttl +140 -0
  154. package/tbox/geo.ttl +28 -0
  155. package/tbox/governance.ttl +67 -0
  156. package/tbox/guidance.ttl +40 -0
  157. package/tbox/household.ttl +142 -0
  158. package/tbox/identity.ttl +133 -6
  159. package/tbox/inference.ttl +177 -0
  160. package/tbox/intents.ttl +241 -0
  161. package/tbox/interaction.ttl +297 -0
  162. package/tbox/messaging.ttl +244 -0
  163. package/tbox/naming.ttl +114 -0
  164. package/tbox/org.ttl +410 -0
  165. package/tbox/payload.ttl +94 -0
  166. package/tbox/payment.ttl +124 -0
  167. package/tbox/plan.ttl +169 -0
  168. package/tbox/principles.ttl +212 -0
  169. package/tbox/privacy-credential.ttl +436 -0
  170. package/tbox/profile.ttl +107 -0
  171. package/tbox/prov-imports.ttl +73 -0
  172. package/tbox/registry.ttl +382 -0
  173. package/tbox/resolution.ttl +108 -0
  174. package/tbox/scope.ttl +59 -0
  175. package/tbox/security-exposure.ttl +102 -0
  176. package/tbox/situation.ttl +56 -0
  177. package/tbox/skills.ttl +316 -0
  178. package/tbox/skos-imports.ttl +54 -0
  179. package/tbox/transition.ttl +63 -0
  180. package/tbox/trust.ttl +210 -0
  181. package/tbox/values.ttl +81 -0
  182. package/tbox/verification-receipt.ttl +134 -0
  183. package/versions.adoption.json +173 -0
@@ -0,0 +1,50 @@
1
+ # C-box — value spaces for the three public profile facets (spec 331; facet-registries G2/G3/G4).
2
+ #
3
+ # These are VALUE SPACES, not codelists: `atl:languages` and `atl:regions` draw from external,
4
+ # maintained registries (IANA BCP-47, ISO 3166 / GeoFeatureRegistry) that must NOT be term-copied
5
+ # into this repo (architecture invariant 11 — external schemes are ALIGNED, never copied; and a
6
+ # copied ISO list is stale the day it is written). What is declared here is the SHAPE of a legal
7
+ # value, the AUTHORITY it must be drawn from, and the MATCHING RULE — which is the part a matcher
8
+ # has to agree on and the part nobody had written down.
9
+ #
10
+ # `atl:focusAreas` is deliberately OPEN. A focus area is an emphasis in a subject domain; closing
11
+ # it would force advisors to file real specialisms under a nearest-fit code, which is precisely
12
+ # the encoding hack spec 331 removes.
13
+
14
+ @prefix approf: <https://agenticprimitives.dev/ns/profile#> .
15
+ @prefix apctx: <https://agenticprimitives.dev/ns/context#> .
16
+ @prefix apg: <https://agenticprimitives.dev/ns/geo#> .
17
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
18
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
19
+ @prefix dcterms: <http://purl.org/dc/terms/> .
20
+
21
+ # ─── Languages — BCP-47, subtag-prefix matching ─────────────────────────────
22
+
23
+ approf:LanguageValueSpace a skos:ConceptScheme ;
24
+ rdfs:label "atl:languages value space" ;
25
+ dcterms:source <https://www.rfc-editor.org/rfc/rfc5646> ;
26
+ skos:note "OPEN value space: any well-formed BCP-47 language tag, normalized LOWERCASE, comma-separated. 'es', 'en', 'pt-br', 'zh-hant'." ;
27
+ skos:scopeNote "MATCHING RULE (normative, and the reason this file exists): a query tag matches a published tag iff one is equal to the other OR is a SUBTAG PREFIX of it at a hyphen boundary. 'es' matches 'es-ES'; 'es-ES' does NOT match 'es' (the advisor declared a broader competence than was asked for, which is a match; the reverse is not). Substring comparison is FORBIDDEN — it makes 'en' match 'zh-Hant' via no meaningful relation, and lexical accident is the class of bug this migration exists to remove." ;
28
+ skos:historyNote "Registered on-chain as atl:languages in governor tx 0x53acec54d850b8a790da4feda055abf81a0c2f203c1a69d0644d1a1138a18789." .
29
+
30
+ # ─── Regions — drawn from the GeoFeatureRegistry controlled vocabulary ──────
31
+
32
+ approf:RegionValueSpace a skos:ConceptScheme ;
33
+ rdfs:label "atl:regions value space" ;
34
+ dcterms:source <https://www.iso.org/iso-3166-country-codes.html> ;
35
+ skos:related apg:geoKind ;
36
+ skos:note "SEMI-OPEN value space: comma-separated UPPERCASE codes, each of which MUST be either (a) an ISO 3166-1 alpha-2 country code, (b) an ISO 3166-2 subdivision code, or (c) the code of a feature registered in GeoFeatureRegistry (spec 251) — which is how supranational spaces such as EU enter the space at all. 'EU,ES,ES-CT'." ;
37
+ skos:scopeNote "WHY THE GEOFEATUREREGISTRY CONSTRAINT IS LOAD-BEARING: it is what makes a later upgrade to explicit (featureId, version) references a VALUE-SPACE migration inside one predicate, rather than a new predicate plus a new projector plus a new UI (facet-registries G3, 'forward compatibility'). A code that resolves to no registered feature and no ISO entry is a conformance FAILURE, not a free-text fallback." ;
38
+ skos:scopeNote "MATCHING RULE: exact, case-normalized SET MEMBERSHIP over the parsed code list. No containment, no substring, no hierarchy walk — 'ES' does NOT match 'ES-CT' and vice versa in v1, because GeoFeatureRegistry's coverageRoot (the structure that would justify containment) is not projected into the knowledge graph. Deriving EU ⊃ ES from the string is exactly the kind of inference the substring hack made by accident; it must be earned from projected coverage data, not guessed." ;
39
+ skos:scopeNote "RELATION COLLAPSE: the five apg:geoRelation values (servesWithin, operatesIn, licensedIn, residentOf, originIn) collapse into one flat list here. Publishers SHOULD derive the published set from their servesWithin and licensedIn claims only — operatesIn, residentOf and originIn are about the advisor's own location, not about who they can serve, and publishing them here misrepresents coverage." ;
40
+ skos:historyNote "Registered on-chain as atl:regions in the same governor tx as atl:languages." .
41
+
42
+ # ─── Focus areas — deliberately open ────────────────────────────────────────
43
+
44
+ approf:FocusAreaValueSpace a skos:ConceptScheme ;
45
+ rdfs:label "atl:focusAreas value space" ;
46
+ skos:related apctx:KnowledgeDomain ;
47
+ skos:note "OPEN value space: comma-separated lowercase-hyphenated subject labels. 'modelo-720', 'forced-heirship', 'farmland'." ;
48
+ skos:scopeNote "MATCHING RULE: token-level containment in EITHER direction between a query term and a published label, contributing a CAPPED fitScore boost. This is deliberately the one lexical rule spec 331 keeps, and it is safe precisely because of the next constraint." ;
49
+ skos:scopeNote "NEVER A HARD FILTER (normative, facet-registries G4). A focus area is an emphasis, not a boundary. An agent that has not published one is UNKNOWN, not absent — and eliminating an unknown is the failure mode that made mandates.geo worse than having no geo filter at all. Any mandate that filters on focusAreas is a defect." ;
50
+ skos:scopeNote "A focus area is a subject domain (apctx:KnowledgeDomain), never a declared capability. Publishing 'farmland' here rather than in atl:skills is the concrete form of ADR-0051 in this substrate: an asset class is a thing you know ABOUT, not an outcome you can achieve." .
@@ -0,0 +1,86 @@
1
+ # C-box — registry core controlled vocabularies (spec 346 §7).
2
+ # Closed SKOS codelists mirrored by registry-kit's TS unions: AdmissionCheck (§7.2),
3
+ # RegistryLifecycleEventKind (§7.3), RegistryEntryStatusV1.current (§7.4). The .ttl is the source of
4
+ # truth; the TS unions mirror it (spec 225 drift rule — never hand-duplicate as TS arrays here).
5
+
6
+ @prefix apreg: <https://agenticprimitives.dev/ns/registry#> .
7
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
8
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
9
+
10
+ # ─── admissionCheck — the 10 steps of the admission pipeline (§7.1/§7.2) ──
11
+ # Every check produces a line in the receipt whether it passed, failed, or was NOT ATTEMPTED —
12
+ # "not verified" is a first-class outcome, never silently equal to "verified".
13
+ apreg:admissionCheckScheme a skos:ConceptScheme ;
14
+ rdfs:label "admissionCheck" ;
15
+ rdfs:comment "registry-kit AdmissionCheck: binding-proof card-bundle publication endpoint-control derived-type suffix-consistency authority-proof delegation-live claim-slot shape. A RegistrationReceipt lists each exactly once across verifiedCheck / failedCheck / notVerifiedCheck." ;
16
+ skos:hasTopConcept apreg:BindingProofCheck, apreg:CardBundleCheck, apreg:PublicationCheck,
17
+ apreg:EndpointControlCheck, apreg:DerivedTypeCheck, apreg:SuffixConsistencyCheck,
18
+ apreg:AuthorityProofCheck, apreg:DelegationLiveCheck, apreg:ClaimSlotCheck, apreg:ShapeCheck .
19
+ apreg:BindingProofCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "binding-proof" ;
20
+ rdfs:comment "verifyEntryBindingProof — the subject SA's ERC-1271 signature over registryId/entryId/subject/cardHash/claimHashes." .
21
+ apreg:CardBundleCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "card-bundle" ;
22
+ rdfs:comment "verifySignedAgentCardBundle." .
23
+ apreg:PublicationCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "publication" ;
24
+ rdfs:comment "verifyPublication — the current sequenced AgentServicePublication (spec 338)." .
25
+ apreg:EndpointControlCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "endpoint-control" ;
26
+ rdfs:comment "verifyEndpointControl." .
27
+ apreg:DerivedTypeCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "derived-type" ;
28
+ rdfs:comment "The on-chain ap:agentType / ap:serviceRole record satisfies the §2.3 invariant." .
29
+ apreg:SuffixConsistencyCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "suffix-consistency" ;
30
+ rdfs:comment "derivedTypeForTld(suffix) == agentType and rootClassForDerivedType(agentType) == the name node's agentKind." .
31
+ apreg:AuthorityProofCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "authority-proof" ;
32
+ rdfs:comment "The per-archetype authority proof (§7.1 table)." .
33
+ apreg:DelegationLiveCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "delegation-live" ;
34
+ rdfs:comment "DelegationLivenessPort — the operatedBy / charter / governor delegation is live." .
35
+ apreg:ClaimSlotCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "claim-slot" ;
36
+ rdfs:comment "Claim-slot attestations satisfy the RegistryKitProfile's required slots." .
37
+ apreg:ShapeCheck a skos:Concept ; skos:inScheme apreg:admissionCheckScheme ; skos:prefLabel "shape" ;
38
+ rdfs:comment "SHACL / shape validation of the fetched artifacts." .
39
+
40
+ # ─── lifecycleEventKind — the append-only log vocabulary (§7.3) ────────
41
+ apreg:lifecycleEventScheme a skos:ConceptScheme ;
42
+ rdfs:label "lifecycleEventKind" ;
43
+ rdfs:comment "registry-kit RegistryLifecycleEventKind. The on-chain AgentRegistryBase events remain the PUBLIC facts; the log adds the off-chain evidence chain. AGENT_REVOKED = the subject SA is compromised/retired (a 'compromised' publication)." ;
44
+ skos:hasTopConcept apreg:NAME_CLAIMED, apreg:NAME_RELEASED, apreg:CONTEXTUAL_NAME_ISSUED, apreg:CONTEXTUAL_NAME_REVOKED,
45
+ apreg:CARD_REGISTERED, apreg:CARD_UPDATED, apreg:PUBLICATION_UPDATED, apreg:DEPLOYMENT_UPDATED,
46
+ apreg:OFFERING_REGISTERED, apreg:OFFERING_WITHDRAWN,
47
+ apreg:ENTRY_REGISTERED, apreg:ENTRY_RENEWED, apreg:ENTRY_SUSPENDED, apreg:ENTRY_REVOKED, apreg:ENTRY_EXPIRED,
48
+ apreg:REVALIDATION_PASSED, apreg:REVALIDATION_FAILED, apreg:AGENT_REVOKED .
49
+ apreg:NAME_CLAIMED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "NAME_CLAIMED" .
50
+ apreg:NAME_RELEASED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "NAME_RELEASED" .
51
+ apreg:CONTEXTUAL_NAME_ISSUED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "CONTEXTUAL_NAME_ISSUED" ;
52
+ rdfs:comment "Private issuance — logged by DIGEST only (refs.issuanceDigest); the issuance record stays in the context vault." .
53
+ apreg:CONTEXTUAL_NAME_REVOKED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "CONTEXTUAL_NAME_REVOKED" .
54
+ apreg:CARD_REGISTERED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "CARD_REGISTERED" .
55
+ apreg:CARD_UPDATED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "CARD_UPDATED" .
56
+ apreg:PUBLICATION_UPDATED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "PUBLICATION_UPDATED" ;
57
+ rdfs:comment "A new AgentServicePublication sequence." .
58
+ apreg:DEPLOYMENT_UPDATED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "DEPLOYMENT_UPDATED" ;
59
+ rdfs:comment "New deployment bindings (hosts / A2A paths) on the publication." .
60
+ apreg:OFFERING_REGISTERED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "OFFERING_REGISTERED" .
61
+ apreg:OFFERING_WITHDRAWN a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "OFFERING_WITHDRAWN" .
62
+ apreg:ENTRY_REGISTERED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "ENTRY_REGISTERED" .
63
+ apreg:ENTRY_RENEWED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "ENTRY_RENEWED" .
64
+ apreg:ENTRY_SUSPENDED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "ENTRY_SUSPENDED" .
65
+ apreg:ENTRY_REVOKED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "ENTRY_REVOKED" .
66
+ apreg:ENTRY_EXPIRED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "ENTRY_EXPIRED" .
67
+ apreg:REVALIDATION_PASSED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "REVALIDATION_PASSED" .
68
+ apreg:REVALIDATION_FAILED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "REVALIDATION_FAILED" .
69
+ apreg:AGENT_REVOKED a skos:Concept ; skos:inScheme apreg:lifecycleEventScheme ; skos:prefLabel "AGENT_REVOKED" .
70
+
71
+ # ─── entryStatus — the DERIVED revalidation status (§7.4) ──────────────
72
+ # Distinct IRIs from the on-chain apreg:RegistryLifecycleStatus individuals (active / suspended /
73
+ # revoked / expired / pending in tbox/registry.ttl): that one is a public chain FACT, this one is a
74
+ # pure fold over the event history under a revalidation policy — never a hand-written flag.
75
+ apreg:entryStatusScheme a skos:ConceptScheme ;
76
+ rdfs:label "entryStatus" ;
77
+ rdfs:comment "registry-kit RegistryEntryStatusV1.current: verified stale failing suspended revoked expired. deriveEntryStatus(events, policy, now) — status is derived from history, never written by hand." ;
78
+ skos:hasTopConcept apreg:EntryVerified, apreg:EntryStale, apreg:EntryFailing, apreg:EntrySuspended, apreg:EntryRevoked, apreg:EntryExpired .
79
+ apreg:EntryVerified a skos:Concept ; skos:inScheme apreg:entryStatusScheme ; skos:prefLabel "verified" .
80
+ apreg:EntryStale a skos:Concept ; skos:inScheme apreg:entryStatusScheme ; skos:prefLabel "stale" ;
81
+ rdfs:comment "Revalidation overdue (nextDueAt passed) with no failure yet." .
82
+ apreg:EntryFailing a skos:Concept ; skos:inScheme apreg:entryStatusScheme ; skos:prefLabel "failing" ;
83
+ rdfs:comment "A revalidation check failed (e.g. a rolled-back, expired or non-active publication); policy decides suspension." .
84
+ apreg:EntrySuspended a skos:Concept ; skos:inScheme apreg:entryStatusScheme ; skos:prefLabel "suspended" .
85
+ apreg:EntryRevoked a skos:Concept ; skos:inScheme apreg:entryStatusScheme ; skos:prefLabel "revoked" .
86
+ apreg:EntryExpired a skos:Concept ; skos:inScheme apreg:entryStatusScheme ; skos:prefLabel "expired" .
@@ -0,0 +1,59 @@
1
+ # C-box — SHACL shapes for a run's MEASUREMENTS record (`run.measures:<runRef>`, spec 414 A2).
2
+ #
3
+ # A measurement is a number about a run or a step, computed from its trace alone. These shapes say what makes such a
4
+ # record valid AS EVIDENCE: each measurement is computed ON something (M1), of a DECLARED metric (M1), with a value and
5
+ # a unit (M1), generated by the measuring (M1); the record is derived from the run's provenance bundle and attributed
6
+ # (M2); and it carries NO WORDS — a measurement's only literals are its value and its unit (M3). Never permission: no
7
+ # verifier reads these shapes or the record. They run in CI over records the serializer built, and over the twins.
8
+
9
+ @prefix apeval: <https://agenticprimitives.dev/ns/evaluation#> .
10
+ @prefix dqv: <http://www.w3.org/ns/dqv#> .
11
+ @prefix prov: <http://www.w3.org/ns/prov#> .
12
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
13
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
14
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
15
+
16
+ apeval:RunMeasurementShape a sh:NodeShape ;
17
+ rdfs:label "M1 — a measurement is of a declared metric, on something, with a value, a unit and its generation" ;
18
+ sh:targetClass apeval:RunMeasurement ;
19
+ sh:property [ sh:path dqv:computedOn ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ;
20
+ sh:message "M1: a measurement is computed on nothing (dqv:computedOn) — a number about no run is not evidence (spec 414 A2)." ] ;
21
+ sh:property [ sh:path dqv:value ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:decimal ;
22
+ sh:message "M1: a measurement carries no decimal value (spec 414 A2)." ] ;
23
+ sh:property [ sh:path apeval:unit ; sh:minCount 1 ; sh:maxCount 1 ; sh:in ( "ms" "{count}" "1" ) ;
24
+ sh:message "M1: a measurement carries no unit, or one outside the declared UCUM codes (ms · {count} · 1) (spec 414 A2)." ] ;
25
+ sh:property [ sh:path prov:wasGeneratedBy ; sh:minCount 1 ; sh:class apeval:Measuring ;
26
+ sh:message "M1: a measurement names no measuring that generated it (spec 414 A2)." ] ;
27
+ sh:property [ sh:path dqv:isMeasurementOf ; sh:minCount 1 ; sh:maxCount 1 ;
28
+ sh:message "M1: a measurement names no metric (spec 414 A2)." ] ;
29
+ sh:sparql [
30
+ sh:message "M1: a measurement names a metric that is not in the declared scheme — a metric is declared once, in the T-box, and code names it by notation (spec 414 §2 rule 4)." ;
31
+ sh:select """
32
+ SELECT $this ?m WHERE {
33
+ $this <http://www.w3.org/ns/dqv#isMeasurementOf> ?m .
34
+ FILTER NOT EXISTS { ?m <http://www.w3.org/2004/02/skos/core#inScheme> <https://agenticprimitives.dev/ns/evaluation#Metrics> }
35
+ }
36
+ """ ;
37
+ ] .
38
+
39
+ apeval:RunMeasuresShape a sh:NodeShape ;
40
+ rdfs:label "M2 — the record derives from the run's bundle and is attributed" ;
41
+ sh:targetClass apeval:RunMeasures ;
42
+ sh:property [ sh:path prov:wasDerivedFrom ; sh:minCount 1 ; sh:nodeKind sh:IRI ;
43
+ sh:message "M2: the measurements derive from no run bundle — numbers about an unnamed run (spec 414 A2)." ] ;
44
+ sh:property [ sh:path prov:wasAttributedTo ; sh:minCount 1 ; sh:nodeKind sh:IRI ;
45
+ sh:message "M2: the measurements are attributed to no agent — whose record is this? (spec 414 A2)." ] .
46
+
47
+ apeval:NoWordsInMeasurementsShape a sh:NodeShape ;
48
+ rdfs:label "M3 — a measurement's only literals are its value and its unit" ;
49
+ sh:targetClass apeval:RunMeasurement ;
50
+ sh:sparql [
51
+ sh:message "M3: a measurement carries a literal other than its value and its unit — a measurement is a number, never a sentence (spec 414 §2 rule 6)." ;
52
+ sh:select """
53
+ SELECT $this ?p ?v WHERE {
54
+ $this ?p ?v .
55
+ FILTER(isLiteral(?v))
56
+ FILTER(?p NOT IN (<http://www.w3.org/ns/dqv#value>, <https://agenticprimitives.dev/ns/evaluation#unit>))
57
+ }
58
+ """ ;
59
+ ] .
@@ -0,0 +1,264 @@
1
+ # C-box — SHACL shapes for a harness run's provenance record (spec 389 W2).
2
+ #
3
+ # WHAT THESE ARE AND ARE NOT. A run's vault record (`run.provenance:<runRef>`) is a PROV graph: one
4
+ # ep-plan:ExecutionTraceBundle holding the run (apexec:ServiceExecution), its steps, what they used and
5
+ # what they generated. These shapes say what makes such a graph VALID AS EVIDENCE — a step that ended
6
+ # before it started, a completed capability step with no mandate behind it, a completed step with no
7
+ # receipt, a reference to nothing, a member missing from the bundle, a literal that carries an address —
8
+ # each is a record that reads fine today and cannot be trusted in a year.
9
+ #
10
+ # NEVER PERMISSION. Conformance does not mean the run was authorized, and a REFUSED step is fully
11
+ # shape-valid (R3 targets only COMPLETED capability steps): refusing to record a refusal would delete the
12
+ # evidence an audit most needs (ADR-0058's rule, unchanged). No verifier reads these shapes or the record
13
+ # they validate (spec 354 §1 / ADR-0041). They run in CI over records the projector built, and over the
14
+ # forged / truncated / leaking twins that must fail them.
15
+ #
16
+ # ENGINE NOTES. One sh:sparql per NodeShape (shacl-engine compiles them as one unit). sh:targetClass
17
+ # relies on the rdfs:subClassOf* closure the house harness materializes. R5 and R6 are scoped to the
18
+ # bundle's own members (`ep-plan:hasTraceElement`) so the T-box unioned into the data graph — whose
19
+ # comments legitimately quote addresses — is never in scope.
20
+
21
+ @prefix apexec: <https://agenticprimitives.dev/ns/execution#> .
22
+ @prefix apvr: <https://agenticprimitives.dev/ns/verification-receipt#> .
23
+ @prefix prov: <http://www.w3.org/ns/prov#> .
24
+ @prefix p-plan: <http://purl.org/net/p-plan#> .
25
+ @prefix ep-plan: <https://w3id.org/ep-plan#> .
26
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
27
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
28
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
29
+
30
+ # ─── R1 · temporal order ─────────────────────────────────────────────────────
31
+
32
+ apexec:ActivityTemporalOrderShape a sh:NodeShape ;
33
+ rdfs:label "R1a — an activity ends no earlier than it starts" ;
34
+ sh:targetClass prov:Activity ;
35
+ sh:sparql [
36
+ sh:message "R1: the activity ended before it started — a record with time running backwards is not evidence (spec 389 W2)." ;
37
+ sh:select """
38
+ SELECT $this ?started ?ended WHERE {
39
+ $this <http://www.w3.org/ns/prov#startedAtTime> ?started ;
40
+ <http://www.w3.org/ns/prov#endedAtTime> ?ended .
41
+ FILTER(STR(?ended) < STR(?started))
42
+ }
43
+ """ ;
44
+ ] .
45
+
46
+ apexec:RunTemporalOrderShape a sh:NodeShape ;
47
+ rdfs:label "R1b — a step ends no later than its run" ;
48
+ sh:targetClass apexec:ServiceExecution ;
49
+ sh:sparql [
50
+ sh:message "R1: a step of this run ended after the run itself ended (spec 389 W2)." ;
51
+ sh:select """
52
+ SELECT $this ?step ?stepEnd ?runEnd WHERE {
53
+ $this <https://agenticprimitives.dev/ns/execution#hasStep> ?step ;
54
+ <http://www.w3.org/ns/prov#endedAtTime> ?runEnd .
55
+ ?step <http://www.w3.org/ns/prov#endedAtTime> ?stepEnd .
56
+ FILTER(STR(?stepEnd) > STR(?runEnd))
57
+ }
58
+ """ ;
59
+ ] .
60
+
61
+ # ─── R2 · references resolve; generation is mutual ──────────────────────────
62
+
63
+ apexec:StepUsageResolvableShape a sh:NodeShape ;
64
+ rdfs:label "R2 — what a step used is in the graph; what it generated points back" ;
65
+ sh:targetClass prov:Activity ;
66
+ sh:sparql [
67
+ sh:message "R2: the activity used or generated something the graph does not describe — a reference to nothing, or a generated entity that does not name this activity as its generator (spec 389 W2)." ;
68
+ sh:select """
69
+ SELECT $this ?ref WHERE {
70
+ {
71
+ { $this <http://www.w3.org/ns/prov#used> ?ref } UNION { $this <https://agenticprimitives.dev/ns/verification-receipt#usedDelegation> ?ref }
72
+ FILTER NOT EXISTS { ?ref a ?anyType }
73
+ }
74
+ UNION
75
+ {
76
+ $this <http://www.w3.org/ns/prov#generated> ?ref .
77
+ FILTER NOT EXISTS { ?ref <http://www.w3.org/ns/prov#wasGeneratedBy> $this }
78
+ }
79
+ }
80
+ """ ;
81
+ ] .
82
+
83
+ # ─── R3 · a completed capability step ran under a mandate that allowed it ────
84
+
85
+ apexec:CapabilityStepMandateShape a sh:NodeShape ;
86
+ rdfs:label "R3 — a completed capability step presented a mandate and the verdict was allow" ;
87
+ sh:target [
88
+ sh:select """
89
+ SELECT ?this WHERE {
90
+ ?this <https://agenticprimitives.dev/ns/execution#realizesCapability> ?cap ;
91
+ <https://agenticprimitives.dev/ns/execution#completionState> <https://agenticprimitives.dev/ns/execution#Completed> .
92
+ }
93
+ """ ;
94
+ ] ;
95
+ sh:property [
96
+ sh:path apvr:usedDelegation ;
97
+ sh:minCount 1 ; sh:nodeKind sh:IRI ;
98
+ sh:message "R3: a COMPLETED capability step names no mandate (apvr:usedDelegation) — a consequential act with nothing behind it is a forged record, not a run (spec 389 W2; spec 350: every consequential step presents a mandate)." ;
99
+ ] ;
100
+ sh:property [
101
+ sh:path apexec:authorityDecision ;
102
+ sh:minCount 1 ; sh:in ( "allow" ) ;
103
+ sh:message "R3: a COMPLETED capability step records a verdict other than allow — a step that completed under a deny is a record that contradicts itself (spec 389 W2)." ;
104
+ ] .
105
+
106
+ # ─── R4 · a completed step left its receipt ──────────────────────────────────
107
+
108
+ apexec:CompletedStepReceiptShape a sh:NodeShape ;
109
+ rdfs:label "R4 — a completed step carries its receipt digest and generated its receipt" ;
110
+ sh:target [
111
+ sh:select """
112
+ SELECT ?this WHERE {
113
+ ?this <http://purl.org/net/p-plan#correspondsToStep> ?planStep ;
114
+ <https://agenticprimitives.dev/ns/execution#completionState> <https://agenticprimitives.dev/ns/execution#Completed> .
115
+ }
116
+ """ ;
117
+ ] ;
118
+ sh:property [
119
+ sh:path apexec:receiptDigest ;
120
+ sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ; sh:pattern "^0x[0-9a-f]{64}$" ;
121
+ sh:message "R4: a COMPLETED step carries no receipt digest (or not a sha256) — the receipt is the commitment to what was done; without it the step is a claim (spec 389 W2; spec 381)." ;
122
+ ] ;
123
+ sh:sparql [
124
+ sh:message "R4: a COMPLETED step generated no apexec:StepReceipt entity — the digest on the activity and the receipt in the graph must both be there (spec 389 W2)." ;
125
+ sh:select """
126
+ SELECT $this WHERE {
127
+ FILTER NOT EXISTS {
128
+ $this <http://www.w3.org/ns/prov#generated> ?r .
129
+ ?r a <https://agenticprimitives.dev/ns/execution#StepReceipt> .
130
+ }
131
+ }
132
+ """ ;
133
+ ] .
134
+
135
+ # ─── R5 · every node of the run is a member of its bundle ────────────────────
136
+
137
+ apexec:ExecutionTraceBundleMembershipShape a sh:NodeShape ;
138
+ rdfs:label "R5 — every activity, agent and entity of the run is a hasTraceElement of the bundle" ;
139
+ sh:targetClass ep-plan:ExecutionTraceBundle ;
140
+ sh:property [
141
+ sh:path prov:wasAttributedTo ;
142
+ sh:minCount 1 ; sh:nodeKind sh:IRI ;
143
+ sh:message "R5: the bundle is attributed to no agent — whose record is this? (spec 389 W2; the vault it lives in is the acting agent's)." ;
144
+ ] ;
145
+ sh:sparql [
146
+ sh:message "R5: a node of the run is not a member of its bundle (ep-plan:hasTraceElement) — a graph whose members are not listed cannot be checked for what it omits (spec 389 W2)." ;
147
+ sh:select """
148
+ SELECT $this ?node WHERE {
149
+ { ?node a <http://www.w3.org/ns/prov#Activity> } UNION { ?node a <http://www.w3.org/ns/prov#Entity> } UNION { ?node a <http://www.w3.org/ns/prov#Agent> }
150
+ FILTER(?node != $this)
151
+ FILTER NOT EXISTS { $this <https://w3id.org/ep-plan#hasTraceElement> ?node }
152
+ FILTER NOT EXISTS { ?node a <http://www.w3.org/2002/07/owl#Class> }
153
+ }
154
+ """ ;
155
+ ] .
156
+
157
+ # ─── R6 · no plaintext: no address, no long literal, among the bundle's members ─
158
+
159
+ apexec:NoPlaintextInRunProvenanceShape a sh:NodeShape ;
160
+ rdfs:label "R6 — no literal of the run carries an address or a body" ;
161
+ sh:targetClass ep-plan:ExecutionTraceBundle ;
162
+ sh:sparql [
163
+ sh:message "R6: a literal in the run's provenance carries a Smart Agent address or is long enough to be a body — the record says what was done, never what it was about; a payee is a digest away from a receipt (spec 381 §1 / spec 389 W2)." ;
164
+ sh:select """
165
+ SELECT $this ?node ?p ?v WHERE {
166
+ { $this <https://w3id.org/ep-plan#hasTraceElement> ?node } UNION { BIND($this AS ?node) }
167
+ ?node ?p ?v .
168
+ FILTER(isLiteral(?v))
169
+ FILTER(REGEX(STR(?v), "(^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{40}([^0-9a-fA-F]|$)") || STRLEN(STR(?v)) > 256)
170
+ }
171
+ """ ;
172
+ ] .
173
+
174
+ # ═══ Spec 414 A1 — the trace from the door ═══════════════════════════════════════════════════════
175
+ # Every run says how it arrived and under which variant (R9, R10) — the hard switch: a run without them
176
+ # is a record a comparison cannot place. A model call carries ids and numbers only (R8). An engagement
177
+ # names a capability of the declared scheme and an effect of the declared list (R11). R7 (a capability
178
+ # step names its SKILL.md contract) waits for the compiler to say which contract each tool came from
179
+ # (spec 415 §4.1, S1).
180
+
181
+ apexec:ModelInvocationIdsOnlyShape a sh:NodeShape ;
182
+ rdfs:label "R8 — a model invocation carries a role, and literals that are ids and numbers only" ;
183
+ sh:targetClass apexec:ModelInvocation ;
184
+ sh:property [
185
+ sh:path apexec:invocationRole ;
186
+ sh:minCount 1 ; sh:maxCount 1 ; sh:in ( "plan" "compose" "structured" ) ;
187
+ sh:message "R8: a model invocation names no role (plan | compose | structured) — a call nobody can place is noise, not evidence (spec 414 A1)." ;
188
+ ] ;
189
+ sh:sparql [
190
+ sh:message "R8: a model invocation carries a literal outside its declared facts — a prompt, a reply or a rationale has no place in the record; only ids, digests and numbers do (spec 414 §2 rule 6; spec 381 §1)." ;
191
+ sh:select """
192
+ SELECT $this ?p ?v WHERE {
193
+ $this ?p ?v .
194
+ FILTER(isLiteral(?v))
195
+ FILTER(?p NOT IN (
196
+ <https://agenticprimitives.dev/ns/execution#invocationRole>, <https://agenticprimitives.dev/ns/execution#modelId>,
197
+ <https://agenticprimitives.dev/ns/execution#modelProvider>, <https://agenticprimitives.dev/ns/execution#promptTemplateDigest>,
198
+ <https://agenticprimitives.dev/ns/execution#tokensIn>, <https://agenticprimitives.dev/ns/execution#tokensOut>,
199
+ <https://agenticprimitives.dev/ns/execution#routeReason>, <https://agenticprimitives.dev/ns/execution#endedAt>,
200
+ <https://agenticprimitives.dev/ns/execution#traceId>, <https://agenticprimitives.dev/ns/execution#spanId>,
201
+ <http://www.w3.org/ns/prov#startedAtTime>, <http://www.w3.org/ns/prov#endedAtTime>
202
+ ))
203
+ }
204
+ """ ;
205
+ ] .
206
+
207
+ apexec:RunArrivedByDoorShape a sh:NodeShape ;
208
+ rdfs:label "R9 — every run names the door it arrived by" ;
209
+ sh:targetClass apexec:ServiceExecution ;
210
+ sh:property [
211
+ sh:path apexec:arrivedBy ;
212
+ sh:minCount 1 ; sh:maxCount 1 ; sh:class apexec:Door ;
213
+ sh:message "R9: the run names no door (apexec:arrivedBy → apexec:Door) — every intent enters by one, and a trace that cannot say which is not a trace from the door (spec 414 A1)." ;
214
+ ] .
215
+
216
+ apexec:DoorKindShape a sh:NodeShape ;
217
+ rdfs:label "R9 — a door says what kind it is" ;
218
+ sh:targetClass apexec:Door ;
219
+ sh:property [
220
+ sh:path apexec:doorKind ;
221
+ sh:minCount 1 ; sh:maxCount 1 ; sh:in ( "a2a-message" "harness-ask" "routed" "trigger" "resume" "home-mcp" "channel-mention" ) ;
222
+ sh:message "R9: a door names no kind, or one outside the declared list (spec 414 A1)." ;
223
+ ] .
224
+
225
+ apexec:RunUnderVariantShape a sh:NodeShape ;
226
+ rdfs:label "R10 — every run names the variant it ran under, by digest" ;
227
+ sh:targetClass apexec:ServiceExecution ;
228
+ sh:property [
229
+ sh:path apexec:underVariant ;
230
+ sh:minCount 1 ; sh:maxCount 1 ; sh:class apexec:Variant ;
231
+ sh:message "R10: the run names no variant — without one no comparison can place it and no effectiveness reading can slice it (spec 414 §7)." ;
232
+ ] .
233
+
234
+ apexec:VariantDigestShape a sh:NodeShape ;
235
+ rdfs:label "R10 — a variant is named by a sha256 digest" ;
236
+ sh:targetClass apexec:Variant ;
237
+ sh:property [
238
+ sh:path apexec:variantDigest ;
239
+ sh:minCount 1 ; sh:maxCount 1 ; sh:pattern "^sha256:[0-9a-f]{64}$" ;
240
+ sh:message "R10: a variant carries no sha256 digest — two runs share a variant exactly when their digests are equal (spec 414 A1)." ;
241
+ ] .
242
+
243
+ apexec:CapabilityEngagementShape a sh:NodeShape ;
244
+ rdfs:label "R11 — an engagement names a declared harness capability and a declared effect" ;
245
+ sh:targetClass apexec:CapabilityEngagement ;
246
+ sh:property [
247
+ sh:path apexec:engagementEffect ;
248
+ sh:minCount 1 ; sh:maxCount 1 ; sh:class apexec:EngagementEffect ;
249
+ sh:message "R11: an engagement names no effect from the declared list (changed-plan | changed-step | no-change | refused) (spec 414 §3.2)." ;
250
+ ] ;
251
+ sh:sparql [
252
+ sh:message "R11: an engagement names a harness capability that is not in the declared scheme — a capability is declared once, in the T-box, and code stamps it by notation (spec 414 §2 rule 4)." ;
253
+ sh:select """
254
+ SELECT $this ?c WHERE {
255
+ $this <https://agenticprimitives.dev/ns/execution#ofCapability> ?c .
256
+ FILTER NOT EXISTS { ?c <http://www.w3.org/2004/02/skos/core#inScheme> <https://agenticprimitives.dev/ns/execution#HarnessCapabilities> }
257
+ }
258
+ """ ;
259
+ ] ;
260
+ sh:property [
261
+ sh:path apexec:ofCapability ;
262
+ sh:minCount 1 ; sh:maxCount 1 ;
263
+ sh:message "R11: an engagement names no harness capability (spec 414 §3.2)." ;
264
+ ] .
@@ -0,0 +1,112 @@
1
+ # C-box — AP-Scope-V1 controlled vocabularies (spec 308 / G-8). The SMALL,
2
+ # BORING, verifier-friendly scope vocabulary the article's adoption critique
3
+ # demands: closed SKOS codelists for action/resource/purpose classes, reliance
4
+ # classes, revocation modes, and value-limit kinds — plus the machine-readable
5
+ # reliance PROFILE (each RelianceClass carries its required revocation mode +
6
+ # verifier obligations as annotations).
7
+ #
8
+ # NEUTRAL substrate — no vertical vocabulary (ADR-0021). Deliberately coarse:
9
+ # abstract classes over precise values (the W3C ageOver-not-birthdate rule
10
+ # applied to agent authority). External adoption beats semantic perfection.
11
+
12
+ @prefix apscope: <https://agenticprimitives.dev/ns/scope#> .
13
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
14
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
15
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
16
+
17
+ # ─── actionClass — what KIND of act the authority covers ────────────────
18
+ apscope:actionClass a skos:ConceptScheme ;
19
+ rdfs:label "actionClass" ;
20
+ rdfs:comment "Coarse verb classes for delegated authority. A scope names classes, not tool names — tool names are per-deployment; classes are cross-party." ;
21
+ skos:hasTopConcept apscope:Read, apscope:Write, apscope:Purchase, apscope:Transfer,
22
+ apscope:Publish, apscope:Disclose, apscope:Sign, apscope:Schedule, apscope:Cancel .
23
+ apscope:Read a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "read" .
24
+ apscope:Write a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "write" .
25
+ apscope:Purchase a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "purchase" .
26
+ apscope:Transfer a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "transfer" .
27
+ apscope:Publish a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "publish" .
28
+ apscope:Disclose a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "disclose" .
29
+ apscope:Sign a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "sign" .
30
+ apscope:Schedule a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "schedule" .
31
+ apscope:Cancel a skos:Concept ; skos:inScheme apscope:actionClass ; skos:prefLabel "cancel" .
32
+
33
+ # ─── resourceClass — what KIND of thing it touches ──────────────────────
34
+ apscope:resourceClass a skos:ConceptScheme ;
35
+ rdfs:label "resourceClass" ;
36
+ skos:hasTopConcept apscope:AccountResource, apscope:PaymentResource, apscope:PiiResource,
37
+ apscope:RecordResource, apscope:BookingResource, apscope:ContentResource,
38
+ apscope:CredentialResource, apscope:ToolResource .
39
+ apscope:AccountResource a skos:Concept ; skos:inScheme apscope:resourceClass ; skos:prefLabel "account" .
40
+ apscope:PaymentResource a skos:Concept ; skos:inScheme apscope:resourceClass ; skos:prefLabel "payment" .
41
+ apscope:PiiResource a skos:Concept ; skos:inScheme apscope:resourceClass ; skos:prefLabel "pii" .
42
+ apscope:RecordResource a skos:Concept ; skos:inScheme apscope:resourceClass ; skos:prefLabel "record" .
43
+ apscope:BookingResource a skos:Concept ; skos:inScheme apscope:resourceClass ; skos:prefLabel "booking" .
44
+ apscope:ContentResource a skos:Concept ; skos:inScheme apscope:resourceClass ; skos:prefLabel "content" .
45
+ apscope:CredentialResource a skos:Concept ; skos:inScheme apscope:resourceClass ; skos:prefLabel "credential" .
46
+ apscope:ToolResource a skos:Concept ; skos:inScheme apscope:resourceClass ; skos:prefLabel "tool" .
47
+
48
+ # ─── purposeClass — WHY (mirrors the DecryptGrant/entitlement purpose seam) ─
49
+ apscope:purposeClass a skos:ConceptScheme ;
50
+ rdfs:label "purposeClass" ;
51
+ skos:hasTopConcept apscope:Support, apscope:Fulfillment, apscope:Research,
52
+ apscope:Billing, apscope:Compliance .
53
+ apscope:Support a skos:Concept ; skos:inScheme apscope:purposeClass ; skos:prefLabel "support" .
54
+ apscope:Fulfillment a skos:Concept ; skos:inScheme apscope:purposeClass ; skos:prefLabel "fulfillment" .
55
+ apscope:Research a skos:Concept ; skos:inScheme apscope:purposeClass ; skos:prefLabel "research" .
56
+ apscope:Billing a skos:Concept ; skos:inScheme apscope:purposeClass ; skos:prefLabel "billing" .
57
+ apscope:Compliance a skos:Concept ; skos:inScheme apscope:purposeClass ; skos:prefLabel "compliance" .
58
+
59
+ # ─── valueLimitKind — the SHAPE of a value cap (values live in caveats) ──
60
+ apscope:valueLimitKind a skos:ConceptScheme ;
61
+ rdfs:label "valueLimitKind" ;
62
+ skos:hasTopConcept apscope:PerCall, apscope:Cumulative, apscope:Periodic, apscope:Category .
63
+ apscope:PerCall a skos:Concept ; skos:inScheme apscope:valueLimitKind ; skos:prefLabel "per-call" .
64
+ apscope:Cumulative a skos:Concept ; skos:inScheme apscope:valueLimitKind ; skos:prefLabel "cumulative" .
65
+ apscope:Periodic a skos:Concept ; skos:inScheme apscope:valueLimitKind ; skos:prefLabel "periodic" .
66
+ apscope:Category a skos:Concept ; skos:inScheme apscope:valueLimitKind ; skos:prefLabel "category" .
67
+
68
+ # ─── revocationMode — HOW currency-of-authority is checked (ONE per class) ─
69
+ apscope:revocationMode a skos:ConceptScheme ;
70
+ rdfs:label "revocationMode" ;
71
+ rdfs:comment "One required mode per reliance class (ADR-0013 — never a ladder). emergency-stop is NOT a class mode: it is an override every class honors." ;
72
+ skos:hasTopConcept apscope:ChainPull, apscope:StatusList, apscope:Accumulator,
73
+ apscope:ShortLived, apscope:EmergencyStop .
74
+ apscope:ChainPull a skos:Concept ; skos:inScheme apscope:revocationMode ; skos:prefLabel "chain-pull" ;
75
+ rdfs:comment "Live on-chain read within a bounded freshness window (spec 289 chain-state)." .
76
+ apscope:StatusList a skos:Concept ; skos:inScheme apscope:revocationMode ; skos:prefLabel "status-list" ;
77
+ rdfs:comment "Signed status-list snapshot with bounded staleness (BitstringStatus tier)." .
78
+ apscope:Accumulator a skos:Concept ; skos:inScheme apscope:revocationMode ; skos:prefLabel "accumulator" ;
79
+ rdfs:comment "Cryptographic accumulator / non-revocation proof (privacy tier; W2+ suites)." .
80
+ apscope:ShortLived a skos:Concept ; skos:inScheme apscope:revocationMode ; skos:prefLabel "short-lived" ;
81
+ rdfs:comment "Expiry-over-revocation: credentials/proofs too short-lived to need a status check." .
82
+ apscope:EmergencyStop a skos:Concept ; skos:inScheme apscope:revocationMode ; skos:prefLabel "emergency-stop" ;
83
+ rdfs:comment "Principal-published stop assertion; overrides any cached status in EVERY class." .
84
+
85
+ # ─── relianceClass — with the MACHINE-READABLE verifier profile ──────────
86
+ # The article's revocation ladder, as data: each class carries its required
87
+ # mode + obligations. statusFreshnessMs 12000 = chain-state's shipped bounded
88
+ # freshness window (spec 289); 0 = a live read per call, no caching.
89
+ apscope:relianceClass a skos:ConceptScheme ;
90
+ rdfs:label "relianceClass" ;
91
+ rdfs:comment "How much a counterparty stakes on the verification. Selects the required revocation mode, freshness, and receipt duty (spec 308 profile)." ;
92
+ skos:hasTopConcept apscope:Advisory, apscope:Operational, apscope:Financial,
93
+ apscope:Regulated, apscope:SafetyCritical .
94
+ apscope:Advisory a skos:Concept ; skos:inScheme apscope:relianceClass ; skos:prefLabel "advisory" ;
95
+ apscope:requiredRevocationMode apscope:ShortLived ;
96
+ apscope:mustRetainReceipt false .
97
+ apscope:Operational a skos:Concept ; skos:inScheme apscope:relianceClass ; skos:prefLabel "operational" ;
98
+ apscope:requiredRevocationMode apscope:StatusList ;
99
+ apscope:statusFreshnessMs "300000"^^xsd:integer ;
100
+ apscope:mustRetainReceipt true .
101
+ apscope:Financial a skos:Concept ; skos:inScheme apscope:relianceClass ; skos:prefLabel "financial" ;
102
+ apscope:requiredRevocationMode apscope:ChainPull ;
103
+ apscope:statusFreshnessMs "12000"^^xsd:integer ;
104
+ apscope:mustRetainReceipt true .
105
+ apscope:Regulated a skos:Concept ; skos:inScheme apscope:relianceClass ; skos:prefLabel "regulated" ;
106
+ apscope:requiredRevocationMode apscope:ChainPull ;
107
+ apscope:statusFreshnessMs "12000"^^xsd:integer ;
108
+ apscope:mustRetainReceipt true .
109
+ apscope:SafetyCritical a skos:Concept ; skos:inScheme apscope:relianceClass ; skos:prefLabel "safety-critical" ;
110
+ apscope:requiredRevocationMode apscope:ChainPull ;
111
+ apscope:statusFreshnessMs "0"^^xsd:integer ;
112
+ apscope:mustRetainReceipt true .
@@ -0,0 +1,18 @@
1
+ # C-box — skill grounding protocol codelist (spec 325 §4.5).
2
+ # Closed SKOS scheme for aps:groundingProtocol on aps:SkillGrounding.
3
+
4
+ @prefix aps: <https://agenticprimitives.dev/ns/skill#> .
5
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
6
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
7
+
8
+ aps:groundingProtocol a skos:ConceptScheme ;
9
+ rdfs:label "groundingProtocol" ;
10
+ rdfs:comment "Protocol binding for CapabilityDefinition invocation." ;
11
+ skos:hasTopConcept aps:MCP, aps:A2A, aps:HTTP, aps:WoT, aps:Contract, aps:Local .
12
+
13
+ aps:MCP a skos:Concept ; skos:inScheme aps:groundingProtocol ; skos:prefLabel "mcp" .
14
+ aps:A2A a skos:Concept ; skos:inScheme aps:groundingProtocol ; skos:prefLabel "a2a" .
15
+ aps:HTTP a skos:Concept ; skos:inScheme aps:groundingProtocol ; skos:prefLabel "http" .
16
+ aps:WoT a skos:Concept ; skos:inScheme aps:groundingProtocol ; skos:prefLabel "wot" .
17
+ aps:Contract a skos:Concept ; skos:inScheme aps:groundingProtocol ; skos:prefLabel "contract" .
18
+ aps:Local a skos:Concept ; skos:inScheme aps:groundingProtocol ; skos:prefLabel "local" .