@agenticprimitives/ontology 1.0.0-alpha.20 → 1.0.0-alpha.22

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.
@@ -0,0 +1,284 @@
1
+ # T-box — Agentic Interaction: the canonical bounded context (spec 340; ADR-0058, extending ADR-0048).
2
+ #
3
+ # WHY THIS NAMESPACE IS `apix:` AND NOT `apfab:`. `apfab:` was named after the PACKAGE that implements
4
+ # these concepts. That binds the vocabulary to a deployment decision and forces every reader to know
5
+ # which runtime owns which meaning before they can read a triple. Concepts get named after concepts.
6
+ # `packages/fabric` remains the Ring-0 operational realization (ADR-0047) — it is not the semantic owner.
7
+ #
8
+ # THE SPINE, in one line each. Getting these apart is the entire point of the file:
9
+ #
10
+ # Interaction the durable GOVERNED SITUATION — participants, profile, state, commitments
11
+ # Exchange one IMMUTABLE SIGNED UNIT crossing the interaction boundary
12
+ # Act what the actor is COMMUNICATIVELY DOING (ask, offer, counter, command…)
13
+ # Content the THING the act is about (a Question, an Offer, a Command) — optional
14
+ # Commitment a NORMATIVE OBLIGATION some acts create, modify or discharge
15
+ # Receipt ATTESTED EVIDENCE that something occurred — never that it was authorized
16
+ #
17
+ # An Exchange without an Interaction is a message. An Interaction without Exchanges is an empty room.
18
+ #
19
+ # THE INVARIANT EVERYTHING ELSE RESTS ON: no communicative act is execution authority. A signed Command
20
+ # is a recorded request. It creates no execution without an independent authority decision, which lives
21
+ # in `delegation` + `entitlements` + `tool-policy` and is re-evaluated at the moment of acting
22
+ # (ADR-0043, ADR-0041). This ontology is safe to make expressive precisely because it confers nothing.
23
+
24
+ @prefix apix: <https://agenticprimitives.dev/ns/interaction#> .
25
+ @prefix apmsg: <https://agenticprimitives.dev/ns/messaging#> .
26
+ @prefix apint: <https://agenticprimitives.dev/ns/intent#> .
27
+ @prefix apsit: <https://agenticprimitives.dev/ns/situation#> .
28
+ @prefix ap: <https://agenticprimitives.dev/ns/core#> .
29
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
30
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
31
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
32
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
33
+ @prefix prov: <http://www.w3.org/ns/prov#> .
34
+ @prefix p-plan: <http://purl.org/net/p-plan#> .
35
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
36
+
37
+ apix: a owl:Ontology ;
38
+ rdfs:label "Agentic Primitives — Agentic Interaction" ;
39
+ owl:versionInfo "1.0.0" ;
40
+ rdfs:comment "Canonical semantics for governed exchange between agents. Realized operationally by packages/fabric; confers no authority (ADR-0058)." .
41
+
42
+ # ─── The situation ──────────────────────────────────────────────────────────
43
+
44
+ apix:Interaction a owl:Class ;
45
+ rdfs:subClassOf apsit:Situation, prov:Entity ;
46
+ rdfs:label "Interaction" ;
47
+ rdfs:comment "A durable governed situation among Person/Organization/Service agents, realized through immutable signed Exchanges. It is NOT a message, a thread, or a task. It persists across exchanges, participants joining and leaving, and profile versions." .
48
+
49
+ apix:InteractionProfile a owl:Class ;
50
+ rdfs:subClassOf apsit:SituationDescription, prov:Plan, p-plan:Plan ;
51
+ rdfs:label "InteractionProfile" ;
52
+ rdfs:comment "A VERSIONED description of one interaction kind: permitted roles, permitted acts, required contexts, state machine, authority requirements, shapes. This replaces frozen `kind`/`state` enums — a new interaction type is a new profile, not a schema change. Pinned by version into every Exchange so a Negotiation cannot be downgraded to a Conversation." .
53
+
54
+ apix:Participation a owl:Class ;
55
+ rdfs:subClassOf apsit:SituationParticipation, prov:Entity ;
56
+ rdfs:label "Participation" ;
57
+ rdfs:comment "An agent's standing in an Interaction under a profile-defined role, over a time window. Participating is never authority: a role explains WHY delegations were issued, never substitutes for them (ADR-0048 §4)." .
58
+
59
+ # ─── The unit that crosses the boundary ─────────────────────────────────────
60
+
61
+ apix:Exchange a owl:Class ;
62
+ rdfs:subClassOf prov:Entity ;
63
+ rdfs:label "Exchange" ;
64
+ rdfs:comment "One immutable, signed unit crossing an interaction boundary. Records the acts performed, the content conveyed, the causal relations, the exact context snapshot, and the proof. Immutable: a correction is a NEW Exchange that supersedes, never an edit." .
65
+
66
+ apix:ExchangeActivity a owl:Class ;
67
+ rdfs:subClassOf prov:Activity ;
68
+ rdfs:label "ExchangeActivity" ;
69
+ rdfs:comment "The occurrence of exchanging — the PROV activity whose record is an apix:Exchange. Separated so provenance can attribute the doing (activity) distinctly from the artifact (entity)." .
70
+
71
+ # ─── Act and content are different things ───────────────────────────────────
72
+
73
+ apix:CommunicativeAct a owl:Class ;
74
+ rdfs:subClassOf prov:Activity ;
75
+ rdfs:label "CommunicativeAct" ;
76
+ rdfs:comment "What the actor is communicatively DOING. Named CommunicativeAct because ADR-0048 §5/§6 already established that term and the TS type is CommunicativeActV1 — a synonym would have been a second name for a named concept, which is the problem this ADR exists to remove. MOVED here from apmsg: an act is interaction semantics, not a messaging detail. One Exchange may realize SEVERAL acts: \"yes to the date, but $8,000 not $10,000\" is an Answer, an Accept and a CounterOffer at once. Collapsing act into content makes that unrepresentable (ADR-0058 §13)." .
77
+
78
+ apix:performative a owl:ObjectProperty ;
79
+ rdfs:domain apix:CommunicativeAct ;
80
+ rdfs:range skos:Concept ;
81
+ rdfs:label "performative" ;
82
+ rdfs:comment "WHAT the act does, from the apix:performativeScheme codelist (cbox/interaction-vocabulary.ttl). Named `performative` because that is what the in-use TS field is called (CommunicativeActV1.performative, 13 values) — my first pass called it `actKind` over a parallel 10-concept `apix:ActKinds` scheme, which was a second name for a named concept and exactly what ADR-0058 exists to remove. A SKOS concept rather than an OWL class so the vocabulary extends without the T-box becoming a class catalog; acts with distinctive CONSEQUENCES are promoted to classes below." .
83
+
84
+ # Promoted acts — these earn OWL classes because they have consequences the generic act does not.
85
+ apix:OfferAct a owl:Class ;
86
+ rdfs:subClassOf apix:CommunicativeAct ;
87
+ rdfs:label "OfferAct" ;
88
+ rdfs:comment "Proposes terms whose ACCEPTANCE may create a Commitment. Promoted from a bare act kind because that consequence needs its own shapes and authority checks." .
89
+
90
+ apix:CounterOfferAct a owl:Class ;
91
+ rdfs:subClassOf apix:OfferAct ;
92
+ rdfs:label "CounterOfferAct" ;
93
+ rdfs:comment "A NEW immutable Offer that supersedes a prior one. It never mutates the offer it counters — the superseded offer remains in evidence exactly as sent." .
94
+
95
+ apix:AcceptAct a owl:Class ;
96
+ rdfs:subClassOf apix:CommunicativeAct ;
97
+ rdfs:label "AcceptAct" ;
98
+ rdfs:comment "Accepts an identified Offer. Creates a Commitment ONLY when the profile, terms, time window, signer and authority are all valid — acceptance by an unauthorized party creates nothing." .
99
+
100
+ apix:CommandAct a owl:Class ;
101
+ rdfs:subClassOf apix:CommunicativeAct ;
102
+ rdfs:label "CommandAct" ;
103
+ rdfs:comment "Directs action. A signed Command is a RECORDED REQUEST: it creates no execution without an independent authority decision. A denied Command is still a valid, recorded Exchange." .
104
+
105
+ apix:ReactAct a owl:Class ;
106
+ rdfs:subClassOf apix:CommunicativeAct ;
107
+ rdfs:label "ReactAct" ;
108
+ rdfs:comment "A lightweight target-relative annotation. NEVER acceptance, approval, or acknowledgement by default — a thumbs-up does not accept an offer (ADR-0058 §16)." .
109
+
110
+ apix:Content a owl:Class ;
111
+ rdfs:subClassOf prov:Entity ;
112
+ rdfs:label "Content" ;
113
+ rdfs:comment "The information object an act is ABOUT — a Question, an Offer, a Command. Distinct from the act that conveys it and from the Message that renders it." .
114
+
115
+ apix:Question a owl:Class ; rdfs:subClassOf apix:Content ; rdfs:label "Question" .
116
+ apix:Answer a owl:Class ; rdfs:subClassOf apix:Content ; rdfs:label "Answer" ;
117
+ rdfs:comment "MUST identify the Question it addresses (apix:answers). An answer with no question is an Inform." .
118
+ apix:Offer a owl:Class ; rdfs:subClassOf apix:Content ; rdfs:label "Offer" ;
119
+ rdfs:comment "Proposed terms. An Offer is NOT a Commitment; it becomes one only through a valid, authorized Accept." .
120
+ apix:Command a owl:Class ; rdfs:subClassOf apix:Content ; rdfs:label "Command" .
121
+ apix:Notification a owl:Class ; rdfs:subClassOf apix:Content ; rdfs:label "Notification" ;
122
+ rdfs:comment "Reports that something happened. Reporting a revocation does not PERFORM the revocation." .
123
+
124
+ apix:Message a owl:Class ;
125
+ rdfs:subClassOf prov:Entity ;
126
+ rdfs:label "Message" ;
127
+ rdfs:comment "Human- or machine-readable content carried by an Exchange. OPTIONAL — a machine-to-machine Exchange may carry only a structured act, an event, a decision or an attachment reference, and no natural language at all. This is why the canonical ingress is exchange.submit, not message.send." .
128
+
129
+ apix:AttachmentBinding a owl:Class ;
130
+ rdfs:subClassOf prov:Entity ;
131
+ rdfs:label "AttachmentBinding" ;
132
+ rdfs:comment "An EXACT reference to an artifact: canonical id, version, digest, and the role it plays in the exchange. Never an inline body, never a floating pointer." .
133
+
134
+ # ─── Reproducible context ───────────────────────────────────────────────────
135
+
136
+ apix:ContextSnapshot a owl:Class ;
137
+ rdfs:subClassOf prov:Bundle ;
138
+ rdfs:label "ContextSnapshot" ;
139
+ rdfs:comment "An IMMUTABLE, digest-addressed bundle of exactly what was known and evaluated when an Exchange was made. Every reference inside carries canonical id, exact version, digest and observed time. `current` and `latest` are FORBIDDEN — the failure this prevents is quiet and forensic: a year later, nobody can say what the evaluator actually saw." .
140
+
141
+ # ─── Normative obligation ───────────────────────────────────────────────────
142
+
143
+ apix:Commitment a owl:Class ;
144
+ rdfs:subClassOf prov:Entity ;
145
+ rdfs:label "Commitment" ;
146
+ rdfs:comment "A normative obligation with a debtor, a creditor, content, conditions, and its OWN lifecycle. Distinct from the Offer that proposed it and from the execution that may discharge it: workflow completion discharges nothing unless the profile's discharge conditions are met (ADR-0058 §15). NOT apint:Commitment — that is the narrower dual-signed envelope produced from an IntentMatch (spec 241, the Layer 7→8 commerce bridge). One is the general obligation; the other is one commerce-specific way of creating one. Same English word, two namespaces: see docs/architecture/vocabulary-map.md." .
147
+
148
+ # ─── Typed evidence ─────────────────────────────────────────────────────────
149
+
150
+ apix:Receipt a owl:Class ;
151
+ rdfs:subClassOf prov:Entity ;
152
+ rdfs:label "Receipt" ;
153
+ rdfs:comment "Attested evidence that something OCCURRED. Never evidence that it was authorized, understood, or agreed to. Always typed — a generic receipt is an ambiguity waiting to be misread." .
154
+
155
+ apix:DeliveryReceipt a owl:Class ; rdfs:subClassOf apix:Receipt ; rdfs:label "DeliveryReceipt" ;
156
+ rdfs:comment "Delivery completed under a stated profile. NOT understanding, NOT agreement." .
157
+ apix:AdmissionReceipt a owl:Class ; rdfs:subClassOf apix:Receipt ; rdfs:label "AdmissionReceipt" ;
158
+ rdfs:comment "A boundary admitted or rejected the Exchange. Admission is not authorization (ADR-0043)." .
159
+ apix:ReadReceipt a owl:Class ; rdfs:subClassOf apix:Receipt ; rdfs:label "ReadReceipt" ;
160
+ rdfs:comment "A participant's client marked content read. NOT human comprehension, NOT acknowledgement, NOT consent." .
161
+ apix:AcknowledgementReceipt a owl:Class ; rdfs:subClassOf apix:Receipt ; rdfs:label "AcknowledgementReceipt" ;
162
+ rdfs:comment "An agent acknowledged a target Exchange. NOT acceptance." .
163
+ apix:DecisionReceipt a owl:Class ; rdfs:subClassOf apix:Receipt ; rdfs:label "DecisionReceipt" ;
164
+ rdfs:comment "A signed decision was made. NOT that it was executed." .
165
+ apix:ExecutionReceipt a owl:Class ; rdfs:subClassOf apix:Receipt ; rdfs:label "ExecutionReceipt" ;
166
+ rdfs:comment "Work started, progressed or completed. NOT that the outcome was valid or the commitment discharged." .
167
+
168
+ # ─── Relations ──────────────────────────────────────────────────────────────
169
+
170
+ apix:hasProfile a owl:ObjectProperty ; rdfs:domain apix:Interaction ; rdfs:range apix:InteractionProfile .
171
+ apix:hasParticipation a owl:ObjectProperty ; rdfs:domain apix:Interaction ; rdfs:range apix:Participation .
172
+ apix:occursIn a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:Interaction .
173
+ apix:realizesAct a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:CommunicativeAct .
174
+ apix:conveys a owl:ObjectProperty ; rdfs:domain apix:CommunicativeAct ; rdfs:range apix:Content .
175
+ apix:rendersAs a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:Message .
176
+ apix:hasAttachment a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:AttachmentBinding .
177
+ apix:pinsContext a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:ContextSnapshot ;
178
+ rdfs:comment "By DIGEST. An Exchange references the snapshot it was evaluated against, not a mutable pointer." .
179
+
180
+ # Causal relations — the graph a Thread is DERIVED from. A thread is a projection, never a container,
181
+ # until it acquires an independent property and is promoted to its own Interaction (ADR-0058 §14).
182
+ apix:inReplyTo a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:Exchange .
183
+ apix:respondsTo a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:Exchange .
184
+ apix:causedBy a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:Exchange .
185
+ apix:supersedes a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:Exchange ;
186
+ rdfs:comment "Exchange-level replacement: this signed unit replaces that one. The superseded Exchange stays in evidence exactly as sent — supersession records, it never edits." .
187
+
188
+ # Semantic targets — act/content level, NOT exchange level. Both exist because one Exchange may carry
189
+ # two Offers, so `respondsTo <the offer exchange>` cannot answer WHICH offer was accepted or countered.
190
+ apix:accepts a owl:ObjectProperty ; rdfs:domain apix:AcceptAct ; rdfs:range apix:Offer ;
191
+ rdfs:comment "REQUIRED on every AcceptAct — the identified Offer. Identifying it is not authorizing it: acceptance by an unauthorized party creates no Commitment (ADR-0058 §15)." .
192
+ apix:counters a owl:ObjectProperty ; rdfs:domain apix:CounterOfferAct ; rdfs:range apix:Offer ;
193
+ rdfs:comment "REQUIRED on every CounterOfferAct — the Offer being countered. Act-level, not exchange-level: `supersedes` already covers 'this unit replaces that unit', and having `counters` mean both would be one name for two relations." .
194
+ apix:answers a owl:ObjectProperty ; rdfs:domain apix:Answer ; rdfs:range apix:Question ;
195
+ rdfs:comment "REQUIRED on every Answer. An answer that identifies no question is an Inform." .
196
+
197
+ # Commitment lifecycle — proposal, creation and discharge are different acts on different objects.
198
+ apix:proposesCommitment a owl:ObjectProperty ; rdfs:domain apix:CommunicativeAct ; rdfs:range apix:Commitment .
199
+ apix:createsCommitment a owl:ObjectProperty ; rdfs:domain apix:AcceptAct ; rdfs:range apix:Commitment .
200
+ apix:dischargesCommitment a owl:ObjectProperty ; rdfs:domain prov:Activity ; rdfs:range apix:Commitment .
201
+
202
+ apix:expressesIntent a owl:ObjectProperty ; rdfs:domain apix:CommunicativeAct ; rdfs:range apint:Intent ;
203
+ rdfs:comment "An act may express zero, one or many Intents (ADR-0048 §5). Intent ≠ Act." .
204
+ apix:attestedBy a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:Receipt .
205
+ apix:attests a owl:ObjectProperty ; owl:inverseOf apix:attestedBy ;
206
+ rdfs:domain apix:Receipt ; rdfs:range prov:Entity ;
207
+ rdfs:comment "What this receipt is evidence ABOUT. Required: a receipt that names no subject asserts that SOMETHING happened without saying what, which is how a delivery receipt gets read as an approval (ADR-0058 §16)." .
208
+
209
+ # ─── Digest + version pins ──────────────────────────────────────────────────
210
+ # The two anti-downgrade, anti-drift controls, as first-class predicates so they can be REQUIRED by a
211
+ # shape rather than living only in prose.
212
+
213
+ apix:contextDigest a owl:DatatypeProperty ;
214
+ rdfs:domain apix:ContextSnapshot ; rdfs:range xsd:string ;
215
+ rdfs:label "contextDigest" ;
216
+ rdfs:comment "The snapshot's content address. A ContextSnapshot is identified BY its digest, not by a name that could later point somewhere else." .
217
+
218
+ apix:profileVersion a owl:DatatypeProperty ;
219
+ rdfs:domain apix:InteractionProfile ; rdfs:range xsd:string ;
220
+ rdfs:label "profileVersion" .
221
+
222
+ apix:pinsProfileVersion a owl:DatatypeProperty ;
223
+ rdfs:domain apix:Exchange ; rdfs:range xsd:string ;
224
+ rdfs:label "pinsProfileVersion" ;
225
+ rdfs:comment "The EXACT profile version this Exchange was made under, recorded on the Exchange itself. Reading the version off the live Interaction instead would let a Negotiation be reinterpreted as a Conversation after the fact, taking its acceptance semantics with it (ADR-0058)." .
226
+ apix:hasProtocolBinding a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range prov:Entity ;
227
+ rdfs:comment "A2A contextId, DIDComm thid, Matrix event id, CloudEvents source+id. Foreign keys into someone else's namespace — NEVER the canonical Interaction or Exchange id." .
228
+
229
+ # ─── Extensible act vocabulary — NOT DEFINED HERE ───────────────────────────
230
+ # The performative codelist is `apix:performativeScheme` in cbox/interaction-vocabulary.ttl. Two
231
+ # reasons it is not in this file: SKOS codelists live in the C-box by convention (package CLAUDE.md),
232
+ # and the scheme ALREADY EXISTED with thirteen concepts that `fabric`'s `Performative` TS union emits.
233
+ # My first pass wrote a parallel ten-concept `apix:ActKinds` here without noticing, which would have
234
+ # shipped two vocabularies for one concept — the precise failure ADR-0058 was written to end. Deleted.
235
+ # It moved namespace (apmsg: → apix:) but not meaning: a performative is interaction semantics, and
236
+ # apmsg: is the delivery/inbox PROJECTION — folders, labels, unread, retention. A folder is not an act.
237
+
238
+ # ─── Migrated from apfab: (ADR-0058) ────────────────────────────────────────
239
+ # `tbox/fabric.ttl` is DELETED, not deprecated-in-place: with no A-box instance data there is nothing
240
+ # to keep an alias for, and an equivalentClass shim would preserve exactly the two-names-one-concept
241
+ # ambiguity this ADR exists to remove.
242
+
243
+ apix:Envelope a owl:Class ;
244
+ rdfs:subClassOf prov:Entity ;
245
+ rdfs:label "Envelope" ;
246
+ rdfs:comment "The SIGNED TRANSPORT ARTIFACT that carries an act (`ap.message.v1`; was apfab:ExchangeEnvelope). Envelope ≠ Act (ADR-0048 §6) and Envelope ≠ Exchange (§7): the envelope is how a thing travelled, the act is what was done, the exchange is the aggregate. Not every envelope carries an Intent." .
247
+
248
+ apix:ExchangeEvent a owl:Class ;
249
+ rdfs:subClassOf prov:Activity ;
250
+ rdfs:label "ExchangeEvent" ;
251
+ rdfs:comment "A lifecycle occurrence on an Exchange (was apfab:ExchangeEvent). The append-only events state is reduced from — materialized state is always rebuildable from these." .
252
+
253
+ apix:containsEnvelope a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range apix:Envelope .
254
+ apix:actor a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range prov:Agent ;
255
+ rdfs:comment "WHO performed the move (was apfab:exchangeActor). Distinct from principal: a service agent acting under delegation is the actor, never the principal. The acting agent is never erased from provenance." .
256
+ apix:principal a owl:ObjectProperty ; rdfs:domain apix:Exchange ; rdfs:range prov:Agent ;
257
+ rdfs:comment "ON WHOSE BEHALF (was apfab:exchangePrincipal). Equals actor unless delegated; the authorizing delegation travels by reference, never inline." .
258
+
259
+ # ─── Authority tiers ────────────────────────────────────────────────────────
260
+ # These three were REFERENCED by packages/provenance doc comments and DEFINED NOWHERE — the S1
261
+ # firewall documented a vocabulary that did not exist. Defining them is the fix; deleting the comments
262
+ # would have hidden the gap instead of closing it.
263
+
264
+ apix:CommunicationDelivery a owl:Class ;
265
+ rdfs:subClassOf apix:ExchangeActivity ;
266
+ rdfs:label "CommunicationDelivery" ;
267
+ rdfs:comment "T0 — a communication exchange. Carries no execution tier and creates no task. The overwhelming majority of exchanges." .
268
+
269
+ apix:IntentInvocation a owl:Class ;
270
+ rdfs:subClassOf apix:ExchangeActivity ;
271
+ rdfs:label "IntentInvocation" ;
272
+ rdfs:comment "T1 — an exchange expressing an Intent for the receiver to act on. Expressing an intent is not authority to fulfil it." .
273
+
274
+ apix:OrchestratedTask a owl:Class ;
275
+ rdfs:subClassOf apix:ExchangeActivity ;
276
+ rdfs:label "OrchestratedTask" ;
277
+ rdfs:comment "T2 — an exchange bound to actual execution. Equivalent to apful:Task; the WorkflowInstance is LINKED from the Interaction, never a subclass of it." .
278
+
279
+ # ─── Provenance edges: NOT redefined here ───────────────────────────────────
280
+ # `usedDelegation`, `usedStatusEvidence` and `onBehalfOf` already exist as `apvr:` in
281
+ # tbox/verification-receipt.ttl. My first pass called them "dangling" and was wrong: the TERMS were
282
+ # fine, the doc comments in packages/provenance cited the wrong prefix (`apfab:`). Defining apix:
283
+ # copies would have created exactly the two-names-one-concept problem this ADR removes. The comments
284
+ # are fixed instead.
@@ -12,6 +12,7 @@
12
12
  # NOTE: apmsg:MessageEnvelope ≠ apful:Message (a fulfillment task message) — same word, different
