@agenticprimitives/ontology 1.0.0-alpha.19 → 1.0.0-alpha.21

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,92 @@
1
+ # C-box — SHACL for the FamilyOffice (apfo:) RELATIONSHIP archetypes. One NodeShape
2
+ # per apfo relationship class, validating the WELL-FORMEDNESS of that relationship's
3
+ # Situation: its agent role bindings (the who) plus its typed body (the what kind),
4
+ # where the kind is pinned to a CLOSED cbox SKOS scheme via sh:in ( … ). Mirrors
5
+ # cbox/capability-catalog-shapes.shacl.ttl (a shape per class, an sh:message per
6
+ # constraint, the concept IRIs inlined) — the codelists these shapes constrain live
7
+ # in cbox/familyoffice-vocabulary.ttl and the classes + role/body predicates in
8
+ # tbox/familyoffice.ttl.
9
+ #
10
+ # These are STRUCTURE shapes, not authority: a conforming Guardianship is a
11
+ # well-formed guardianship RECORD, never a grant of legal control (control rides
12
+ # the delegation/entitlement layer, never an apfo: Situation). The New City portal
13
+ # derives a flat ShapeDef from each of these NodeShapes and validates a relationship
14
+ # record with it BEFORE a vault-first write — so a malformed relationship (a missing
15
+ # ward, an ownership kind outside the scheme) fails at the app boundary, not after it
16
+ # has already been persisted to a vault.
17
+
18
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
19
+ @prefix apfo: <https://agenticprimitives.dev/ns/familyoffice#> .
20
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
21
+
22
+ # ─── Guardianship — a directed guardian→ward oversight ─────────────────────
23
+ apfo:GuardianshipShape a sh:NodeShape ;
24
+ sh:targetClass apfo:Guardianship ;
25
+ rdfs:label "GuardianshipShape" ;
26
+ sh:property [ sh:path apfo:guardian ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
27
+ sh:message "A guardianship binds exactly one apfo:guardian (an agent IRI — the address IS the identity, never a name literal)." ] ;
28
+ sh:property [ sh:path apfo:ward ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
29
+ sh:message "A guardianship binds exactly one apfo:ward. A guardian with no ward is not a guardianship — the fragmented old encoding (a kinship link + a 0-bps custodial edge) is exactly what this canonical record replaces." ] ;
30
+ sh:property [ sh:path apfo:hasRoleKind ; sh:minCount 1 ; sh:maxCount 1 ;
31
+ sh:in ( apfo:LegalGuardian apfo:Custodian apfo:PowerOfAttorney ) ;
32
+ sh:message "The body must name exactly one guardianship roleKind from the closed cbox scheme: apfo:LegalGuardian (the default), apfo:Custodian, or apfo:PowerOfAttorney. A bare enum or a concept outside the scheme is rejected." ] .
33
+
34
+ # ─── Trusteeship — a trustee's fiduciary role over a trust entity ──────────
35
+ apfo:TrusteeshipShape a sh:NodeShape ;
36
+ sh:targetClass apfo:Trusteeship ;
37
+ rdfs:label "TrusteeshipShape" ;
38
+ sh:property [ sh:path apfo:trustee ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
39
+ sh:message "A trusteeship binds exactly one apfo:trustee (an agent IRI)." ] ;
40
+ sh:property [ sh:path apfo:trust ; sh:minCount 1 ; sh:maxCount 1 ;
41
+ sh:message "A trusteeship binds exactly one apfo:trust — the trust entity the trustee is fiduciary over." ] ;
42
+ sh:property [ sh:path apfo:hasRoleKind ; sh:minCount 1 ; sh:maxCount 1 ;
43
+ sh:in ( apfo:Trustee apfo:SuccessorTrustee ) ;
44
+ sh:message "The body must name exactly one trusteeship roleKind from the closed cbox scheme: apfo:Trustee or apfo:SuccessorTrustee." ] .
45
+
46
+ # ─── Ownership — an owner's interest in an asset or entity ─────────────────
47
+ apfo:OwnershipShape a sh:NodeShape ;
48
+ sh:targetClass apfo:Ownership ;
49
+ rdfs:label "OwnershipShape" ;
50
+ sh:property [ sh:path apfo:owner ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
51
+ sh:message "An ownership binds exactly one apfo:owner (an agent IRI)." ] ;
52
+ sh:property [ sh:path apfo:ownedAsset ; sh:minCount 1 ; sh:maxCount 1 ;
53
+ sh:message "An ownership binds exactly one apfo:ownedAsset — the asset or entity the interest is in." ] ;
54
+ sh:property [ sh:path apfo:hasOwnershipKind ; sh:minCount 1 ; sh:maxCount 1 ;
55
+ sh:in ( apfo:SoleOwnership apfo:JointOwnership apfo:CommunityProperty apfo:BeneficialInterest apfo:TrustOwnership ) ;
56
+ sh:message "The body must name exactly one ownershipKind from the closed cbox scheme: apfo:SoleOwnership, apfo:JointOwnership, apfo:CommunityProperty, apfo:BeneficialInterest, or apfo:TrustOwnership." ] .
57
+
58
+ # ─── SpouseRelation — a symmetric spousal kinship ─────────────────────────
59
+ apfo:SpouseRelationShape a sh:NodeShape ;
60
+ sh:targetClass apfo:SpouseRelation ;
61
+ rdfs:label "SpouseRelationShape" ;
62
+ sh:property [ sh:path apfo:spouseA ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
63
+ sh:message "A spouse relation binds exactly one apfo:spouseA (an agent IRI). The A/B slots are a canonical ordering for a stable hash, not a rank." ] ;
64
+ sh:property [ sh:path apfo:spouseB ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
65
+ sh:message "A spouse relation binds exactly one apfo:spouseB (an agent IRI)." ] ;
66
+ sh:property [ sh:path apfo:hasKinshipKind ; sh:minCount 1 ; sh:maxCount 1 ;
67
+ sh:in ( apfo:Spouse ) ;
68
+ sh:message "The body of a spouse relation must name the apfo:Spouse kinshipKind concept, and only it." ] .
69
+
70
+ # ─── ParentChildRelation — a directed parent→child kinship ────────────────
71
+ apfo:ParentChildRelationShape a sh:NodeShape ;
72
+ sh:targetClass apfo:ParentChildRelation ;
73
+ rdfs:label "ParentChildRelationShape" ;
74
+ sh:property [ sh:path apfo:parent ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
75
+ sh:message "A parent-child relation binds exactly one apfo:parent (an agent IRI)." ] ;
76
+ sh:property [ sh:path apfo:child ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
77
+ sh:message "A parent-child relation binds exactly one apfo:child (an agent IRI)." ] ;
78
+ sh:property [ sh:path apfo:hasKinshipKind ; sh:minCount 1 ; sh:maxCount 1 ;
79
+ sh:in ( apfo:Parent apfo:Child apfo:Grandparent apfo:StepParent apfo:Adoptive ) ;
80
+ sh:message "The body must name exactly one directed-kinship concept from the closed cbox scheme: apfo:Parent, apfo:Child, apfo:Grandparent, apfo:StepParent, or apfo:Adoptive." ] .
81
+
82
+ # ─── SiblingRelation — a symmetric sibling kinship ────────────────────────
83
+ apfo:SiblingRelationShape a sh:NodeShape ;
84
+ sh:targetClass apfo:SiblingRelation ;
85
+ rdfs:label "SiblingRelationShape" ;
86
+ sh:property [ sh:path apfo:siblingA ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
87
+ sh:message "A sibling relation binds exactly one apfo:siblingA (an agent IRI). The A/B slots are a canonical ordering for a stable hash, not a rank." ] ;
88
+ sh:property [ sh:path apfo:siblingB ; sh:nodeKind sh:IRI ; sh:minCount 1 ; sh:maxCount 1 ;
89
+ sh:message "A sibling relation binds exactly one apfo:siblingB (an agent IRI)." ] ;
90
+ sh:property [ sh:path apfo:hasKinshipKind ; sh:minCount 1 ; sh:maxCount 1 ;
91
+ sh:in ( apfo:Sibling ) ;
92
+ sh:message "The body of a sibling relation must name the apfo:Sibling kinshipKind concept, and only it." ] .
@@ -0,0 +1,48 @@
1
+ # C-box — FamilyOffice controlled vocabularies (apfo:). Closed SKOS codelists for
2
+ # kinship kinds, fiduciary/oversight role kinds, and ownership kinds — the concept
3
+ # values an apfo: relationship Situation names in its body (the A-box→C-box link).
4
+ # Mirrors cbox/scope-vocabulary.ttl. Deliberately coarse, cross-party classes.
5
+
6
+ @prefix apfo: <https://agenticprimitives.dev/ns/familyoffice#> .
7
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
8
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
9
+
10
+ # ─── kinshipKind — the kind of family tie ─────────────────────────────────
11
+ apfo:kinshipKind a skos:ConceptScheme ;
12
+ rdfs:label "kinshipKind" ;
13
+ rdfs:comment "The kind of kinship a Kinship situation asserts. Symmetric kinds (spouse/sibling) vs directed (parent/child) — see the class hierarchy in tbox/familyoffice.ttl." ;
14
+ skos:hasTopConcept apfo:Spouse, apfo:Parent, apfo:Child, apfo:Sibling,
15
+ apfo:Grandparent, apfo:StepParent, apfo:Adoptive .
16
+ apfo:Spouse a skos:Concept ; skos:inScheme apfo:kinshipKind ; skos:prefLabel "spouse" .
17
+ apfo:Parent a skos:Concept ; skos:inScheme apfo:kinshipKind ; skos:prefLabel "parent" .
18
+ apfo:Child a skos:Concept ; skos:inScheme apfo:kinshipKind ; skos:prefLabel "child" .
19
+ apfo:Sibling a skos:Concept ; skos:inScheme apfo:kinshipKind ; skos:prefLabel "sibling" .
20
+ apfo:Grandparent a skos:Concept ; skos:inScheme apfo:kinshipKind ; skos:prefLabel "grandparent" .
21
+ apfo:StepParent a skos:Concept ; skos:inScheme apfo:kinshipKind ; skos:prefLabel "step-parent" .
22
+ apfo:Adoptive a skos:Concept ; skos:inScheme apfo:kinshipKind ; skos:prefLabel "adoptive parent" .
23
+
24
+ # ─── roleKind — fiduciary / oversight roles (guardianship, trusteeship, estate) ──
25
+ apfo:roleKind a skos:ConceptScheme ;
26
+ rdfs:label "roleKind" ;
27
+ rdfs:comment "The fiduciary/oversight role a Guardianship or Trusteeship asserts. LegalGuardian is the guardianship default." ;
28
+ skos:hasTopConcept apfo:LegalGuardian, apfo:Trustee, apfo:SuccessorTrustee,
29
+ apfo:Beneficiary, apfo:PowerOfAttorney, apfo:Custodian, apfo:Executor .
30
+ apfo:LegalGuardian a skos:Concept ; skos:inScheme apfo:roleKind ; skos:prefLabel "legal guardian" .
31
+ apfo:Trustee a skos:Concept ; skos:inScheme apfo:roleKind ; skos:prefLabel "trustee" .
32
+ apfo:SuccessorTrustee a skos:Concept ; skos:inScheme apfo:roleKind ; skos:prefLabel "successor trustee" .
33
+ apfo:Beneficiary a skos:Concept ; skos:inScheme apfo:roleKind ; skos:prefLabel "beneficiary" .
34
+ apfo:PowerOfAttorney a skos:Concept ; skos:inScheme apfo:roleKind ; skos:prefLabel "power of attorney" .
35
+ apfo:Custodian a skos:Concept ; skos:inScheme apfo:roleKind ; skos:prefLabel "custodian" .
36
+ apfo:Executor a skos:Concept ; skos:inScheme apfo:roleKind ; skos:prefLabel "executor" .
37
+
38
+ # ─── ownershipKind — the kind of ownership interest ───────────────────────
39
+ apfo:ownershipKind a skos:ConceptScheme ;
40
+ rdfs:label "ownershipKind" ;
41
+ rdfs:comment "The kind of ownership interest an Ownership situation asserts." ;
42
+ skos:hasTopConcept apfo:SoleOwnership, apfo:JointOwnership, apfo:CommunityProperty,
43
+ apfo:BeneficialInterest, apfo:TrustOwnership .
44
+ apfo:SoleOwnership a skos:Concept ; skos:inScheme apfo:ownershipKind ; skos:prefLabel "sole" .
45
+ apfo:JointOwnership a skos:Concept ; skos:inScheme apfo:ownershipKind ; skos:prefLabel "joint" .
46
+ apfo:CommunityProperty a skos:Concept ; skos:inScheme apfo:ownershipKind ; skos:prefLabel "community property" .
47
+ apfo:BeneficialInterest a skos:Concept ; skos:inScheme apfo:ownershipKind ; skos:prefLabel "beneficial" .
48
+ apfo:TrustOwnership a skos:Concept ; skos:inScheme apfo:ownershipKind ; skos:prefLabel "trust-held" .
@@ -0,0 +1,218 @@
1
+ # C-box — SHACL shapes for Agentic Interaction (spec 340; ADR-0058, extending ADR-0048).
2
+ #
3
+ # WHAT THESE ARE AND ARE NOT. Graph/documentation shapes, declared here and ENFORCED by fabric's TS
4
+ # validators (golden-vectored) — the same arrangement as the messaging and consultation shapes. SHACL
5
+ # conformance is NEVER authorization and never truth: a graph can conform perfectly and describe an
6
+ # entirely unauthorized act. That is deliberate. An unauthorized Command MUST be recordable, so it
7
+ # must be shape-valid; refusing to record it is how the evidence disappears.
8
+ #
9
+ # So these constrain STRUCTURE, not permission. Each exists because its absence lets a record be
10
+ # written that cannot later be INTERPRETED:
11
+ #
12
+ # an Answer with no Question — unanswerable: what was asked?
13
+ # an Exchange with no context pin — unreplayable: what was known when this was decided?
14
+ # an Exchange with no profile pin — downgradable: a Negotiation reread as a Conversation
15
+ # an Accept with no Offer — unresolvable: accepted WHICH of the two offers?
16
+ # a bare Receipt — unreadable: what does it actually prove?
17
+ #
18
+ # Every one of those is a record that looks fine today and is useless in a year, which is the exact
19
+ # failure a governed interaction model exists to prevent.
20
+ #
21
+ # IF YOU RUN THESE THROUGH A SHACL ENGINE, CHECK ITS SUBCLASS HANDLING FIRST. Several shapes target a
22
+ # SUPERCLASS (apix:Receipt, apix:CommunicativeAct) and rely on `sh:targetClass`/`sh:class` meaning
23
+ # SHACL-instance-of, i.e. rdf:type/rdfs:subClassOf*. shacl-engine 1.1.2 does NOT compute that closure:
24
+ # a DeliveryReceipt is simply not seen as a Receipt, the superclass shape matches nothing, and the run
25
+ # reports conformance by not looking. The house test materializes the closure before validating; any
26
+ # other consumer must either do the same or load an RDFS-inferencing store.
27
+
28
+ @prefix apix: <https://agenticprimitives.dev/ns/interaction#> .
29
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
30
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
31
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
32
+
33
+ # ─── The situation ──────────────────────────────────────────────────────────
34
+
35
+ apix:InteractionShape a sh:NodeShape ;
36
+ rdfs:label "Interaction shape" ;
37
+ sh:targetClass apix:Interaction ;
38
+
39
+ # The profile is what makes an interaction interpretable: permitted roles, permitted acts, state
40
+ # machine. Without one, "what is allowed here" has no answer — and the convenient answer is "anything".
41
+ sh:property [
42
+ sh:path apix:hasProfile ;
43
+ sh:minCount 1 ; sh:maxCount 1 ;
44
+ sh:class apix:InteractionProfile ;
45
+ sh:message "An Interaction MUST pin exactly one InteractionProfile — an unprofiled interaction has no defined permitted acts or state machine (ADR-0058)." ;
46
+ ] ;
47
+
48
+ sh:property [
49
+ sh:path apix:hasParticipation ;
50
+ sh:minCount 1 ;
51
+ sh:class apix:Participation ;
52
+ sh:message "An Interaction MUST have at least one Participation." ;
53
+ ] .
54
+
55
+ apix:InteractionProfileShape a sh:NodeShape ;
56
+ rdfs:label "InteractionProfile shape" ;
57
+ sh:targetClass apix:InteractionProfile ;
58
+
59
+ sh:property [
60
+ sh:path apix:profileVersion ;
61
+ sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ;
62
+ sh:message "An InteractionProfile MUST carry an exact version — it is pinned into every Exchange to make downgrade detectable (ADR-0058)." ;
63
+ ] .
64
+
65
+ # ─── The unit that crosses the boundary ─────────────────────────────────────
66
+
67
+ apix:ExchangeShape a sh:NodeShape ;
68
+ rdfs:label "Exchange shape" ;
69
+ sh:targetClass apix:Exchange ;
70
+
71
+ sh:property [
72
+ sh:path apix:occursIn ;
73
+ sh:minCount 1 ; sh:maxCount 1 ; sh:class apix:Interaction ;
74
+ sh:message "An Exchange MUST belong to exactly one Interaction. An Exchange without an Interaction is a message (ADR-0058 §12)." ;
75
+ ] ;
76
+
77
+ # actor and principal are separate and BOTH required. Collapsing them erases who actually acted:
78
+ # the service agent vanishes behind the principal it acted for, and provenance loses the only party
79
+ # answerable for the act itself (ADR-0048 §1). Equal values are fine; a missing one is not.
80
+ sh:property [
81
+ sh:path apix:actor ;
82
+ sh:minCount 1 ; sh:maxCount 1 ;
83
+ sh:message "An Exchange MUST name exactly one actor — WHO performed the move." ;
84
+ ] ;
85
+ sh:property [
86
+ sh:path apix:principal ;
87
+ sh:minCount 1 ; sh:maxCount 1 ;
88
+ sh:message "An Exchange MUST name exactly one principal — ON WHOSE BEHALF. Equals actor when undelegated; never omitted." ;
89
+ ] ;
90
+
91
+ sh:property [
92
+ sh:path apix:pinsContext ;
93
+ sh:minCount 1 ; sh:maxCount 1 ; sh:class apix:ContextSnapshot ;
94
+ sh:message "An Exchange MUST pin exactly one ContextSnapshot — without it the decision is unreplayable (ADR-0058)." ;
95
+ ] ;
96
+
97
+ sh:property [
98
+ sh:path apix:pinsProfileVersion ;
99
+ sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ;
100
+ sh:message "An Exchange MUST record the exact profile version it was made under, on itself — reading it off the live Interaction lets a Negotiation be reread as a Conversation after the fact (ADR-0058)." ;
101
+ ] ;
102
+
103
+ sh:property [
104
+ sh:path apix:realizesAct ;
105
+ sh:minCount 1 ;
106
+ sh:class apix:CommunicativeAct ;
107
+ sh:message "An Exchange MUST realize at least one CommunicativeAct — an exchange conveying no act is transport with no meaning." ;
108
+ ] .
109
+
110
+ # ─── Acts ───────────────────────────────────────────────────────────────────
111
+
112
+ apix:CommunicativeActShape a sh:NodeShape ;
113
+ rdfs:label "CommunicativeAct shape" ;
114
+ sh:targetClass apix:CommunicativeAct ;
115
+
116
+ # This closes SHAPE.CommunicativeAct, which named a shape defined in no file — a dangle that
117
+ # survived because nothing parsed the C-box until the tbox-parses gate landed.
118
+ sh:property [
119
+ sh:path apix:performative ;
120
+ sh:minCount 1 ; sh:maxCount 1 ;
121
+ sh:message "A CommunicativeAct MUST declare exactly one performative from apix:performativeScheme." ;
122
+ ] .
123
+
124
+ apix:AcceptActShape a sh:NodeShape ;
125
+ rdfs:label "AcceptAct shape" ;
126
+ sh:targetClass apix:AcceptAct ;
127
+
128
+ # Points at the Offer, not at the Exchange that carried it: one Exchange may convey two offers, and
129
+ # "responds to that exchange" cannot say which one was accepted.
130
+ sh:property [
131
+ sh:path apix:accepts ;
132
+ sh:minCount 1 ; sh:class apix:Offer ;
133
+ sh:message "An AcceptAct MUST identify the Offer it accepts. Identifying is not authorizing — acceptance by an unauthorized party still creates no Commitment (ADR-0058 §15)." ;
134
+ ] .
135
+
136
+ apix:CounterOfferActShape a sh:NodeShape ;
137
+ rdfs:label "CounterOfferAct shape" ;
138
+ sh:targetClass apix:CounterOfferAct ;
139
+
140
+ sh:property [
141
+ sh:path apix:counters ;
142
+ sh:minCount 1 ; sh:class apix:Offer ;
143
+ sh:message "A CounterOfferAct MUST identify the Offer it counters — it proposes a NEW Offer and never mutates its predecessor, which stays in evidence exactly as sent (ADR-0058 §15)." ;
144
+ ] .
145
+
146
+ # The supersession half of the same rule, at the level where supersession is modelled. Written as
147
+ # ¬(realizes a counter) ∨ (supersedes something) — SHACL-Core has no if-then, and this is the portable
148
+ # spelling of one. It is the enforceable form of "a correction is a new Exchange, never an edit".
149
+ apix:CounteringExchangeShape a sh:NodeShape ;
150
+ rdfs:label "Countering-Exchange shape" ;
151
+ sh:targetClass apix:Exchange ;
152
+ sh:or (
153
+ [ sh:not [ sh:property [
154
+ sh:path apix:realizesAct ;
155
+ sh:qualifiedValueShape [ sh:class apix:CounterOfferAct ] ;
156
+ sh:qualifiedMinCount 1 ;
157
+ ] ] ]
158
+ [ sh:property [ sh:path apix:supersedes ; sh:minCount 1 ] ]
159
+ ) ;
160
+ sh:message "An Exchange realizing a CounterOfferAct MUST supersede the Exchange it replaces (ADR-0058 §15)." .
161
+
162
+ # ─── Content ────────────────────────────────────────────────────────────────
163
+
164
+ apix:AnswerShape a sh:NodeShape ;
165
+ rdfs:label "Answer shape" ;
166
+ sh:targetClass apix:Answer ;
167
+
168
+ # The distinction being enforced: content that identifies no question is an Inform. Both are
169
+ # legitimate; conflating them makes a Q&A interaction's resolution state uncomputable.
170
+ sh:property [
171
+ sh:path apix:answers ;
172
+ sh:minCount 1 ; sh:class apix:Question ;
173
+ sh:message "An Answer MUST identify the Question it addresses. An answer with no question is an Inform (ADR-0058)." ;
174
+ ] .
175
+
176
+ # ─── Reproducible context ───────────────────────────────────────────────────
177
+
178
+ apix:ContextSnapshotShape a sh:NodeShape ;
179
+ rdfs:label "ContextSnapshot shape" ;
180
+ sh:targetClass apix:ContextSnapshot ;
181
+
182
+ sh:property [
183
+ sh:path apix:contextDigest ;
184
+ sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ;
185
+ sh:message "A ContextSnapshot MUST carry its digest — it is addressed BY content, never by a name that could later point elsewhere." ;
186
+ ] ;
187
+
188
+ # The floating-pointer ban, made checkable. A historical record that resolves to whatever exists
189
+ # today says nothing about the moment it was made.
190
+ sh:property [
191
+ sh:path apix:pinsProfileVersion ;
192
+ sh:not [ sh:in ( "current" "latest" "HEAD" ) ] ;
193
+ sh:message "`current`/`latest`/`HEAD` are FORBIDDEN inside a historical record — a floating version makes the Exchange unreplayable (ADR-0058)." ;
194
+ ] .
195
+
196
+ # ─── Typed evidence ─────────────────────────────────────────────────────────
197
+
198
+ apix:ReceiptShape a sh:NodeShape ;
199
+ rdfs:label "Receipt shape" ;
200
+ sh:targetClass apix:Receipt ;
201
+
202
+ sh:property [
203
+ sh:path apix:attests ;
204
+ sh:minCount 1 ;
205
+ sh:message "A Receipt MUST identify what it attests to." ;
206
+ ] ;
207
+
208
+ # A bare Receipt asserts that SOMETHING happened without saying what — which is precisely how a
209
+ # delivery receipt gets read as an approval, and why every receipt is typed (ADR-0058 §16).
210
+ sh:or (
211
+ [ sh:class apix:DeliveryReceipt ]
212
+ [ sh:class apix:AdmissionReceipt ]
213
+ [ sh:class apix:ReadReceipt ]
214
+ [ sh:class apix:AcknowledgementReceipt ]
215
+ [ sh:class apix:DecisionReceipt ]
216
+ [ sh:class apix:ExecutionReceipt ]
217
+ ) ;
218
+ sh:message "Use a TYPED receipt (Delivery / Admission / Read / Acknowledgement / Decision / Execution). A bare Receipt does not say what it proves (ADR-0058 §16)." .
@@ -2,32 +2,37 @@
2
2
  # Closed SKOS codelists for performatives, membership/enrollment/role status,
