@agenticprimitives/ontology 1.0.0-alpha.22 → 1.0.0-alpha.24
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/README.md +11 -0
- package/cbox/card-projection-shapes.shacl.ttl +216 -0
- package/cbox/controlled-vocabularies.ttl +172 -4
- package/cbox/naming-registry-shapes.shacl.ttl +272 -0
- package/cbox/org-team-shapes.shacl.ttl +184 -0
- package/cbox/registry-vocabulary.ttl +86 -0
- package/cbox/run-provenance-shapes.shacl.ttl +172 -0
- package/context.jsonld +7 -1
- package/dist/arg-types.d.ts +60 -0
- package/dist/arg-types.d.ts.map +1 -0
- package/dist/arg-types.js +143 -0
- package/dist/arg-types.js.map +1 -0
- package/dist/artifacts.d.ts +4 -2
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +22 -0
- package/dist/artifacts.js.map +1 -1
- package/dist/contact-fields.d.ts +28 -0
- package/dist/contact-fields.d.ts.map +1 -0
- package/dist/contact-fields.js +38 -0
- package/dist/contact-fields.js.map +1 -0
- package/dist/decisions.d.ts +69 -0
- package/dist/decisions.d.ts.map +1 -0
- package/dist/decisions.js +98 -0
- package/dist/decisions.js.map +1 -0
- package/dist/household.d.ts +19 -0
- package/dist/household.d.ts.map +1 -0
- package/dist/household.js +41 -0
- package/dist/household.js.map +1 -0
- package/dist/index.d.ts +230 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +275 -1
- package/dist/index.js.map +1 -1
- package/dist/party-roles.d.ts +106 -0
- package/dist/party-roles.d.ts.map +1 -0
- package/dist/party-roles.js +305 -0
- package/dist/party-roles.js.map +1 -0
- package/dist/plan-shapes.d.ts +18 -0
- package/dist/plan-shapes.d.ts.map +1 -0
- package/dist/plan-shapes.js +38 -0
- package/dist/plan-shapes.js.map +1 -0
- package/dist/relations.d.ts +44 -0
- package/dist/relations.d.ts.map +1 -0
- package/dist/relations.js +104 -0
- package/dist/relations.js.map +1 -0
- package/dist/run-provenance-context.d.ts +211 -0
- package/dist/run-provenance-context.d.ts.map +1 -0
- package/dist/run-provenance-context.js +219 -0
- package/dist/run-provenance-context.js.map +1 -0
- package/dist/vault-records.d.ts +74 -0
- package/dist/vault-records.d.ts.map +1 -0
- package/dist/vault-records.js +330 -0
- package/dist/vault-records.js.map +1 -0
- package/mappings/agent-discovery-standards.ttl +24 -3
- package/mappings/collaboration-crosswalk-organization.ttl +22 -0
- package/mappings/collaboration-crosswalk-skills.ttl +5 -0
- package/package.json +4 -2
- package/run-provenance.jsonld +106 -0
- package/tbox/actor-context.ttl +11 -0
- package/tbox/agent-resolution.ttl +6 -6
- package/tbox/card-projection.ttl +350 -0
- package/tbox/contact.ttl +61 -0
- package/tbox/context.ttl +114 -0
- package/tbox/coordination.ttl +17 -0
- package/tbox/core.ttl +232 -12
- package/tbox/execution.ttl +168 -0
- package/tbox/household.ttl +142 -0
- package/tbox/interaction.ttl +13 -0
- package/tbox/naming.ttl +114 -0
- package/tbox/org.ttl +188 -4
- package/tbox/profile.ttl +7 -0
- package/tbox/prov-imports.ttl +65 -0
- package/tbox/registry.ttl +159 -4
- package/tbox/skills.ttl +62 -0
- package/tbox/values.ttl +81 -0
package/tbox/core.ttl
CHANGED
|
@@ -10,10 +10,12 @@
|
|
|
10
10
|
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
11
11
|
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
12
12
|
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
13
|
+
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
|
|
14
|
+
@prefix dul: <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#> .
|
|
13
15
|
|
|
14
16
|
ap: a owl:Ontology ;
|
|
15
17
|
rdfs:label "Agentic Primitives — core ontology" ;
|
|
16
|
-
owl:versionInfo "0.
|
|
18
|
+
owl:versionInfo "0.2.0" .
|
|
17
19
|
|
|
18
20
|
# ─── Classes ──────────────────────────────────────────────────────────
|
|
19
21
|
|
|
@@ -25,29 +27,127 @@ ap:CanonicalAgentId a owl:Class ;
|
|
|
25
27
|
rdfs:label "CanonicalAgentId" ;
|
|
26
28
|
rdfs:comment "A branded CAIP-10 account identifier (eip155:* / hedera:* / solana:*). The SSO subject + directory key (ADR-0016). Validated by ap:CanonicalAgentIdShape." .
|
|
27
29
|
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
30
|
+
# ─── The kind hierarchy (ADR-0046 + ADR-0061) ─────────────────────────
|
|
31
|
+
#
|
|
32
|
+
# THREE CLOSED ROOTS, aligned to PROV-O's trichotomy HERE in core (the mappings file keeps only
|
|
33
|
+
# skos matches): PersonAgent ⊑ prov:Person, OrganizationAgent ⊑ prov:Organization,
|
|
34
|
+
# ApplicationAgent ⊑ prov:SoftwareAgent. agentKind is 3-valued (person/org/service; cbox) and the
|
|
35
|
+
# wire value 'service' names the ApplicationAgent ROOT (ADR-0046 amendment 2026-08-29).
|
|
36
|
+
#
|
|
37
|
+
# A DERIVED-TYPE LAYER subclasses the roots (spec 346 §2.1; the ap:Treasury precedent, generalized):
|
|
38
|
+
# TeamAgent, AllianceAgent ⊑ OrganizationAgent
|
|
39
|
+
# ServiceAgent ⊑ ApplicationAgent (re-seated; was ⊑ Agent)
|
|
40
|
+
# WorkspaceAgent, Treasury, RegistryAgent ⊑ ServiceAgent
|
|
41
|
+
# A derived type is carried in the profile/kind record (ap:agentType + ap:serviceRole), NEVER by adding
|
|
42
|
+
# a value to agentKind. A name suffix names the derived type (.me .org .team .svc .workspace .treasury
|
|
43
|
+
# .registry) and is a CLAIM the on-chain record is checked against — never authority (ADR-0061).
|
|
44
|
+
# validator + treasury + registry are NOT agentKinds — they are KINDS OF SERVICE (⊑ ServiceAgent).
|
|
45
|
+
#
|
|
46
|
+
# EVERY SERVICE AGENT IS TWO THINGS: the AGENTIC PIECE (the application — the software that can act)
|
|
47
|
+
# and the SOCIAL AGENT it acts for (the workspace, the registry, the account). Only the first can
|
|
48
|
+
# sign; only the second has standing. ap:ServiceAgent carries that split in full — read it there
|
|
49
|
+
# before adding a service class, because a class that collapses the two grants authority to software.
|
|
32
50
|
ap:PersonAgent a owl:Class ;
|
|
33
|
-
rdfs:subClassOf ap:Agent ;
|
|
51
|
+
rdfs:subClassOf ap:Agent , prov:Person ;
|
|
34
52
|
rdfs:label "Person Agent" ;
|
|
35
|
-
rdfs:comment "An agent of kind 'person' (agentKind=person) — a natural person's Smart Agent." .
|
|
53
|
+
rdfs:comment "An agent of kind 'person' (agentKind=person) — a natural person's Smart Agent. A closed ROOT (prov:Person); its own derived type (the trivial specialization). Named by '.me'." .
|
|
36
54
|
|
|
37
55
|
ap:OrganizationAgent a owl:Class ;
|
|
38
|
-
rdfs:subClassOf ap:Agent ;
|
|
56
|
+
rdfs:subClassOf ap:Agent , prov:Organization ;
|
|
39
57
|
rdfs:label "Organization Agent" ;
|
|
40
|
-
rdfs:comment "An agent of kind 'org' (agentKind=org) — an organization's Smart Agent, with members (aporg:memberOf
|
|
58
|
+
rdfs:comment "An agent of kind 'org' (agentKind=org) — an organization's Smart Agent, with members (aporg:memberOf). Membership is informational: being a member authorizes nothing, and authority to act for the org is a DELEGATION (ADR-0041) — not custody of its key, which is a third, separate thing (see ap:CustodyMember). A closed ROOT (prov:Organization); derived types TeamAgent and AllianceAgent subclass it. Named by '.org'." .
|
|
59
|
+
|
|
60
|
+
ap:ApplicationAgent a owl:Class ;
|
|
61
|
+
rdfs:subClassOf ap:Agent , prov:SoftwareAgent ;
|
|
62
|
+
rdfs:label "Application Agent" ;
|
|
63
|
+
rdfs:comment "The prov:SoftwareAgent ROOT (wire value 'service' in AgentType / atl:agentKind — ADR-0046 amendment 2026-08-29). Closed root; derived types subclass it. 'Software agent' is the class; 'service' is what most of ours DO, so ServiceAgent is a derived type under this root, not the root itself." .
|
|
41
64
|
|
|
42
65
|
ap:ServiceAgent a owl:Class ;
|
|
43
|
-
rdfs:subClassOf ap:
|
|
66
|
+
rdfs:subClassOf ap:ApplicationAgent ;
|
|
44
67
|
rdfs:label "Service Agent" ;
|
|
45
|
-
rdfs:
|
|
68
|
+
rdfs:seeAlso dul:SocialAgent ;
|
|
69
|
+
rdfs:comment """An agent of kind 'service' (agentKind=service) — DERIVED under ap:ApplicationAgent
|
|
70
|
+
(re-seated by ADR-0061; was ⊑ ap:Agent). Named by '.svc'. Service profiles, validators, assistants,
|
|
71
|
+
treasuries, workspace agents and registry operators are Service Agents.
|
|
72
|
+
|
|
73
|
+
TWO SIDES, AND THE SPLIT IS THE POINT. A service agent is an AGENTIC PIECE — an application
|
|
74
|
+
(⊑ ap:ApplicationAgent ⊑ prov:SoftwareAgent): running software that can act, hold a session key,
|
|
75
|
+
sign, and answer an A2A/MCP surface. It acts FOR a SOCIAL AGENT — the standing thing the acting is
|
|
76
|
+
for, which bears the accountability and can execute nothing itself:
|
|
77
|
+
|
|
78
|
+
ap:WorkspaceAgent acts for aporg:Workspace — the governed coordination plane
|
|
79
|
+
ap:RegistryAgent acts for apreg:Registry — the registry instance
|
|
80
|
+
ap:Treasury acts for the account it holds — its own standing, no separate node
|
|
81
|
+
|
|
82
|
+
The social side is a dul:SocialAgent in DOLCE's sense (an agentive social object: it acts only
|
|
83
|
+
through what acts for it), and it is deliberately NOT asserted as an ap:Agent and holds no Smart
|
|
84
|
+
Agent — it cannot sign, so it can never be the executor (spec 344 §1.3; ADR-0061 §4). That is
|
|
85
|
+
exactly why it needs an application. What falls out of the split: the '.workspace' / '.treasury' /
|
|
86
|
+
'.registry' NAME binds to the application, never to the institution; a delegation is granted TO the
|
|
87
|
+
application, and revoking it leaves the application inert while the institution is untouched; and
|
|
88
|
+
replacing the application does not change who the institution is.
|
|
89
|
+
|
|
90
|
+
Roles (indexer, relay, marketplace, assistant, …) are an OPEN set carried by ap:serviceRole and get
|
|
91
|
+
neither a class nor a suffix; only the roles that carry their own suffix, validation predicate and
|
|
92
|
+
posture (workspace, treasury, registry) are also derived classes.""" .
|
|
93
|
+
|
|
94
|
+
ap:TeamAgent a owl:Class ;
|
|
95
|
+
rdfs:subClassOf ap:OrganizationAgent ;
|
|
96
|
+
rdfs:label "Team Agent" ;
|
|
97
|
+
rdfs:comment """A CHARTERED org-kind Smart Agent operating within or across organizations
|
|
98
|
+
(aporg:TeamAffiliation): leadership, membership, continuity, responsibility, delegated
|
|
99
|
+
authority. An informal collection is aporg:WorkingGroup, not an agent. NOT a fourth agentKind
|
|
100
|
+
(the treasury⊂service precedent). ⊑ org:OrganizationalUnit under a sole 'chartered'
|
|
101
|
+
affiliation (mappings).""" .
|
|
102
|
+
|
|
103
|
+
ap:AllianceAgent a owl:Class ;
|
|
104
|
+
rdfs:subClassOf ap:OrganizationAgent ;
|
|
105
|
+
rdfs:label "Alliance Agent" ;
|
|
106
|
+
rdfs:comment """An org-kind Smart Agent whose members are organizations, existing only where real
|
|
107
|
+
joint authority is delegated. A loose partnership is
|
|
108
|
+
aporg:InterorganizationalCollaborationArrangement — a record, not an agent.""" .
|
|
109
|
+
|
|
110
|
+
ap:WorkspaceAgent a owl:Class ;
|
|
111
|
+
rdfs:subClassOf ap:ServiceAgent ;
|
|
112
|
+
rdfs:label "Workspace Agent" ;
|
|
113
|
+
rdfs:comment """The application that acts for ONE aporg:Workspace — the workspace's agentive face
|
|
114
|
+
(aporg:coordinatesWorkspace; the workspace points back with aporg:coordinatedBy). A service-kind SA
|
|
115
|
+
with serviceRole 'workspace', delegated by the workspace's GOVERNOR and named by '.workspace'. Never
|
|
116
|
+
an independent source of authority (spec 344 §2.1): revoke the governor's delegation and it is inert.
|
|
117
|
+
The workspace is the social side — an Entity that is never itself named and never signs (ADR-0061 §4).
|
|
118
|
+
Called 'workspace-coordinator' until 2026-08-31; renamed to sit beside treasury and registry, which
|
|
119
|
+
name the standing thing rather than the doing.""" .
|
|
46
120
|
|
|
47
121
|
ap:Treasury a owl:Class ;
|
|
48
122
|
rdfs:subClassOf ap:ServiceAgent ;
|
|
49
123
|
rdfs:label "Treasury" ;
|
|
50
|
-
rdfs:comment "
|
|
124
|
+
rdfs:comment """The application that acts for a custody-policy-governed asset account — a KIND OF
|
|
125
|
+
SERVICE (agentKind=service), distinguished by ProfileType/serviceType='treasury' (specs 210/217/225
|
|
126
|
+
§6). NOT a top-level agent kind. Named by '.treasury'. Its social side is the ACCOUNT — the standing
|
|
127
|
+
that owns the assets — which this stack does not give a separate node: one SA is both the account of
|
|
128
|
+
record and the piece that can move it, so what keeps the acting bounded is the custody policy rather
|
|
129
|
+
than a second class. The other service agents get two nodes because their institution (a workspace,
|
|
130
|
+
a registry) outlives and outranks any application that serves it.""" .
|
|
131
|
+
|
|
132
|
+
ap:RegistryAgent a owl:Class ;
|
|
133
|
+
rdfs:subClassOf ap:ServiceAgent ;
|
|
134
|
+
rdfs:label "Registry Agent" ;
|
|
135
|
+
rdfs:comment "The Service Agent that OPERATES a registry: admission, receipts, lifecycle log, discovery surface (spec 346 §7). Named by '.registry'; serviceRole 'registry' required; linked to its registry by apreg:operatesRegistry (range apreg:Registry). Signs RegistrationReceipts as the operator SA. The registry itself is an apreg:Registry (an Entity), never an agent; this class is its agentive face, exactly as WorkspaceAgent is the workspace's." .
|
|
136
|
+
|
|
137
|
+
ap:ChurchAgent a owl:Class ;
|
|
138
|
+
rdfs:subClassOf ap:OrganizationAgent ;
|
|
139
|
+
rdfs:label "Church Agent" ;
|
|
140
|
+
rdfs:comment "An organization-class Smart Agent of congregation shape (a gathered community with leadership, membership and continuity); named by '.church'. A DERIVED type under the closed Organization root — ADR-0061 amendment 2026-08-30 (a deliberate Ring-0 carve-out from the vertical-vocabulary rule: the KIND is general, its content stays in apps)." .
|
|
141
|
+
|
|
142
|
+
ap:HouseholdAgent a owl:Class ;
|
|
143
|
+
rdfs:subClassOf ap:OrganizationAgent ;
|
|
144
|
+
rdfs:label "Household Agent" ;
|
|
145
|
+
rdfs:comment "An organization-class Smart Agent of household shape: the family's own agent, chartered under a person, whose members are the people who live together with the roles and kinship the household model (aphh:) gives them (spec 368; ADR-0061 amendment 2026-09-07). It acts FOR an aphh:Household as an OrganizationAgent acts for an Organization. It is NOT the person's private household record (spec 363 W4), which stays the person's own note and needs no agent." .
|
|
146
|
+
|
|
147
|
+
ap:CircleAgent a owl:Class ;
|
|
148
|
+
rdfs:subClassOf ap:OrganizationAgent ;
|
|
149
|
+
rdfs:label "Circle Agent" ;
|
|
150
|
+
rdfs:comment "An organization-class Smart Agent of small-group shape (a circle: a few people meeting with a shared purpose, able to hold a vault and act); named by '.circle'. Derived under the Organization root (ADR-0061 amendment 2026-08-30)." .
|
|
51
151
|
|
|
52
152
|
ap:Facet a owl:Class ;
|
|
53
153
|
rdfs:label "Facet" ;
|
|
@@ -81,3 +181,123 @@ ap:controlStatus a owl:DatatypeProperty ;
|
|
|
81
181
|
rdfs:domain ap:CanonicalAgentId ;
|
|
82
182
|
rdfs:range xsd:string ;
|
|
83
183
|
rdfs:comment "Whether the subject is custodied here (custodied) or addressable-only (identifier-only). Non-EVM namespaces are identifier-only (spec 226 §4)." .
|
|
184
|
+
|
|
185
|
+
# ─── Derived-type record (spec 346 §2.3; ADR-0061) ────────────────────
|
|
186
|
+
|
|
187
|
+
ap:agentType a owl:ObjectProperty ;
|
|
188
|
+
rdfs:label "agentType" ;
|
|
189
|
+
rdfs:domain ap:Agent ;
|
|
190
|
+
rdfs:range skos:Concept ;
|
|
191
|
+
rdfs:comment "The DERIVED agent type (ap:agentTypeScheme, cbox — 7 values: person org team service workspace treasury registry). On-chain: atl:agentType on the SA subject (AgentProfileResolver, written by the SA itself, survives name changes). Distinct from ap:agentKind (the 3-value root scheme on the NAME node). The projection term external directory entries (ARD, A2A extension) carry. rootClassFor: team→org; service|workspace|treasury|registry→service. A suffix is checked AGAINST this record; it never overrides it." .
|
|
192
|
+
|
|
193
|
+
ap:serviceRole a owl:DatatypeProperty ;
|
|
194
|
+
rdfs:label "serviceRole" ;
|
|
195
|
+
rdfs:domain ap:ServiceAgent ;
|
|
196
|
+
rdfs:range xsd:string ;
|
|
197
|
+
rdfs:comment "The OPEN role a Service Agent plays (indexer, relay, marketplace, assistant, workspace, registry, …). On-chain: atl:serviceRole on the SA subject. REQUIRED to equal 'workspace' when agentType = workspace and 'registry' when agentType = registry (spec 346 §2.3 invariant). A role is never a permission." .
|
|
198
|
+
|
|
199
|
+
# ─── Standing between agents (spec 355; ADR-0061 §4) ───────────────────────────────────────────────
|
|
200
|
+
#
|
|
201
|
+
# WHY THIS EXISTS. "Send alice 20 USDC" names a PERSON; the money moves from a TREASURY. Nothing in the
|
|
202
|
+
# sentence connects them, and nothing in their NAMES has to either — alice.me's treasury is called
|
|
203
|
+
# alice2.treasury, and a resolver that guessed `alice.treasury` from the label found nothing and refused a
|
|
204
|
+
# payment it should have made. What connects them is a RELATIONSHIP, and until it was named here every
|
|
205
|
+
# consumer invented its own private convention for it: the Home's tree carried a `parent` field, the Ask
|
|
206
|
+
# carried a table of name suffixes, and neither could be checked against the other.
|
|
207
|
+
#
|
|
208
|
+
# One property covers what the estate actually records: a Treasury is chartered under the Person or
|
|
209
|
+
# Organization that holds it; a Team under a Workspace or Organization; a Workspace under an Organization.
|
|
210
|
+
# The child is a distinct Smart Agent with its own custody — chartering is a statement of BELONGING and
|
|
211
|
+
# PROVENANCE, never of authority. Revoking nothing here would grant anything: the parent's ability to act
|
|
212
|
+
# for the child is a delegation, and it is elsewhere.
|
|
213
|
+
|
|
214
|
+
ap:charteredUnder a owl:ObjectProperty ;
|
|
215
|
+
rdfs:label "charteredUnder" ;
|
|
216
|
+
rdfs:domain ap:Agent ;
|
|
217
|
+
rdfs:range ap:Agent ;
|
|
218
|
+
owl:inverseOf ap:charters ;
|
|
219
|
+
rdfs:comment """The agent this one was created under and belongs to: a Treasury under the Person or
|
|
220
|
+
Organization that holds it, a Team under its Workspace or Organization, a Workspace under its
|
|
221
|
+
Organization. Recorded at genesis and readable as the `parent` of a managed-agent record.
|
|
222
|
+
NOT CUSTODY, and the difference is why this property exists rather than being read off the custody
|
|
223
|
+
arrangement. Custody answers WHO CAN MAKE IT ACT; chartering answers WHOSE IT IS. They routinely
|
|
224
|
+
differ — an organization's treasury is chartered under the ORGANIZATION while being custodied by a
|
|
225
|
+
steward's personal credential — so deriving ownership from custody returns the steward and is wrong,
|
|
226
|
+
and reading chartering as custody grants an authority nobody conferred.
|
|
227
|
+
NEVER AUTHORITY (ADR-0010/0061): the child holds its own custody, and what lets a parent act for it
|
|
228
|
+
is a delegation, not this edge. A resolver may follow it to answer "which treasury does alice hold";
|
|
229
|
+
a verifier may not read it as permission to spend from one.
|
|
230
|
+
Where it is READABLE is a separate question from whether it is TRUE: today the estate records it in
|
|
231
|
+
the owner's own vault (ADR-0025), so a stranger cannot traverse it — see spec 355 §3.""" .
|
|
232
|
+
|
|
233
|
+
# ── CUSTODY IS NOT MEMBERSHIP, AND NOT AUTHORITY ──────────────────────────────────────────────────────
|
|
234
|
+
# Declared here because the discovery A-box already carries `ap:CustodyMember` instances, which made it
|
|
235
|
+
# vocabulary this repo uses without ever having said what it means — the exact drift
|
|
236
|
+
# `check:ontology-bindings` exists to stop. Naming it fixes that, and the comment is the point of the
|
|
237
|
+
# class: the word "Member" in it means a member of a CUSTODY SET, and nothing else.
|
|
238
|
+
|
|
239
|
+
ap:CustodyMember a owl:Class ;
|
|
240
|
+
rdfs:label "CustodyMember" ;
|
|
241
|
+
rdfs:comment """One opaque, public, chain-reproducible token standing for the fact that a credential
|
|
242
|
+
custodies a Smart Agent — sha256(lower(credential)|lower(smartAgent)), unsalted by design so that
|
|
243
|
+
anyone can reproduce it from on-chain events (ADR-0040 forbids a server pepper here).
|
|
244
|
+
|
|
245
|
+
IT ANSWERS EXACTLY ONE QUESTION: can this credential make that agent act?
|
|
246
|
+
|
|
247
|
+
IT IS NOT MEMBERSHIP. A person who custodies an organization's Smart Agent is not thereby a member
|
|
248
|
+
of it, and a member of an organization does not custody it — the two sets routinely have nobody in
|
|
249
|
+
common. Membership is `aporg:OrganizationMembership`, recorded in the organization's own roster and
|
|
250
|
+
in the person's own vault (ADR-0025), and it is the only thing that answers "what am I part of".
|
|
251
|
+
|
|
252
|
+
IT IS NOT AUTHORITY. Custody is control of the agent's own key material; authority to act ON BEHALF
|
|
253
|
+
of somebody is a delegation, signed, scoped and revocable on chain (ADR-0041). Reading custody as
|
|
254
|
+
authority would let whoever holds a steward's credential act as everything that steward touches,
|
|
255
|
+
which is precisely what the delegation chain exists to prevent.
|
|
256
|
+
|
|
257
|
+
SO: never derive membership from custody, never derive authority from custody, and never answer
|
|
258
|
+
"which organizations am I associated with" from this class. `checkCustody` asks the one question
|
|
259
|
+
above about agents the caller already named, and nothing else may read it.""" .
|
|
260
|
+
|
|
261
|
+
ap:primaryPayee a owl:ObjectProperty ;
|
|
262
|
+
rdfs:label "primaryPayee" ;
|
|
263
|
+
rdfs:domain ap:Agent ;
|
|
264
|
+
rdfs:range ap:Agent ;
|
|
265
|
+
rdfs:comment """The agent this one wants to be PAID INTO — "when someone sends me money, it goes here".
|
|
266
|
+
An agent may hold several treasuries; only its owner knows which is the one to receive, and until
|
|
267
|
+
this existed a payer had to guess or be asked, which put the choice on the wrong person entirely.
|
|
268
|
+
|
|
269
|
+
A PREFERENCE, never authority and never a constraint. It does not stop anyone paying a different
|
|
270
|
+
treasury, does not permit anyone to spend from this one, and grants nothing at any gate: it answers
|
|
271
|
+
"where would you like it" and nothing else. A resolver may use it to stop asking; a verifier must
|
|
272
|
+
not read it at all.
|
|
273
|
+
|
|
274
|
+
PUBLIC BY NATURE, which bounds where it can be said: it is recorded as a role on the public
|
|
275
|
+
ap:charteredUnder edge, so an agent with no such edge — one its owner keeps unlisted — cannot carry
|
|
276
|
+
it. For those, the preference IS the grant: the owner names the one agent they are disclosing
|
|
277
|
+
(spec 338 §7).""" .
|
|
278
|
+
|
|
279
|
+
ap:primaryPayer a owl:ObjectProperty ;
|
|
280
|
+
rdfs:label "primaryPayer" ;
|
|
281
|
+
rdfs:domain ap:Agent ;
|
|
282
|
+
rdfs:range ap:Agent ;
|
|
283
|
+
rdfs:comment """The account this agent USUALLY PAYS FROM — "when I send money, take it from here".
|
|
284
|
+
|
|
285
|
+
The mirror of ap:primaryPayee, and the half that was missing. The ontology could say which of
|
|
286
|
+
someone's accounts should RECEIVE, so a stranger's agent stopped asking; it could say nothing about
|
|
287
|
+
which one SPENDS, so the owner was asked every time — eighteen treasuries offered as a list, by an
|
|
288
|
+
agent that had no modelled way to know that one of them is the one they use.
|
|
289
|
+
|
|
290
|
+
A PREFERENCE, never authority. It does not permit anyone (including this agent) to spend from the
|
|
291
|
+
account: every payment still needs a mandate the payer signs for that request, and no verifier reads
|
|
292
|
+
this property. It answers "which one did you mean" and stops a question; it opens nothing.
|
|
293
|
+
|
|
294
|
+
DISTINCT FROM primaryPayee ON PURPOSE. The account you hand out to be paid into and the account you
|
|
295
|
+
spend from are often different, and an estate that conflated them would move money out of the one
|
|
296
|
+
its owner publishes. Both are roles on the same public ap:charteredUnder edge, so an agent kept
|
|
297
|
+
unlisted carries neither — for those the owner names the account in the request.""" .
|
|
298
|
+
|
|
299
|
+
ap:charters a owl:ObjectProperty ;
|
|
300
|
+
rdfs:label "charters" ;
|
|
301
|
+
rdfs:domain ap:Agent ;
|
|
302
|
+
rdfs:range ap:Agent ;
|
|
303
|
+
rdfs:comment "Inverse of ap:charteredUnder — the agents created under this one. The direction a resolver traverses to answer 'what does this person hold', and the direction that must never be read as control." .
|
package/tbox/execution.ttl
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
@prefix apexec: <https://agenticprimitives.dev/ns/execution#> .
|
|
27
27
|
@prefix aprole: <https://agenticprimitives.dev/ns/role#> .
|
|
28
28
|
@prefix ap: <https://agenticprimitives.dev/ns/core#> .
|
|
29
|
+
@prefix apactor: <https://agenticprimitives.dev/ns/actor#> .
|
|
29
30
|
@prefix aps: <https://agenticprimitives.dev/ns/skill#> .
|
|
30
31
|
@prefix apguide: <https://agenticprimitives.dev/ns/guidance#> .
|
|
31
32
|
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
@@ -102,6 +103,21 @@ apexec:completionState a owl:ObjectProperty ;
|
|
|
102
103
|
rdfs:label "completionState" ;
|
|
103
104
|
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." .
|
|
104
105
|
|
|
106
|
+
# ═══ Run provenance (spec 381) — what a run's record keeps in the acting agent's vault ═══
|
|
107
|
+
# The durable half of a harness run: one activity per step, what it ran under, what it left. Read by
|
|
108
|
+
# people and auditors after the fact; consulted by no verifier (a recorded allow grants nothing).
|
|
109
|
+
|
|
110
|
+
apexec:endedAt a owl:DatatypeProperty ;
|
|
111
|
+
rdfs:subPropertyOf prov:endedAtTime ;
|
|
112
|
+
rdfs:domain prov:Activity ; rdfs:range xsd:dateTime ;
|
|
113
|
+
rdfs:label "endedAt" ;
|
|
114
|
+
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." .
|
|
115
|
+
|
|
116
|
+
apexec:receiptDigest a owl:DatatypeProperty ;
|
|
117
|
+
rdfs:domain prov:Activity ; rdfs:range xsd:string ;
|
|
118
|
+
rdfs:label "receiptDigest" ;
|
|
119
|
+
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." .
|
|
120
|
+
|
|
105
121
|
apexec:usedPlanContentHash a owl:DatatypeProperty ;
|
|
106
122
|
rdfs:domain prov:Activity ; rdfs:range xsd:string ;
|
|
107
123
|
rdfs:label "usedPlanContentHash" ;
|
|
@@ -129,3 +145,155 @@ aprole:ConsultResponder a prov:Role ;
|
|
|
129
145
|
aprole:ConsultRouter a prov:Role ;
|
|
130
146
|
rdfs:label "ConsultRouter" ;
|
|
131
147
|
rdfs:comment "The capacity an org's runtime functioned in while selecting members and synthesizing their attributed answers." .
|
|
148
|
+
|
|
149
|
+
# ═══ The run as a PROV graph — spec 389 ══════════════════════════════════════
|
|
150
|
+
#
|
|
151
|
+
# What a harness run's provenance record (`run.provenance:<runRef>`, the acting agent's vault) says in
|
|
152
|
+
# T-box terms, so that a stock PROV tool loads it and a SHACL shape can refuse a forged one. Every term
|
|
153
|
+
# here is EVIDENCE — read by people, auditors and the Home after the fact — and is consulted by no
|
|
154
|
+
# verifier: recording that a step was allowed grants nothing (spec 354 §1 / ADR-0041). Reused rather than
|
|
155
|
+
# re-declared: prov:*, p-plan:*, ep-plan:* (plan.ttl), apvr:usedDelegation (verification-receipt.ttl),
|
|
156
|
+
# apactor:ActorContext + its role properties (actor-context.ttl), apguide:AgentSkillPackage, apdel:Delegation.
|
|
157
|
+
|
|
158
|
+
apexec:hasStep a owl:ObjectProperty ;
|
|
159
|
+
rdfs:domain apexec:ServiceExecution ; rdfs:range prov:Activity ;
|
|
160
|
+
rdfs:label "hasStep" ;
|
|
161
|
+
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." .
|
|
162
|
+
|
|
163
|
+
apexec:actorContext a owl:ObjectProperty ;
|
|
164
|
+
rdfs:domain prov:Activity ; rdfs:range apactor:ActorContext ;
|
|
165
|
+
rdfs:label "actorContext" ;
|
|
166
|
+
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." .
|
|
167
|
+
|
|
168
|
+
apexec:delegatedToAgent a owl:ObjectProperty ;
|
|
169
|
+
rdfs:domain prov:Activity ; rdfs:range ap:Agent ;
|
|
170
|
+
rdfs:label "delegatedToAgent" ;
|
|
171
|
+
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." .
|
|
172
|
+
|
|
173
|
+
apexec:runRef a owl:DatatypeProperty ;
|
|
174
|
+
rdfs:domain apexec:ServiceExecution ; rdfs:range xsd:string ;
|
|
175
|
+
rdfs:label "runRef" ;
|
|
176
|
+
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." .
|
|
177
|
+
|
|
178
|
+
apexec:intentDigest a owl:DatatypeProperty ;
|
|
179
|
+
rdfs:domain apexec:ServiceExecution ; rdfs:range xsd:string ;
|
|
180
|
+
rdfs:label "intentDigest" ;
|
|
181
|
+
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)." .
|
|
182
|
+
|
|
183
|
+
apexec:authorityDecision a owl:DatatypeProperty ;
|
|
184
|
+
rdfs:domain prov:Activity ; rdfs:range xsd:string ;
|
|
185
|
+
rdfs:label "authorityDecision" ;
|
|
186
|
+
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." .
|
|
187
|
+
|
|
188
|
+
apexec:afterApproval a owl:DatatypeProperty ;
|
|
189
|
+
rdfs:domain prov:Activity ; rdfs:range xsd:boolean ;
|
|
190
|
+
rdfs:label "afterApproval" ;
|
|
191
|
+
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." .
|
|
192
|
+
|
|
193
|
+
apexec:chainDigest a owl:DatatypeProperty ;
|
|
194
|
+
rdfs:domain prov:Activity ; rdfs:range xsd:string ;
|
|
195
|
+
rdfs:label "chainDigest" ;
|
|
196
|
+
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." .
|
|
197
|
+
|
|
198
|
+
apexec:accountabilityRoot a owl:ObjectProperty ;
|
|
199
|
+
rdfs:domain prov:Activity ; rdfs:range ap:Agent ;
|
|
200
|
+
rdfs:label "accountabilityRoot" ;
|
|
201
|
+
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." .
|
|
202
|
+
|
|
203
|
+
apexec:errorClass a owl:DatatypeProperty ;
|
|
204
|
+
rdfs:domain prov:Activity ; rdfs:range xsd:string ;
|
|
205
|
+
rdfs:label "errorClass" ;
|
|
206
|
+
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." .
|
|
207
|
+
|
|
208
|
+
apexec:StepReceipt a owl:Class ;
|
|
209
|
+
rdfs:subClassOf prov:Entity ;
|
|
210
|
+
rdfs:label "StepReceipt" ;
|
|
211
|
+
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)." .
|
|
212
|
+
|
|
213
|
+
apexec:ChainTransaction a owl:Class ;
|
|
214
|
+
rdfs:subClassOf prov:Entity ;
|
|
215
|
+
rdfs:label "ChainTransaction" ;
|
|
216
|
+
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." .
|
|
217
|
+
|
|
218
|
+
apexec:Effect a owl:Class ;
|
|
219
|
+
rdfs:subClassOf prov:Entity ;
|
|
220
|
+
rdfs:label "Effect" ;
|
|
221
|
+
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." .
|
|
222
|
+
|
|
223
|
+
apexec:effectProduces a owl:DatatypeProperty ;
|
|
224
|
+
rdfs:domain apexec:Effect ; rdfs:range xsd:string ;
|
|
225
|
+
rdfs:label "effectProduces" ;
|
|
226
|
+
rdfs:comment "The record type the effect writes (`payment.receipt`, `payment.notice`) — a name, never the record." .
|
|
227
|
+
|
|
228
|
+
apexec:effectSucceeded a owl:DatatypeProperty ;
|
|
229
|
+
rdfs:domain apexec:Effect ; rdfs:range xsd:boolean ;
|
|
230
|
+
rdfs:label "effectSucceeded" .
|
|
231
|
+
|
|
232
|
+
apexec:DecisionRecord a owl:Class ;
|
|
233
|
+
rdfs:subClassOf prov:Entity ;
|
|
234
|
+
rdfs:label "DecisionRecord" ;
|
|
235
|
+
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." .
|
|
236
|
+
|
|
237
|
+
apexec:decisionPoint a owl:DatatypeProperty ;
|
|
238
|
+
rdfs:domain apexec:DecisionRecord ; rdfs:range xsd:string ;
|
|
239
|
+
rdfs:label "decisionPoint" .
|
|
240
|
+
|
|
241
|
+
apexec:decisionRule a owl:DatatypeProperty ;
|
|
242
|
+
rdfs:domain apexec:DecisionRecord ; rdfs:range xsd:string ;
|
|
243
|
+
rdfs:label "decisionRule" .
|
|
244
|
+
|
|
245
|
+
# Completion states of a harness step (apexec:completionState, declared above). A closed list: a
|
|
246
|
+
# reader that meets a state outside it is reading a record this vocabulary does not describe.
|
|
247
|
+
|
|
248
|
+
apexec:Completed a apexec:CompletionState ;
|
|
249
|
+
rdfs:label "Completed" ;
|
|
250
|
+
rdfs:comment "The step ran and its tool returned." .
|
|
251
|
+
|
|
252
|
+
apexec:Failed a apexec:CompletionState ;
|
|
253
|
+
rdfs:label "Failed" ;
|
|
254
|
+
rdfs:comment "The step ran and its tool failed (apexec:errorClass says how). Also an ep-plan:FailedActivity." .
|
|
255
|
+
|
|
256
|
+
apexec:Refused a apexec:CompletionState ;
|
|
257
|
+
rdfs:label "Refused" ;
|
|
258
|
+
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." .
|
|
259
|
+
|
|
260
|
+
apexec:Skipped a apexec:CompletionState ;
|
|
261
|
+
rdfs:label "Skipped" ;
|
|
262
|
+
rdfs:comment "The step was not attempted (an earlier step's outcome made it moot, or a replay answered it from the record)." .
|
|
263
|
+
|
|
264
|
+
apexec:Suspended a apexec:CompletionState ;
|
|
265
|
+
rdfs:label "Suspended" ;
|
|
266
|
+
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)." .
|
|
267
|
+
|
|
268
|
+
# ═══ The span ↔ activity bridge — spec 390 W1 ═══
|
|
269
|
+
# Every PROV activity names the OpenTelemetry span it IS, and every span names the activity (ap.prov.*
|
|
270
|
+
# attributes). Both are derived from the same run and step references. CORRELATION, NEVER TRUST: a trace
|
|
271
|
+
# id joins hops into one causal operation; nothing reads it for a verdict, and a forged one can at most
|
|
272
|
+
# mis-file a trace.
|
|
273
|
+
|
|
274
|
+
apexec:traceId a owl:DatatypeProperty ;
|
|
275
|
+
rdfs:domain prov:Activity ; rdfs:range xsd:string ;
|
|
276
|
+
rdfs:label "traceId" ;
|
|
277
|
+
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." .
|
|
278
|
+
|
|
279
|
+
apexec:spanId a owl:DatatypeProperty ;
|
|
280
|
+
rdfs:domain prov:Activity ; rdfs:range xsd:string ;
|
|
281
|
+
rdfs:label "spanId" ;
|
|
282
|
+
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." .
|
|
283
|
+
|
|
284
|
+
# ═══ Offloaded artifacts — spec 391 ═══
|
|
285
|
+
|
|
286
|
+
apexec:RunArtifact a owl:Class ;
|
|
287
|
+
rdfs:subClassOf prov:Entity ;
|
|
288
|
+
rdfs:label "RunArtifact" ;
|
|
289
|
+
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." .
|
|
290
|
+
|
|
291
|
+
apexec:artifactBytes a owl:DatatypeProperty ;
|
|
292
|
+
rdfs:domain apexec:RunArtifact ; rdfs:range xsd:integer ;
|
|
293
|
+
rdfs:label "artifactBytes" ;
|
|
294
|
+
rdfs:comment "The canonical JSON length of the body — so a reader knows what fetching it costs." .
|
|
295
|
+
|
|
296
|
+
apexec:artifactDigest a owl:DatatypeProperty ;
|
|
297
|
+
rdfs:domain apexec:RunArtifact ; rdfs:range xsd:string ;
|
|
298
|
+
rdfs:label "artifactDigest" ;
|
|
299
|
+
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." .
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# T-box — THE HOUSEHOLD (spec 363 W4).
|
|
2
|
+
#
|
|
3
|
+
# The smallest real domain that exercises every layer at once: classes (what a household IS), relation
|
|
4
|
+
# axioms (how "my daughter's account" composes out of two links), and decisions (what a first name means
|
|
5
|
+
# when it could be a person you live with or a stranger in a directory).
|
|
6
|
+
#
|
|
7
|
+
# WHY A HOUSEHOLD IS NOT AN AGENT. Every Smart Agent is a Person, an Organization or a Service
|
|
8
|
+
# (ADR-0046), and a household is a body of people — so it is an Organization in the PROV sense, and it
|
|
9
|
+
# MAY have an agent (a `.circle` or `.org` SA) exactly as any organization may. It need not: requiring
|
|
10
|
+
# somebody to charter an agent, pay for its genesis and custody its keys before they can say who they
|
|
11
|
+
# live with would be a tax on having a family. The household is a RECORD its members keep; an agent is
|
|
12
|
+
# something a household may acquire when it starts acting as one.
|
|
13
|
+
#
|
|
14
|
+
# PRIVATE BY CONSTRUCTION. Who lives with whom is not on chain, is not derivable from chain state, and
|
|
15
|
+
# therefore may never enter the discovery knowledge base (ADR-0040) — not hashed, not "temporarily", not
|
|
16
|
+
# to make a lookup faster. It lives in each member's own vault (ADR-0025), which is also why this
|
|
17
|
+
# ontology describes what a member RECORDS rather than a global fact: two people's households can
|
|
18
|
+
# disagree, and the honest model says whose record you are reading.
|
|
19
|
+
#
|
|
20
|
+
# A FAMILY GRAPH IS EXACTLY THE DATA A PLATFORM SHOULD NOT HOLD. That is the reason for the tier, and it
|
|
21
|
+
# is not a compliance posture: an estate that centralised this would not be worth using.
|
|
22
|
+
|
|
23
|
+
@prefix aphh: <https://agenticprimitives.dev/ns/household#> .
|
|
24
|
+
@prefix ap: <https://agenticprimitives.dev/ns/core#> .
|
|
25
|
+
@prefix aporg: <https://agenticprimitives.dev/ns/org#> .
|
|
26
|
+
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
|
|
27
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
28
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
29
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
30
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
31
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
32
|
+
|
|
33
|
+
aphh: a owl:Ontology ;
|
|
34
|
+
rdfs:label "Agentic Primitives — Household" ;
|
|
35
|
+
rdfs:comment "The people someone lives with, as they record it: a private-tier body whose members may be agents, with roles and family relations that let a resolver understand 'my daughter' without a directory search (spec 363 W4)." .
|
|
36
|
+
|
|
37
|
+
# ─── The body ─────────────────────────────────────────────────────────
|
|
38
|
+
|
|
39
|
+
aphh:Household a owl:Class ;
|
|
40
|
+
rdfs:subClassOf prov:Organization ;
|
|
41
|
+
rdfs:label "Household" ;
|
|
42
|
+
rdfs:comment """A body of people who live as one — a family, a shared home, a house.
|
|
43
|
+
|
|
44
|
+
An ORGANIZATION in the PROV sense (a social entity with members), NOT a new agent class and not a
|
|
45
|
+
new kind of Smart Agent: the trichotomy stands (ADR-0046). It may be coordinated by an agent — a
|
|
46
|
+
`.circle` for a family that wants a shared inbox, an `.org` if it starts holding money — and it may
|
|
47
|
+
have none at all, which is the ordinary case and must stay free.
|
|
48
|
+
|
|
49
|
+
It is a RECORD ITS MEMBERS KEEP, not a global fact. Each member's vault holds their own household
|
|
50
|
+
record; two records may disagree, and the resolver always says whose it read.""" .
|
|
51
|
+
|
|
52
|
+
aphh:HouseholdMembership a owl:Class ;
|
|
53
|
+
rdfs:subClassOf aporg:OrganizationMembership ;
|
|
54
|
+
rdfs:label "HouseholdMembership" ;
|
|
55
|
+
rdfs:comment """One person's place in one household, over a period, with a role.
|
|
56
|
+
|
|
57
|
+
A NODE, not an edge, for the same reason organization membership is one (ADR-0048): a role and a
|
|
58
|
+
period belong to the membership, not to the person. "Guardian" is not a property of somebody — it
|
|
59
|
+
is what they are IN this household, from a date, and possibly no longer.""" .
|
|
60
|
+
|
|
61
|
+
aphh:memberOfHousehold a owl:ObjectProperty ;
|
|
62
|
+
rdfs:domain ap:Agent ; rdfs:range aphh:Household ;
|
|
63
|
+
rdfs:label "memberOfHousehold" ;
|
|
64
|
+
rdfs:comment """The households this agent belongs to — PLURAL, and meant so. A child between two
|
|
65
|
+
homes belongs to both; a carer's week is spent in one and their own life in another; a second home
|
|
66
|
+
is a household with people in it. A model that allowed only one would make somebody's second home
|
|
67
|
+
overwrite their first, which is a worse answer than not modelling it at all.
|
|
68
|
+
|
|
69
|
+
Private tier: never published, never indexed.""" .
|
|
70
|
+
|
|
71
|
+
aphh:householdMember a owl:ObjectProperty ;
|
|
72
|
+
owl:inverseOf aphh:memberOfHousehold ;
|
|
73
|
+
rdfs:domain aphh:Household ; rdfs:range ap:Agent ;
|
|
74
|
+
rdfs:label "householdMember" ;
|
|
75
|
+
rdfs:comment "The agents in this household. The direction a resolver traverses to answer 'who do I live with'." .
|
|
76
|
+
|
|
77
|
+
# ─── Roles and relations ──────────────────────────────────────────────
|
|
78
|
+
#
|
|
79
|
+
# A ROLE says what someone DOES in the household (who may decide for whom). A RELATION says how they are
|
|
80
|
+
# KIN. They are different questions and conflating them is how a system decides that a spouse may act for
|
|
81
|
+
# a spouse because the word sounded close enough. Neither is authority: a guardian's ability to act for a
|
|
82
|
+
# dependent is a DELEGATION the dependent's custodian issued, and this vocabulary never substitutes for it.
|
|
83
|
+
|
|
84
|
+
aphh:HouseholdRole a owl:Class ;
|
|
85
|
+
rdfs:subClassOf skos:Concept ;
|
|
86
|
+
rdfs:label "HouseholdRole" ;
|
|
87
|
+
rdfs:comment "What someone does in a household. NEVER authority — a guardian acts for a dependent only under a delegation, and this term is not one." .
|
|
88
|
+
|
|
89
|
+
aphh:Guardian a aphh:HouseholdRole ;
|
|
90
|
+
skos:prefLabel "guardian" ;
|
|
91
|
+
rdfs:comment "Responsible for a dependent in this household. It does not grant the ability to act for them; it says who would be asked to." .
|
|
92
|
+
|
|
93
|
+
aphh:Dependent a aphh:HouseholdRole ;
|
|
94
|
+
skos:prefLabel "dependent" ;
|
|
95
|
+
rdfs:comment "Cared for by a guardian of this household — a child, or an adult who has asked someone to hold that responsibility." .
|
|
96
|
+
|
|
97
|
+
aphh:Member a aphh:HouseholdRole ;
|
|
98
|
+
skos:prefLabel "member" ;
|
|
99
|
+
rdfs:comment "An adult member with no dependency in either direction. The ordinary case, and the default." .
|
|
100
|
+
|
|
101
|
+
aphh:householdRole a owl:ObjectProperty ;
|
|
102
|
+
rdfs:domain aphh:HouseholdMembership ; rdfs:range aphh:HouseholdRole ;
|
|
103
|
+
rdfs:label "householdRole" .
|
|
104
|
+
|
|
105
|
+
aphh:KinRelation a owl:Class ;
|
|
106
|
+
rdfs:subClassOf skos:Concept ;
|
|
107
|
+
rdfs:label "KinRelation" ;
|
|
108
|
+
rdfs:comment """How one member is KIN to the person whose record this is.
|
|
109
|
+
|
|
110
|
+
DELIBERATELY SMALL. Kinship vocabularies are a well-known bottomless pit — step-, half-, in-law,
|
|
111
|
+
fostered, chosen, culture-specific — and a resolver needs exactly one thing from this: enough to
|
|
112
|
+
understand "my daughter" when somebody says it. So: the handful of words people actually use to
|
|
113
|
+
address a transfer, and `aphh:otherKin` with a free label for everything else, which is honest
|
|
114
|
+
about being a label rather than pretending to a taxonomy nobody agreed to.""" .
|
|
115
|
+
|
|
116
|
+
aphh:spouse a aphh:KinRelation ; skos:prefLabel "spouse" .
|
|
117
|
+
aphh:child a aphh:KinRelation ; skos:prefLabel "child" ; skos:altLabel "daughter", "son" .
|
|
118
|
+
aphh:parent a aphh:KinRelation ; skos:prefLabel "parent" ; skos:altLabel "mother", "father" .
|
|
119
|
+
aphh:sibling a aphh:KinRelation ; skos:prefLabel "sibling" ; skos:altLabel "sister", "brother" .
|
|
120
|
+
aphh:otherKin a aphh:KinRelation ; skos:prefLabel "relative" ;
|
|
121
|
+
rdfs:comment "Kin this vocabulary does not name. Carries the household's own label for the person, used verbatim and never re-interpreted." .
|
|
122
|
+
|
|
123
|
+
aphh:kinRelation a owl:ObjectProperty ;
|
|
124
|
+
rdfs:domain aphh:HouseholdMembership ; rdfs:range aphh:KinRelation ;
|
|
125
|
+
rdfs:label "kinRelation" ;
|
|
126
|
+
rdfs:comment "How this member is kin to the record's owner. Absent for a housemate who is not kin, which is an ordinary household and not a gap." .
|
|
127
|
+
|
|
128
|
+
# ─── The R-box: what composes out of the above ────────────────────────
|
|
129
|
+
|
|
130
|
+
aphh:householdPayee a owl:ObjectProperty ;
|
|
131
|
+
owl:propertyChainAxiom ( aphh:householdMember ap:primaryPayee ) ;
|
|
132
|
+
rdfs:domain aphh:Household ; rdfs:range ap:Agent ;
|
|
133
|
+
rdfs:label "householdPayee" ;
|
|
134
|
+
rdfs:comment """The accounts a household's members want paid — a member, then the account that member
|
|
135
|
+
marked (ap:primaryPayee).
|
|
136
|
+
|
|
137
|
+
THIS IS WHY THE R-BOX EARNS ITS PLACE. "Send my daughter her allowance" is two links: the household
|
|
138
|
+
says who she is, her own mark says where her money goes. Written as an axiom, one traversal answers
|
|
139
|
+
it; written in code, every capability that ever needs it grows its own table and they drift.
|
|
140
|
+
|
|
141
|
+
IT COMPOSES TWO PREFERENCES AND NO PERMISSION. The chain says where money would LAND, never that
|
|
142
|
+
anyone may send it: the payment still needs a mandate the payer signs for that request.""" .
|
package/tbox/interaction.ttl
CHANGED
|
@@ -164,6 +164,19 @@ apix:DecisionReceipt a owl:Class ; rdfs:subClassOf apix:Receipt ; rdfs:la
|
|
|
164
164
|
rdfs:comment "A signed decision was made. NOT that it was executed." .
|
|
165
165
|
apix:ExecutionReceipt a owl:Class ; rdfs:subClassOf apix:Receipt ; rdfs:label "ExecutionReceipt" ;
|
|
166
166
|
rdfs:comment "Work started, progressed or completed. NOT that the outcome was valid or the commitment discharged." .
|
|
167
|
+
apix:PaymentReceipt a owl:Class ; rdfs:subClassOf apix:ExecutionReceipt ; rdfs:label "PaymentReceipt" ;
|
|
168
|
+
rdfs:comment "A transfer of value OCCURRED: this payer, this payee, this asset, this amount, this transaction (spec 360). NOT that it was owed, NOT that it was accepted, NOT that any obligation is now discharged — a receipt says the money moved and nothing about why. Held by BOTH parties: the payer's copy and the payee's are the same fact, delivered twice, which is what lets either of them account for it without asking the other." .
|
|
169
|
+
|
|
170
|
+
apix:receiptPayer a owl:ObjectProperty ; rdfs:domain apix:PaymentReceipt ; rdfs:range prov:Agent ;
|
|
171
|
+
rdfs:label "receiptPayer" ; rdfs:comment "The agent whose funds moved — the mandate's delegator, never the person who typed the sentence." .
|
|
172
|
+
apix:receiptPayee a owl:ObjectProperty ; rdfs:domain apix:PaymentReceipt ; rdfs:range prov:Agent ;
|
|
173
|
+
rdfs:label "receiptPayee" ; rdfs:comment "The agent the funds reached. Pinned to the party named in the authorizing step, never a recipient chosen after the fact (spec 360 §1)." .
|
|
174
|
+
apix:receiptAsset a owl:DatatypeProperty ; rdfs:domain apix:PaymentReceipt ; rdfs:label "receiptAsset" ;
|
|
175
|
+
rdfs:comment "The asset contract the transfer moved." .
|
|
176
|
+
apix:receiptAmount a owl:DatatypeProperty ; rdfs:domain apix:PaymentReceipt ; rdfs:label "receiptAmount" ;
|
|
177
|
+
rdfs:comment "The amount in the asset's own base units — never a rendered decimal, which loses the unit." .
|
|
178
|
+
apix:receiptTx a owl:DatatypeProperty ; rdfs:domain apix:PaymentReceipt ; rdfs:label "receiptTx" ;
|
|
179
|
+
rdfs:comment "The transaction that settled it — what makes this receipt checkable against the chain rather than believed." .
|
|
167
180
|
|
|
168
181
|
# ─── Relations ──────────────────────────────────────────────────────────────
|
|
169
182
|
|