13
13
  # layer; see docs/architecture/vocabulary-map.md.
14
14
 
15
+ @prefix apix: <https://agenticprimitives.dev/ns/interaction#> .
15
16
  @prefix apmsg: <https://agenticprimitives.dev/ns/messaging#> .
16
17
  @prefix aporg: <https://agenticprimitives.dev/ns/org#> .
17
18
  @prefix apsit: <https://agenticprimitives.dev/ns/situation#> .
@@ -51,10 +52,9 @@ apmsg:ChannelBoard a owl:Class ;
51
52
 
52
53
  # ─── Communicative acts + discussions (spec 324 §9–§10) ───────────────
53
54
 
54
- apmsg:CommunicativeAct a owl:Class ;
55
- rdfs:subClassOf prov:Activity ;
56
- rdfs:label "CommunicativeAct" ;
57
- rdfs:comment "Semantic act (INFORM, REQUEST, ACCEPT, …) carried by ExchangeEnvelope. May express zero..n Intents. ≠ MessageKind transport union." .
55
+ # apmsg:CommunicativeAct MOVED to apix:CommunicativeAct (ADR-0058). An act is interaction
56
+ # semantics — what an agent is DOING — not a property of the delivery channel. `apmsg:` keeps
57
+ # what is genuinely messaging: envelopes, inbox, folders, labels, unread, rules, retention.
58
58
 