3
3
  # conversation profiles, and discussion status.
4
4
 
5
+ @prefix apix: <https://agenticprimitives.dev/ns/interaction#> .
5
6
  @prefix apmsg: <https://agenticprimitives.dev/ns/messaging#> .
6
7
  @prefix aporg: <https://agenticprimitives.dev/ns/org#> .
7
8
  @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
8
9
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
9
10
 
10
- # ─── performative (CommunicativeAct) ───────────────────────────────────
11
+ # ─── performative (apix:CommunicativeAct) ──────────────────────────────
12
+ # MOVED apmsg: → apix: with ADR-0058, following CommunicativeAct itself. A performative is what an
13
+ # act DOES; apmsg: is the delivery/inbox projection (folders, labels, unread, retention). The thirteen
14
+ # concepts are unchanged and remain the exact set `fabric`'s `Performative` TS union emits.
11
15
 
12
- apmsg:performativeScheme a skos:ConceptScheme ;
16
+ apix:performativeScheme a skos:ConceptScheme ;
13
17
  rdfs:label "performative" ;
14
- skos:hasTopConcept apmsg:INFORM, apmsg:QUERY, apmsg:REQUEST, apmsg:PROPOSE, apmsg:COUNTER,
15
- apmsg:ACCEPT, apmsg:REJECT, apmsg:NOTIFY, apmsg:ACKNOWLEDGE, apmsg:ISSUE, apmsg:RETRACT,
16
- apmsg:SUBSCRIBE, apmsg:UNSUBSCRIBE .
17
-
18
- apmsg:INFORM a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "INFORM" .
19
- apmsg:QUERY a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "QUERY" .
20
- apmsg:REQUEST a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "REQUEST" .
21
- apmsg:PROPOSE a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "PROPOSE" .
22
- apmsg:COUNTER a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "COUNTER" .
23
- apmsg:ACCEPT a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "ACCEPT" .
24
- apmsg:REJECT a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "REJECT" .
25
- apmsg:NOTIFY a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "NOTIFY" .
26
- apmsg:ACKNOWLEDGE a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "ACKNOWLEDGE" .
27
- apmsg:ISSUE a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "ISSUE" .
28
- apmsg:RETRACT a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "RETRACT" .
29
- apmsg:SUBSCRIBE a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "SUBSCRIBE" .
30
- apmsg:UNSUBSCRIBE a skos:Concept ; skos:inScheme apmsg:performativeScheme ; skos:prefLabel "UNSUBSCRIBE" .
18
+ skos:definition "Communicative acts. Aligned to FIPA and ActivityStreams via mappings/, never imported as authoritative semantics. Extensible: only acts with distinctive CONSEQUENCES are promoted to OWL classes in tbox/interaction.ttl." ;
19
+ skos:hasTopConcept apix:INFORM, apix:QUERY, apix:REQUEST, apix:PROPOSE, apix:COUNTER,
20
+ apix:ACCEPT, apix:REJECT, apix:NOTIFY, apix:ACKNOWLEDGE, apix:ISSUE, apix:RETRACT,
21
+ apix:SUBSCRIBE, apix:UNSUBSCRIBE .
22
+
23
+ apix:INFORM a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "INFORM" .
24
+ apix:QUERY a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "QUERY" .
25
+ apix:REQUEST a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "REQUEST" .
26
+ apix:PROPOSE a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "PROPOSE" .
27
+ apix:COUNTER a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "COUNTER" .
28
+ apix:ACCEPT a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "ACCEPT" .
29
+ apix:REJECT a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "REJECT" .
30
+ apix:NOTIFY a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "NOTIFY" .
31
+ apix:ACKNOWLEDGE a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "ACKNOWLEDGE" .
32
+ apix:ISSUE a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "ISSUE" .
33
+ apix:RETRACT a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "RETRACT" .
34
+ apix:SUBSCRIBE a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "SUBSCRIBE" .
35
+ apix:UNSUBSCRIBE a skos:Concept ; skos:inScheme apix:performativeScheme ; skos:prefLabel "UNSUBSCRIBE" .
31
36
 
