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

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,720 @@
1
+ # T-box — the EXECUTION plane: what actually happened (spec 330 §8, W0 remainder;
2
+ # capability-architecture.md §5). PROV-O-grounded throughout.
3
+ #
4
+ # ── Why this file exists now, and why it is SMALL ───────────────────────────────────────────────
5
+ # `cbox/capability-catalog-shapes.shacl.ttl` has shipped two realization contracts since spec 331,
6
+ # and both of them target classes that were declared NOWHERE:
7
+ # `apexec:MemberConsultationActivity`, `apexec:ConsultationSynthesisActivity`, `apexec:AgentRuntime`,
8
+ # `apexec:completionState`, `apexec:usedPlanContentHash`, `aprole:ConsultResponder`,
9
+ # `aprole:ConsultRouter`. Spec 330's checklist records the gap in as many words — "referenced by IRI
10
+ # in the contracts but not yet declared". A contract whose `sh:targetClass` names a class no module
11
+ # declares does not validate anything: it has an empty target set, and it passes by vacuity. That is
12
+ # precisely the "unenforceable contract" the catalog's own governing rule forbids.
13
+ #
14
+ # So this module declares EXACTLY the terms the shipped contracts reference, plus the one new term
15
+ # the parameterised advisory contract needs — and NOT the rest of spec 330 §8. The other twelve
16
+ # `apexec:` classes and the six environment specializations stay parked with W1, because nothing
17
+ # references them yet and a vocabulary minted ahead of a reader is the other half of the same
18
+ # mistake. When W1 lands its emission records, it extends this file; it does not rewrite it.
19
+ #
20
+ # ── The doctrine that governs everything below (architecture §2 axioms 5–6, §6) ─────────────────
21
+ # Provenance is EVIDENCE, never an authorization input. No gate may branch on an `apexec:` record.
22
+ # A role (`prov:hadRole`) is a CAPACITY, not a permission: `aprole:ConsultResponder` says what the
23
+ # runtime was doing, never that it was allowed to. Authority is delegation ∩ entitlement ∩ policy,
24
+ # evaluated at the gate at the moment of use, and it reads none of these terms.
25
+
26
+ @prefix apexec: <https://agenticprimitives.dev/ns/execution#> .
27
+ @prefix aprole: <https://agenticprimitives.dev/ns/role#> .
28
+ @prefix apcoord: <https://agenticprimitives.dev/ns/coordination#> .
29
+ @prefix ap: <https://agenticprimitives.dev/ns/core#> .
30
+ @prefix apactor: <https://agenticprimitives.dev/ns/actor#> .
31
+ @prefix aps: <https://agenticprimitives.dev/ns/skill#> .
32
+ @prefix apguide: <https://agenticprimitives.dev/ns/guidance#> .
33
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
34
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
35
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
36
+ @prefix prov: <http://www.w3.org/ns/prov#> .
37
+ @prefix dul: <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#> .
38
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
39
+ @prefix dcterms: <http://purl.org/dc/terms/> .
40
+
41
+ apexec: a owl:Ontology ;
42
+ rdfs:label "Agentic Primitives — execution ontology (W0 subset)" ;
43
+ owl:versionInfo "0.3.1" ;
44
+ rdfs:comment "The execution plane: activities that realize capabilities, the runtimes that bore responsibility, and the completion conditions that separate a realization from an attempt. W0 SUBSET — only the terms the shipped realization contracts reference. Spec 330 W1 extends it." ;
45
+ skos:scopeNote "WITHIN-AGENT plane (coordination-vs-orchestration.md). Orchestration sequences one agent's run: the executor's knowledge is local — harness-activated Agent Skill packages (apguide:AgentSkillPackage / SKILL.md, pinned by apexec:usedPlanContentHash) and injected tools — and the loop never queries naming/registry/apdisc: discovery. Distinct from apcoord: (the BETWEEN-AGENTS coordination plane); an apexec:ExecutionPlan compiles FROM an apcoord:PlanStep (plan.ttl), it never is one." .
46
+
47
+ aprole: a owl:Ontology ;
48
+ rdfs:label "Agentic Primitives — execution roles" ;
49
+ owl:versionInfo "0.1.0" ;
50
+ rdfs:comment "prov:Role individuals naming the CAPACITY an agent functioned in during an activity. A role is never an authorization (architecture §6): it answers 'what was it doing', not 'what was it allowed to do'." .
51
+
52
+ # ═══ Runtimes ═══════════════════════════════════════════════════════════════
53
+
54
+ apexec:AgentRuntime a owl:Class ;
55
+ rdfs:subClassOf prov:SoftwareAgent ;
56
+ rdfs:label "AgentRuntime" ;
57
+ rdfs:comment "The durable, IDENTIFIED runtime that bore responsibility for an activity — in this substrate, one Smart Agent's A2aTaskDO + InteractionsDO pair. NOT the environment it runs in, and NOT the model it called: a model is swapped without changing who is answerable. It `prov:actedOnBehalfOf` the ap:Agent whose authority it acted under, and that edge is what lets a realization be attributed to a party rather than to a process." .
58
+
59
+ # ═══ Activities ═════════════════════════════════════════════════════════════
60
+
61
+ apexec:ServiceExecution a owl:Class ;
62
+ rdfs:subClassOf prov:Activity , dul:Action ;
63
+ rdfs:label "ServiceExecution" ;
64
+ rdfs:comment "The externally meaningful activity that REALIZES a capability: an A2A task fulfillment, an assistant turn, an automation run. Distinct from the apful:Task that TRACKS it (architecture §2 axiom 3) and from the SkillExecutions it contains." .
65
+
66
+ apexec:SkillExecution a owl:Class ;
67
+ rdfs:subClassOf prov:Activity , dul:Action ;
68
+ rdfs:label "SkillExecution" ;
69
+ rdfs:comment "Work performed under ONE activated playbook, with a prov:qualifiedAssociation whose prov:hadPlan is that playbook. A sub-activity of a ServiceExecution, and never evidence of authority — activating a plan grants nothing (ADR-0050)." .
70
+
71
+ apexec:MemberConsultationActivity a owl:Class ;
72
+ rdfs:subClassOf apexec:SkillExecution ;
73
+ rdfs:label "MemberConsultationActivity" ;
74
+ rdfs:comment "ONE member agent's turn answering ONE routed consultation (spec 329 §3.2): it prov:used the ConsultRequestV1 and the member's own vault playbook, and prov:generated the answered-XOR-declined ConsultAnswerV1 with the actor pinned to the member. Depth-1 by construction — a member never re-routes. This is the target class of aps:MemberConsultationRealizationContract, and — when the turn carries apexec:routedOnCapability — also of the parameterised advisory contract: ONE activity, TWO realizations, which is the whole point of separating capability identity from activity type." .
75
+
76
+ apexec:ConsultationSynthesisActivity a owl:Class ;
77
+ rdfs:subClassOf apexec:ServiceExecution ;
78
+ rdfs:label "ConsultationSynthesisActivity" ;
79
+ rdfs:comment "The ORG side of a routed consultation (spec 329 §4/§6): structural eligibility, spec-281 ranking, fan-out, and the synthesis post whose attribution names each contributing member. A ServiceExecution rather than a SkillExecution because it composes several member turns plus its own playbook-guided synthesis." .
80
+
81
+ # ═══ Completion — the part that makes a contract about REALIZATION ══════════
82
+ # A capability is not a prov:Activity: the capability is what COULD be achieved, an activity is an
83
+ # occurrence that attempted it. Without a terminal state and an end time, a contract validates
84
+ # attempts and calls them realizations.
85
+
86
+ apexec:CompletionState a owl:Class ;
87
+ rdfs:subClassOf skos:Concept ;
88
+ rdfs:label "CompletionState" ;
89
+ rdfs:comment "The TERMINAL state of an activity. A closed codelist per contract (the contract pins which members it accepts with sh:in) — never an open string, because an unrecognised terminal state would read as 'not completed' in some consumers and 'completed' in others." .
90
+
91
+ apexec:Answered a apexec:CompletionState ;
92
+ rdfs:label "Answered" ;
93
+ rdfs:comment "The consulted member produced answer text attributed to itself." .
94
+
95
+ apexec:Declined a apexec:CompletionState ;
96
+ rdfs:label "Declined" ;
97
+ rdfs:comment "The consulted member explicitly declined. A CONFORMING REALIZATION, not a failure: the contract governs shape, not outcome, and treating a decline as non-realization would create an incentive to answer outside one's documented positions — the opposite of what the consult path exists for. `buildConsultAnswer` already makes answered-xor-declined structural." .
98
+
99
+ apexec:NoEligibleMember a apexec:CompletionState ;
100
+ rdfs:label "NoEligibleMember" ;
101
+ rdfs:comment "The ORG side terminated with an empty eligible set — nobody held both the consultability hint and the grant. A conforming realization of routing: correctly finding nobody is a result, and a router that hid it would be a router that guessed." .
102
+
103
+ apexec:completionState a owl:ObjectProperty ;
104
+ rdfs:domain prov:Activity ; rdfs:range apexec:CompletionState ;
105
+ rdfs:label "completionState" ;
106
+ rdfs:comment "The activity's terminal state. Required by every realization contract, together with prov:endedAtTime: an activity with neither is an attempt in progress, and crediting it as a realization is how a demonstrated-capability signal starts counting abandonments." .
107
+
108
+ # ═══ Run provenance (spec 381) — what a run's record keeps in the acting agent's vault ═══
109
+ # The durable half of a harness run: one activity per step, what it ran under, what it left. Read by
110
+ # people and auditors after the fact; consulted by no verifier (a recorded allow grants nothing).
111
+
112
+ apexec:endedAt a owl:DatatypeProperty ;
113
+ rdfs:subPropertyOf prov:endedAtTime ;
114
+ rdfs:domain prov:Activity ; rdfs:range xsd:dateTime ;
115
+ rdfs:label "endedAt" ;
116
+ rdfs:comment "When the run (or a step of it) ended — PROV's endedAtTime, named as the record field that carries it (spec 381). NOT when the record was written or exported." .
117
+
118
+ apexec:receiptDigest a owl:DatatypeProperty ;
119
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
120
+ rdfs:label "receiptDigest" ;
121
+ rdfs:comment "SHA-256 over the canonical step receipt the activity left (spec 381): a commitment to what was done — capability, authority reference, verdict, timings — that an export may carry in place of the receipt itself. NOT the receipt, NOT evidence a verifier reads, and never a digest of the arguments alone." .
122
+
123
+ apexec:usedPlanContentHash a owl:DatatypeProperty ;
124
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
125
+ rdfs:label "usedPlanContentHash" ;
126
+ rdfs:comment "The content hash of the playbook AS PINNED AT ACTIVATION — not as it reads now. LOAD-BEARING, NOT BOOKKEEPING: without it, 'which realizations must be re-examined now this playbook changed?' is unanswerable, and any demonstrated-capability signal computed over unpinned plans is unfalsifiable. Same role apdisc:cardDigest plays for a crawled advertisement." .
127
+
128
+ # ═══ The routing parameter — what an advisory realization is a realization OF ═══
129
+ #
130
+ # READ THIS BEFORE USING IT. This term is DECLARED, and is NOT EMITTED by anything today. It is the
131
+ # single datum that stands between the parameterised advisory realization contract and
132
+ # enforceability, and it is declared here so that the gap is a named, testable, one-field gap
133
+ # rather than a paragraph of prose. See cbox/capability-catalog-shapes.shacl.ttl §4.
134
+
135
+ apexec:routedOnCapability a owl:ObjectProperty ;
136
+ rdfs:subPropertyOf apexec:realizesCapability ;
137
+ rdfs:domain prov:Activity ; rdfs:range aps:Capability ;
138
+ rdfs:label "routedOnCapability" ;
139
+ rdfs:comment "The capability the ORG's routing selected this responder ON — the intersection of the question's resolved need and the responder's declared ids, which `rankConsultCandidates` already computes and then discards into a free-text evidence line. WHY IT MUST BE THE ROUTED-ON ID AND NOT MERELY A DECLARED ONE: an agent may declare up to twelve capabilities, so crediting a realization to every id it happens to declare would let one answered question realize twelve capabilities at once — turning the only assertion strength that cannot be faked by writing a string into one that can. A subproperty of apexec:realizesCapability because it is a realization claim with a stated basis, not a second kind of claim." .
140
+
141
+ # ═══ Roles — capacity, never permission ═════════════════════════════════════
142
+
143
+ aprole:ConsultResponder a prov:Role ;
144
+ rdfs:label "ConsultResponder" ;
145
+ rdfs:comment "The capacity a member's runtime functioned in while answering a routed consultation. The AUTHORITY for that turn is the consultability delegation checked at the member's gate; this term records what was done, and no gate reads it." .
146
+
147
+ aprole:ConsultRouter a prov:Role ;
148
+ rdfs:label "ConsultRouter" ;
149
+ rdfs:comment "The capacity an org's runtime functioned in while selecting members and synthesizing their attributed answers." .
150
+
151
+ # ═══ The run as a PROV graph — spec 389 ══════════════════════════════════════
152
+ #
153
+ # What a harness run's provenance record (`run.provenance:<runRef>`, the acting agent's vault) says in
154
+ # T-box terms, so that a stock PROV tool loads it and a SHACL shape can refuse a forged one. Every term
155
+ # here is EVIDENCE — read by people, auditors and the Home after the fact — and is consulted by no
156
+ # verifier: recording that a step was allowed grants nothing (spec 354 §1 / ADR-0041). Reused rather than
157
+ # re-declared: prov:*, p-plan:*, ep-plan:* (plan.ttl), apvr:usedDelegation (verification-receipt.ttl),
158
+ # apactor:ActorContext + its role properties (actor-context.ttl), apguide:AgentSkillPackage, apdel:Delegation.
159
+
160
+ apexec:hasStep a owl:ObjectProperty ;
161
+ rdfs:domain apexec:ServiceExecution ; rdfs:range prov:Activity ;
162
+ rdfs:label "hasStep" ;
163
+ rdfs:comment "The run CONTAINS this step activity. PROV has no containment relation between activities (wasInformedBy is communication, not nesting), and reading step order off wasInformedBy would make a fan-out look sequential. Order lives on the plan (p-plan:isPrecededBy between the p-plan:Steps each activity correspondsToStep); this says only which run a step belongs to." .
164
+
165
+ apexec:actorContext a owl:ObjectProperty ;
166
+ rdfs:domain prov:Activity ; rdfs:range apactor:ActorContext ;
167
+ rdfs:label "actorContext" ;
168
+ rdfs:comment "Who acted, for whom, and who started it, on THIS hop (spec 383): the apactor:ActorContext entity carrying actingAgent / originatingAgent / rootPrincipal. Context, never authority — the accountability root is the verified chain's root delegator (apexec:accountabilityRoot), not restated here." .
169
+
170
+ apexec:delegatedToAgent a owl:ObjectProperty ;
171
+ rdfs:domain prov:Activity ; rdfs:range ap:Agent ;
172
+ rdfs:label "delegatedToAgent" ;
173
+ rdfs:comment "The agent a step was HANDED TO (spec 376): its run is a child of this one under a child mandate cut from the parent's. Distinct from apactor:delegatedTo, which relates two SubjectRefs inside an actor context; this relates an activity to the agent whose bundle it prov:wasInformedBy." .
174
+
175
+ apexec:runRef a owl:DatatypeProperty ;
176
+ rdfs:domain apexec:ServiceExecution ; rdfs:range xsd:string ;
177
+ rdfs:label "runRef" ;
178
+ rdfs:comment "The run's reference — the key its record, its progress lines and its spans are kept under, and the string a done reply and a task artifact cite (hasProvenance). An identifier, never a digest of anything." .
179
+
180
+ apexec:intentDigest a owl:DatatypeProperty ;
181
+ rdfs:domain apexec:ServiceExecution ; rdfs:range xsd:string ;
182
+ rdfs:label "intentDigest" ;
183
+ rdfs:comment "keccak256 of the ExecutionIntent (goal + context) the run served — the same digest the mandate's caveat binds (spec 336 §8.3). The record carries the digest so a reader can match a mandate to a run; it never carries the goal's words (spec 381 §1)." .
184
+
185
+ apexec:authorityDecision a owl:DatatypeProperty ;
186
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
187
+ rdfs:label "authorityDecision" ;
188
+ rdfs:comment "What the verifier decided for this step — `allow` or `deny` — AS RECORDED. A recorded allow is history, not permission: a replay re-derives the verdict against the chain as it is now (spec 370 P6), and no gate reads this field." .
189
+
190
+ apexec:afterApproval a owl:DatatypeProperty ;
191
+ rdfs:domain prov:Activity ; rdfs:range xsd:boolean ;
192
+ rdfs:label "afterApproval" ;
193
+ rdfs:comment "True when the verdict was taken AFTER a human approval (a suspended step resumed with the person's signature) — the second verification spec 350 requires, so an approval is never mistaken for the verdict itself." .
194
+
195
+ apexec:chainDigest a owl:DatatypeProperty ;
196
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
197
+ rdfs:label "chainDigest" ;
198
+ rdfs:comment "The digest of the VERIFIED delegation chain the step ran under (spec 383): every grant by reference from the accountability root to the acting agent. The links themselves are prov:used entities; the digest is the one value that names the whole chain." .
199
+
200
+ apexec:accountabilityRoot a owl:ObjectProperty ;
201
+ rdfs:domain prov:Activity ; rdfs:range ap:Agent ;
202
+ rdfs:label "accountabilityRoot" ;
203
+ rdfs:comment "WHOSE AUTHORITY WAS SPENT: the root delegator of the verified chain (spec 383). Read off the verifier's evidence, never off the actor context — an actor context says who is acting, this says who answers for it." .
204
+
205
+ apexec:errorClass a owl:DatatypeProperty ;
206
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
207
+ rdfs:label "errorClass" ;
208
+ rdfs:comment "The CLASS of a step's failure (`authority_denied`, `tool_error`, `input_required` …), never its message: a message can carry a counterparty's name or an argument, a class cannot." .
209
+
210
+ # ─── Spec 410 §2 — the adapter's observation ──────────────────────────
211
+ # A resolved value is not "done". For an externally ordered effect the harness records WHAT THE ADAPTER SAW, in
212
+ # four words, and which one the receipt attests. "Verified at commit" may be said of `confirmed` only.
213
+
214
+ apexec:ObservedOutcome a owl:Class ;
215
+ rdfs:subClassOf skos:Concept ;
216
+ rdfs:label "ObservedOutcome" ;
217
+ rdfs:comment "What an adapter observed of the effect it made (spec 410 §2): attempted (the call left; nothing came back the adapter can vouch for), accepted (the provider acknowledged and has not committed), committed (the provider says it is done), confirmed (the harness read the effect back independently of the call that made it). What it is NOT: an authorization input, or a claim about the outcome class the tool establishes (apexec:OutcomeClass says what a success MEANS; this says what was SEEN)." .
218
+ apexec:attempted a apexec:ObservedOutcome ; rdfs:label "attempted" .
219
+ apexec:accepted a apexec:ObservedOutcome ; rdfs:label "accepted" .
220
+ apexec:committed a apexec:ObservedOutcome ; rdfs:label "committed" .
221
+ apexec:confirmed a apexec:ObservedOutcome ; rdfs:label "confirmed" .
222
+
223
+ apexec:observedOutcome a owl:ObjectProperty ;
224
+ rdfs:domain prov:Activity ; rdfs:range apexec:ObservedOutcome ;
225
+ rdfs:label "observedOutcome" ;
226
+ rdfs:comment "The ObservedOutcome this step's adapter reported, bounded by what its tool establishes — a submission never records more than accepted from the call alone." .
227
+ apexec:providerRef a owl:DatatypeProperty ;
228
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
229
+ rdfs:label "providerRef" ;
230
+ rdfs:comment "The provider's own identifier for the effect (a message id, a task id, a record version, a transaction hash) — what a stranger would quote to the provider. Never a secret." .
231
+ apexec:observedAt a owl:DatatypeProperty ;
232
+ rdfs:domain prov:Activity ; rdfs:range xsd:dateTime ;
233
+ rdfs:label "observedAt" ;
234
+ rdfs:comment "The harness clock when the adapter returned what it saw." .
235
+
236
+ # ─── Spec 410 §4.4 — the estate an act was performed in ──────────────
237
+ # A person's Home lives in ONE estate; she participates in any estate that admits her (the thesis's design
238
+ # commitment, THESIS-9). An act she performs in estate B is redeemed under a B-chain mandate and anchored in B's
239
+ # receipt registry, and its record lands in HER vault, held in estate A. The record must therefore say where the
240
+ # act happened, because the vault it lives in no longer implies it.
241
+
242
+ apexec:estate a owl:DatatypeProperty ;
243
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
244
+ rdfs:label "estate" ;
245
+ rdfs:comment "THE ESTATE THIS RUN WAS PERFORMED IN (spec 410 §4.4): the estate id — keccak256(\"eip155:<chainId>:<governance>\"), the same derivation EstateProjectionRegistry.estateIdOf and the estate-projection package use — of the chain whose mandate was redeemed and whose registry anchored the receipt. Stamped by the RUNTIME that ran the act, from its own deployment, on the HarnessRun activity; a step inherits its run's. Absent on a record older than this term, and on a runtime that has not declared its governance. What it is NOT: authority (a verifier reads the mandate's chain from the mandate's own domain, never from this), and NOT the chain the acting agent's address is named under (the agent IRIs carry that; an agent has the same address in every estate by construction, ADR-0010 + CREATE2)." .
246
+
247
+ apexec:ReceiptAnchor a owl:Class ;
248
+ rdfs:subClassOf prov:Entity ;
249
+ rdfs:label "ReceiptAnchor" ;
250
+ rdfs:comment "WHERE A RUN'S BUNDLE IS ANCHORED, as a record beside the bundle (the `run.anchor:<runRef>` vault record): the bundle's digest, the ReceiptAnchorRegistry it was written in (`eip155:<chainId>:<registry>`), the agent that anchored it, the transaction, and the estate (apexec:estate). A bundle cannot carry its own digest's anchor, so the citation is a second record — and it is the record a Home in another estate reads to know WHICH chain to ask. A holder verifies by recomputing the digest and reading the registry; the citation is a claim about where to look, never proof by itself." .
251
+
252
+ apexec:anchorDigest a owl:DatatypeProperty ;
253
+ rdfs:domain apexec:ReceiptAnchor ; rdfs:range xsd:string ;
254
+ rdfs:label "anchorDigest" ;
255
+ rdfs:comment "The bundle digest as anchored (bytes32 hex) — recomputed by any holder of the bundle over its canonical bytes." .
256
+
257
+ apexec:anchorRegistry a owl:DatatypeProperty ;
258
+ rdfs:domain apexec:ReceiptAnchor ; rdfs:range xsd:string ;
259
+ rdfs:label "anchorRegistry" ;
260
+ rdfs:comment "The ReceiptAnchorRegistry the digest is written in, chain-qualified: `eip155:<chainId>:<registry address>`. The chain named here is the ESTATE's chain (spec 410 §4.4), which may differ from the chain the vault's Home runs on." .
261
+
262
+ apexec:anchoredByAgent a owl:ObjectProperty ;
263
+ rdfs:domain apexec:ReceiptAnchor ; rdfs:range ap:Agent ;
264
+ rdfs:label "anchoredByAgent" ;
265
+ rdfs:comment "The runtime's harness agent that anchored the digest — the row's key on a generation-2+ registry (spec 408 §1.5). Distinct from apvr:anchoredBy, which names an attestation UID on a public KB row." .
266
+
267
+ apexec:anchorTransaction a owl:DatatypeProperty ;
268
+ rdfs:domain apexec:ReceiptAnchor ; rdfs:range xsd:string ;
269
+ rdfs:label "anchorTransaction" ;
270
+ rdfs:comment "The transaction that wrote the anchor, by hash, on the estate's chain." .
271
+
272
+ apexec:disputedBy a owl:ObjectProperty ;
273
+ rdfs:domain prov:Activity ; rdfs:range prov:Entity ;
274
+ rdfs:label "disputedBy" ;
275
+ rdfs:comment "Spec 410 §10 — the dispute interaction (profile dispute/1.0.0) opened over this run's receipt, and the determination a named steward recorded in it. Linked evidence; a determination reverses nothing — a reversal is a new act under a new mandate." .
276
+
277
+ apexec:StepReceipt a owl:Class ;
278
+ rdfs:subClassOf prov:Entity ;
279
+ rdfs:label "StepReceipt" ;
280
+ rdfs:comment "The receipt a step left, AS AN ENTITY named by its digest (apexec:receiptDigest carries the same digest on the activity). The receipt itself — capability, authority reference, verdict, timings, bindings — stays on the run record; the graph holds the commitment. Distinct from apvr:VerificationReceipt (spec 303, a verifier's receipt about a chain check)." .
281
+
282
+ apexec:ChainTransaction a owl:Class ;
283
+ rdfs:subClassOf prov:Entity ;
284
+ rdfs:label "ChainTransaction" ;
285
+ rdfs:comment "A transaction a step left on the chain, named by its hash — the ONE public fact a private run may cite, because anyone can look it up. The graph does not repeat what the transaction did; the chain says that." .
286
+
287
+ apexec:Effect a owl:Class ;
288
+ rdfs:subClassOf prov:Entity ;
289
+ rdfs:label "Effect" ;
290
+ rdfs:comment "What FOLLOWED an act, per declared effect (spec 360): the record a disclosure wrote, the notice it sent. An effect that failed while the act stood is recorded with effectSucceeded false — visible evidence, never a reason the step is unwound." .
291
+
292
+ apexec:effectProduces a owl:DatatypeProperty ;
293
+ rdfs:domain apexec:Effect ; rdfs:range xsd:string ;
294
+ rdfs:label "effectProduces" ;
295
+ rdfs:comment "The record type the effect writes (`payment.receipt`, `payment.notice`) — a name, never the record." .
296
+
297
+ apexec:effectSucceeded a owl:DatatypeProperty ;
298
+ rdfs:domain apexec:Effect ; rdfs:range xsd:boolean ;
299
+ rdfs:label "effectSucceeded" .
300
+
301
+ apexec:DecisionRecord a owl:Class ;
302
+ rdfs:subClassOf prov:Entity ;
303
+ rdfs:label "DecisionRecord" ;
304
+ rdfs:comment "What a step DECIDED for the person on the way to the act, and by which rule (spec 363 W6): which account paid, which Sarah was meant. The point and the rule id are recorded; what was chosen is not (it can be a name). Display and audit only; no verifier reads it." .
305
+
306
+ apexec:decisionPoint a owl:DatatypeProperty ;
307
+ rdfs:domain apexec:DecisionRecord ; rdfs:range xsd:string ;
308
+ rdfs:label "decisionPoint" .
309
+
310
+ apexec:decisionRule a owl:DatatypeProperty ;
311
+ rdfs:domain apexec:DecisionRecord ; rdfs:range xsd:string ;
312
+ rdfs:label "decisionRule" .
313
+
314
+ # Completion states of a harness step (apexec:completionState, declared above). A closed list: a
315
+ # reader that meets a state outside it is reading a record this vocabulary does not describe.
316
+
317
+ apexec:Completed a apexec:CompletionState ;
318
+ rdfs:label "Completed" ;
319
+ rdfs:comment "The step ran and its tool returned." .
320
+
321
+ apexec:Failed a apexec:CompletionState ;
322
+ rdfs:label "Failed" ;
323
+ rdfs:comment "The step ran and its tool failed (apexec:errorClass says how). Also an ep-plan:FailedActivity." .
324
+
325
+ apexec:Refused a apexec:CompletionState ;
326
+ rdfs:label "Refused" ;
327
+ rdfs:comment "The verifier denied the step before its tool ran. A CONFORMING record — refusing to record a refusal would delete the evidence an audit most needs. Also an ep-plan:FailedActivity." .
328
+
329
+ apexec:Skipped a apexec:CompletionState ;
330
+ rdfs:label "Skipped" ;
331
+ rdfs:comment "The step was not attempted (an earlier step's outcome made it moot, or a replay answered it from the record)." .
332
+
333
+ apexec:Suspended a apexec:CompletionState ;
334
+ rdfs:label "Suspended" ;
335
+ rdfs:comment "The step is waiting on the person (a signature, an answer, a confirmation). Not terminal: the record of a suspended run is a checkpoint, and the run resumes under a fresh verification (spec 370 P1)." .
336
+
337
+ # ═══ The span ↔ activity bridge — spec 390 W1 ═══
338
+ # Every PROV activity names the OpenTelemetry span it IS, and every span names the activity (ap.prov.*
339
+ # attributes). Both are derived from the same run and step references. CORRELATION, NEVER TRUST: a trace
340
+ # id joins hops into one causal operation; nothing reads it for a verdict, and a forged one can at most
341
+ # mis-file a trace.
342
+
343
+ apexec:traceId a owl:DatatypeProperty ;
344
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
345
+ rdfs:label "traceId" ;
346
+ rdfs:comment "The W3C Trace Context trace id (16 bytes, lowercase hex) of the trace this activity's span belongs to — the sender's when this run answered another (spec 381 W2), the caller's when a traceparent arrived (spec 390 W2). An identifier for a collector, never an input to admission or authority." .
347
+
348
+ apexec:spanId a owl:DatatypeProperty ;
349
+ rdfs:domain prov:Activity ; rdfs:range xsd:string ;
350
+ rdfs:label "spanId" ;
351
+ rdfs:comment "The W3C Trace Context span id (8 bytes, lowercase hex) of the span this activity is. Derived from the run and step references, so the same record always names the same span." .
352
+
353
+ # ═══ Offloaded artifacts — spec 391 ═══
354
+
355
+ apexec:RunArtifact a owl:Class ;
356
+ rdfs:subClassOf prov:Entity ;
357
+ rdfs:label "RunArtifact" ;
358
+ rdfs:comment "A step's RAW RESULT, kept as its own record in the acting agent's vault (`run.artifact:<runRef>:<stepRef>`) because it was too large to ride in the run's record and checkpoint (spec 391). The step prov:generated it; the receipt's outputDigest commits to the same bytes. NOT an apful:Artifact (a deliverable a fulfillment promised) and not evidence a verifier reads — a body a person or a resume fetches under the agent's grant." .
359
+
360
+ apexec:artifactBytes a owl:DatatypeProperty ;
361
+ rdfs:domain apexec:RunArtifact ; rdfs:range xsd:integer ;
362
+ rdfs:label "artifactBytes" ;
363
+ rdfs:comment "The canonical JSON length of the body — so a reader knows what fetching it costs." .
364
+
365
+ apexec:artifactDigest a owl:DatatypeProperty ;
366
+ rdfs:domain apexec:RunArtifact ; rdfs:range xsd:string ;
367
+ rdfs:label "artifactDigest" ;
368
+ rdfs:comment "sha256 of the canonical JSON of the body. The same bytes the step receipt's outputDigest commits to, so the graph, the receipt and the vault record agree on what was produced." .
369
+
370
+ # ═══ Build artifacts — spec 398 §9 (ap-build B3) ═══
371
+
372
+ apexec:BuildArtifact a owl:Class ;
373
+ rdfs:subClassOf prov:Entity ;
374
+ rdfs:label "BuildArtifact" ;
375
+ rdfs:comment "What ONE build run left, kept as its own record in the WORKSPACE's vault (`build.run:<runId>`; spec 398 §9.2 / §7.2): the repository and base it was built from, the task in the asker's words, the files the model wrote (whole content), and the test evidence AS RECORDED — the command, its exit code and the tail of its output (T28: never an assertion that tests passed). The build service produced it in a sandbox and returned it; the runtime's step prov:generated the record under the workspace's mandate. NOT a deployment (T29 — promotion is its own act) and NOT a pull request: a branch pushed from it is a submission (spec 367 §6) made by `github.pr.open`, whose receipt names this record. Distinct from apexec:RunArtifact (a step's raw body offloaded for size) and from apful:Artifact (a deliverable a fulfillment promised)." .
376
+
377
+ apexec:buildRepository a owl:DatatypeProperty ;
378
+ rdfs:domain apexec:BuildArtifact ; rdfs:range xsd:string ;
379
+ rdfs:label "buildRepository" ;
380
+ rdfs:comment "The repository the run built in, `owner/name`, with `buildBase` the branch it started from." .
381
+
382
+ apexec:buildBase a owl:DatatypeProperty ;
383
+ rdfs:domain apexec:BuildArtifact ; rdfs:range xsd:string ;
384
+ rdfs:label "buildBase" .
385
+
386
+ apexec:buildTask a owl:DatatypeProperty ;
387
+ rdfs:domain apexec:BuildArtifact ; rdfs:range xsd:string ;
388
+ rdfs:label "buildTask" ;
389
+ rdfs:comment "The task as the asker said it — what the model was given, never what it claims to have done (that is `buildSummary`, the model's own sentence, rendered as the model's)." .
390
+
391
+ apexec:buildSummary a owl:DatatypeProperty ;
392
+ rdfs:domain apexec:BuildArtifact ; rdfs:range xsd:string ;
393
+ rdfs:label "buildSummary" .
394
+
395
+ apexec:testCommand a owl:DatatypeProperty ;
396
+ rdfs:domain apexec:BuildArtifact ; rdfs:range xsd:string ;
397
+ rdfs:label "testCommand" ;
398
+ rdfs:comment "What was RUN in the sandbox after the files were written — the repository's own test script when it has one, else a syntax check of what changed. With `testExitCode` and `testOutputTail`, the recorded evidence." .
399
+
400
+ apexec:testExitCode a owl:DatatypeProperty ;
401
+ rdfs:domain apexec:BuildArtifact ; rdfs:range xsd:integer ;
402
+ rdfs:label "testExitCode" .
403
+
404
+ apexec:testOutputTail a owl:DatatypeProperty ;
405
+ rdfs:domain apexec:BuildArtifact ; rdfs:range xsd:string ;
406
+ rdfs:label "testOutputTail" .
407
+
408
+ apexec:buildModel a owl:DatatypeProperty ;
409
+ rdfs:domain apexec:BuildArtifact ; rdfs:range xsd:string ;
410
+ rdfs:label "buildModel" ;
411
+ rdfs:comment "The model that wrote the files (`provider/model`) — recorded because a reader judging the change wants to know who wrote it; it is not an author with authority." .
412
+
413
+ apexec:BuildPromotion a owl:Class ;
414
+ rdfs:subClassOf prov:Entity ;
415
+ rdfs:label "BuildPromotion" ;
416
+ rdfs:comment "What ONE promotion did (spec 398 §9.4, T29; `build.promotion:<runId>` in the WORKSPACE's vault): the exact tuple the steward's signature was over — the commit, the configuration digest (the artifact's files), the environment reached (a branch today), the permitted migration (none) — and what the forge did (the pull request merged, the merge commit). A promotion is the act that reaches an environment; a build never is. Any change to the tuple voids the signature: a promotion of another commit is another act." .
417
+
418
+ apexec:promotedCommit a owl:DatatypeProperty ;
419
+ rdfs:domain apexec:BuildPromotion ; rdfs:range xsd:string ;
420
+ rdfs:label "promotedCommit" .
421
+
422
+ apexec:promotedConfigDigest a owl:DatatypeProperty ;
423
+ rdfs:domain apexec:BuildPromotion ; rdfs:range xsd:string ;
424
+ rdfs:label "promotedConfigDigest" ;
425
+ rdfs:comment "The digest of the build artifact's files (`apexec:artifactDigest` of the build run) — the configuration the signature bound." .
426
+
427
+ apexec:promotedEnvironment a owl:DatatypeProperty ;
428
+ rdfs:domain apexec:BuildPromotion ; rdfs:range xsd:string ;
429
+ rdfs:label "promotedEnvironment" ;
430
+ rdfs:comment "The environment reached — `branch:<name>` until a deployment target is attached to the workspace." .
431
+
432
+ apexec:permittedMigration a owl:DatatypeProperty ;
433
+ rdfs:domain apexec:BuildPromotion ; rdfs:range xsd:string ;
434
+ rdfs:label "permittedMigration" .
435
+
436
+ apexec:promotedUnder a owl:DatatypeProperty ;
437
+ rdfs:domain apexec:BuildPromotion ; rdfs:range xsd:string ;
438
+ rdfs:label "promotedUnder" ;
439
+ rdfs:comment "The intent digest the promotion's mandate was bound to — the ask that named the run and the commit." .
440
+
441
+ # ═════════════════════════════════════════════════════════════════════════════════════════════════
442
+ # Spec 414 A1 — the trace from the door: how a run ARRIVED, which MODEL calls it made, under which
443
+ # VARIANT, from which STARTING STATE, which HARNESS CAPABILITIES engaged and to what effect, and which
444
+ # SKILL contract governed each step. Evidence, never authority: no gate reads any of these, and a
445
+ # variant changes behaviour, never permission (spec 414 §2 rule 5). No words: messages, prompts and
446
+ # replies appear only as ids and digests (spec 381 §1; shapes R6/R8).
447
+ # ═════════════════════════════════════════════════════════════════════════════════════════════════
448
+
449
+ apexec:Door a owl:Class ;
450
+ rdfs:subClassOf prov:Entity ;
451
+ rdfs:label "Door" ;
452
+ rdfs:comment "How a run arrived: the A2A message (with its message, context and task ids), a direct ask, a routed hop from another agent's run, a trigger, or a resume. The run prov:used it (apexec:arrivedBy). It carries ids and the kind — never the message's words; the intent is cited by apexec:intentDigest on the run. NOT the asker (that is prov:actedOnBehalfOf) and NOT a credential: arriving by a door authorizes nothing." .
453
+
454
+ apexec:arrivedBy a owl:ObjectProperty ;
455
+ rdfs:subPropertyOf prov:used ;
456
+ rdfs:domain apexec:ServiceExecution ; rdfs:range apexec:Door ;
457
+ rdfs:label "arrivedBy" .
458
+
459
+ apexec:doorKind a owl:DatatypeProperty ;
460
+ rdfs:domain apexec:Door ; rdfs:range xsd:string ;
461
+ rdfs:label "doorKind" ;
462
+ rdfs:comment "a2a-message | harness-ask | routed | trigger | resume | home-mcp | channel-mention — how the request reached the harness." .
463
+
464
+ apexec:a2aMessageId a owl:DatatypeProperty ;
465
+ rdfs:domain apexec:Door ; rdfs:range xsd:string ;
466
+ rdfs:label "a2aMessageId" ;
467
+ rdfs:comment "The A2A Message.messageId the run answered (A2A 1.0). An id, never the message." .
468
+
469
+ apexec:a2aContextId a owl:DatatypeProperty ;
470
+ rdfs:domain apexec:Door ; rdfs:range xsd:string ;
471
+ rdfs:label "a2aContextId" ;
472
+ rdfs:comment "The A2A contextId — groups the runs of one conversation (a LangSmith 'thread')." .
473
+
474
+ apexec:a2aTaskId a owl:DatatypeProperty ;
475
+ rdfs:domain apexec:Door ; rdfs:range xsd:string ;
476
+ rdfs:label "a2aTaskId" .
477
+
478
+ apexec:ModelInvocation a owl:Class ;
479
+ rdfs:subClassOf prov:Activity ;
480
+ rdfs:label "ModelInvocation" ;
481
+ rdfs:comment "One call to a language model the run made — to plan, to compose the reply, or for a structured choice inside a step (PROV-AGENT's model-call activity). Recorded by role, model, provider, the digest of the prompt TEMPLATE (never the rendered prompt), token counts and the route's reason. NOT a decision: a model proposes; the mandate authorizes (spec 350)." .
482
+
483
+ apexec:hasModelInvocation a owl:ObjectProperty ;
484
+ rdfs:domain prov:Activity ; rdfs:range apexec:ModelInvocation ;
485
+ rdfs:label "hasModelInvocation" .
486
+
487
+ apexec:invocationRole a owl:DatatypeProperty ;
488
+ rdfs:domain apexec:ModelInvocation ; rdfs:range xsd:string ;
489
+ rdfs:label "invocationRole" ;
490
+ rdfs:comment "plan | compose | structured | judge. judge = the call that chose which skill (if any) handles the request; structured = a step's own structured call." .
491
+
492
+ apexec:modelId a owl:DatatypeProperty ;
493
+ rdfs:domain apexec:ModelInvocation ; rdfs:range xsd:string ;
494
+ rdfs:label "modelId" .
495
+
496
+ apexec:modelProvider a owl:DatatypeProperty ;
497
+ rdfs:domain apexec:ModelInvocation ; rdfs:range xsd:string ;
498
+ rdfs:label "modelProvider" .
499
+
500
+ apexec:promptTemplateDigest a owl:DatatypeProperty ;
501
+ rdfs:domain apexec:ModelInvocation ; rdfs:range xsd:string ;
502
+ rdfs:label "promptTemplateDigest" ;
503
+ rdfs:comment "A digest of the prompt the model was given, so two runs can be seen to share (or not share) a prompt. Never the prompt." .
504
+
505
+ apexec:tokensIn a owl:DatatypeProperty ;
506
+ rdfs:domain apexec:ModelInvocation ; rdfs:range xsd:integer ;
507
+ rdfs:label "tokensIn" .
508
+
509
+ apexec:tokensOut a owl:DatatypeProperty ;
510
+ rdfs:domain apexec:ModelInvocation ; rdfs:range xsd:integer ;
511
+ rdfs:label "tokensOut" .
512
+
513
+ apexec:routeReason a owl:DatatypeProperty ;
514
+ rdfs:domain apexec:ModelInvocation ; rdfs:range xsd:string ;
515
+ rdfs:label "routeReason" ;
516
+ rdfs:comment "Why this provider carried the call (spec 388) — a reason code, never words of the ask." .
517
+
518
+ apexec:Variant a owl:Class ;
519
+ rdfs:subClassOf prov:Entity ;
520
+ rdfs:label "Variant" ;
521
+ rdfs:comment "The configuration a run ran under, as the things a comparison may change one at a time: the playbook (by commitment), the planner kind, the model route policy, the harness build, and any harness-capability toggles. Named by its digest (RFC 8785 JCS + SHA-256), so two runs share a variant exactly when they share every part. The production variant is simply the current one. NOT authority: a variant changes behaviour, never what a mandate permits." .
522
+
523
+ apexec:underVariant a owl:ObjectProperty ;
524
+ rdfs:subPropertyOf prov:used ;
525
+ rdfs:domain apexec:ServiceExecution ; rdfs:range apexec:Variant ;
526
+ rdfs:label "underVariant" .
527
+
528
+ apexec:variantDigest a owl:DatatypeProperty ;
529
+ rdfs:domain apexec:Variant ; rdfs:range xsd:string ;
530
+ rdfs:label "variantDigest" .
531
+
532
+ apexec:plannerKind a owl:DatatypeProperty ;
533
+ rdfs:domain apexec:Variant ; rdfs:range xsd:string ;
534
+ rdfs:label "plannerKind" ;
535
+ rdfs:comment "supplied | compiled | model | rule-based — who proposes plans under this variant." .
536
+
537
+ apexec:routePolicy a owl:DatatypeProperty ;
538
+ rdfs:domain apexec:Variant ; rdfs:range xsd:string ;
539
+ rdfs:label "routePolicy" .
540
+
541
+ apexec:harnessBuild a owl:DatatypeProperty ;
542
+ rdfs:domain apexec:Variant ; rdfs:range xsd:string ;
543
+ rdfs:label "harnessBuild" ;
544
+ rdfs:comment "The runtime's build identifier (a deployment version id or commit)." .
545
+
546
+ apexec:capabilityToggle a owl:DatatypeProperty ;
547
+ rdfs:domain apexec:Variant ; rdfs:range xsd:string ;
548
+ rdfs:label "capabilityToggle" ;
549
+ rdfs:comment "`<capability notation>=<setting>` — e.g. `retrieval/kb=off`. One per toggle; absent ⇒ the default." .
550
+
551
+ apexec:StartingState a owl:Class ;
552
+ rdfs:subClassOf prov:Entity ;
553
+ rdfs:label "StartingState" ;
554
+ rdfs:comment "The records a run began from when they were seeded for a comparison (a scenario's fixture), named by digest. Absent for live runs. Holding it fixed is one half of the change-one-component rule (spec 414 §7)." .
555
+
556
+ apexec:fromStartingState a owl:ObjectProperty ;
557
+ rdfs:subPropertyOf prov:used ;
558
+ rdfs:domain apexec:ServiceExecution ; rdfs:range apexec:StartingState ;
559
+ rdfs:label "fromStartingState" .
560
+
561
+ apexec:startingStateDigest a owl:DatatypeProperty ;
562
+ rdfs:domain apexec:StartingState ; rdfs:range xsd:string ;
563
+ rdfs:label "startingStateDigest" .
564
+
565
+ apexec:governedBySkill a owl:ObjectProperty ;
566
+ rdfs:subPropertyOf prov:used ;
567
+ rdfs:domain prov:Activity ; rdfs:range apguide:AgentSkillPackage ;
568
+ rdfs:label "governedBySkill" ;
569
+ rdfs:comment "The SKILL.md contract (id, version, content digest — the IRI says all three) whose execution contract governed this step. Finer than the run's playbook (prov:hadPlan). NOT the advertised capability (apexec:realizesCapability) and NOT the operation (the plan step's tool): a capability is what is advertised, a skill is how it is done, the tool is what was called." .
570
+
571
+ # ── Harness capabilities: what the harness DID, as a vocabulary (spec 414 §3.2) ─────────────────
572
+
573
+ apexec:HarnessCapability a owl:Class ;
574
+ rdfs:subClassOf skos:Concept ;
575
+ rdfs:label "HarnessCapability" ;
576
+ rdfs:comment "A function of the harness itself (a planner, plan admission, retrieval, routing, memory, judgment …), as distinct from a capability an agent ADVERTISES (aps:Capability). Engaging one is recorded (apexec:CapabilityEngagement) so effectiveness can be read per capability. Declared once, here; code stamps engagements by notation." .
577
+
578
+ apexec:HarnessCapabilities a skos:ConceptScheme ;
579
+ rdfs:label "Harness capabilities" .
580
+
581
+ apexec:EngagementEffect a owl:Class ;
582
+ rdfs:subClassOf skos:Concept ;
583
+ rdfs:label "EngagementEffect" ;
584
+ rdfs:comment "What an engaged harness capability did to the run: changed the plan, changed a step, changed the answer, changed nothing, or refused." .
585
+
586
+ apexec:ee-changedPlan a apexec:EngagementEffect ; skos:notation "changed-plan" ; skos:prefLabel "changed the plan" .
587
+ apexec:ee-changedStep a apexec:EngagementEffect ; skos:notation "changed-step" ; skos:prefLabel "changed a step" .
588
+ apexec:ee-changedAnswer a apexec:EngagementEffect ; skos:notation "changed-answer" ; skos:prefLabel "changed the answer" ; skos:definition "It shaped what the reply says, not what was done — retrieval grounding the composer (spec 413: passages ground what is said, never what is done)." .
589
+ apexec:ee-noChange a apexec:EngagementEffect ; skos:notation "no-change" ; skos:prefLabel "changed nothing" .
590
+ apexec:ee-refused a apexec:EngagementEffect ; skos:notation "refused" ; skos:prefLabel "refused" .
591
+
592
+ apexec:CapabilityEngagement a owl:Class ;
593
+ rdfs:subClassOf prov:Influence ;
594
+ rdfs:label "CapabilityEngagement" ;
595
+ rdfs:comment "One engagement of a harness capability on a run or a step — the qualified form (PROV's Influence pattern) so each engagement carries its capability, the capability's version and its effect. Engaged-with-no-change is still recorded: 'did this capability matter?' is a query, not an opinion." .
596
+
597
+ apexec:hasEngagement a owl:ObjectProperty ;
598
+ rdfs:domain prov:Activity ; rdfs:range apexec:CapabilityEngagement ;
599
+ rdfs:label "hasEngagement" .
600
+
601
+ apexec:ofCapability a owl:ObjectProperty ;
602
+ rdfs:domain apexec:CapabilityEngagement ; rdfs:range apexec:HarnessCapability ;
603
+ rdfs:label "ofCapability" .
604
+
605
+ apexec:engagementEffect a owl:ObjectProperty ;
606
+ rdfs:domain apexec:CapabilityEngagement ; rdfs:range apexec:EngagementEffect ;
607
+ rdfs:label "engagementEffect" .
608
+
609
+ apexec:capabilityVersion a owl:DatatypeProperty ;
610
+ rdfs:domain apexec:CapabilityEngagement ; rdfs:range xsd:string ;
611
+ rdfs:label "capabilityVersion" .
612
+
613
+ # The scheme. `skos:notation` is the stable key code stamps by; the IRI local name is DERIVED from it —
614
+ # `hc-` + the notation in camelCase over '/' and '-' (`planner/compiled-shape` → `hc-plannerCompiledShape`), and
615
+ # `ee-` likewise for effects — so a serializer names the concept without a lookup table (asserted in the suite). Open: a new harness capability is a new concept here and nothing else.
616
+ apexec:hc-plannerSupplied a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "planner/supplied" ; skos:prefLabel "supplied plan" ; skos:definition "The plan was given (a screen, a test, a replay), not proposed." .
617
+ apexec:hc-plannerCompiledShape a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "planner/compiled-shape" ; skos:prefLabel "compiled plan shape" ; skos:definition "An ontology-compiled one-correct-plan shape proposed the plan (spec 355)." .
618
+ apexec:hc-plannerModel a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "planner/model" ; skos:prefLabel "model planner" ; skos:definition "A language model proposed the plan (spec 388 route)." .
619
+ apexec:hc-planAdmission a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "plan-admission" ; skos:prefLabel "plan admission" ; skos:definition "The behaviour plane admitted or refused the proposed plan (spec 367 W1); a refusal that forced a replan changed the plan." .
620
+ apexec:hc-playbook a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "playbook" ; skos:prefLabel "playbook" ; skos:definition "A compiled archetype governed the run (spec 354)." .
621
+ apexec:hc-retrievalKb a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "retrieval/kb" ; skos:prefLabel "public-tier retrieval" ; skos:definition "Passages or facts were read from the public knowledge tier (specs 357, 413)." .
622
+ apexec:hc-retrievalVaultSelector a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "retrieval/vault-selector" ; skos:prefLabel "private-tier selector" ; skos:definition "Records were read from a vault by a compiled selector (spec 356)." .
623
+ apexec:hc-standingInstructions a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "standing-instructions" ; skos:prefLabel "standing instructions" ; skos:definition "A standing instruction applied (spec 394)." .
624
+ apexec:hc-confirmationMemory a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "confirmation-memory" ; skos:prefLabel "confirmation memory" ; skos:definition "A prior confirmation was reused (spec 385)." .
625
+ apexec:hc-decisionRules a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "decision-rules" ; skos:prefLabel "decision rules" ; skos:definition "An ordered rule decided a decision point (spec 363)." .
626
+ apexec:hc-routing a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "routing" ; skos:prefLabel "routing" ; skos:definition "Work was routed to another agent by its records (spec 366)." .
627
+ apexec:hc-handoff a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "handoff" ; skos:prefLabel "hand-off" ; skos:definition "A step was handed to another agent's run." .
628
+ apexec:hc-fanOut a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "fan-out" ; skos:prefLabel "fan-out" ; skos:definition "One step was split across many items or agents, each re-verified (spec 380)." .
629
+ apexec:hc-contextOffload a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "context-offload" ; skos:prefLabel "context offload" ; skos:definition "A large result went to the vault and the run carried its summary (spec 391)." .
630
+ apexec:hc-durableResume a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "durable-resume" ; skos:prefLabel "durable resume" ; skos:definition "The run resumed from a checkpoint, replaying completed steps (spec 362, 370 P1)." .
631
+ apexec:hc-approval a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "approval" ; skos:prefLabel "approval" ; skos:definition "A step waited on a person's signature (specs 350, 393)." .
632
+ apexec:hc-judgment a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "judgment" ; skos:prefLabel "judgment" ; skos:definition "A judgment was made about the run or a step against a stated criterion (spec 414 §3.4) — implementation-neutral; defined by principles J1–J8, filled by a later spec." .
633
+
634
+ # ── Spec 415 §3a — SKILL SELECTION as a harness capability, and what it offered, chose and rejected ──
635
+ # The APPROACH is the concept (implementation-neutral names: the mechanism behind each is a binding); a comparison
636
+ # toggles it and holds the rest fixed. The engagement names the candidates it OFFERED, the one(s) it CHOSE and the
637
+ # neighbour it REJECTED when two collided — as capability / skill IRIs, never words.
638
+ apexec:hc-skillSelectionModel a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "skill-selection/model" ; skos:prefLabel "selection by description" ; skos:definition "A model chose the skill from descriptions — the baseline." .
639
+ apexec:hc-skillSelectionOntology a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "skill-selection/ontology" ; skos:prefLabel "selection by ontology and canonical id" ; skos:definition "The skill was chosen by what the ontology says it is for and by its canonical identity (spec 355 compiled shapes are one such mechanism)." .
640
+ apexec:hc-skillSelectionRules a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "skill-selection/rules" ; skos:prefLabel "selection by rules" ; skos:definition "Declared rules chose the skill." .
641
+ apexec:hc-skillSelectionJudgment a apexec:HarnessCapability ; skos:inScheme apexec:HarnessCapabilities ; skos:notation "skill-selection/judgment" ; skos:prefLabel "selection by judgment" ; skos:definition "A judgment against stated criteria chose or confirmed the skill (spec 414 §3.4)." .
642
+
643
+ apexec:offeredCandidate a owl:ObjectProperty ;
644
+ rdfs:domain apexec:CapabilityEngagement ; rdfs:range prov:Entity ;
645
+ rdfs:label "offeredCandidate" ; rdfs:comment "A skill / capability the selection could choose from (by IRI)." .
646
+ apexec:chose a owl:ObjectProperty ;
647
+ rdfs:domain apexec:CapabilityEngagement ; rdfs:range prov:Entity ;
648
+ rdfs:label "chose" ; rdfs:comment "What the selection chose (by IRI). More than one ⇒ over-selection." .
649
+ apexec:rejectedNeighbour a owl:ObjectProperty ;
650
+ rdfs:domain apexec:CapabilityEngagement ; rdfs:range prov:Entity ;
651
+ rdfs:label "rejectedNeighbour" ; rdfs:comment "The colliding candidate the selection passed over, when it can say so." .
652
+
653
+ # Spec 415 A4 — THE INTENT, TYPED IN THE DOMAIN ONTOLOGY. A selection by judgment first says what the request asks FOR
654
+ # as one domain class (the deliverable or activity) and what it is ABOUT; the skills whose declared coverage includes that
655
+ # class are the only candidates. The values are CLASS IRIs from the agent's domain ontology (or apexec:OutsideDomain),
656
+ # never words. Evidence of how the selection read the request; never authority.
657
+ apexec:inferredRequest a owl:ObjectProperty ;
658
+ rdfs:domain apexec:CapabilityEngagement ; rdfs:range rdfs:Class ;
659
+ rdfs:label "inferredRequest" ; rdfs:comment "The domain class the selection read the request as asking FOR — or apexec:OutsideDomain." .
660
+ apexec:inferredAbout a owl:ObjectProperty ;
661
+ rdfs:domain apexec:CapabilityEngagement ; rdfs:range rdfs:Class ;
662
+ rdfs:label "inferredAbout" ; rdfs:comment "A domain class the selection read the request as being ABOUT." .
663
+ apexec:OutsideDomain a rdfs:Class ;
664
+ rdfs:label "OutsideDomain" ; rdfs:comment "What a request asks for when it is none of the domain's classes: no skill may be chosen for it." .
665
+
666
+ # ═══ Spec 438 W0 — EVIDENCE STATUS and the WORK a run belongs to ═══════════════════════════════════
667
+ #
668
+ # Two unrelated things land together because they answer the two questions a run record could not answer:
669
+ # "what was this part of?" and "how complete is what it left behind?".
670
+ #
671
+ # WORK. A run may name the Endeavor it is part of. It is a REFERENCE and never authority: a run's permission
672
+ # comes from its mandate, and no verifier, admission stage or enforcer reads this property. It MAY be absent —
673
+ # a solo Ask with no work named has no workRef, and a synthetic Endeavor minted to fill the field would be a
674
+ # fact nobody asserted (spec 438 §2.3). Attaching a run to work is an explicit coordination command, never
675
+ # inferred from a retry or a shared contextId.
676
+ apexec:workRef a owl:ObjectProperty ;
677
+ rdfs:subPropertyOf dcterms:isPartOf ;
678
+ rdfs:domain apexec:ServiceExecution ; rdfs:range apcoord:Endeavor ;
679
+ rdfs:label "workRef" ;
680
+ rdfs:comment "The Endeavor this execution was part of. A REFERENCE, never authority — no gate reads it — and may be absent (spec 438 §3)." .
681
+
682
+ # EVIDENCE STATUS. Five SEPARATE answers, never collapsed into one flag, because collapsing them is how a
683
+ # record view tells a plausible falsehood (the discipline of spec 358 applied to the record): "complete" that
684
+ # means "nothing contradicted itself", "verified" that means "nobody checked", "0" that means "unreported".
685
+ # Derived from the run record on read; stored nowhere as authority.
686
+ apexec:EvidenceStatus a owl:Class ;
687
+ rdfs:subClassOf prov:Entity ;
688
+ rdfs:label "EvidenceStatus" ;
689
+ rdfs:comment "A five-dimensional reading of what a run left behind: coverage, consistency, origin, integrity, assessment. Derived from the record, evidence only, and never an input to any gate (spec 438 §4)." .
690
+
691
+ apexec:EvidenceCoverage a owl:Class ; rdfs:subClassOf skos:Concept ; rdfs:label "EvidenceCoverage" ;
692
+ rdfs:comment "Did every planned step leave a record? Names the missing step; never a ratio that hides which." .
693
+ apexec:EvidenceCoverages a skos:ConceptScheme ; rdfs:label "Evidence coverage" .
694
+
695
+ apexec:EvidenceConsistency a owl:Class ; rdfs:subClassOf skos:Concept ; rdfs:label "EvidenceConsistency" ;
696
+ rdfs:comment "Do the record's own parts agree — steps, receipts, events, outcome? A disagreement is reported, never resolved by preferring one source." .
697
+ apexec:EvidenceConsistencies a skos:ConceptScheme ; rdfs:label "Evidence consistency" .
698
+
699
+ apexec:EvidenceOrigin a owl:Class ; rdfs:subClassOf skos:Concept ; rdfs:label "EvidenceOrigin" ;
700
+ rdfs:comment "Who observed a claim: executor-observed, participant-asserted, or third-party-attested. An assertion is never promoted to an observation." .
701
+ apexec:EvidenceOrigins a skos:ConceptScheme ; rdfs:label "Evidence origin" .
702
+ apexec:eo-executorObserved a apexec:EvidenceOrigin ; skos:inScheme apexec:EvidenceOrigins ; skos:notation "executor-observed" ; skos:prefLabel "executor-observed" ; skos:definition "The harness itself recorded it while running the step." .
703
+ apexec:eo-participantAsserted a apexec:EvidenceOrigin ; skos:inScheme apexec:EvidenceOrigins ; skos:notation "participant-asserted" ; skos:prefLabel "participant-asserted" ; skos:definition "A party said so. True of them saying it, not of what they said." .
704
+ apexec:eo-thirdPartyAttested a apexec:EvidenceOrigin ; skos:inScheme apexec:EvidenceOrigins ; skos:notation "third-party-attested" ; skos:prefLabel "third-party-attested" ; skos:definition "A party other than the actor signed for it." .
705
+
706
+ apexec:EvidenceIntegrity a owl:Class ; rdfs:subClassOf skos:Concept ; rdfs:label "EvidenceIntegrity" ;
707
+ rdfs:comment "How far the bytes have actually been checked. An unchecked bundle is never reported as verified." .
708
+ apexec:EvidenceIntegrities a skos:ConceptScheme ; rdfs:label "Evidence integrity" .
709
+ apexec:ei-unchecked a apexec:EvidenceIntegrity ; skos:inScheme apexec:EvidenceIntegrities ; skos:notation "unchecked" ; skos:prefLabel "unchecked" ; skos:definition "Nothing was recomputed. The default, and said so." .
710
+ apexec:ei-hashValidated a apexec:EvidenceIntegrity ; skos:inScheme apexec:EvidenceIntegrities ; skos:notation "hash-validated" ; skos:prefLabel "hash-validated" ; skos:definition "The content digest was recomputed and matched." .
711
+ apexec:ei-signatureValidated a apexec:EvidenceIntegrity ; skos:inScheme apexec:EvidenceIntegrities ; skos:notation "signature-validated" ; skos:prefLabel "signature-validated" ; skos:definition "A signature over the digest verified against the signer's account." .
712
+ apexec:ei-anchored a apexec:EvidenceIntegrity ; skos:inScheme apexec:EvidenceIntegrities ; skos:notation "anchored" ; skos:prefLabel "anchored" ; skos:definition "The digest was found in the receipt-anchor registry on chain." .
713
+
714
+ apexec:EvidenceAssessment a owl:Class ; rdfs:subClassOf skos:Concept ; rdfs:label "EvidenceAssessment" ;
715
+ rdfs:comment "Has anyone judged this run, against which criteria revision? UNASSESSED is never reported as failed." .
716
+ apexec:EvidenceAssessments a skos:ConceptScheme ; rdfs:label "Evidence assessment" .
717
+
718
+ apexec:hasEvidenceStatus a owl:ObjectProperty ;
719
+ rdfs:domain apexec:ServiceExecution ; rdfs:range apexec:EvidenceStatus ;
720
+ rdfs:label "hasEvidenceStatus" ; rdfs:comment "The derived reading for this execution (spec 438 §4)." .