59
59
  apmsg:Performative a owl:Class ;
60
60
  rdfs:subClassOf skos:Concept ;
@@ -62,15 +62,15 @@ apmsg:Performative a owl:Class ;
62
62
  rdfs:comment "Closed vocabulary: INFORM, QUERY, REQUEST, PROPOSE, COUNTER, ACCEPT, REJECT, NOTIFY, ACKNOWLEDGE, ISSUE, RETRACT, SUBSCRIBE, UNSUBSCRIBE." .
63
63
 
64
64
  apmsg:performedBy a owl:ObjectProperty ;
65
- rdfs:domain apmsg:CommunicativeAct ; rdfs:range ap:Agent ;
65
+ rdfs:domain apix:CommunicativeAct ; rdfs:range ap:Agent ;
66
66
  rdfs:label "performedBy" .
67
67
 
68
68
  apmsg:actAddressedTo a owl:ObjectProperty ;
69
- rdfs:domain apmsg:CommunicativeAct ; rdfs:range ap:Agent ;
69
+ rdfs:domain apix:CommunicativeAct ; rdfs:range ap:Agent ;
70
70
  rdfs:label "actAddressedTo" .
71
71
 
72
72
  apmsg:inRespondsTo a owl:ObjectProperty ;
73
- rdfs:domain apmsg:CommunicativeAct ; rdfs:range apmsg:MessageEnvelope ;
73
+ rdfs:domain apix:CommunicativeAct ; rdfs:range apmsg:MessageEnvelope ;
74
74
  rdfs:label "inRespondsTo" .