32
37
  # ─── membership status ─────────────────────────────────────────────────
33
38
 
@@ -91,15 +96,13 @@ apmsg:profileForum a skos:Concept ; skos:inScheme apmsg:conversationProfi
91
96
  apmsg:profileAnnouncement a skos:Concept ; skos:inScheme apmsg:conversationProfileScheme ; skos:prefLabel "announcement" .
92
97
  apmsg:profileSupport a skos:Concept ; skos:inScheme apmsg:conversationProfileScheme ; skos:prefLabel "support" .
93
98
 
94
- # ─── discussion status (lifecycle — orthogonal to participation policy) ──
95
-
96
- apmsg:discussionStatusScheme a skos:ConceptScheme ;
97
- rdfs:label "discussionStatus" ;
98
- skos:hasTopConcept apmsg:discussionOpen, apmsg:discussionClosed, apmsg:discussionArchived .
99
-
100
- apmsg:discussionOpen a skos:Concept ; skos:inScheme apmsg:discussionStatusScheme ; skos:prefLabel "open" .
101
- apmsg:discussionClosed a skos:Concept ; skos:inScheme apmsg:discussionStatusScheme ; skos:prefLabel "closed" .
102
- apmsg:discussionArchived a skos:Concept ; skos:inScheme apmsg:discussionStatusScheme ; skos:prefLabel "archived" .
99
+ # ─── discussion status — RETIRED (spec 340 W11) ──────────────────────────
100
+ # Declared here, implemented NOWHERE, and on inspection its three values were two axes:
101
+ # open / closed → the interaction lifecycle, which is `apix:InteractionState` (active / concluded)
102
+ # archived → SHELVING, which is `apix:InboxState.archived` — a different machine, per viewer
103
+ # Keeping the scheme would have been a second vocabulary for concepts that already have homes, which
104
+ # is the duplication ADR-0058 exists to end. Retired rather than crosswalked: there was nothing live
105
+ # to migrate, and a crosswalk would have preserved the ambiguity instead of removing it.
103
106
 
