@agenticprimitives/ontology 1.0.0-alpha.18 → 1.0.0-alpha.19
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.
- package/cbox/agent-facet-shapes.shacl.ttl +130 -0
- package/cbox/capability-catalog-shapes.shacl.ttl +284 -0
- package/cbox/consultation-shapes.shacl.ttl +85 -0
- package/cbox/discovery-graph-shapes.shacl.ttl +50 -0
- package/cbox/interaction-vocabulary.ttl +17 -0
- package/cbox/profile-facet-vocabulary.ttl +50 -0
- package/dist/artifacts.d.ts +2 -2
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +21 -0
- package/dist/artifacts.js.map +1 -1
- package/dist/index.d.ts +189 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +246 -0
- package/dist/index.js.map +1 -1
- package/mappings/collaboration-crosswalk-skills.ttl +1 -1
- package/mappings/collaboration-profile.ttl +17 -9
- package/package.json +4 -2
- package/tbox/context.ttl +124 -0
- package/tbox/coordination.ttl +216 -0
- package/tbox/discovery.ttl +125 -1
- package/tbox/execution.ttl +131 -0
- package/tbox/identity.ttl +6 -0
- package/tbox/intents.ttl +10 -0
- package/tbox/messaging.ttl +54 -0
- package/tbox/plan.ttl +169 -0
- package/tbox/profile.ttl +100 -0
- package/tbox/skills.ttl +132 -0
- package/tbox/trust.ttl +120 -0
package/tbox/intents.ttl
CHANGED
|
@@ -92,6 +92,16 @@ apint:AssignRoleIntent a owl:Class ;
|
|
|
92
92
|
rdfs:subClassOf apint:RelationshipIntent ;
|
|
93
93
|
rdfs:label "AssignRoleIntent" .
|
|
94
94
|
|
|
95
|
+
# ─── Consultation (spec 329 — org assistant member routing) ──────────
|
|
96
|
+
# Layer-2 spine artifact ONLY: a ConsultationIntent DESCRIBES a routed org→member
|
|
97
|
+
# consult; it is EXECUTED by the ADR-0044 Ring-0 loop over the A2A task rail —
|
|
98
|
+
# never by the W1 marketplace resolver (the spine describes; the loop executes).
|
|
99
|
+
|
|
100
|
+
apint:ConsultationIntent a owl:Class ;
|
|
101
|
+
rdfs:subClassOf apint:Intent ;
|
|
102
|
+
rdfs:label "ConsultationIntent" ;
|
|
103
|
+
rdfs:comment "An org's signed request that a specific member agent answer a discussion question. Layer-2 spine artifact; executed via the A2A task rail (spec 329), never the marketplace resolver. direction 'receive'; object = the consult-answer IRI; expressedBy the org SA; addressedTo exactly one member SA. Wire binding: `ap.consultation-intent.v1` ↔ this class (TS mirror: fabric ConsultationIntentV1)." .
|
|
104
|
+
|
|
95
105
|
apint:MatchInitiation a owl:Class ;
|
|
96
106
|
rdfs:subClassOf prov:Activity ;
|
|
97
107
|
rdfs:label "MatchInitiation" ;
|
package/tbox/messaging.ttl
CHANGED
|
@@ -143,6 +143,22 @@ apmsg:invitationStatus a owl:DatatypeProperty ;
|
|
|
143
143
|
rdfs:label "invitationStatus" ;
|
|
144
144
|
rdfs:comment "Concept from apmsg:discussionInvitationStatusScheme: invited | accepted | declined | revoked." .
|
|
145
145
|
|
|
146
|
+
# ─── Org-assistant participation + acting-agent provenance (spec 327; 318 §8.1) ──
|
|
147
|
+
# The org's OWN agent posting in its topics is the Organization SA being agentic — the principal
|
|
148
|
+
# itself (318 §8.1/§8.8), never a Service participant and never a "bot account". Participant bots
|
|
149
|
+
# (distinct Service SAs, admission delegations — 318 §8.2–8.8 / C4) get their OWN classes at the
|
|
150
|
+
# fabric cutover; these two terms are deliberately narrower and compose with them.
|
|
151
|
+
|
|
152
|
+
apmsg:actingAgent a owl:ObjectProperty ;
|
|
153
|
+
rdfs:domain apmsg:MessageEnvelope ; rdfs:range ap:Agent ;
|
|
154
|
+
rdfs:label "actingAgent" ;
|
|
155
|
+
rdfs:comment "spec 324 §9 acting-agent provenance on a board entry: WHO performed the authoring move when it was not a human session — for org-assistant posts, the org SA itself. Absent ⇒ human-session authored. Never erased (prov: alignment: the acting move is attributable, not anonymous). Mirrors fabric ExchangeRecordV1.actor, which absorbs it at the 316 cutover." .
|
|
156
|
+
|
|
157
|
+
apmsg:topicAssistantPolicy a owl:ObjectProperty ;
|
|
158
|
+
rdfs:domain apmsg:DiscussionTopic ; rdfs:range skos:Concept ;
|
|
159
|
+
rdfs:label "topicAssistantPolicy" ;
|
|
160
|
+
rdfs:comment "Presence ⇔ the org's own agent participates in this DiscussionTopic (steward-enabled, spec 327). apmsg:assistantOnMention (reply only to @-mentions of the org) | apmsg:assistantOnAllPosts (reply to every member post). Orthogonal to participationPolicy — enablement is a steward act on the topic, never a participation assertion." .
|
|
161
|
+
|
|
146
162
|
apmsg:inConversation a owl:ObjectProperty ;
|
|
147
163
|
rdfs:domain apmsg:Discussion ; rdfs:range apmsg:Conversation ;
|
|
148
164
|
rdfs:label "inConversation" .
|
|
@@ -157,6 +173,39 @@ apmsg:ConversationProfile a owl:Class ;
|
|
|
157
173
|
rdfs:label "ConversationProfile" ;
|
|
158
174
|
rdfs:comment "direct | group | discussion | broadcast | forum | announcement | support." .
|
|
159
175
|
|
|
176
|
+
# ─── Routed consultation (spec 329 — org assistant member routing) ────
|
|
177
|
+
# ARTIFACTS only, per this file's rule: the ConsultAnswer (a member agent's durable, structured
|
|
178
|
+
# answer) gets a class; pending-routing rings and candidate rankings are PROJECTIONS and get NONE.
|
|
179
|
+
# The routing decision itself is described by apint:ConsultationIntent (tbox/intents.ttl); the
|
|
180
|
+
# synthesized reply's provenance reuses PROV-O directly (prov:wasDerivedFrom each contributing
|
|
181
|
+
# ConsultAnswer, prov:wasAttributedTo) — no parallel terms are minted (house rule).
|
|
182
|
+
# Wire binding: `ap.consult-answer.v1` ↔ apmsg:ConsultAnswer (TS mirror: fabric ConsultAnswerV1).
|
|
183
|
+
|
|
184
|
+
apmsg:ConsultAnswer a owl:Class ;
|
|
185
|
+
rdfs:subClassOf prov:Entity ;
|
|
186
|
+
rdfs:label "ConsultAnswer" ;
|
|
187
|
+
rdfs:comment "A member agent's structured answer Artifact to a ConsultationIntent (spec 329 §3.2). Durable artifact in the org's vault; agent-authored (apmsg:actor = member SA). Carries exactly one of an answer or an explicit decline (SHACL: answered xor declined)." .
|
|
188
|
+
|
|
189
|
+
apmsg:consultedAgent a owl:ObjectProperty ;
|
|
190
|
+
rdfs:domain apmsg:MessageEnvelope ; rdfs:range ap:Agent ;
|
|
191
|
+
rdfs:label "consultedAgent" ;
|
|
192
|
+
rdfs:comment "Synthesized-reply attribution: an agent consulted for this reply (PROV-aligned; pairs with prov:wasDerivedFrom pointing at the contributing apmsg:ConsultAnswer records). Attribution only — never authority." .
|
|
193
|
+
|
|
194
|
+
apmsg:answerText a owl:DatatypeProperty ;
|
|
195
|
+
rdfs:domain apmsg:ConsultAnswer ; rdfs:range xsd:string ;
|
|
196
|
+
rdfs:label "answerText" ;
|
|
197
|
+
rdfs:comment "The member agent's answer text. Present iff the consult was ANSWERED (xor apmsg:declined — ConsultAnswerShape). The artifact body's integrity hash reuses apful:bodyHash (the answer rides the a2a task Artifact)." .
|
|
198
|
+
|
|
199
|
+
apmsg:declined a owl:DatatypeProperty ;
|
|
200
|
+
rdfs:domain apmsg:ConsultAnswer ; rdfs:range xsd:boolean ;
|
|
201
|
+
rdfs:label "declined" ;
|
|
202
|
+
rdfs:comment "True iff the member's agent explicitly declined to answer (spec 329 §3.2 — the playbook's decline path). Present (true) xor apmsg:answerText; an optional free-text reason rides apmsg:declineReason." .
|
|
203
|
+
|
|
204
|
+
apmsg:declineReason a owl:DatatypeProperty ;
|
|
205
|
+
rdfs:domain apmsg:ConsultAnswer ; rdfs:range xsd:string ;
|
|
206
|
+
rdfs:label "declineReason" ;
|
|
207
|
+
rdfs:comment "Optional member-agent-supplied reason accompanying a decline." .
|
|
208
|
+
|
|
160
209
|
# ─── Classes + predicates (aporg extension: the membership listing) ──
|
|
161
210
|
|
|
162
211
|
aporg:DirectoryListing a owl:Class ;
|
|
@@ -188,3 +237,8 @@ aporg:listingHash a owl:DatatypeProperty ;
|
|
|
188
237
|
rdfs:domain aporg:DirectoryListing ; rdfs:range xsd:string ;
|
|
189
238
|
rdfs:label "listingHash" ;
|
|
190
239
|
rdfs:comment "sha256 of the canonical listing — the commitment an OPT-IN on-chain anchor attests to (apatt:credentialHash ≡ this; anchor requires the ADR-0025 amendment, spec 322 §6)." .
|
|
240
|
+
|
|
241
|
+
aporg:consultable a owl:DatatypeProperty ;
|
|
242
|
+
rdfs:domain aporg:DirectoryListing ; rdfs:range xsd:boolean ;
|
|
243
|
+
rdfs:label "consultable" ;
|
|
244
|
+
rdfs:comment "Member-asserted, org-scoped routing HINT (spec 329 §2.2). The authority is the consultability delegation; this property only surfaces eligibility. Absent ⇒ false. Flag without delegation ⇒ not consultable (fail-closed); delegation without flag ⇒ not surfaced to routing." .
|
package/tbox/plan.ttl
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# T-box — P-Plan grounding (spec 332 §4; closes the outstanding spec-316 W5 `plan.ttl` item).
|
|
2
|
+
#
|
|
3
|
+
# ── Why ONE module for three plans ───────────────────────────────────────────────────────────────
|
|
4
|
+
# The substrate has three plan-shaped objects, and confusing them is the recurring failure this
|
|
5
|
+
# module exists to prevent (ADR-0054 §3):
|
|
6
|
+
#
|
|
7
|
+
# apcoord:CoordinationPlan — DURABLE, SHARED, versioned. Multi-principal. Adopted by decision.
|
|
8
|
+
# apexec:ExecutionPlan — RUN-SPECIFIC. One goal, one executor, one loop (spec 330 §8).
|
|
9
|
+
# service-agent PrimitivePlan — the deterministic compile target (spec 316 §6; runtime-owned,
|
|
10
|
+
# typed as p-plan:Plan in A-box emission, no T-box class here).
|
|
11
|
+
#
|
|
12
|
+
# All are p-plan:Plan. They are related ONLY through compilation provenance
|
|
13
|
+
# (prov:wasDerivedFrom): a CoordinationPlan step COMPILES INTO run ExecutionPlans; it is never a
|
|
14
|
+
# synonym for one. The run bridge is p-plan:correspondsToStep + the spec-330 §9 qualified
|
|
15
|
+
# association — that pair is what makes a whole coordination process reconstructable: who
|
|
16
|
+
# (prov:agent + prov:hadRole), did what (activities), on what (prov:used, by hash), producing what
|
|
17
|
+
# (prov:generated), under WHICH plan step and revision (prov:hadPlan + correspondsToStep).
|
|
18
|
+
#
|
|
19
|
+
# A plan is never authority: activating, adopting, or corresponding to a plan grants nothing
|
|
20
|
+
# (capability-architecture §2 axiom 6; ADR-0041). No gate reads a p-plan: term.
|
|
21
|
+
|
|
22
|
+
@prefix p-plan: <http://purl.org/net/p-plan#> .
|
|
23
|
+
@prefix ep-plan: <https://w3id.org/ep-plan#> .
|
|
24
|
+
@prefix apcoord: <https://agenticprimitives.dev/ns/coordination#> .
|
|
25
|
+
@prefix apexec: <https://agenticprimitives.dev/ns/execution#> .
|
|
26
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
27
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
28
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
29
|
+
|
|
30
|
+
<https://agenticprimitives.dev/ns/plan> a owl:Ontology ;
|
|
31
|
+
rdfs:label "Agentic Primitives — P-Plan grounding" ;
|
|
32
|
+
owl:versionInfo "0.1.0" ;
|
|
33
|
+
rdfs:comment "Declares the imported P-Plan terms the substrate uses and grounds the plan-shaped objects (durable apcoord:CoordinationPlan, run-specific apexec:ExecutionPlan, service-agent PrimitivePlan) as p-plan:Plan. Spec 332 §4; spec 316 §6; spec 330 §9." .
|
|
34
|
+
|
|
35
|
+
# ═══ Imported P-Plan terms (declared so shapes and A-box rows target something real) ═══
|
|
36
|
+
|
|
37
|
+
p-plan:Plan a owl:Class ;
|
|
38
|
+
rdfs:subClassOf prov:Plan , prov:Entity ;
|
|
39
|
+
rdfs:label "Plan (P-Plan)" ;
|
|
40
|
+
rdfs:comment "A prescriptive description of intended activities. In this substrate every plan variant is a p-plan:Plan first." .
|
|
41
|
+
|
|
42
|
+
p-plan:Step a owl:Class ;
|
|
43
|
+
rdfs:label "Step (P-Plan)" ;
|
|
44
|
+
rdfs:comment "One planned element of a p-plan:Plan. Prescriptive — an executed activity CORRESPONDS to a step; it never IS the step." .
|
|
45
|
+
|
|
46
|
+
p-plan:Variable a owl:Class ;
|
|
47
|
+
rdfs:label "Variable (P-Plan)" ;
|
|
48
|
+
rdfs:comment "A typed input/output slot of a Step, bound at execution time to concrete entities (artifacts, context snapshots — referenced by hash)." .
|
|
49
|
+
|
|
50
|
+
p-plan:isStepOfPlan a owl:ObjectProperty ;
|
|
51
|
+
rdfs:domain p-plan:Step ; rdfs:range p-plan:Plan ;
|
|
52
|
+
rdfs:label "isStepOfPlan" .
|
|
53
|
+
|
|
54
|
+
p-plan:isPrecededBy a owl:ObjectProperty ;
|
|
55
|
+
rdfs:domain p-plan:Step ; rdfs:range p-plan:Step ;
|
|
56
|
+
rdfs:label "isPrecededBy" ;
|
|
57
|
+
rdfs:comment "Step ordering. apcoord:PlanEdge kind `precedes` projects onto this property; the richer typed edges (depends-on / alternative / condition / compensates / refines) stay apcoord:-reified." .
|
|
58
|
+
|
|
59
|
+
p-plan:correspondsToStep a owl:ObjectProperty ;
|
|
60
|
+
rdfs:domain prov:Activity ; rdfs:range p-plan:Step ;
|
|
61
|
+
rdfs:label "correspondsToStep" ;
|
|
62
|
+
rdfs:comment "THE run bridge: an executed activity (apexec:ServiceExecution / an apful:Task's activity) points at the durable planned step it enacted. Paired with the spec-330 §9 qualified association (prov:agent + prov:hadRole + prov:hadPlan = the exact adopted plan revision), this is what makes an Endeavor's whole process reconstructable." .
|
|
63
|
+
|
|
64
|
+
p-plan:hasInputVar a owl:ObjectProperty ;
|
|
65
|
+
rdfs:domain p-plan:Step ; rdfs:range p-plan:Variable ;
|
|
66
|
+
rdfs:label "hasInputVar" .
|
|
67
|
+
|
|
68
|
+
p-plan:hasOutputVar a owl:ObjectProperty ;
|
|
69
|
+
rdfs:domain p-plan:Step ; rdfs:range p-plan:Variable ;
|
|
70
|
+
rdfs:label "hasOutputVar" .
|
|
71
|
+
|
|
72
|
+
p-plan:isVariableOfPlan a owl:ObjectProperty ;
|
|
73
|
+
rdfs:domain p-plan:Variable ; rdfs:range p-plan:Plan ;
|
|
74
|
+
rdfs:label "isVariableOfPlan" .
|
|
75
|
+
|
|
76
|
+
# ═══ Imported EP-PLAN terms (https://w3id.org/ep-plan — Markovic/Garijo/Edwards/Vasconcelos) ═══
|
|
77
|
+
#
|
|
78
|
+
# EP-PLAN is the published PROV extension for EXACTLY our plan↔execution gap: it aligns with
|
|
79
|
+
# P-PLAN (ep-plan:correspondsToStep ≡ p-plan:correspondsToStep) and adds the four things P-PLAN
|
|
80
|
+
# lacks that this substrate already produces as facts without vocabulary:
|
|
81
|
+
#
|
|
82
|
+
# 1. the TRACE BUNDLE — projectEndeavorProvenance's per-Endeavor graph IS an
|
|
83
|
+
# ep-plan:ExecutionTraceBundle (⊑ prov:Bundle);
|
|
84
|
+
# 2. CONSTRAINTS + their EVALUATION — commitment bounds / plan-step criteria evaluated against
|
|
85
|
+
# trace activities, with satisfied/violated as facts, not inference;
|
|
86
|
+
# 3. OBJECTIVES — apcoord:OutcomeSpecification is what the plan is FOR;
|
|
87
|
+
# 4. STEP→PLAN DECOMPOSITION — the CoordinationPlan-step → run-ExecutionPlan compile bridge as
|
|
88
|
+
# a first-class relation (alongside prov:wasDerivedFrom).
|
|
89
|
+
#
|
|
90
|
+
# Deliberately NOT imported: ep-plan:Policy/ResponsibleAgent/hasPermittedAgent — anything reading
|
|
91
|
+
# like permission. A plan is never authority here (axiom above); authority stays with the
|
|
92
|
+
# delegation/entitlement/custody gates, so no term that could be misread as a gate input crosses
|
|
93
|
+
# the boundary. Communication* is fabric's job; MultiVariable/MultiStep wait for a reader.
|
|
94
|
+
|
|
95
|
+
ep-plan:ExecutionTraceBundle a owl:Class ;
|
|
96
|
+
rdfs:subClassOf prov:Bundle , prov:Entity ;
|
|
97
|
+
rdfs:label "Execution Trace Bundle (EP-PLAN)" ;
|
|
98
|
+
rdfs:comment "A collection of trace elements generated during a single plan execution. The graph projectEndeavorProvenance emits per Endeavor is one; its members attach via ep-plan:hasTraceElement." .
|
|
99
|
+
|
|
100
|
+
ep-plan:hasTraceElement a owl:ObjectProperty ;
|
|
101
|
+
rdfs:domain ep-plan:ExecutionTraceBundle ;
|
|
102
|
+
rdfs:label "hasTraceElement" ;
|
|
103
|
+
rdfs:comment "Links the bundle to its activities, agents, and entities. Range: prov:Activity ∪ prov:Agent ∪ prov:Entity." .
|
|
104
|
+
|
|
105
|
+
ep-plan:Constraint a owl:Class ;
|
|
106
|
+
rdfs:label "Constraint (EP-PLAN)" ;
|
|
107
|
+
rdfs:comment "A restriction placed on a step or plan, evaluated against the execution trace. Commitment bounds (deadline) and step-level requirements ground here. EP-PLAN explicitly does NOT require a constraint be satisfied for execution to continue — violations are recordable facts, which is what makes honest audit possible." .
|
|
108
|
+
|
|
109
|
+
ep-plan:hasConstraint a owl:ObjectProperty ;
|
|
110
|
+
rdfs:range ep-plan:Constraint ;
|
|
111
|
+
rdfs:label "hasConstraint" ;
|
|
112
|
+
rdfs:comment "Attaches a Constraint to a p-plan:Plan or Step (apcoord:CoordinationPlan / apcoord:PlanStep / apexec:ExecutionPlan)." .
|
|
113
|
+
|
|
114
|
+
ep-plan:ConstraintEvaluation a owl:Class ;
|
|
115
|
+
rdfs:label "Constraint Evaluation (EP-PLAN)" ;
|
|
116
|
+
rdfs:comment "Qualifies HOW a trace activity was checked against a constraint (evaluator, method, when). The reified form behind satisfied/violated — the same qualified-relation pattern as prov:qualifiedAssociation." .
|
|
117
|
+
|
|
118
|
+
ep-plan:evaluatedAgainst a owl:ObjectProperty ;
|
|
119
|
+
rdfs:range ep-plan:Constraint ;
|
|
120
|
+
rdfs:label "evaluatedAgainst" ;
|
|
121
|
+
rdfs:comment "A trace activity was evaluated against a constraint. Use the subproperties `satisfied` / `violated` to record the verdict as a FACT (never inferred from conversation — spec 334 §3 rule 2d applies to verdicts too)." .
|
|
122
|
+
|
|
123
|
+
ep-plan:satisfied a owl:ObjectProperty ;
|
|
124
|
+
rdfs:subPropertyOf ep-plan:evaluatedAgainst ;
|
|
125
|
+
rdfs:range ep-plan:Constraint ;
|
|
126
|
+
rdfs:label "satisfied" ;
|
|
127
|
+
rdfs:comment "The activity satisfied the constraint. apcoord PlanStepSatisfied events (with evidenceRefs) project here." .
|
|
128
|
+
|
|
129
|
+
ep-plan:violated a owl:ObjectProperty ;
|
|
130
|
+
rdfs:subPropertyOf ep-plan:evaluatedAgainst ;
|
|
131
|
+
rdfs:range ep-plan:Constraint ;
|
|
132
|
+
rdfs:label "violated" ;
|
|
133
|
+
rdfs:comment "The activity violated the constraint — recorded, never silently dropped (ADR-0013)." .
|
|
134
|
+
|
|
135
|
+
ep-plan:FailedActivity a owl:Class ;
|
|
136
|
+
rdfs:subClassOf prov:Activity ;
|
|
137
|
+
rdfs:label "Failed Activity (EP-PLAN)" ;
|
|
138
|
+
rdfs:comment "An activity not executed in full — the point where a plan execution was interrupted. Failed apexec executions / withdrawn-commitment steps type here so failure is a first-class trace fact." .
|
|
139
|
+
|
|
140
|
+
ep-plan:Objective a owl:Class ;
|
|
141
|
+
rdfs:label "Objective (EP-PLAN)" ;
|
|
142
|
+
rdfs:comment "The purpose a plan serves. apcoord:OutcomeSpecification grounds here: the outcome an Endeavor's adopted plan is FOR." .
|
|
143
|
+
|
|
144
|
+
ep-plan:isAchievedBy a owl:ObjectProperty ;
|
|
145
|
+
rdfs:domain ep-plan:Objective ;
|
|
146
|
+
rdfs:label "isAchievedBy" ;
|
|
147
|
+
rdfs:comment "Objective → the plan (or plan element) expected to achieve it. Inverse: ep-plan:achieves." .
|
|
148
|
+
|
|
149
|
+
ep-plan:achieves a owl:ObjectProperty ;
|
|
150
|
+
rdfs:range ep-plan:Objective ;
|
|
151
|
+
rdfs:label "achieves" ;
|
|
152
|
+
rdfs:comment "Plan (element) → Objective. apcoord:MilestoneAchievement / EndeavorSatisfied evidence projects onto this." .
|
|
153
|
+
|
|
154
|
+
ep-plan:isDecomposedAsPlan a owl:ObjectProperty ;
|
|
155
|
+
rdfs:range p-plan:Plan ;
|
|
156
|
+
rdfs:label "isDecomposedAsPlan" ;
|
|
157
|
+
rdfs:comment "THE compile bridge, named: an apcoord:PlanStep is decomposed as the run-specific apexec:ExecutionPlan that enacts it. Emitted ALONGSIDE prov:wasDerivedFrom (derivation says where the run plan came from; decomposition says which step it elaborates). EP-PLAN scopes the domain to MultiStep; we use it for any step that compiles to a plan and keep the domain open here." .
|
|
158
|
+
|
|
159
|
+
ep-plan:isSubPlanOfPlan a owl:ObjectProperty ;
|
|
160
|
+
rdfs:domain p-plan:Plan ; rdfs:range p-plan:Plan ;
|
|
161
|
+
rdfs:label "isSubPlanOfPlan" ;
|
|
162
|
+
rdfs:comment "Transitive plan containment — future CoordinationPlan hierarchies (child endeavor plans) without inventing a new relation." .
|
|
163
|
+
|
|
164
|
+
# ═══ Grounding the substrate's plan variants ═══
|
|
165
|
+
|
|
166
|
+
apexec:ExecutionPlan a owl:Class ;
|
|
167
|
+
rdfs:subClassOf p-plan:Plan ;
|
|
168
|
+
rdfs:label "ExecutionPlan" ;
|
|
169
|
+
rdfs:comment "RUN-SPECIFIC plan (spec 330 §8): one goal, one executor, one ADR-0044 loop. When it compiles an apcoord:PlanStep it is prov:wasDerivedFrom that step's adopted CoordinationPlan revision AND ep-plan:isDecomposedAsPlan of that step — never the durable shared plan itself. Declared here (ahead of the parked spec-330 W1) because plan.ttl owns the plan trichotomy; W1 extends, it does not rewrite." .
|
package/tbox/profile.ttl
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# T-box — the public agent PROFILE facet (spec 217 / 282 / 331; facet-registries.md §2, G2–G4).
|
|
2
|
+
#
|
|
3
|
+
# What this module owns: the SA-keyed, owner-written, unconditionally PUBLIC self-description
|
|
4
|
+
# published through `AgentProfileResolver` under `atl:*` predicates and projected into the
|
|
5
|
+
# discovery knowledge graph as `approf:*` (apps/demo-discovery-indexer PROFILE_KEYS).
|
|
6
|
+
#
|
|
7
|
+
# Until now `approf:` was a declared namespace with NO T-box file: `approf:displayName`,
|
|
8
|
+
# `approf:description` and `approf:skills` were emitted into the production graph by the indexer
|
|
9
|
+
# and read by the MCP without ever being declared. This module closes that (ADR-0009: on-chain
|
|
10
|
+
# ontology governs records; ADR-0013: no read path for an undeclared term).
|
|
11
|
+
#
|
|
12
|
+
# ── The identifier / prose split (ADR-0051, facet-registries §7) ─────────────────────────────
|
|
13
|
+
# The on-chain predicate key is `atl:skills` and is immutable (its id is keccak256("atl:skills"),
|
|
14
|
+
# already registered and already written into live agents' profiles). The T-box term is
|
|
15
|
+
# `approf:skills`. Both are OPAQUE KEYS. What they carry is a set of DECLARED CAPABILITY
|
|
16
|
+
# PROJECTIONS (aps:CapabilityProtocolProjection, related by aps:declaresCapability) — the weakest
|
|
17
|
+
# of the three assertion strengths. Prose and UI always say "capability".
|
|
18
|
+
#
|
|
19
|
+
# ── Assertion strength (capability-architecture.md §2) ───────────────────────────────────────
|
|
20
|
+
# Everything in this module is SELF-DECLARED and unverified. It feeds discovery FIT scoring only.
|
|
21
|
+
# Nothing here is a claim credential (aps:claimsCapability — private vault VC), nothing here is
|
|
22
|
+
# demonstrated (aps:demonstratedCapability — execution provenance), and nothing here authorizes
|
|
23
|
+
# anything (authority is delegation ∩ entitlement ∩ policy, at the gate).
|
|
24
|
+
|
|
25
|
+
@prefix approf: <https://agenticprimitives.dev/ns/profile#> .
|
|
26
|
+
@prefix ap: <https://agenticprimitives.dev/ns/core#> .
|
|
27
|
+
@prefix aps: <https://agenticprimitives.dev/ns/skill#> .
|
|
28
|
+
@prefix apctx: <https://agenticprimitives.dev/ns/context#> .
|
|
29
|
+
@prefix apg: <https://agenticprimitives.dev/ns/geo#> .
|
|
30
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
31
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
32
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
33
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
34
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
35
|
+
@prefix dul: <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#> .
|
|
36
|
+
|
|
37
|
+
approf: a owl:Ontology ;
|
|
38
|
+
rdfs:label "Agentic Primitives — public agent profile ontology" ;
|
|
39
|
+
owl:versionInfo "0.1.0" ;
|
|
40
|
+
rdfs:comment "SA-keyed public self-description projected from AgentProfileResolver. Owner-asserted, opt-in, unconditionally public, discovery-rankable. Self-declared evidence only — never a credential, never authority." .
|
|
41
|
+
|
|
42
|
+
approf:AgentProfile a owl:Class ;
|
|
43
|
+
rdfs:subClassOf ap:Facet , prov:Entity , dul:InformationObject ;
|
|
44
|
+
rdfs:label "AgentProfile" ;
|
|
45
|
+
rdfs:comment "The public self-description facet of ONE Smart Agent, keyed by the SA address (never by a name node — it must survive a rename and exist for nameless agents, ADR-0010/0020)." .
|
|
46
|
+
|
|
47
|
+
approf:describesAgent a owl:ObjectProperty ;
|
|
48
|
+
rdfs:domain approf:AgentProfile ; rdfs:range ap:CanonicalAgentId ;
|
|
49
|
+
rdfs:label "describesAgent" .
|
|
50
|
+
|
|
51
|
+
# ─── Existing, live predicates — declared here for the first time ───────────
|
|
52
|
+
|
|
53
|
+
approf:displayName a owl:DatatypeProperty ;
|
|
54
|
+
rdfs:domain approf:AgentProfile ; rdfs:range xsd:string ;
|
|
55
|
+
rdfs:label "displayName" ;
|
|
56
|
+
rdfs:comment "atl:displayName. The agent's own public display name. Distinct from the name-node label and from any vault display name (agent-metadata-tiers.md: same field name ≠ same field; never auto-synced)." .
|
|
57
|
+
|
|
58
|
+
approf:description a owl:DatatypeProperty ;
|
|
59
|
+
rdfs:domain approf:AgentProfile ; rdfs:range xsd:string ;
|
|
60
|
+
rdfs:label "description" ;
|
|
61
|
+
rdfs:comment "atl:description, SA-keyed. NOT the node-keyed name-record description (apnam:description) — facet-registries G8: emitting both under this IRI lets tier 2 clobber tier 3 by loop order. Free text; a SECONDARY carrier only, never a structured filter target." .
|
|
62
|
+
|
|
63
|
+
approf:skills a owl:DatatypeProperty ;
|
|
64
|
+
rdfs:domain approf:AgentProfile ; rdfs:range xsd:string ;
|
|
65
|
+
rdfs:label "skills (declared capability projections)" ;
|
|
66
|
+
rdfs:comment "atl:skills (spec 282). Comma-joined DECLARED CAPABILITY PROJECTIONS — aps:CapabilityProtocolProjection nodes related by aps:declaresCapability. Legacy key retained for ABI (ADR-0051); prose says 'declared capabilities'. Spec 331 migrates the value space from free-text labels to canonical catalog capability ids." .
|
|
67
|
+
|
|
68
|
+
approf:declaresCapabilityId a owl:DatatypeProperty ;
|
|
69
|
+
rdfs:domain approf:AgentProfile ; rdfs:range xsd:string ;
|
|
70
|
+
rdfs:label "declaresCapabilityId" ;
|
|
71
|
+
rdfs:comment "Spec 331 — the PARSED, resolvable capability id carried inside an approf:skills token (e.g. 'adv:estate-planning'). One triple per id, projected by the indexer so the matcher can do set-membership instead of substring search. The datatype is a string, not an IRI, because the token is exactly what the agent wrote on chain; resolution to an aps:Capability IRI is the catalog's job and may fail (an unresolvable id is an honest miss, never a silent skip — ADR-0013)." .
|
|
72
|
+
|
|
73
|
+
# ─── G2 / G3 / G4 — the three facets registered by governor tx
|
|
74
|
+
# 0x53acec54d850b8a790da4feda055abf81a0c2f203c1a69d0644d1a1138a18789 ──────
|
|
75
|
+
|
|
76
|
+
approf:languages a owl:DatatypeProperty ;
|
|
77
|
+
rdfs:domain approf:AgentProfile ; rdfs:range xsd:string ;
|
|
78
|
+
rdfs:label "languages" ;
|
|
79
|
+
apctx:classifiedBy apctx:LanguageFacet ;
|
|
80
|
+
rdfs:comment "atl:languages (facet-registries G2). VALUE SPACE: comma-separated BCP-47 language tags, normalized lowercase, e.g. 'es,en,pt-br'. Matching is subtag-prefix based ('es' matches 'es-ES'), never substring. A flat string for parity with atl:skills; per-language proficiency waits for spec 330 and is a value-space migration inside this one predicate, not a new one. RANKING ROLE: soft boost, plus an OPT-IN hard mandate (requireLanguage) that a caller must ask for explicitly." .
|
|
81
|
+
|
|
82
|
+
approf:regions a owl:DatatypeProperty ;
|
|
83
|
+
rdfs:domain approf:AgentProfile ; rdfs:range xsd:string ;
|
|
84
|
+
rdfs:label "regions" ;
|
|
85
|
+
apctx:classifiedBy apctx:JurisdictionFacet ;
|
|
86
|
+
rdfs:comment "atl:regions (facet-registries G3). VALUE SPACE: comma-separated UPPERCASE codes drawn from the GeoFeatureRegistry controlled vocabulary (spec 251) — ISO 3166-1 alpha-2, ISO 3166-2 subdivisions, or a registered supranational feature code, e.g. 'EU,ES,ES-CT'. Requiring the value space to be GeoFeatureRegistry-drawn is what makes a later upgrade to explicit (featureId, version) references a VALUE-SPACE migration inside one predicate rather than a new predicate + projector + UI. RELATION COLLAPSE (accepted v1 limitation): this flattens the five apg:geoRelation values — servesWithin, operatesIn, licensedIn, residentOf, originIn — into one list. servesWithin and licensedIn are materially different claims for a regulated advisor; if that distinction becomes load-bearing, add a second predicate (atl:licensedIn), never structure inside this string. The full truth stays in the private apg: GeoClaimCredential." .
|
|
87
|
+
|
|
88
|
+
approf:focusAreas a owl:DatatypeProperty ;
|
|
89
|
+
rdfs:domain approf:AgentProfile ; rdfs:range xsd:string ;
|
|
90
|
+
rdfs:label "focusAreas" ;
|
|
91
|
+
apctx:classifiedBy apctx:KnowledgeDomain ;
|
|
92
|
+
rdfs:comment "atl:focusAreas (facet-registries G4). VALUE SPACE: comma-separated subject-domain labels, lowercase-hyphenated, e.g. 'modelo-720,forced-heirship'. Maps to the apctx:KnowledgeDomain facet so it stays ORTHOGONAL to capability identity — a focus area is a subject, never a declared capability (ADR-0051). RANKING ROLE: fitScore boost ONLY, capped hardest of the three. It must NEVER become a hard filter: a focus area is an emphasis, not a boundary, and an agent that has not published one is UNKNOWN, not absent." .
|
|
93
|
+
|
|
94
|
+
# ─── The value-space anchors these three point at ───────────────────────────
|
|
95
|
+
|
|
96
|
+
approf:regionVocabulary a owl:AnnotationProperty ;
|
|
97
|
+
rdfs:label "regionVocabulary" ;
|
|
98
|
+
rdfs:comment "Declares which controlled vocabulary an approf:regions value space draws from. Points at apg: (GeoFeatureRegistry) — see cbox/profile-facet-vocabulary.ttl." .
|
|
99
|
+
|
|
100
|
+
approf:regions approf:regionVocabulary apg:geoKind .
|
package/tbox/skills.ttl
CHANGED
|
@@ -120,3 +120,135 @@ aps:matchedSkill a owl:ObjectProperty ;
|
|
|
120
120
|
rdfs:subPropertyOf aps:matchedCapability ;
|
|
121
121
|
rdfs:domain aps:IntentCapabilityMatch ; rdfs:range aps:CapabilityDefinition ;
|
|
122
122
|
rdfs:label "matchedSkill (deprecated)" .
|
|
123
|
+
|
|
124
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
125
|
+
# Capability IDENTITY, the independent relations, and CATALOGS
|
|
126
|
+
# (spec 330 W0 §5 — unparked by spec 331; capability-architecture.md §2 + §8)
|
|
127
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
128
|
+
#
|
|
129
|
+
# Prefixes used below beyond the header: apctx: (context facets), apguide: (playbooks),
|
|
130
|
+
# apexec: (executions — declared in spec 330 W1, referenced here by IRI only), prov:, skos:.
|
|
131
|
+
#
|
|
132
|
+
# THE DISTINCTION THIS SECTION EXISTS TO HOLD (architecture §1):
|
|
133
|
+
# aps:Capability — the stable, provider-independent IDENTITY of an outcome.
|
|
134
|
+
# aps:CapabilityDefinition — a VERSIONED artifact that defines it (above).
|
|
135
|
+
# aps:CapabilityProtocolProjection — an ADVERTISEMENT of it (a card AgentSkill, an
|
|
136
|
+
# atl:skills token, an offering). Above.
|
|
137
|
+
# Until now identity was implicit in the definition. Spec 331 mints it explicitly, because a
|
|
138
|
+
# domain catalog needs many agents to reference ONE id across MANY definition versions.
|
|
139
|
+
|
|
140
|
+
@prefix apctx: <https://agenticprimitives.dev/ns/context#> .
|
|
141
|
+
@prefix apguide: <https://agenticprimitives.dev/ns/guidance#> .
|
|
142
|
+
@prefix apexec: <https://agenticprimitives.dev/ns/execution#> .
|
|
143
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
144
|
+
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
|
|
145
|
+
@prefix sh: <http://www.w3.org/ns/shacl#> .
|
|
146
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
147
|
+
|
|
148
|
+
aps:Capability a owl:Class ;
|
|
149
|
+
rdfs:label "Capability" ;
|
|
150
|
+
rdfs:comment "The stable, provider-independent identity of an achievable OUTCOME. Not a service, not a plan, not a taxonomy term, not an execution, and not a subject domain. Its identity NEVER depends on one provider, one jurisdiction, one language, or one playbook — those are apctx: facets of a realization. A capability is not a prov:Activity: it is what COULD be achieved; an activity is an occurrence that attempted it (architecture §5)." .
|
|
151
|
+
|
|
152
|
+
aps:CapabilityCatalog a owl:Class ;
|
|
153
|
+
rdfs:label "CapabilityCatalog" ;
|
|
154
|
+
rdfs:comment "A named, versioned, steward-owned set of capability definitions for one bounded context (e.g. the family-office advisory catalog, spec 331). A catalog is a DISTRIBUTION and GOVERNANCE unit, never a taxonomy: membership implies no hierarchy, and a capability may appear in several catalogs." .
|
|
155
|
+
|
|
156
|
+
aps:catalogSteward a owl:ObjectProperty ;
|
|
157
|
+
rdfs:domain aps:CapabilityCatalog ; rdfs:range ap:CanonicalAgentId ;
|
|
158
|
+
rdfs:label "catalogSteward" ;
|
|
159
|
+
rdfs:comment "The account authorized to publish/version definitions in this catalog (SkillDefinitionRegistry stewardAccount)." .
|
|
160
|
+
|
|
161
|
+
aps:inCatalog a owl:ObjectProperty ;
|
|
162
|
+
rdfs:domain aps:CapabilityDefinition ; rdfs:range aps:CapabilityCatalog ;
|
|
163
|
+
rdfs:label "inCatalog" .
|
|
164
|
+
|
|
165
|
+
aps:capabilityId a owl:DatatypeProperty ;
|
|
166
|
+
rdfs:domain aps:Capability ; rdfs:range xsd:string ;
|
|
167
|
+
rdfs:label "capabilityId" ;
|
|
168
|
+
rdfs:comment "The canonical, human-readable, STABLE id string (a CURIE, e.g. 'adv:succession-plan-design'). keccak256 of this exact string is the on-chain SkillDefinitionRegistry skillId — the same keccak-of-CURIE convention atl:* predicates use. Once published it is never re-spelled: a rename is a new capability plus a skos:exactMatch, never an edit." .
|
|
169
|
+
|
|
170
|
+
aps:outcomeStatement a owl:DatatypeProperty ;
|
|
171
|
+
rdfs:domain aps:CapabilityDefinition ; rdfs:range xsd:string ;
|
|
172
|
+
rdfs:label "outcomeStatement" ;
|
|
173
|
+
rdfs:comment "One sentence in the PASSIVE COMPLETED voice naming what is true when the capability has been realized ('a target asset allocation and its implementation are determined for a stated mandate'). Written this way deliberately: an outcome statement that can only be phrased as an activity ('advises on…') is a signal the term is a service or a subject domain, not a capability." .
|
|
174
|
+
|
|
175
|
+
# ─── The independent relations. NEVER an overloaded `implementsCapability`. ──
|
|
176
|
+
|
|
177
|
+
aps:definesCapability a owl:ObjectProperty ;
|
|
178
|
+
rdfs:domain aps:CapabilityDefinition ; rdfs:range aps:Capability ;
|
|
179
|
+
rdfs:label "definesCapability" ;
|
|
180
|
+
rdfs:comment "Which versioned artifact defines it. Many definition VERSIONS, one capability identity." .
|
|
181
|
+
|
|
182
|
+
aps:classifiesCapability a owl:ObjectProperty ;
|
|
183
|
+
rdfs:range aps:Capability ;
|
|
184
|
+
rdfs:label "classifiesCapability" ;
|
|
185
|
+
rdfs:comment "External taxon → capability, via SKOS alignment. Classification is never possession and never authorization (architecture §2 axiom 4). External taxa are ALIGNED, never term-copied into this T-box (invariant 11)." .
|
|
186
|
+
|
|
187
|
+
aps:assertsCapability a owl:ObjectProperty ;
|
|
188
|
+
rdfs:range aps:Capability ;
|
|
189
|
+
rdfs:label "assertsCapability" ;
|
|
190
|
+
rdfs:comment "Abstract parent of the three ASSERTION STRENGTHS. They are subproperties rather than a datatype rank because the asserter and the verification path differ STRUCTURALLY, not in degree. They must be surfaced to users separately and never summed as one signal." .
|
|
191
|
+
|
|
192
|
+
aps:declaresCapability a owl:ObjectProperty ;
|
|
193
|
+
rdfs:subPropertyOf aps:assertsCapability ; rdfs:range aps:Capability ;
|
|
194
|
+
rdfs:label "declaresCapability" ;
|
|
195
|
+
rdfs:comment "SELF-declared, owner-signed, UNVERIFIED: an atl:skills token, a card AgentSkill, a crawled offering. Costs one transaction and nothing else — anyone may declare anything. Feeds discovery FIT scoring only, and must never be presented as endorsement." .
|
|
196
|
+
|
|
197
|
+
aps:claimsCapability a owl:ObjectProperty ;
|
|
198
|
+
rdfs:subPropertyOf aps:assertsCapability ; rdfs:range aps:Capability ;
|
|
199
|
+
rdfs:label "claimsCapability" ;
|
|
200
|
+
rdfs:comment "CREDENTIALED: an aps:SkillClaim credential (self or endorsed), vault-resident, referencing an on-chain (definitionId, version). A SELF claim is bounded (SELF_MAX_PROFICIENCY) and forbidden the endorsement relations; an ENDORSED claim carries a distinct issuer. Feeds TRUST scoring — and only through its public commitment, never its body (ADR-0040)." .
|
|
201
|
+
|
|
202
|
+
aps:demonstratedCapability a owl:ObjectProperty ;
|
|
203
|
+
rdfs:subPropertyOf aps:assertsCapability ; rdfs:range aps:Capability ;
|
|
204
|
+
rdfs:label "demonstratedCapability" ;
|
|
205
|
+
rdfs:comment "EARNED: evidenced by execution provenance — a conforming apexec:ServiceExecution that realized the capability. Derived, never asserted by the subject. Feeds an OUTCOME signal, and is the only assertion strength that cannot be produced by writing a string." .
|
|
206
|
+
|
|
207
|
+
# ─── Structure: a DAG of composition/specialisation, never a single-parent tree ──
|
|
208
|
+
|
|
209
|
+
aps:specializesCapability a owl:ObjectProperty ;
|
|
210
|
+
rdfs:domain aps:Capability ; rdfs:range aps:Capability ;
|
|
211
|
+
a owl:TransitiveProperty ;
|
|
212
|
+
rdfs:label "specializesCapability" ;
|
|
213
|
+
rdfs:comment "A genuinely NARROWER FORM OF THE SAME ability (private fund diligence ⊏ manager selection & diligence). Multi-parent is legal and expected; only cycles are forbidden. NOT rdfs:subClassOf — capabilities are individuals, not classes, and subclassing them would make every facet stack into a hierarchy. A jurisdiction, a language or an asset class is NEVER a specialization: those are apctx: facets." .
|
|
214
|
+
|
|
215
|
+
aps:hasComponentCapability a owl:ObjectProperty ;
|
|
216
|
+
rdfs:domain aps:Capability ; rdfs:range aps:Capability ;
|
|
217
|
+
rdfs:label "hasComponentCapability" ;
|
|
218
|
+
rdfs:comment "A broader outcome DEPENDS ON constituent abilities that are part of achieving it. NO ORDERING is implied — ordering lives in an apexec:ExecutionPlan (apexec:precedes), never in capability semantics (architecture invariant 8)." .
|
|
219
|
+
|
|
220
|
+
aps:requiresCapability a owl:ObjectProperty ;
|
|
221
|
+
rdfs:domain aps:Capability ; rdfs:range aps:Capability ;
|
|
222
|
+
rdfs:label "requiresCapability" ;
|
|
223
|
+
rdfs:comment "A DEPENDENCY: the object must be realizable for the subject to be realizable, but is not a part of it (covenant analysis requires secured-lending structuring — you cannot stress-test a facility that was never structured). Distinct from hasComponentCapability, which is part-of." .
|
|
224
|
+
|
|
225
|
+
apguide:supportsCapability a owl:ObjectProperty ;
|
|
226
|
+
rdfs:range aps:Capability ;
|
|
227
|
+
rdfs:label "supportsCapability" ;
|
|
228
|
+
rdfs:comment "AgentSkillPackage (SKILL.md playbook) → capability, 0..N. Which plans MAY inform a realization. GUIDANCE ONLY — never authority, never identity (ADR-0050). A card projection is never wired to exactly one playbook (architecture §2 axiom 1)." .
|
|
229
|
+
|
|
230
|
+
apexec:realizesCapability a owl:ObjectProperty ;
|
|
231
|
+
rdfs:range aps:Capability ;
|
|
232
|
+
rdfs:label "realizesCapability" ;
|
|
233
|
+
rdfs:comment "ServiceExecution → capability. What actually occurred. Declared here (the aps: module owns the capability end of the relation); the apexec: classes land with spec 330 W1." .
|
|
234
|
+
|
|
235
|
+
# ─── Realization contracts ──────────────────────────────────────────────────
|
|
236
|
+
|
|
237
|
+
aps:CapabilityRealizationContract a owl:Class ;
|
|
238
|
+
rdfs:subClassOf sh:NodeShape ;
|
|
239
|
+
rdfs:label "CapabilityRealizationContract" ;
|
|
240
|
+
rdfs:comment "A SHACL shape over PROV stating what a CONFORMING realization of one capability must contain: activity type, required prov:agent roles, prov:used input types, prov:generated output types, the prov:qualifiedAssociation carrying prov:hadPlan, and completion conditions. It governs SHAPE, not outcome — a recorded decline is a conforming realization. It is NOT a test suite and NOT an authorization: no gate may read it." .
|
|
241
|
+
|
|
242
|
+
aps:hasRealizationContract a owl:ObjectProperty ;
|
|
243
|
+
rdfs:domain aps:CapabilityDefinition ; rdfs:range aps:CapabilityRealizationContract ;
|
|
244
|
+
rdfs:label "hasRealizationContract" .
|
|
245
|
+
|
|
246
|
+
aps:contractStatus a owl:DatatypeProperty ;
|
|
247
|
+
rdfs:domain aps:CapabilityDefinition ; rdfs:range xsd:string ;
|
|
248
|
+
rdfs:label "contractStatus" ;
|
|
249
|
+
rdfs:comment "'enforced' | 'deferred'. DEFERRED IS FIRST-CLASS AND HONEST: a capability whose realizations this substrate cannot yet observe declares 'deferred' plus the evidence that would be needed, rather than carrying a contract nothing validates. An unenforceable contract is worse than an absent one — it makes a claim about verification the system cannot keep (ADR-0013)." .
|
|
250
|
+
|
|
251
|
+
aps:deferredContractRationale a owl:DatatypeProperty ;
|
|
252
|
+
rdfs:domain aps:CapabilityDefinition ; rdfs:range xsd:string ;
|
|
253
|
+
rdfs:label "deferredContractRationale" ;
|
|
254
|
+
rdfs:comment "Required when contractStatus = 'deferred': one line naming the evidence that would make a contract enforceable." .
|
package/tbox/trust.ttl
CHANGED
|
@@ -88,3 +88,123 @@ aptrust:hasTrustScore a owl:ObjectProperty ;
|
|
|
88
88
|
rdfs:domain apdisc:TrustDetermination ;
|
|
89
89
|
rdfs:range aptrust:TrustScore ;
|
|
90
90
|
rdfs:label "hasTrustScore" .
|
|
91
|
+
|
|
92
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
93
|
+
# T-BOX PROMOTION of the projected trust-fabric terms (facet-registries G1; spec 331)
|
|
94
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
95
|
+
#
|
|
96
|
+
# WHAT WAS WRONG. `apps/demo-discovery-indexer/src/ontology.ts` coined a set of `ap:` terms for
|
|
97
|
+
# the relationship and attestation projectors and wrote them into the production graph;
|
|
98
|
+
# `apps/demo-discovery-mcp/src/graphdb.ts` queries them by name (`?e ap:edgeId ?eid ;
|
|
99
|
+
# ap:edgeSubject ?subj ; ap:edgeObject ?obj ; …`). None of them were ever declared in a T-box.
|
|
100
|
+
# `aprel:` is a declared namespace with no module and no terms, and this file typed the EDGE
|
|
101
|
+
# (aptrust:TrustGraphEdge) while declaring nothing about its subject, object, type or status.
|
|
102
|
+
# The result was a live query path over undeclared vocabulary — exactly the read-path-without-a-
|
|
103
|
+
# definition condition ADR-0013 forbids, and the mirror image of gap G5 on the write side.
|
|
104
|
+
#
|
|
105
|
+
# WHY THE `ap:` PREFIX IS RETAINED RATHER THAN RE-MINTED AS `aptrust:` OR `aprel:`.
|
|
106
|
+
# The IRIs are already in the deployed GraphDB and already in the MCP's SPARQL query TEXT.
|
|
107
|
+
# Re-prefixing them is a graph migration plus a coordinated Worker deploy, not an edit — and it
|
|
108
|
+
# would buy nothing semantic, because a T-box term's namespace is not its meaning. This follows
|
|
109
|
+
# the established discipline (facet-registries §7, ADR-0051): IDENTIFIERS KEEP THEIR NAMES, prose
|
|
110
|
+
# and docs use the canonical term. The alternative considered and rejected was declaring `aptrust:`
|
|
111
|
+
# twins as owl:equivalentProperty aliases — that is a SECOND mechanism for one read path, which
|
|
112
|
+
# ADR-0013 forbids more strongly than it forbids an awkward prefix.
|
|
113
|
+
#
|
|
114
|
+
# NOTHING IS MINTED HERE. Every term below is verbatim the IRI the indexer already emits.
|
|
115
|
+
# Promotion is a declaration, not a change; the graph is unaffected.
|
|
116
|
+
#
|
|
117
|
+
# ENDPOINT-RELATIVE vs ABSOLUTE — the invariant that decides which properties sit where.
|
|
118
|
+
# One on-chain AgentRelationship edge is ONE record shared by both endpoints, and the edge node's
|
|
119
|
+
# IRI derives from the deterministic on-chain edgeId, so BOTH agents project the SAME subject.
|
|
120
|
+
# Its properties must therefore be endpoint-INDEPENDENT. `ap:edgeDirection` and `ap:relatedAgent`
|
|
121
|
+
# are meaningful only relative to whoever is looking, so they hang on the AGENT; the shared edge
|
|
122
|
+
# node states subject and object ABSOLUTELY.
|
|
123
|
+
|
|
124
|
+
@prefix apreg: <https://agenticprimitives.dev/ns/registry#> .
|
|
125
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
126
|
+
|
|
127
|
+
# ─── Agent → child-node facet links ─────────────────────────────────────────
|
|
128
|
+
|
|
129
|
+
ap:hasRelationship a owl:ObjectProperty ;
|
|
130
|
+
rdfs:domain ap:Agent ; rdfs:range aptrust:TrustGraphEdge ;
|
|
131
|
+
rdfs:label "hasRelationship" ;
|
|
132
|
+
rdfs:comment "Agent → a projected AgentRelationship edge it is an endpoint of (either side)." .
|
|
133
|
+
|
|
134
|
+
ap:hasAttestation a owl:ObjectProperty ;
|
|
135
|
+
rdfs:domain ap:Agent ; rdfs:range apatt:Attestation ;
|
|
136
|
+
rdfs:label "hasAttestation" ;
|
|
137
|
+
rdfs:comment "Agent → an AttestationRegistry row in which it is the SUBJECT. Issuer-side rows are not projected onto the issuer: an attestation is evidence ABOUT its subject." .
|
|
138
|
+
|
|
139
|
+
# ─── Edge-node properties — ABSOLUTE, endpoint-independent ──────────────────
|
|
140
|
+
|
|
141
|
+
ap:edgeId a owl:DatatypeProperty ;
|
|
142
|
+
rdfs:domain aptrust:TrustGraphEdge ; rdfs:range xsd:string ;
|
|
143
|
+
rdfs:label "edgeId" ;
|
|
144
|
+
rdfs:comment "The deterministic on-chain edgeId = computeEdgeId(subject, object, relationshipType). The edge node's IRI derives from it, which is why both endpoints project one shared node." .
|
|
145
|
+
|
|
146
|
+
ap:edgeSubject a owl:ObjectProperty ;
|
|
147
|
+
rdfs:domain aptrust:TrustGraphEdge ; rdfs:range ap:CanonicalAgentId ;
|
|
148
|
+
rdfs:label "edgeSubject" ;
|
|
149
|
+
rdfs:comment "The SA that PROPOSED the edge. On-chain `proposeEdge` requires msg.sender == subject, so this is structurally the proposing party — never inferred, never symmetric with edgeObject." .
|
|
150
|
+
|
|
151
|
+
ap:edgeObject a owl:ObjectProperty ;
|
|
152
|
+
rdfs:domain aptrust:TrustGraphEdge ; rdfs:range ap:CanonicalAgentId ;
|
|
153
|
+
rdfs:label "edgeObject" ;
|
|
154
|
+
rdfs:comment "The SA that CONFIRMED the edge. An edge reaches ACTIVE only through PROPOSED → CONFIRMED → ACTIVE, so an active edge is bilateral by construction: both parties consented on chain." .
|
|
155
|
+
|
|
156
|
+
ap:relationshipType a owl:DatatypeProperty ;
|
|
157
|
+
rdfs:domain aptrust:TrustGraphEdge ; rdfs:range xsd:string ;
|
|
158
|
+
rdfs:label "relationshipType" ;
|
|
159
|
+
rdfs:comment "The well-known label ('HAS_MEMBER', 'VALIDATION_TRUST', 'RECOMMENDS', …) when the type hash resolves; absent otherwise. Never a substitute for relationshipTypeId." .
|
|
160
|
+
|
|
161
|
+
ap:relationshipTypeId a owl:DatatypeProperty ;
|
|
162
|
+
rdfs:domain aptrust:TrustGraphEdge ; rdfs:range xsd:string ;
|
|
163
|
+
rdfs:label "relationshipTypeId" ;
|
|
164
|
+
rdfs:comment "The raw on-chain bytes32 type id, ALWAYS emitted — an unresolved governor-registered type must still be queryable (ADR-0013: no silent gaps)." .
|
|
165
|
+
|
|
166
|
+
ap:edgeStatus a owl:DatatypeProperty ;
|
|
167
|
+
rdfs:domain aptrust:TrustGraphEdge ; rdfs:range xsd:string ;
|
|
168
|
+
rdfs:label "edgeStatus" ;
|
|
169
|
+
rdfs:comment "'PROPOSED' | 'CONFIRMED' | 'ACTIVE' | 'REVOKED'. Only ACTIVE edges may inform trust scoring — a proposal is one party talking to itself, and revocation is terminal." .
|
|
170
|
+
|
|
171
|
+
# ─── Agent-level, endpoint-RELATIVE denormalizations ────────────────────────
|
|
172
|
+
|
|
173
|
+
ap:relatedAgent a owl:ObjectProperty ;
|
|
174
|
+
rdfs:domain ap:Agent ; rdfs:range ap:CanonicalAgentId ;
|
|
175
|
+
rdfs:label "relatedAgent" ;
|
|
176
|
+
rdfs:comment "The COUNTERPARTY as seen from this agent. Endpoint-relative by construction, hence on the agent and never on the shared edge node." .
|
|
177
|
+
|
|
178
|
+
ap:edgeDirection a owl:DatatypeProperty ;
|
|
179
|
+
rdfs:domain ap:Agent ; rdfs:range xsd:string ;
|
|
180
|
+
rdfs:label "edgeDirection" ;
|
|
181
|
+
rdfs:comment "'subject' | 'object' — which end of the edge THIS agent occupies. Endpoint-relative; see ap:relatedAgent." .
|
|
182
|
+
|
|
183
|
+
ap:edgeCount a owl:DatatypeProperty ;
|
|
184
|
+
rdfs:domain ap:Agent ; rdfs:range xsd:integer ; rdfs:label "edgeCount" .
|
|
185
|
+
|
|
186
|
+
ap:activeEdgeCount a owl:DatatypeProperty ;
|
|
187
|
+
rdfs:domain ap:Agent ; rdfs:range xsd:integer ;
|
|
188
|
+
rdfs:label "activeEdgeCount" ;
|
|
189
|
+
rdfs:comment "Edges in ACTIVE status only. This is the count trustScore reads, and it saturates fast — a public edge is cheap to create, so it is corroboration, never authority." .
|
|
190
|
+
|
|
191
|
+
# ─── Attestation terms with no apatt: home (the T-box does not model the
|
|
192
|
+
# on-chain struct's issuer or its isValid(uid) view) ─────────────────────
|
|
193
|
+
|
|
194
|
+
ap:attestationIssuer a owl:ObjectProperty ;
|
|
195
|
+
rdfs:domain apatt:Attestation ; rdfs:range ap:CanonicalAgentId ;
|
|
196
|
+
rdfs:label "attestationIssuer" ;
|
|
197
|
+
rdfs:comment "The asserting party. AttestationRegistry leaves msg.sender UNCONSTRAINED and derives authority from a recomputed EIP-712 signature, so the issuer here is the SIGNER, never the transaction sender. This is what makes third-party endorsement relayable without the issuer holding gas — the property spec 331's endorsement ceremony depends on." .
|
|
198
|
+
|
|
199
|
+
ap:attestationValid a owl:DatatypeProperty ;
|
|
200
|
+
rdfs:domain apatt:Attestation ; rdfs:range xsd:boolean ;
|
|
201
|
+
rdfs:label "attestationValid" ;
|
|
202
|
+
rdfs:comment "The contract's isValid(uid) verdict at index time. Note AR-06: there is NO issuer-revoke entrypoint — only the holder or a party may revoke on chain; issuer-side revocation is off-chain via offchainCredentialStatusList and is therefore NOT reflected here." .
|
|
203
|
+
|
|
204
|
+
ap:attestationCount a owl:DatatypeProperty ;
|
|
205
|
+
rdfs:domain ap:Agent ; rdfs:range xsd:integer ; rdfs:label "attestationCount" .
|
|
206
|
+
|
|
207
|
+
ap:validAttestationCount a owl:DatatypeProperty ;
|
|
208
|
+
rdfs:domain ap:Agent ; rdfs:range xsd:integer ;
|
|
209
|
+
rdfs:label "validAttestationCount" ;
|
|
210
|
+
rdfs:comment "Non-revoked attestations where this agent is the SUBJECT. The count trustScore reads." .
|