75
75
 
76
76
  apmsg:Discussion a owl:Class ;
package/tbox/fabric.ttl DELETED
@@ -1,59 +0,0 @@
1
- # T-box — fabric / interaction-exchange vocabulary (spec 324 §5, §9; ADR-0047).
2
- # InteractionExchange = ExchangeRecordV1 on the wire. ExchangeEnvelope carries CommunicativeAct.
3
-
4
- @prefix apfab: <https://agenticprimitives.dev/ns/fabric#> .
5
- @prefix apmsg: <https://agenticprimitives.dev/ns/messaging#> .
6
- @prefix apint: <https://agenticprimitives.dev/ns/intent#> .
7
- @prefix ap: <https://agenticprimitives.dev/ns/core#> .
8
- @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
9
- @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
10
- @prefix owl: <http://www.w3.org/2002/07/owl#> .
11
- @prefix prov: <http://www.w3.org/ns/prov#> .
12
-
13
- apfab: a owl:Ontology ;
14
- rdfs:label "Agentic Primitives — fabric / interaction exchange" ;
15
- owl:versionInfo "0.2.0" ;
16
- rdfs:comment "Ontology names for packages/fabric ExchangeRecordV1 + envelope lifecycle (spec 316/324)." .
17
-
18
- apfab:InteractionExchange a owl:Class ;
19
- rdfs:subClassOf prov:Entity ;
20
- rdfs:label "InteractionExchange" ;
21
- rdfs:comment "Aggregate lifecycle (`ap.exchange.v1` / ExchangeRecordV1): envelopes, events, exec/case state, refs. ≠ value-exchange ExchangeOrder." .
22
-
23
- apfab:ExchangeEnvelope a owl:Class ;
24
- rdfs:subClassOf prov:Entity ;
25
- rdfs:label "ExchangeEnvelope" ;
26
- rdfs:comment "Signed transport artifact (`ap.message.v1`). IntentEnvelopeV1 is a deprecated alias — not every envelope carries an Intent." .
27
-
28
- apfab:ExchangeEvent a owl:Class ;
29
- rdfs:subClassOf prov:Activity ;
30
- rdfs:label "ExchangeEvent" ;
31
- rdfs:comment "Append-only event on an InteractionExchange stream." .
32
-
33
- apfab:IntentInvocation a owl:Class ;
34
- rdfs:subClassOf prov:Activity ;
35
- rdfs:label "IntentInvocation" ;
36
- rdfs:comment "Fabric-grounded execution activity (ADR-0047 §7 provenance)." .
37
-
38
- apfab:containsEnvelope a owl:ObjectProperty ;
39
- rdfs:domain apfab:InteractionExchange ; rdfs:range apfab:ExchangeEnvelope ;
40
- rdfs:label "containsEnvelope" .
41
-
42
- apfab:carriesAct a owl:ObjectProperty ;
43
- rdfs:domain apfab:ExchangeEnvelope ; rdfs:range apmsg:CommunicativeAct ;
44
- rdfs:label "carriesAct" .
45
-
46
- apfab:exchangeActor a owl:ObjectProperty ;
47
- rdfs:domain apfab:InteractionExchange ; rdfs:range ap:Agent ;
48
- rdfs:label "exchangeActor" ;
49
- rdfs:comment "Who performed the act." .
50
-
51
- apfab:exchangePrincipal a owl:ObjectProperty ;
52
- rdfs:domain apfab:InteractionExchange ; rdfs:range ap:Agent ;
53
- rdfs:label "exchangePrincipal" ;
54
- rdfs:comment "On whose behalf (normally == actor; ServiceAgent for org may differ)." .
55
-
56
- apfab:expressesIntent a owl:ObjectProperty ;
57
- rdfs:domain apmsg:CommunicativeAct ; rdfs:range apint:Intent ;
58
- rdfs:label "expressesIntent" ;
59
- rdfs:comment "Zero, one, or many Intents per act." .