104
107
  # ─── discussion participation policy (open vs restricted topics) ────────
105
108
 
package/context.jsonld CHANGED
@@ -31,6 +31,7 @@
31
31
  "apscope": "https://agenticprimitives.dev/ns/scope#",
32
32
  "apmsg": "https://agenticprimitives.dev/ns/messaging#",
33
33
  "apsit": "https://agenticprimitives.dev/ns/situation#",
34
+ "apfo": "https://agenticprimitives.dev/ns/familyoffice#",
34
35
  "apent": "https://agenticprimitives.dev/ns/entitlement#",
35
36
  "apfab": "https://agenticprimitives.dev/ns/fabric#",
36
37
 
@@ -5,9 +5,9 @@
5
5
  */
6
6
  export declare const ARTIFACTS: {
7
7
  readonly context: "context.jsonld";
8
- readonly tbox: readonly ["tbox/core.ttl", "tbox/identity.ttl", "tbox/intents.ttl", "tbox/constraints.ttl", "tbox/resolution.ttl", "tbox/agreement.ttl", "tbox/payment.ttl", "tbox/fulfillment.ttl", "tbox/attestation.ttl", "tbox/skills.ttl", "tbox/geo.ttl", "tbox/content.ttl", "tbox/registry.ttl", "tbox/discovery.ttl", "tbox/trust.ttl", "tbox/security-exposure.ttl", "tbox/verification-receipt.ttl", "tbox/scope.ttl", "tbox/situation.ttl", "tbox/org.ttl", "tbox/entitlement.ttl", "tbox/fabric.ttl", "tbox/messaging.ttl", "tbox/guidance.ttl", "tbox/actor-context.ttl", "tbox/context.ttl", "tbox/profile.ttl", "tbox/execution.ttl", "tbox/plan.ttl", "tbox/coordination.ttl"];
9
- readonly cbox: readonly ["cbox/canonical-agent-id-shape.shacl.ttl", "cbox/controlled-vocabularies.ttl", "cbox/skill-vocabulary.ttl", "cbox/geo-vocabulary.ttl", "cbox/scope-vocabulary.ttl", "cbox/content-vocabulary.ttl", "cbox/discovery-graph-shapes.shacl.ttl", "cbox/interaction-vocabulary.ttl", "cbox/consultation-shapes.shacl.ttl", "cbox/skill-grounding-vocabulary.ttl", "cbox/guidance-vocabulary.ttl", "cbox/profile-facet-vocabulary.ttl", "cbox/agent-facet-shapes.shacl.ttl", "cbox/capability-catalog-shapes.shacl.ttl"];
10
- readonly mappings: readonly ["mappings/spine-standards.ttl", "mappings/agent-discovery-standards.ttl", "mappings/collaboration-profile.ttl", "mappings/collaboration-crosswalk-actors.ttl", "mappings/collaboration-crosswalk-organization.ttl", "mappings/collaboration-crosswalk-messaging.ttl", "mappings/collaboration-crosswalk-intent.ttl", "mappings/collaboration-crosswalk-skills.ttl", "mappings/collaboration-crosswalk-authority.ttl", "mappings/collaboration-crosswalk-protocols.ttl", "mappings/collaboration-crosswalk-guidance.ttl", "mappings/actor-context-standards.ttl"];
8
+ readonly tbox: readonly ["tbox/core.ttl", "tbox/identity.ttl", "tbox/intents.ttl", "tbox/constraints.ttl", "tbox/resolution.ttl", "tbox/agreement.ttl", "tbox/payment.ttl", "tbox/fulfillment.ttl", "tbox/attestation.ttl", "tbox/skills.ttl", "tbox/geo.ttl", "tbox/content.ttl", "tbox/registry.ttl", "tbox/discovery.ttl", "tbox/trust.ttl", "tbox/security-exposure.ttl", "tbox/agent-resolution.ttl", "tbox/verification-receipt.ttl", "tbox/scope.ttl", "tbox/situation.ttl", "tbox/org.ttl", "tbox/familyoffice.ttl", "tbox/entitlement.ttl", "tbox/interaction.ttl", "tbox/messaging.ttl", "tbox/guidance.ttl", "tbox/actor-context.ttl", "tbox/context.ttl", "tbox/profile.ttl", "tbox/execution.ttl", "tbox/plan.ttl", "tbox/coordination.ttl", "tbox/engagement.ttl"];
9
+ readonly cbox: readonly ["cbox/canonical-agent-id-shape.shacl.ttl", "cbox/controlled-vocabularies.ttl", "cbox/skill-vocabulary.ttl", "cbox/geo-vocabulary.ttl", "cbox/scope-vocabulary.ttl", "cbox/content-vocabulary.ttl", "cbox/discovery-graph-shapes.shacl.ttl", "cbox/interaction-vocabulary.ttl", "cbox/familyoffice-vocabulary.ttl", "cbox/familyoffice-shapes.shacl.ttl", "cbox/consultation-shapes.shacl.ttl", "cbox/interaction-shapes.shacl.ttl", "cbox/skill-grounding-vocabulary.ttl", "cbox/guidance-vocabulary.ttl", "cbox/profile-facet-vocabulary.ttl", "cbox/agent-facet-shapes.shacl.ttl", "cbox/capability-catalog-shapes.shacl.ttl"];
10
+ readonly mappings: readonly ["mappings/spine-standards.ttl", "mappings/agent-discovery-standards.ttl", "mappings/collaboration-profile.ttl", "mappings/collaboration-crosswalk-actors.ttl", "mappings/collaboration-crosswalk-organization.ttl", "mappings/collaboration-crosswalk-messaging.ttl", "mappings/collaboration-crosswalk-intent.ttl", "mappings/collaboration-crosswalk-skills.ttl", "mappings/collaboration-crosswalk-authority.ttl", "mappings/collaboration-crosswalk-protocols.ttl", "mappings/collaboration-crosswalk-guidance.ttl", "mappings/actor-context-standards.ttl", "mappings/commerce-engagement-crosswalk.ttl"];
11
11
  };
12
12
  /**
13
13
  * Resolve a shipped artifact's relative path (see {@link ARTIFACTS}) to an
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;CA8FZ,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD"}
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;CA+GZ,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD"}
package/dist/artifacts.js CHANGED
@@ -34,6 +34,9 @@ export const ARTIFACTS = {
34
34
  'tbox/discovery.ttl',
35
35
  'tbox/trust.ttl',
36
36
  'tbox/security-exposure.ttl',
37
+ // Agent resolution — private/public service publication + grants (spec 338; ADR-0056).
38
+ // NOTE `apar:` (agent resolution) is distinct from `apres:` (intent resolution, above).
39
+ 'tbox/agent-resolution.ttl',
37
40
  // Verification-receipt provenance, PROV-O-grounded (spec 303)
38
41
  'tbox/verification-receipt.ttl',
39
42
  // AP-Scope-V1 (spec 308)
@@ -41,8 +44,11 @@ export const ARTIFACTS = {
41
44
  // Unified interaction ontology (spec 324; ADR-0048)
42
45
  'tbox/situation.ttl',
43
46
  'tbox/org.ttl',
47
+ // FamilyOffice domain ontology (New City AI) — the family-office org + member
48
+ // relationships (kinship/guardianship/ownership/trusteeship) as Situations.
49
+ 'tbox/familyoffice.ttl',
44
50
  'tbox/entitlement.ttl',
45
- 'tbox/fabric.ttl',
51
+ 'tbox/interaction.ttl',
46
52
  'tbox/messaging.ttl',
47
53
  // Agent guidance layer — IDE SKILL.md / CLAUDE.md (ADR-0050); NOT executable skills
48
54
  'tbox/guidance.ttl',
@@ -61,6 +67,8 @@ export const ARTIFACTS = {
61
67
  'tbox/plan.ttl',
62
68
  // Coordination plane (spec 332 core subset; ADR-0054) — Endeavor / shared plan / participation
63
69
  'tbox/coordination.ttl',
70
+ // Intent engagement plane (spec 336 W0 subset) — projections / probes / offers / mandates / receipts
71
+ 'tbox/engagement.ttl',
64
72
  ],
65
73
  cbox: [
66
74
  'cbox/canonical-agent-id-shape.shacl.ttl',
@@ -76,8 +84,15 @@ export const ARTIFACTS = {
76
84
  'cbox/discovery-graph-shapes.shacl.ttl',
77
85
  // Interaction / organization codelists (spec 324)
78
86
  'cbox/interaction-vocabulary.ttl',
87
+ // FamilyOffice codelists (New City AI) — kinshipKind / roleKind / ownershipKind
88
+ 'cbox/familyoffice-vocabulary.ttl',
89
+ // FamilyOffice relationship-archetype shapes (New City AI) — a NodeShape per apfo relationship,
90
+ // validating role bindings + typed body before a portal vault-first write.
91
+ 'cbox/familyoffice-shapes.shacl.ttl',
79
92
  // Routed-consultation artifact shapes (spec 329 §6)
80
93
  'cbox/consultation-shapes.shacl.ttl',
94
+ // Agentic Interaction shapes (spec 340; ADR-0058) — structure, never permission
95
+ 'cbox/interaction-shapes.shacl.ttl',
81
96
  // Skill grounding protocols (spec 325)
82
97
  'cbox/skill-grounding-vocabulary.ttl',
83
98
  'cbox/guidance-vocabulary.ttl',
@@ -103,6 +118,8 @@ export const ARTIFACTS = {
103
118
  'mappings/collaboration-crosswalk-guidance.ttl',
104
119
  // Actor-context DUAL grounding — web2 (IAM/legal) + web3 (ERC/CAIP) (spec 326; ADR-0052)
105
120
  'mappings/actor-context-standards.ttl',
121
+ // One offer algebra, two arenas — ICM/TIO (TMF921), schema.org, ValueFlows, AP2/UCP/Seaport (spec 337)
122
+ 'mappings/commerce-engagement-crosswalk.ttl',
106
123
  ],
107
124
  };
108
125
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,yCAAyC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,gBAAgB;IACzB,IAAI,EAAE;QACJ,4BAA4B;QAC5B,eAAe;QACf,mBAAmB;QACnB,8DAA8D;QAC9D,kBAAkB;QAClB,sBAAsB;QACtB,qBAAqB;QACrB,oBAAoB;QACpB,kBAAkB;QAClB,sBAAsB;QACtB,sBAAsB;QACtB,4CAA4C;QAC5C,iBAAiB;QACjB,cAAc;QACd,kDAAkD;QAClD,kBAAkB;QAClB,oEAAoE;QACpE,mBAAmB;QACnB,oBAAoB;QACpB,gBAAgB;QAChB,4BAA4B;QAC5B,8DAA8D;QAC9D,+BAA+B;QAC/B,yBAAyB;QACzB,gBAAgB;QAChB,oDAAoD;QACpD,oBAAoB;QACpB,cAAc;QACd,sBAAsB;QACtB,iBAAiB;QACjB,oBAAoB;QACpB,oFAAoF;QACpF,mBAAmB;QACnB,gEAAgE;QAChE,wBAAwB;QACxB,uFAAuF;QACvF,kBAAkB;QAClB,2FAA2F;QAC3F,2FAA2F;QAC3F,kBAAkB;QAClB,oFAAoF;QACpF,6FAA6F;QAC7F,iDAAiD;QACjD,oBAAoB;QACpB,2EAA2E;QAC3E,eAAe;QACf,+FAA+F;QAC/F,uBAAuB;KACxB;IACD,IAAI,EAAE;QACJ,yCAAyC;QACzC,kCAAkC;QAClC,6EAA6E;QAC7E,2BAA2B;QAC3B,yBAAyB;QACzB,0DAA0D;QAC1D,2BAA2B;QAC3B,oEAAoE;QACpE,6BAA6B;QAC7B,kEAAkE;QAClE,uCAAuC;QACvC,kDAAkD;QAClD,iCAAiC;QACjC,oDAAoD;QACpD,oCAAoC;QACpC,uCAAuC;QACvC,qCAAqC;QACrC,8BAA8B;QAC9B,wFAAwF;QACxF,mCAAmC;QACnC,iDAAiD;QACjD,mCAAmC;QACnC,yFAAyF;QACzF,0CAA0C;KAC3C;IACD,QAAQ,EAAE;QACR,8BAA8B;QAC9B,wCAAwC;QACxC,wDAAwD;QACxD,oCAAoC;QACpC,6CAA6C;QAC7C,mDAAmD;QACnD,gDAAgD;QAChD,6CAA6C;QAC7C,6CAA6C;QAC7C,gDAAgD;QAChD,gDAAgD;QAChD,+CAA+C;QAC/C,yFAAyF;QACzF,sCAAsC;KACvC;CACO,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,YAAY,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,yCAAyC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,gBAAgB;IACzB,IAAI,EAAE;QACJ,4BAA4B;QAC5B,eAAe;QACf,mBAAmB;QACnB,8DAA8D;QAC9D,kBAAkB;QAClB,sBAAsB;QACtB,qBAAqB;QACrB,oBAAoB;QACpB,kBAAkB;QAClB,sBAAsB;QACtB,sBAAsB;QACtB,4CAA4C;QAC5C,iBAAiB;QACjB,cAAc;QACd,kDAAkD;QAClD,kBAAkB;QAClB,oEAAoE;QACpE,mBAAmB;QACnB,oBAAoB;QACpB,gBAAgB;QAChB,4BAA4B;QAC5B,uFAAuF;QACvF,wFAAwF;QACxF,2BAA2B;QAC3B,8DAA8D;QAC9D,+BAA+B;QAC/B,yBAAyB;QACzB,gBAAgB;QAChB,oDAAoD;QACpD,oBAAoB;QACpB,cAAc;QACd,8EAA8E;QAC9E,4EAA4E;QAC5E,uBAAuB;QACvB,sBAAsB;QACtB,sBAAsB;QACtB,oBAAoB;QACpB,oFAAoF;QACpF,mBAAmB;QACnB,gEAAgE;QAChE,wBAAwB;QACxB,uFAAuF;QACvF,kBAAkB;QAClB,2FAA2F;QAC3F,2FAA2F;QAC3F,kBAAkB;QAClB,oFAAoF;QACpF,6FAA6F;QAC7F,iDAAiD;QACjD,oBAAoB;QACpB,2EAA2E;QAC3E,eAAe;QACf,+FAA+F;QAC/F,uBAAuB;QACvB,qGAAqG;QACrG,qBAAqB;KACtB;IACD,IAAI,EAAE;QACJ,yCAAyC;QACzC,kCAAkC;QAClC,6EAA6E;QAC7E,2BAA2B;QAC3B,yBAAyB;QACzB,0DAA0D;QAC1D,2BAA2B;QAC3B,oEAAoE;QACpE,6BAA6B;QAC7B,kEAAkE;QAClE,uCAAuC;QACvC,kDAAkD;QAClD,iCAAiC;QACjC,gFAAgF;QAChF,kCAAkC;QAClC,gGAAgG;QAChG,2EAA2E;QAC3E,oCAAoC;QACpC,oDAAoD;QACpD,oCAAoC;QACpC,gFAAgF;QAChF,mCAAmC;QACnC,uCAAuC;QACvC,qCAAqC;QACrC,8BAA8B;QAC9B,wFAAwF;QACxF,mCAAmC;QACnC,iDAAiD;QACjD,mCAAmC;QACnC,yFAAyF;QACzF,0CAA0C;KAC3C;IACD,QAAQ,EAAE;QACR,8BAA8B;QAC9B,wCAAwC;QACxC,wDAAwD;QACxD,oCAAoC;QACpC,6CAA6C;QAC7C,mDAAmD;QACnD,gDAAgD;QAChD,6CAA6C;QAC7C,6CAA6C;QAC7C,gDAAgD;QAChD,gDAAgD;QAChD,+CAA+C;QAC/C,yFAAyF;QACzF,sCAAsC;QACtC,uGAAuG;QACvG,4CAA4C;KAC7C;CACO,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,YAAY,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvE,CAAC"}