@ixo/domain.md 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +6 -0
  3. package/README.md +30 -0
  4. package/assets/domain-md.schema.json +1103 -0
  5. package/assets/oracle-capsule-jcs-vectors.json +57 -0
  6. package/assets/oracle-capsule-manifest-contract.md +72 -0
  7. package/assets/oracle-capsule-source-lock.schema.json +45 -0
  8. package/assets/oracle-capsule.schema.json +265 -0
  9. package/assets/rules.json +275 -0
  10. package/assets/spec.md +1434 -0
  11. package/assets/template-manifest.schema.json +57 -0
  12. package/dist/capsule/index.d.ts +75 -0
  13. package/dist/capsule/index.js +20 -0
  14. package/dist/capsule/index.js.map +1 -0
  15. package/dist/chunk-BYBC2TSS.js +597 -0
  16. package/dist/chunk-BYBC2TSS.js.map +1 -0
  17. package/dist/chunk-G7PZJYAJ.js +31826 -0
  18. package/dist/chunk-G7PZJYAJ.js.map +1 -0
  19. package/dist/chunk-R6QZRNEX.js +164 -0
  20. package/dist/chunk-R6QZRNEX.js.map +1 -0
  21. package/dist/chunk-T3STBWXP.js +46 -0
  22. package/dist/chunk-T3STBWXP.js.map +1 -0
  23. package/dist/chunk-W7MRQP7I.js +862 -0
  24. package/dist/chunk-W7MRQP7I.js.map +1 -0
  25. package/dist/chunk-XDIWMZVF.js +1150 -0
  26. package/dist/chunk-XDIWMZVF.js.map +1 -0
  27. package/dist/cli-KcUIQEiE.d.ts +171 -0
  28. package/dist/cli.d.ts +2 -0
  29. package/dist/cli.js +400 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/index.d.ts +12 -0
  32. package/dist/index.js +83 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/resolver-B3mwnjJq.d.ts +96 -0
  35. package/dist/spec.d.ts +20 -0
  36. package/dist/spec.js +23 -0
  37. package/dist/spec.js.map +1 -0
  38. package/dist/templates/index.d.ts +7 -0
  39. package/dist/templates/index.js +24 -0
  40. package/dist/templates/index.js.map +1 -0
  41. package/dist/workers-Dr8B8a2O.d.ts +19 -0
  42. package/dist/workers.d.ts +3 -0
  43. package/dist/workers.js +31 -0
  44. package/dist/workers.js.map +1 -0
  45. package/package.json +97 -0
  46. package/src/capsule/canonical.ts +74 -0
  47. package/src/capsule/index.ts +10 -0
  48. package/src/capsule/json.ts +373 -0
  49. package/src/capsule/types.ts +63 -0
  50. package/src/capsule/validate.ts +551 -0
  51. package/src/cli.ts +405 -0
  52. package/src/compiled-validators.d.ts +7 -0
  53. package/src/compiled-validators.js +32512 -0
  54. package/src/constants.ts +250 -0
  55. package/src/diff.ts +111 -0
  56. package/src/export.ts +28 -0
  57. package/src/index.ts +36 -0
  58. package/src/lint.ts +42 -0
  59. package/src/parser.ts +174 -0
  60. package/src/sarif.ts +49 -0
  61. package/src/semantic.ts +1156 -0
  62. package/src/spec.ts +48 -0
  63. package/src/templates/errors.ts +3 -0
  64. package/src/templates/index.ts +11 -0
  65. package/src/templates/manifest.ts +94 -0
  66. package/src/templates/render.ts +435 -0
  67. package/src/templates/resolver.ts +200 -0
  68. package/src/templates/types.ts +98 -0
  69. package/src/types.ts +195 -0
  70. package/src/workers.ts +6 -0
package/assets/spec.md ADDED
@@ -0,0 +1,1434 @@
1
+ <!-- Generated from spec/spec.mdx and spec/rules.ts | version: 1.0.0-rc.3 -->
2
+ <!-- Do not edit directly. Run npm run spec:generate. -->
3
+
4
+ # domain.md Specification
5
+
6
+ | | |
7
+ | :---- | :---- |
8
+ | **Specification version** | `1.0.0-rc.3` |
9
+ | **Status** | `release-candidate` — suitable for controlled production pilots; promote to `1.0.0` only after resolver, anchoring, and migration interoperability tests pass |
10
+ | **Consumers** | AI agents, Agentic Oracles, Qi workflows, SDK automation, governance assistants, domain operators |
11
+ | **Purpose** | The index operating document an AI agent loads before acting within an IXO entity domain |
12
+ | **Normative artifacts** | This document plus `domain-md.schema.json`; neither artifact may be used without the matching version |
13
+ | **Encoding** | UTF-8, no byte-order mark; YAML 1.2 core schema; duplicate keys, aliases, custom tags, and merge keys are errors |
14
+
15
+ `domain.md` is the IXO-domain analogue of `claude.md` / `skill.md` / `design.md`: a persistent, machine-first context file that tells an agent **what domain it is in, where authority lives, what state is canonical, what it may inspect, what it may propose, and what it must never do without explicit authority.**
16
+
17
+ It indexes and constrains IXO state; it does **not** replace it. The IID/DID document and IXO Protocol remain canonical. `domain.md` adds the operating context — constitution, controllers, services, resources, rights, claims, linked entities, accounts, flows, and agent authority — that raw identifiers do not carry.
18
+
19
+ The keywords **MUST**, **MUST NOT**, **SHOULD**, and **MAY** are used as described by RFC 2119 and RFC 8174 when they appear in capitals. The JSON Schema is normative for frontmatter shape and primitive constraints; this document is normative for semantic, authorization, lifecycle, and runtime behavior. If the two artifacts disagree, validation **MUST** fail with `spec-artifact-conflict`; an implementation **MUST NOT** choose whichever interpretation is more permissive. On a conflict between a conforming `domain.md` and live canonical domain state, agents apply §6.
20
+
21
+ ---
22
+
23
+ ## 0\. Conformance profiles and lifecycle
24
+
25
+ Every `domain.md` declares `conformance.spec_version`, `conformance.schema`, and one profile. Validators **MUST** validate the declared profile and **MUST NOT** silently downgrade it.
26
+
27
+ | Profile | Purpose | Required state |
28
+ | :---- | :---- | :---- |
29
+ | `authoring_draft` | Local, non-operational composition before persistence | `domain.id` MAY be a `urn:uuid`; `domain.iid` and document CIDs MAY be `null`; the document grants no runtime authority |
30
+ | `persisted_draft` | Content-addressed draft stored outside canonical IID state | every linked document has a verified CID; the index MAY remain unanchored and MAY still use a `urn:uuid` |
31
+ | `anchored` | Index identity is bound to the canonical IID | `domain.id` and `domain.iid` are DIDs; anchoring evidence identifies the exact `domain.md` CID; every linked-document CID verifies |
32
+ | `runtime` | Safe to load for live agent decisions | satisfies `anchored`; canonical sources resolve without conflict; required capabilities, freshness, and review policies pass runtime checks |
33
+
34
+ Profile names describe artifact assurance, not entity lifecycle. `domain.status` separately describes whether the entity is draft, active, paused, deprecated, or archived.
35
+
36
+ Template placeholders such as `{{name}}` and `<<FILL_AT_PUBLISH:...>>` are never valid in a conforming `domain.md`. Templates are pre-conformance inputs. An `authoring_draft` represents unknown identity with a generated `urn:uuid` and unknown CIDs with YAML `null`, then records the unresolved items outside normative frontmatter in its authoring report.
37
+
38
+ Conformance has two layers:
39
+
40
+ 1. **Static conformance** — safe YAML parsing, JSON Schema validation, reference resolution, lint rules, and profile-specific invariants.
41
+ 2. **Runtime conformance** — immutable-content verification, canonical IID/protocol resolution, capability and revocation checks, freshness checks, and policy evaluation against the current task.
42
+
43
+ Passing static conformance never proves runtime authorization.
44
+
45
+ ---
46
+
47
+ ## 1\. Principles
48
+
49
+ 1. **Legible before active.** An agent loads the operating brief before it calls a tool, queries a service, submits a claim, mutates state, or votes.
50
+ 2. **Preserve source-of-truth boundaries.** Protocol state, IID records, Blocksync graph reads, Matrix rooms, claims, evidence, rubrics, and UDIDs are distinct authorities and **MUST NOT** collapse into one opaque context. Protocol owns transaction/state truth; Blocksync is a read projection of it.
51
+ 3. **Constitution before agency.** Every domain declares whether it has a constitution. Governed and agentic domains identify the norms, instruments, authority sources, procedures, execution mechanisms, and constitutional-AI policy that constrain their agency.
52
+ 4. **Operationalise IID properties.** Each of `controllers`, `services`, `resources`, `rights`, `claims`, `linked_entities`, `accounts` carries the extra context needed to act, not just IDs (§4–§5).
53
+ 5. **Progressive disclosure.** Load frontmatter \+ brief first; open deeper sections only when the task requires them (§3).
54
+ 6. **Bounded agency by default.** Read and propose before execute. Human, governance, or protocol review is mandatory for high-value, irreversible, ambiguous, disputed, or authority-sensitive actions.
55
+
56
+ ---
57
+
58
+ ## 2\. Document structure
59
+
60
+ Two layers: normative YAML frontmatter, then human-readable Markdown.
61
+
62
+ ```
63
+ ---
64
+ # YAML frontmatter — normative, machine-readable operating index
65
+ ---
66
+ # domain.md
67
+ ## Overview
68
+ ## Operating Model
69
+ ## Authority & Control
70
+ ## Constitutional Governance
71
+ ## Services
72
+ ## Resources
73
+ ## Rights & Capabilities
74
+ ## Claims, Evidence & Evaluation
75
+ ## Linked Entities
76
+ ## Accounts & Value
77
+ ## POD, Flows & Agents
78
+ ## Privacy & Source-of-Truth Boundaries
79
+ ## Playbooks
80
+ ## Do's and Don'ts
81
+ ## Changelog
82
+ ```
83
+
84
+ Sections use `##` headings. Any section **MAY** be omitted when irrelevant; present sections **SHOULD** appear in the order above. A duplicated canonical section is an **error**; an unknown section is **preserved with a warning**.
85
+
86
+ Processors **MUST** parse frontmatter with YAML 1.2 core semantics, reject duplicate mapping keys, aliases, anchors, merge keys, custom tags, non-UTF-8 input, and documents larger than the implementation's declared limit. The baseline interoperability limits are 1 MiB for `domain.md`, 2 MiB per linked text document, 64 mapping levels, 10,000 aggregate YAML nodes, and 10,000 scalar characters per field. Implementations MAY enforce lower limits when declared before parsing.
87
+
88
+ Where a `documents` entry backs a section (§4.4), the section is a **summary stub**: it carries enough for its disclosure pass and links to the backing document for Pass-3 depth — the index holds the summary, the linked file holds the full content. Default section ↔ role links: Overview → `description` (and the manifest for depth); Authority & Control → `governance`; Playbooks → `operations`; POD, Flows & Agents → `agents`; Privacy & Source-of-Truth Boundaries → `data-policy`; Changelog → `changelog`.
89
+
90
+ ---
91
+
92
+ ## 3\. Progressive disclosure
93
+
94
+ Three passes. Each pass references **only keys that exist in the schema (§4).**
95
+
96
+ ### Pass 1 — Always load
97
+
98
+ ```
99
+ version • kind • conformance • document_revision • domain.id • domain.type
100
+ source_of_truth (esp. iid_document, conflict_resolution_order)
101
+ documents (index + cids only; content loads per each entry's disclosure_pass)
102
+ constitution (status, subject, type, instruments, authority, execution, AI policy)
103
+ agent_default_mode (mode, human_review_required_for)
104
+ controllers.summary
105
+ rights.agent_baseline
106
+ privacy.default_policy
107
+ critical_do_not
108
+ ```
109
+
110
+ Purpose: never act before authority and source-of-truth boundaries are known. **Missing authority is denial, not ambiguity.**
111
+
112
+ ### Pass 2 — Load by task intent
113
+
114
+ | Task intent | Required frontmatter | Required sections |
115
+ | :---- | :---- | :---- |
116
+ | Read domain state | `source_of_truth`, `services`, `resources`, `linked_entities` | Overview; Privacy & Source-of-Truth Boundaries |
117
+ | Submit / evaluate a claim | `claims`, `resources`, `rights`, `agents`, `pods.flows` | Claims, Evidence & Evaluation; POD, Flows & Agents |
118
+ | Update IID / domain settings | `controllers`, `rights`, `services`, `resources` | Authority & Control; Services; Resources |
119
+ | Use Matrix / private rooms | `services` (type `matrix`), `pods.matrix_room`, `privacy`, `agents` | POD, Flows & Agents; Privacy & Source-of-Truth Boundaries |
120
+ | Move funds / settle | `accounts`, `rights`, `claims`, `pods.flows`, `agent_default_mode.human_review_required_for` | Accounts & Value; Claims; Playbooks |
121
+ | Traverse related entities | `linked_entities`, `graph_policy`, `privacy` | Linked Entities; Privacy & Source-of-Truth Boundaries |
122
+ | Participate in governance | `constitution`, `controllers`, `governance`, `rights`, `claims` | Authority & Control; Constitutional Governance; Playbooks |
123
+ | Evaluate or execute as an agent | `constitution`, `agent_default_mode`, `agents`, `rights`, `services`, `resources` | Constitutional Governance; Rights & Capabilities; POD, Flows & Agents |
124
+
125
+ ### Pass 3 — Deep context, only when the task requires it
126
+
127
+ Schemas, rubrics, legal terms, protocol specs, evidence packages, account policies, DAO proposals, room state, linked-entity documents. An agent **MUST NOT** load private evidence, room history, account detail, or personal data unless the task requires it **and** a matching right, role, or delegation is present.
128
+
129
+ **Document disclosure.** Pass 1 loads the `documents` index (roles, cids, passes, sensitivity) — pointers, not content — so the agent knows what context exists and can verify it. A document's *content* loads when its `disclosure_pass` is reached **or** the current task intent appears in its `required_for_tasks`. Defaults: `description` and `changelog` at Pass 2; the manifest at Pass 3; operational docs at Pass 2\. Every fetched document is verified against its declared `cid` before use (§4.4); on mismatch, do not use it and flag.
130
+
131
+ ---
132
+
133
+ ## 4\. Frontmatter schema
134
+
135
+ ### 4.1 Recognized top-level keys
136
+
137
+ **Core (always valid):** `version`, `kind`, `conformance`, `document_revision`, `name`, `description`, `last_updated`, `maintainers`, `domain`, `source_of_truth`, `documents`, `constitution`, `agent_default_mode`, `controllers`, `services`, `resources`, `rights`, `claims`, `linked_entities`, `accounts`, `pods`, `agents`, `privacy`, `graph_policy`, `validation`, `critical_do_not`.
138
+
139
+ **Conditional type blocks (valid only when `domain.type` matches, see §7):** `governance`, `protocols`, `asset`, `deed`, `protocol`, `investment`.
140
+
141
+ **Extensions:** any key prefixed `x-`.
142
+
143
+ An unknown, unprefixed top-level key produces a **warning**.
144
+
145
+ ### 4.2 Reference convention
146
+
147
+ - A **bare id** (e.g. `rubric-service-delivery-v1`) refers to an entry in *this* file (a `resources.entries[].id`, `rights.entries[].id`, etc.) and **MUST** resolve locally — lint-checked.
148
+ - A **URI / CID / DID** or `resource:`\-prefixed string points outside the file and is **not** required to be defined locally.
149
+
150
+ ### 4.3 Structural model
151
+
152
+ The block below is readable notation, not a substitute for `domain-md.schema.json`. A production validator **MUST** validate against the matching JSON Schema before applying the semantic lint rules in §13.
153
+
154
+ ```
155
+ version: "1.0.0-rc.3"
156
+ kind: "domain.md"
157
+ conformance:
158
+ spec_version: "1.0.0-rc.3"
159
+ schema: "urn:ixo:domain-md:schema:1.0.0-rc.3"
160
+ profile: "authoring_draft|persisted_draft|anchored|runtime"
161
+ document_revision: string # monotonic domain-controlled revision, e.g. semver or date-build id
162
+ name: string
163
+ description: string
164
+ last_updated: "YYYY-MM-DD"
165
+ maintainers:
166
+ - { id: "did:ixo:...", name: string, role: string, contact: string | null }
167
+
168
+ domain:
169
+ id: "did:ixo:entity:...|urn:uuid:..." # urn:uuid only for authoring_draft or persisted_draft
170
+ iid: "did:ixo:entity:..." | null # required for anchored and runtime
171
+ type: "dao|organisation|person|project|asset|commodity|financial_instrument|property_right|agreement|deed|work|protocol|investment|oracle|service|claim|credential|evidence|decision|outcome|event|process|relationship|information_object|normative_object|capability|biological_entity|network|dataset|device|place|portfolio|marketplace|pod|claim_collection|custom"
172
+ class: "did:ixo:entity:..." | null
173
+ class_binding: # required when class is non-null
174
+ resource: string # immutable protocol class or template-manifest locator
175
+ cid: string
176
+ version: string
177
+ merge_policy: "local_explicit_only" # no implicit deep merge; omitted local keys do not inherit authority
178
+ network:
179
+ chain_id: string
180
+ environment: "mainnet|testnet|devnet|local"
181
+ resolver: string
182
+ blocksync_endpoint: string | null
183
+ rpc_endpoint: string | null
184
+ status: "draft|active|paused|deprecated|archived"
185
+ purpose: string
186
+ operating_boundary: string
187
+
188
+ source_of_truth:
189
+ protocol_state: "ixo-protocol"
190
+ iid_document: "did:ixo:entity:..." | null # null only before canonical registration
191
+ graph_query_layer: "ixo-blocksync" | null
192
+ private_collaboration: "ixo-matrix" | null
193
+ claims_registry: string | null
194
+ evidence_store: string | null
195
+ code_repository: string | null
196
+ ontology_contexts:
197
+ - { uri: string, purpose: string }
198
+ conflict_resolution_order: # CANONICAL — see §6. Prose MUST NOT restate a different order.
199
+ - "protocol_state"
200
+ - "iid_document"
201
+ - "udid"
202
+ - "credential"
203
+ - "claim"
204
+ - "claim_collection_state"
205
+ - "blocksync" # read projection; defer to protocol_state on any divergence
206
+ - "matrix_state"
207
+ - "domain_md"
208
+ - "user_prompt"
209
+ - "agent_memory"
210
+ authority_scopes: # precedence applies only where a source is competent for the same fact
211
+ - fact: "controller|right|account_balance|claim_status|credential_status|flow_state|domain_intent|custom"
212
+ sources: [ string ] # ordered subset of conflict_resolution_order
213
+
214
+ documents:
215
+ anchoring:
216
+ method: "none|iid_linked_resource|content_address|resolver"
217
+ reference: string | null # canonical linked-resource/resolver reference
218
+ cid: string | null # exact domain.md CID; null before anchoring
219
+ verified_at: "YYYY-MM-DDTHH:mm:ssZ" | null
220
+ not_applicable: [ "governance|data-policy|agents|operations" ] # surfaces this domain lacks; suppresses operational-doc warnings
221
+ entries:
222
+ - id: string # unique stable identifier used by constitution.instruments
223
+ role: "description|changelog|manifest|operations|governance|data-policy|agents|compliance|risk-register|custom"
224
+ category: "universal|manifest|operational|advanced|extension"
225
+ manifest_type: "charter|dossier|prospectus|terms|specification|datasheet|device-profile|custom" | null # only when category: manifest
226
+ name: string
227
+ uri: string | null # null only in authoring_draft
228
+ cid: string | null # null only in authoring_draft; REQUIRED from persisted_draft onward
229
+ media_type: string
230
+ version: string | null
231
+ owner: "did:ixo:..."
232
+ update_authority: [ "did:ixo:..." ]
233
+ authority: "interpretive|defining|advisory" # defining = manifest; advisory = changelog; else interpretive
234
+ disclosure_pass: 1 | 2 | 3
235
+ required_for_tasks: [ string ] # task intents (§3 Pass 2) that pull this document early
236
+ sensitivity: "public|internal|confidential|restricted|regulated"
237
+ access_policy: "public|controller_only|role_based|capability_based|matrix_room|private|custom"
238
+ agent_use: { read: boolean, cite: boolean, summarize: boolean } # context only — never transform/write
239
+ freshness: { last_verified: "YYYY-MM-DD" | null, max_age: string | null }
240
+ supersedes: string | null # prior documents.entries[].id, for amendments
241
+
242
+ constitution:
243
+ status: "not_applicable|draft|adopted|in_force|suspended|superseded"
244
+ reason: string | null # required when status is not_applicable
245
+ subject: "did:ixo:...|urn:uuid:..." # MUST exactly equal domain.id
246
+ type: string # constitutional type IRI from the IXO constitutional vocabulary
247
+ subject_profile: # required for every status, including not_applicable
248
+ subject_types: [ string ] # ≥1 class IRI from the legal-form-independent subject taxonomy
249
+ archetypes: [ string ] # any of Stewarded, Owned, Managed, Governed, Regulated, Verified, Settled
250
+ identity: [ string ] # MUST include constitution.subject
251
+ purposes: [ string ]
252
+ interests: [ string ]
253
+ values: [ string ]
254
+ rights: [ string ]
255
+ obligations: [ string ]
256
+ capabilities: [ string ]
257
+ claims: [ string ]
258
+ wallets: [ string ]
259
+ authorities: [ string ]
260
+ memory: [ string ]
261
+ evidence_policies: [ string ]
262
+ evaluation_policies: [ string ]
263
+ decision_policies: [ string ]
264
+ settlement_policies: [ string ]
265
+ governance: [ string ]
266
+ custodians: [ string ]
267
+ stewards: [ string ]
268
+ owners: [ string ]
269
+ beneficiaries: [ string ]
270
+ oracles: [ string ]
271
+ agentic_twins: [ string ]
272
+ legal_effect: # required unless status is not_applicable
273
+ status: "none|claimed|verified|unknown"
274
+ jurisdiction: string | null
275
+ authority_evidence: [ string ]
276
+ norms: [ string ] # resource IDs or immutable external references
277
+ instruments:
278
+ - document_ref: string # documents.entries[].id
279
+ type: string # constitutional instrument IRI
280
+ functions: [ "constitutive|governing|amending|interpretive|executable" ]
281
+ canonical: boolean
282
+ effective_from: "YYYY-MM-DDTHH:mm:ssZ" | null
283
+ effective_until: "YYYY-MM-DDTHH:mm:ssZ" | null
284
+ governance:
285
+ authority_sources: [ string ] # document/resource IDs or canonical external references
286
+ decision_procedure: string | null
287
+ amendment_procedure: string | null
288
+ interpretation_procedure: string | null
289
+ dispute_resolution_procedure: string | null
290
+ suspension_procedure: string | null
291
+ dissolution_procedure: string | null
292
+ execution:
293
+ mode: "human_interpreted|machine_assisted|machine_executable|hybrid"
294
+ implementations: [ string ]
295
+ conformance_tests: [ string ]
296
+ enforcement_points: [ string ]
297
+ failure_policy: "deny|pause_and_escalate"
298
+ human_review_required_for: [ string ]
299
+ constitutional_ai:
300
+ mode: "none|context_only|critique_and_revise|policy_evaluate|hybrid"
301
+ applies_to_agents: [ string ]
302
+ principles: [ string ]
303
+ critique_procedure: string | null
304
+ revision_procedure: string | null
305
+ decision_procedure: string | null
306
+ model_profile: string | null
307
+ conflict_policy: "canonical_authority_prevails"
308
+ audit_record: string | null
309
+
310
+ agent_default_mode:
311
+ mode: "read_only|propose_only|bounded_evaluate|bounded_execute" # the capability CEILING (§8)
312
+ overrides: # MAY only LOWER the ceiling; raising it requires a rights.entries grant
313
+ move_value: false
314
+ issue_credentials: false
315
+ change_rights: false
316
+ change_rubrics: false
317
+ human_review_required_for:
318
+ - "high_value_action"
319
+ - "irreversible_state_change"
320
+ - "ambiguous_evidence"
321
+ - "disputed_claim"
322
+ - "credential_issuance"
323
+ - "payment_release"
324
+ - "controller_change"
325
+ - "rights_change"
326
+ - "rubric_change"
327
+
328
+ controllers:
329
+ summary:
330
+ primary_controller: "did:ixo:..."
331
+ governance_model: "single_controller|multisig|dao|group|hybrid|protocol_controlled"
332
+ agent_controllers_allowed: boolean
333
+ entries:
334
+ - id: "did:ixo:..."
335
+ type: "human|organisation|dao|group|multisig|agent|service|module_account|protocol"
336
+ name: string
337
+ role: string
338
+ verification_methods:
339
+ - { id: string, type: string,
340
+ purpose: "authentication|assertionMethod|capabilityInvocation|capabilityDelegation|keyAgreement" }
341
+ addresses:
342
+ - { chain: string, address: string, purpose: string }
343
+ authorities: # subset of: update_iid, manage_services, manage_resources,
344
+ - string # grant_rights, revoke_rights, submit_claim, evaluate_claim,
345
+ # verify_claim, issue_credential, manage_accounts,
346
+ # transfer_ownership, governance_vote
347
+ approval_policy:
348
+ { threshold: string | null, quorum: string | null, timelock: string | null, escalation: string | null }
349
+ limitations: [ string ]
350
+ audit_requirements:
351
+ { log_to: "protocol|matrix|claim|udid|external", signature_required: boolean }
352
+
353
+ services:
354
+ entries:
355
+ - id: "#service-id"
356
+ type: "registry|resolver|blocksync|matrix|qi|oracle|claim_api|evidence_store|credential_issuer|payment|escrow|dashboard|mcp|webhook|external_api|custom"
357
+ name: string
358
+ endpoint: string
359
+ service_did: string | null
360
+ auth:
361
+ method: "none|did_auth|ucan|oauth|api_key|jwt|cosmos_signer|matrix_access_token|custom"
362
+ required_scopes: [ string ]
363
+ allowed_agent_uses: [ "read|query|submit|evaluate|notify|propose_transition" ]
364
+ forbidden_agent_uses: [ string ]
365
+ data_classification: "public|internal|confidential|restricted|regulated"
366
+ canonical: boolean # true = source-of-truth service; false = convenience only
367
+ fallback_service: string | null
368
+ rate_limits: string | null
369
+ verification: { expected_hash: string | null, health_check: string | null }
370
+
371
+ resources:
372
+ entries:
373
+ - id: string
374
+ type: "schema|blueprint|flow|rubric|policy|legal|dataset|evidence|credential_template|model|notebook|dashboard|document|repo|matrix_room|ontology|asset_registry|investment_memo|deed_terms|custom"
375
+ name: string
376
+ uri: string
377
+ cid: string | null
378
+ hash: string | null
379
+ version: string | null
380
+ owner: "did:ixo:..."
381
+ update_authority: [ "did:ixo:..." ]
382
+ access_policy: "public|controller_only|role_based|capability_based|matrix_room|private|custom"
383
+ sensitivity: "public|internal|confidential|restricted|regulated"
384
+ agent_use: { read: boolean, cite: boolean, summarize: boolean, transform: boolean, write: boolean }
385
+ freshness: { last_verified: "YYYY-MM-DD" | null, max_age: string | null }
386
+ canonical_for: [ "claim_schema|evidence_rule|rubric|flow_state|account_policy|legal_terms|governance_policy" ]
387
+
388
+ rights:
389
+ agent_baseline:
390
+ require_explicit_grant_for: # actions that ALWAYS need a matching rights.entries grant, regardless of mode
391
+ - "write"
392
+ - "evaluate"
393
+ - "execute"
394
+ - "pay"
395
+ - "issue"
396
+ - "mint"
397
+ - "transfer"
398
+ - "govern"
399
+ - "delete"
400
+ - "revoke"
401
+ entries:
402
+ - id: string
403
+ type: "ownership|control|read|write|submit_claim|evaluate_claim|verify_claim|issue_credential|mint|burn|transfer|pay|escrow_release|vote|delegate|dispute|manage_agent|manage_account|update_iid|link_entity|custom"
404
+ effect: "allow|deny" # deny overrides allow; absence of allow is denial
405
+ subject: "did:ixo:..."
406
+ object: "did:ixo:...|resource-id|claim-collection-id|account-name|flow-id"
407
+ action: string
408
+ capability:
409
+ format: "ucan|cosmos_authz|did_auth|matrix_power_level|dao_proposal|policy|custom"
410
+ reference: string | null
411
+ conditions:
412
+ flow_state: string | null
413
+ claim_type: string | null
414
+ max_value: { amount: string, denom: string } | null # amount is an unsigned base-10 integer in base units
415
+ not_before: "YYYY-MM-DDTHH:mm:ssZ" | null
416
+ expiry: "YYYY-MM-DDTHH:mm:ssZ" | null
417
+ role_required: string | null
418
+ credential_required: string | null
419
+ human_review: boolean
420
+ revocation: { method: string, authority: [ "did:ixo:..." ] }
421
+ audit: { record_as: "claim|evaluation_claim|udid|protocol_tx|matrix_event|external_log", signature_required: boolean }
422
+
423
+ claims:
424
+ collections:
425
+ - id: string
426
+ name: string
427
+ purpose: string
428
+ owner: "did:ixo:..."
429
+ claim_types:
430
+ - id: string
431
+ schema: string # bare id (local) or external ref — see §4.2
432
+ schema_version: string
433
+ fact_schema: string
434
+ evidence_requirements:
435
+ - { resource_id: string, required: boolean, max_age: string | null, sensitivity: "public|internal|confidential|restricted|regulated" }
436
+ evaluation_kit: string | null
437
+ rubric:
438
+ resource_id: string
439
+ version: string
440
+ order: [ string ]
441
+ disqualifiers: [ string ]
442
+ reason_codes: [ string ]
443
+ evaluator_right: string
444
+ determiner_right: string
445
+ udid: { required: boolean, schema: string, record_authority: string }
446
+ allowed_outcomes: [ "approved|rejected|manual_review_required|partial_success|disputed" ]
447
+ human_review_policy: { required_for: [ string ], reviewer_right: string, approval_proof: string }
448
+ next_actions:
449
+ - { outcome: string, flow_id: string, transition: string, settlement_policy: string | null }
450
+ linked_claims:
451
+ - id: string
452
+ type: string
453
+ subject: "did:ixo:..."
454
+ issuer: "did:ixo:..."
455
+ status: "submitted|evaluating|approved|rejected|disputed|closed|unknown"
456
+ evidence: [ string ]
457
+ udid: string | null
458
+ agent_visibility: "visible|redacted|private|forbidden"
459
+
460
+ linked_entities:
461
+ entries:
462
+ - id: "did:ixo:entity:..."
463
+ type: "<same enum as domain.type>"
464
+ relationship: "owns|controls|implements|funds|verifies|issues|uses|contains|offers|requests|invests_in|governs|supplies|depends_on|replaces|derived_from|member_of|custom"
465
+ direction: "outbound|inbound|bidirectional"
466
+ role_in_domain: string
467
+ authority_implication: "none|read_context|requires_right_check|inherits_policy|delegates_authority|custom"
468
+ traversal_policy: { agent_may_resolve: boolean, max_depth: integer, require_privacy_check: boolean }
469
+ canonical_reference: string | null
470
+
471
+ accounts:
472
+ entries:
473
+ - name: "treasury|operations|payouts|escrow|fees|rewards|investment|reserve|custom"
474
+ address: string
475
+ chain_id: string
476
+ owner: "did:ixo:..."
477
+ purpose: string
478
+ asset_types: [ "IXO|stablecoin|impact_credit|outcome_unit|voucher|custom" ]
479
+ controllers: [ "did:ixo:..." ]
480
+ authz_grants:
481
+ - { grantee: "did:ixo:...", msg_type_url: string, max_amount: { amount: string, denom: string } | null, expiry: "...Z" | null }
482
+ spending_policy:
483
+ max_single_transaction: { amount: string, denom: string } | null
484
+ daily_limit: { amount: string, denom: string } | null
485
+ allowed_recipients: [ string ]
486
+ requires_claim: boolean
487
+ requires_udid: boolean
488
+ requires_human_approval: boolean
489
+ settlement_triggers:
490
+ - { claim_type: string, outcome_required: string, flow_state_required: string,
491
+ action: "hold|release|pay|refund|mint|burn|transfer" }
492
+ audit: { record_as: "protocol_tx|udid|claim|matrix_event|external_ledger" }
493
+
494
+ pods:
495
+ entries:
496
+ - id: string
497
+ name: string
498
+ purpose: string
499
+ matrix_room: string | null
500
+ members: [ "did:ixo:..." ]
501
+ roles:
502
+ - { id: string, responsibilities: [ string ], rights: [ string ] } # rights = rights.entries ids
503
+ blueprints: [ { resource_id: string } ]
504
+ flows:
505
+ - id: string
506
+ name: string
507
+ trigger: { type: "manual|claim|protocol_event|schedule|webhook|custom", reference: string | null }
508
+ initial_state: string
509
+ states: [ string ]
510
+ human_review_states: [ string ]
511
+ allowed_agent_actions: [ "read_claim|read_evidence|read_rubric|create_evaluation_claim|propose_transition" ]
512
+ disabled_agent_actions: [ "execute_transition" ]
513
+ transitions:
514
+ - id: string
515
+ from: string
516
+ to: string
517
+ actor_rights: [ string ]
518
+ required_evidence: [ string ]
519
+ checks: [ string ]
520
+ human_review: boolean
521
+ effects: [ "none|message|credential|payment|mint|burn|transfer|custom" ]
522
+ value_mechanisms: [ "payment|reward|fee|credit|escrow|settlement" ]
523
+
524
+ agents:
525
+ entries:
526
+ - id: "did:ixo:agent-or-oracle"
527
+ name: string
528
+ type: "assistant|agentic_oracle|evaluation_oracle|workflow_bot|state_bot|monitor|custom"
529
+ operator: "did:ixo:..."
530
+ service: "#service-id"
531
+ p_functions: [ "proofing|protocol_adherence|prediction|pattern_recognition|performance_monitoring|analysis|pathfinding|planning|risk_prevention|privacy_protection|governance_support|payment_recommendation|policy_enforcement|reporting" ]
532
+ permitted_context: { domains: [...], claims: [...], resources: [...], rooms: [...] }
533
+ permitted_outputs: [ "summary|risk_flag|evidence_gap|fact_ledger|evaluation_claim|recommendation|proposed_transition|human_review_request" ]
534
+ forbidden_outputs: [ "unreviewed_final_approval|unbounded_payment|silent_rubric_change|private_reasoning_as_state" ]
535
+ logging: { must_cite_evidence: boolean, must_record_authority: boolean, must_emit_trace: boolean, trace_visibility: "public_redacted|private_encrypted|both" }
536
+ escalation: { human_role: string, matrix_room: string | null, timeout: string | null }
537
+
538
+ privacy:
539
+ default_policy: "public_by_exception|private_by_default|mixed"
540
+ protocol_layer:
541
+ may_publish: [ "DID|controller|service_reference|resource_reference|claim_reference|proof|state_transition" ]
542
+ must_not_publish: [ "private_evidence_payload|secret|personal_data|unredacted_trace" ]
543
+ service_layer:
544
+ encrypted_storage_required_for: [ "private_evidence|room_history|personal_data|commercial_terms|regulated_data" ]
545
+ redaction: { public_trace_policy: string, citation_policy: string }
546
+ unauthorized_read_behavior: "deny|redact|request_capability|escalate"
547
+
548
+ graph_policy:
549
+ default_traversal: "same_domain_only|linked_entities_depth_1|explicit_allowlist|custom"
550
+ max_depth: integer
551
+ require_rights_check_for: [ "controller|account|private_resource|claim_evidence|investment_terms|beneficiary_data" ]
552
+
553
+ validation:
554
+ lint_profile: "strict|standard|permissive"
555
+ max_document_bytes: integer # MUST be <= 1048576 for interoperable domain.md files
556
+ max_linked_document_bytes: integer # MUST be <= 2097152 for interoperable text documents
557
+ required_sections: [ "Overview", "Authority & Control", "Constitutional Governance", "Rights & Capabilities", "Privacy & Source-of-Truth Boundaries", "Do's and Don'ts" ]
558
+ required_frontmatter: [ "version", "kind", "conformance", "document_revision", "domain.id", "source_of_truth", "constitution", "controllers.summary", "rights.agent_baseline", "privacy.default_policy", "agent_default_mode.mode" ]
559
+ stale_after: "P30D"
560
+ review_required_for_changes_to: [ "constitution", "controllers", "rights", "accounts", "privacy", "source_of_truth", "claims.collections.evaluation_kit", "claims.collections.rubric", "agents", "agent_default_mode" ] # see §14
561
+
562
+ critical_do_not:
563
+ - "Do not treat chat history, a model response, or private reasoning as canonical domain state."
564
+ - "Do not execute a state change without verified controller authority or an explicit, unexpired delegated right."
565
+ - "Do not approve a high-value claim from an LLM response alone."
566
+ - "Do not move value unless account policy, claim outcome, authority, and human-review requirements are all satisfied."
567
+ - "Do not expose private evidence, personal data, or regulated data in public protocol fields."
568
+ ```
569
+
570
+ ### 4.3.1 Constitutional model and catalogue
571
+
572
+ The canonical vocabulary is `https://w3id.org/ixo/vocab/v1/constitution#` (`con:`). It makes five
573
+ non-interchangeable commitments:
574
+
575
+ 1. A `con:ConstitutionalSubject` is any thing explicitly modeled as possessing identity and a governing
576
+ normative system. It is orthogonal to legal form and may be an entity, event, process, relationship,
577
+ information object, normative object, or capability.
578
+ 2. A `con:Constitution` is the authoritative and relatively fundamental normative system that constitutes,
579
+ governs, constrains, and enables that subject.
580
+ 3. A `con:ConstitutionalInstrument` is a document or artifact that creates, expresses, amends, interprets,
581
+ or evidences part of that constitution.
582
+ 4. A `con:ConstitutionalMechanism` is a human, institutional, technical, or hybrid procedure that evaluates,
583
+ applies, enforces, records, or escalates constitutional norms.
584
+ 5. A `con:ConstitutionalSubjectProfile` classifies the subject and references its constitutional facets
585
+ without duplicating or overriding their canonical sources.
586
+
587
+ `domain.type` is a coarse serialization and manifest-selection category. `constitution.subject_profile`
588
+ is the semantic classification layer: `subject_types` contains one or more subject-class IRIs and
589
+ `archetypes` contains zero or more reusable governance-pattern IRIs. Multiple subject types are expected.
590
+ A forest may be both `con:NaturalAsset` and `con:BiologicalEntity`; a trust deed may be both `con:Deed` and
591
+ a constitutional instrument; an oracle may also be a service. Typing something as a subject is an explicit
592
+ modeling assertion, not a claim that every real-world instance of the ordinary-language category has a
593
+ constitution.
594
+
595
+ The canonical subject taxonomy spans persons; organisations; physical, digital, financial, natural,
596
+ infrastructure, knowledge, and intangible assets; commodities; financial instruments; property rights;
597
+ agreements; deeds; projects and work; protocols; services; oracles; claims; credentials; evidence;
598
+ decisions; outcomes; places; biological subjects and disease outbreaks; networks; and agentic twins. It
599
+ therefore supports subjects such as a GPU, solar farm, forest, gold lot, investment, licence, employment
600
+ deed, mission, clinical guideline, scientific hypothesis, authenticated claim, professional credential,
601
+ watershed, pathogen outbreak, or supply chain without pretending that they are organisations.
602
+
603
+ Every subject profile exposes the same reference vocabulary: identity, purposes, interests, values, rights,
604
+ obligations, capabilities, claims, wallets, authorities, memory, evidence policies, evaluation policies,
605
+ decision policies, settlement policies, governance, custodians, stewards, owners, beneficiaries, oracles,
606
+ and agentic twins.
607
+ All keys are present for deterministic processing; arrays may be empty when a facet is genuinely absent.
608
+ Bare identifiers MUST resolve to the corresponding local documents, resources, rights, services,
609
+ controllers, agents, or linked entities. URI, DID, CID, and compact-IRI references are external and require
610
+ runtime resolution when the task depends on them.
611
+
612
+ Seven non-exclusive archetypes provide reusable governance mixins: `con:Stewarded`, `con:Owned`,
613
+ `con:Managed`, `con:Governed`, `con:Regulated`, `con:Verified`, and `con:Settled`. They do not replace the
614
+ subject type or constitution type.
615
+
616
+ Constitutions contain `con:ConstitutiveNorm` rules that establish institutional facts, `con:PrescriptiveNorm`
617
+ rules that create permissions, prohibitions, duties, and entitlements, and `con:ProceduralNorm` rules for
618
+ valid decisions, amendments, interpretations, disputes, suspensions, and dissolution. These distinctions are
619
+ grounded in [FIBO](https://spec.edmcouncil.org/fibo/index.html),
620
+ [OASIS LegalRuleML](https://docs.oasis-open.org/legalruleml/legalruleml-core-spec/v1.0/legalruleml-core-spec-v1.0.html),
621
+ the [W3C Organization Ontology](https://www.w3.org/TR/2013/CR-vocab-org-20130625/), and
622
+ [ODRL](https://www.w3.org/TR/odrl-model/). JSON-LD field semantics follow
623
+ [JSON-LD 1.1](https://www.w3.org/TR/json-ld11/). They do not make this specification jurisdiction-specific
624
+ legal advice.
625
+
626
+ **Canonical constitutional catalogue**
627
+
628
+ | Subject | Constitution type | Common instruments |
629
+ | :---- | :---- | :---- |
630
+ | person | `con:PersonalConstitution` | `con:OperationalConstitutionDocument` |
631
+ | asset / commodity | `con:AssetConstitution` | `con:AssetCharter`, `con:OperationalConstitutionDocument` |
632
+ | financial instrument / property right / agreement / deed | `con:FinancialSubjectConstitution` | `con:TermsInstrument`, `con:GovernancePolicy` |
633
+ | programme / mission / work | `con:WorkConstitution` | `con:ProjectCharter`, `con:OperationalConstitutionDocument` |
634
+ | service | `con:ServiceConstitution` | `con:ServiceCharter`, `con:ServiceAgreementInstrument` |
635
+ | oracle | `con:OracleConstitution` | `con:OracleCharter`, `con:EvaluationPolicy` |
636
+ | claim / credential / evidence / decision | `con:InformationSubjectConstitution` | `con:EvaluationPolicy`, `con:LifecyclePolicy` |
637
+ | place | `con:PlaceConstitution` | `con:StewardshipCharter`, `con:GovernancePolicy` |
638
+ | biological entity / disease outbreak | `con:BiologicalSubjectConstitution` | `con:StewardshipCharter`, `con:EvidencePolicy` |
639
+ | network | `con:NetworkConstitution` | `con:NetworkCharter`, `con:ProtocolSpecification` |
640
+ | state | `con:StateConstitution` | `con:ConstitutionDocument`, `con:BasicLaw` |
641
+ | international organisation | `con:InternationalOrganizationConstitution` | `con:ConstituentTreaty`, `con:OrganizationCharter` |
642
+ | company | `con:CorporateConstitution` | `con:ArticlesOfAssociation`, `con:CorporateCharter`, `con:Bylaws` |
643
+ | trust | `con:TrustConstitution` | `con:TrustDeed`, `con:DeclarationOfTrust`, `con:TestamentaryInstrument` |
644
+ | cooperative | `con:CooperativeConstitution` | `con:CooperativeStatutes`, `con:CooperativeArticles`, `con:Bylaws`, jurisdiction-specific `con:DeedOfFormation` |
645
+ | partnership | `con:PartnershipConstitution` | `con:PartnershipAgreement`, `con:PartnershipDeed` |
646
+ | LLC-like entity | `con:OrganizationalConstitution` | `con:OperatingAgreement` |
647
+ | foundation | `con:FoundationConstitution` | `con:FoundationCharter`, `con:FoundationDeed`, `con:FoundationStatutes` |
648
+ | public body | `con:PublicBodyConstitution` | `con:EnablingStatute` |
649
+ | membership organisation | `con:OrganizationalConstitution` | `con:OrganizationConstitutionDocument`, `con:Bylaws` |
650
+ | project / POD / marketplace | `con:ProjectConstitution` | `con:ProjectCharter`, `con:CollectiveCharter`, `con:MarketplaceCharter` |
651
+ | protocol | `con:ProtocolConstitution` | `con:ProtocolSpecification`, `con:GovernancePolicy` |
652
+ | DAO | `con:DAOConstitution` | `con:DAOCharter`, `con:GovernancePolicy`, `con:ExecutableGovernancePolicy` |
653
+ | agentic twin | `con:AgenticConstitution` | `con:AgenticConstitutionDocument` |
654
+ | regulated fund or scheme | `con:SchemeConstitution` | `con:SchemeRules` |
655
+
656
+ This catalogue is a jurisdiction-neutral normalization. A trust deed is one possible trust instrument; it is
657
+ not the trust or a universal prerequisite. A cooperative deed of formation is jurisdiction-specific. An
658
+ instrument's title, CID, executable form, or model use never proves adoption, legal effect, current validity,
659
+ or authority. Representative legal anchors include the
660
+ [UK Companies Act 2006 section 17](https://www.legislation.gov.uk/ukpga/2006/46/section/17),
661
+ [HCCH Trusts Convention](https://www.hcch.net/en/instruments/conventions/full-text/?cid=59),
662
+ [European Cooperative Society Regulation](https://eur-lex.europa.eu/legal-content/EN/AUTO/?uri=CELEX:02003R1435-20030821),
663
+ and [UN Charter](https://www.un.org/en/about-us/un-charter). `commonInstrument` and subject-class mappings
664
+ are annotation metadata for authoring and discovery, not inference-producing instance relationships.
665
+
666
+ **Recursive twins and the constitutional agency cycle.** A constitutional subject may have no agentic twin,
667
+ one twin, or multiple scoped twins. Each `con:AgenticTwin` is itself a constitutional subject with its own
668
+ identity, constitution, claims, wallet, memory, world model, decision engine, capability tokens, and
669
+ constitutional governor. The parent subject and its twin remain distinct. A twin's internal constitutional
670
+ evaluation does not grant the live capability to act for the parent. A declared claim does not establish
671
+ truth, and a wallet reference does not prove control or authorize an action.
672
+
673
+ The IXO cycle is:
674
+
675
+ `Identity → Constitution → Claims → Evidence → Evaluation → Decision → Capability → Action → Settlement → Memory`.
676
+
677
+ This sequence is a reasoning and authoring aid. Each transition still resolves the applicable canonical
678
+ state and authority; no stage self-authorizes the next.
679
+
680
+ **Tiered requirement.** Every document declares constitutional status and a complete `subject_profile`,
681
+ including passive `not_applicable` domains. `dao`, `organisation`, `project`,
682
+ `protocol`, `marketplace`, and `pod` domains, domains with declared agents, domains permitting agent
683
+ controllers, and domains using `bounded_evaluate` or `bounded_execute` MUST provide the complete package.
684
+ Only a passive domain with no agent/controller agency or executable governance and a `read_only` or
685
+ `propose_only` ceiling may use `not_applicable`, and it MUST explain why. `domain.type: deed` identifies a
686
+ deed subject; it is not automatically a constitution.
687
+
688
+ **Legal effect.** A de-novo constitution defaults to operational effect. `legal_effect.status: verified`
689
+ requires a jurisdiction plus externally resolvable authority evidence. Static validation verifies only
690
+ structure and local references; runtime must verify adoption, competence, currency, amendment, and
691
+ jurisdiction against canonical sources.
692
+
693
+ **Executable governance and constitutional AI.** `machine_executable` and `hybrid` execution MUST identify
694
+ immutable implementations, conformance tests, enforcement points, a fail-closed policy, and human-review
695
+ gates. Constitutional AI MAY supply principles as model context, critique and revise proposals, or evaluate a
696
+ policy, following the critique-and-revision mechanism described in
697
+ [Constitutional AI](https://arxiv.org/abs/2212.08073). It MUST NOT grant identity, rights, capabilities,
698
+ approvals, or execution authority. On conflict,
699
+ canonical authority prevails. Audit records contain principle IDs, reason codes, outcomes, evidence
700
+ references, and execution receipts; they MUST NOT require or expose private chain-of-thought.
701
+ Every declared agent controller MUST be included in `constitutional_ai.applies_to_agents`, so its proposals
702
+ are evaluated against the same identified principles and procedures before live authorization is resolved.
703
+
704
+ ### 4.4 Linked documents
705
+
706
+ `documents` carries operating **context** — interpretive, human-first files that describe and govern the domain. It is deliberately **not** `linkedResource`/`resources`: those are machine-consumed canonical artifacts (schemas, rubrics, evidence) registered on the IID, whereas `documents` are operating-layer files an agent reads to understand and run the domain. Three boundaries hold:
707
+
708
+ - `documents` ≠ `resources` — interpretive context vs. canonical machine artifacts.
709
+ - `changelog` ≠ the Blocksync transaction log — semantic significance pointing *up* to proofs, never an enumeration of chain events (Blocksync already holds the auditable transaction history).
710
+ - a manifest's defining facts ≠ live state — intent / terms / facts-of-record vs. current ownership, balance, controller, or claim status, which always resolve from canonical sources.
711
+
712
+ **Roles**
713
+
714
+ | Role | Category | Default pass | Expected when |
715
+ | :---- | :---- | :---: | :---- |
716
+ | `description` | universal | 2 | always — **error** if absent |
717
+ | `changelog` | universal | 2 | always — **error** if absent |
718
+ | manifest (typed below) | manifest | 3 | the domain type defines one — **warn** if absent |
719
+ | `operations` | operational | 2 | the domain has live flows |
720
+ | `governance` | operational | 2 | control is collective (dao/org/project/pod) |
721
+ | `data-policy` | operational | 2 | PII, regulated, or private evidence flows |
722
+ | `agents` | operational | 2 | ≥1 agent operates |
723
+ | `compliance` / `risk-register` | advanced | 3 | opt-in |
724
+ | `x-*` | extension | declared | opt-in |
725
+
726
+ Operational docs are **default** for any domain that has the corresponding surface; an absent operational doc warns unless the domain lists that surface in `documents.not_applicable`.
727
+
728
+ **Manifest — the polymorphic defining document.** Exactly one manifest per domain that has a defining form; its `manifest_type` follows `domain.type`:
729
+
730
+ | `domain.type` | `manifest_type` | Character |
731
+ | :---- | :---- | :---- |
732
+ | dao / organisation / project / pod | `charter` | normative — mandate, principles, non-negotiable commitments |
733
+ | asset | `dossier` | factual — specification, provenance, custody, condition-of-record |
734
+ | investment / portfolio | `prospectus` | offering — thesis, instruments, terms, risk disclosures |
735
+ | deed | `terms` | contractual — request/offer/agreement terms, acceptance criteria |
736
+ | protocol | `specification` | definitional — the protocol's defining narrative |
737
+ | dataset | `datasheet` | provenance — collection method, license, limitations |
738
+ | device | `device-profile` | technical — make/model, capabilities, calibration |
739
+
740
+ The manifest is the *full authoritative defining document* (Pass 3 — pulled for diligence, disputes, onboarding); `description` is the *short operating summary* (Pass 2 — read-me-first). Manifest amendments (a charter amendment, a prospectus supplement, an asset re-spec) are exactly what `changelog` records, linked via `supersedes`.
741
+
742
+ **Integrity — profile-aware anchored index and verified references.** `documents` files are not required to be individually registered on the IID. Instead an `anchored` or `runtime` `domain.md` identifies the canonical anchoring method, reference, exact CID, and verification time in `documents.anchoring`; the canonical IID state **MUST** resolve to the same CID. Every linked document carries the CID of its exact UTF-8 bytes and an explicit media type. Agents **MUST** fetch by an allowlisted scheme, enforce size and redirect limits, verify the returned bytes against the declared CID, and only then parse or disclose content. A mismatch, unsupported multicodec/hash, ambiguous gateway transform, or mutable response without immutable verification makes the document untrusted.
743
+
744
+ `domain.md` does not place its own CID in the bytes that are hashed. The `documents.anchoring.cid` field is therefore populated only in a canonical anchoring record or an out-of-band envelope, not by rewriting the already-hashed file. When the serialized `domain.md` carries the `documents.anchoring` object, its `cid` **MUST** remain `null`; the resolved IID linked-resource record supplies the exact CID and the runtime validator compares that record to the fetched bytes. Implementations that use a detached signed envelope MAY materialize the CID in the envelope's copy. This distinction removes the self-hash ambiguity.
745
+
746
+ In `authoring_draft`, linked-document `uri` and `cid` MAY be `null`. From `persisted_draft` onward, both are required and verified. Changing a document changes its CID and the containing `domain.md` bytes, so a new index CID and, for anchored profiles, a new canonical anchor are always required. Review scope may remain targeted according to §14, but integrity re-anchoring is never optional. Staleness is tracked per document via `freshness.max_age`; an old document does not by itself make the index bytes invalid, but it prevents `runtime` conformance when the current task requires that document.
747
+
748
+ **Authority.** All `documents` resolve at the `domain_md` precedence tier (§6); none may authorize a stateful or value-bearing action. Two role-specific rules:
749
+
750
+ - A **manifest** (`authority: defining`) is authoritative only for intent, terms, principles, and facts-of-record at issuance. For any fact also represented in canonical state — controller, ownership, balance, claim status — canonical state governs; a stale manifest never overrides it (lint: `manifest-overrides-canonical`).
751
+ - A **changelog** (`authority: advisory`) is semantic history: an agent uses it to understand change and flag staleness ("did the rubric or account policy change since this claim was submitted?"), never to authorize. On conflict with canonical state, treat the entry as premature or erroneous and flag.
752
+
753
+ All other roles are `interpretive` context only.
754
+
755
+ **Significance — what the changelog records.** An entry is **required** for every §14 security-sensitive change (controllers, rights, accounts, privacy, source\_of\_truth, rubric/evaluation\_kit, agents, manifest), **recommended** for operational changes, and optional for informational ones. Each entry points to the canonical proof (UDID, governance proposal, or rubric CID) and supplies the semantic "what changed and why" that the raw transaction does not.
756
+
757
+ ---
758
+
759
+ ## 5\. IID-property mappings
760
+
761
+ Each IID property **MUST** carry operating context beyond raw identifiers:
762
+
763
+ | IID property | Block | Required operating context |
764
+ | :---- | :---- | :---- |
765
+ | `controllers` | `controllers` | type, role, verification methods, signer addresses, approval threshold/quorum/timelock, limitations, escalation, audit target, agent-controller allowed? |
766
+ | `services` | `services` | type, auth method \+ scopes, allowed/forbidden agent uses, data classification, rate limits, fallback, health check, `canonical` vs convenience |
767
+ | `resources` / `linkedResource` | `resources` | type, URI/CID/hash, version, owner, update authority, access policy, sensitivity, freshness, `canonical_for`, agent read/cite/transform/write |
768
+ | `rights` / `accordedRight` | `rights` | capability format \+ reference, subject/object/action, conditions (flow\_state, claim\_type, max\_value, expiry, role, credential), human-review gate, revocation, audit |
769
+ | `claims` / `linkedClaim` | `claims` | collection, claim type \+ schema, evidence requirements, rubric, evaluation kit, allowed outcomes, status, UDID link, visibility, settlement policy |
770
+ | `linkedEntity` | `linked_entities` | relationship, direction, role, authority implication, traversal policy, canonical reference |
771
+ | `accounts` | `accounts` | address/chain, owner, controllers, authz grants, spending policy, settlement triggers, audit |
772
+
773
+ ---
774
+
775
+ ## 6\. Source-of-truth & conflict resolution
776
+
777
+ When two sources that are both competent for the same fact disagree, the default order is `source_of_truth.conflict_resolution_order`:
778
+
779
+ ```
780
+ protocol_state ▸ iid_document ▸ udid ▸ credential ▸ claim ▸ claim_collection_state ▸ blocksync ▸ matrix_state ▸ domain_md ▸ user_prompt ▸ agent_memory
781
+ ```
782
+
783
+ Rules:
784
+
785
+ - **Authority is scoped by fact.** `source_of_truth.authority_scopes` identifies which source types are competent for controllers, rights, balances, claim status, credential status, Flow state, domain intent, and any custom fact. A source absent from the matching scope is context, not a contender. If no scope covers the disputed fact, stop with `unscoped-authority-conflict`; do not apply the global list mechanically.
786
+ - **Blocksync is never independently authoritative.** It is a read projection; on any divergence from `protocol_state`, protocol state governs and the projection is treated as stale.
787
+ - **A model response, transcript, scratchpad, or dashboard is never sufficient authority** for settlement, credential issuance, controller change, or high-value state update.
788
+ - Prose **MUST NOT** restate a different order. If `domain.md` conflicts with resolved protocol/IID state, the file is wrong (lint: `canonical-conflict`).
789
+ - **Constitutions and linked documents resolve at this `domain_md` tier** — they constrain and explain intended governance but do not self-authorize. A manifest is additionally authoritative for intent, terms, and facts-of-record at issuance, but defers to canonical state for any on-chain fact. Current adoption, controller, right, capability, revocation, approval, and execution authority must resolve from the competent canonical source.
790
+
791
+ ---
792
+
793
+ ## 7\. Domain-type profiles
794
+
795
+ A `domain.md` declares exactly one primary `domain.type` and **MAY** add secondary roles. Each type unlocks one conditional top-level block (§4.1).
796
+
797
+ `domain.class` records lineage; it does not implicitly import authority. When non-null, `domain.class_binding` **MUST** pin an immutable class resource, CID, version, and `local_explicit_only` merge policy. A runtime resolves the class only to validate constraints and defaults explicitly named by that class contract. Controllers, rights, accounts, privacy, agent authority, and value policies **MUST NOT** be inherited by omission. A missing local security-sensitive field is denial or a validation error, never permission inherited through a generic deep merge.
798
+
799
+ | Type | Required block | Agent-critical additions |
800
+ | :---- | :---- | :---- |
801
+ | **dao / organisation** | `governance: { proposal_service, voting_policy, quorum_policy, execution_policy, emergency_policy }` | who may draft/submit/vote/execute/veto; member & delegation rules; conflict-of-interest policy; treasury policy; private governance-room boundary |
802
+ | **project** | `protocols: [...]` \+ `pods` \+ `claims.collections` \+ `accounts` | lifecycle stage; protocol constraints; field/operator/verifier roles; claim & evidence flows; oracle services; payout/escrow/dispute paths |
803
+ | **asset** | `asset: { class, owner, custody_model, transfer_policy, valuation_policy }` | custody & ownership boundary; permitted transfers; provenance/linked claims; valuation evidence; issue/sell/retire/tokenize rights; compliance constraints |
804
+ | **deed** | `deed: { mode: request|offer|agreement|fulfillment, requester, provider, terms_resource, claim_collection, fulfillment_flow }` | what is requested/offered; acceptance criteria; instantiated claim collection; fulfillment evidence; settlement conditions; correction path |
805
+ | **protocol** | `protocol: { version, schemas, rubrics, compatible_domain_types, governance: { change_policy, deprecation_policy } }` | schema versioning; thresholds/disqualifiers; allowed outcomes; test fixtures; inheritance & migration rules |
806
+ | **investment / portfolio** | `investment: { thesis, instruments, investees, risk_policy, reporting_policy, disbursement_policy }` | allowed instruments; diligence resources; MNPI boundary; decision authority; milestone/disbursement claims; portfolio signals; reporting format |
807
+
808
+ Types without a profile row (`oracle`, `service`, `dataset`, `device`, `place`, `marketplace`, `pod`, `claim_collection`, `custom`) use only core blocks plus any documented `x-*` extension until a versioned profile is added. They **MUST NOT** borrow the required block or authority semantics of a superficially similar type. `dataset` and `device` retain the manifest mappings in §4.4 but have no extra authority-bearing top-level block in this version.
809
+
810
+ Each type also defines a **manifest** document (§4.4): `charter` for dao/organisation/project/pod, `dossier` for asset, `prospectus` for investment/portfolio, `terms` for deed, `specification` for protocol.
811
+
812
+ ---
813
+
814
+ ## 8\. Agent operating modes
815
+
816
+ `agent_default_mode.mode` sets a capability **ceiling**:
817
+
818
+ | Capability | `read_only` | `propose_only` | `bounded_evaluate` | `bounded_execute` |
819
+ | :---- | :---: | :---: | :---: | :---: |
820
+ | read / summarize | ✓ | ✓ | ✓ | ✓ |
821
+ | propose (draft, recommend, flag gaps, propose transition) | — | ✓ | ✓ | ✓ |
822
+ | evaluate (create Evaluation Claim) | — | — | ✓¹ | ✓¹ |
823
+ | execute transition | — | — | — | ✓² |
824
+ | move value / issue / mint / change rights / change rubrics | — | — | — | ✗³ |
825
+
826
+ ¹ permitted claim types only • ² delegated, scoped, with capability ref \+ expiry \+ audit \+ revocation • ³ **never implied by mode** — always requires a specific `rights.entries` grant.
827
+
828
+ **Authorization resolution** (run per action):
829
+
830
+ ```
831
+ allow(action) =
832
+ canonical_action(action) is recognized
833
+ AND mode_ceiling_allows(action)
834
+ AND NOT overrides_disable(action)
835
+ AND no matching, currently-valid deny grant exists
836
+ AND (action ∉ rights.agent_baseline.require_explicit_grant_for
837
+ OR a matching allow grant exists
838
+ AND its capability proof and delegation chain verify
839
+ AND it is not revoked
840
+ AND not_before <= trusted_time < expiry
841
+ AND subject, object, action, value denomination, Flow state, claim type,
842
+ role, credential, and all custom conditions are satisfied)
843
+ AND human review has a verifiable approval proof when required
844
+ ```
845
+
846
+ Authorization is default-deny. Deny grants override allow grants at equal or broader scope. Subjects and objects compare by canonical DID/URI/resource identifiers, not display strings. Value limits compare unsigned base-unit integers only when denominations match exactly; conversion and price-oracle logic require a separate governed policy. Time checks use a declared trusted clock and fail closed when clock confidence is insufficient. `overrides` MAY only lower the ceiling. Raising it is invalid (lint: `open-ended-agent-authority`).
847
+
848
+ **Agentic Oracles** are identity-bound, authority-scoped, evidence-grounded, protocol-governed, and audit-producing. They MAY normalize facts, apply rubrics, recommend, produce determinations, trigger *delegated* actions, and route ambiguity. They MUST NOT silently change rubrics, exceed delegated authority, treat private reasoning as canonical state, or be the sole final authority for material settlement, credentialing, or governance.
849
+
850
+ ---
851
+
852
+ ## 9\. Claims, evidence, rubrics, UDIDs
853
+
854
+ For every evaluable claim type, `domain.md` MUST specify: schema and version; admissible evidence types with freshness and sensitivity; fact-ledger schema; a pinned rubric resource and version with ordered rules, disqualifiers, and reason codes; allowed outcomes; rights for evaluation and determination; the required UDID schema and record authority; a structured human-review policy; and outcome-specific next transitions or settlement-policy references. Free-form policy prose is explanatory only and cannot authorize an action.
855
+
856
+ **Evaluate facts, not files.** Evidence is turned into typed facts, then those facts are scored against a governed rubric — an evaluator MUST NOT decide directly over raw files or free-form model text. When a flow reaches a determination point, a **UDID** binds decision, evidence, authority, rubric, and proof trail together; settlement references the UDID, not a chat outcome.
857
+
858
+ ```
859
+ claim_types:
860
+ - id: "service_delivery"
861
+ schema: "service-delivery-claim-schema-v1"
862
+ schema_version: "1.0.0"
863
+ fact_schema: "service-delivery-fact-schema-v1"
864
+ evidence_requirements:
865
+ - { resource_id: "field-photo-schema-v1", required: true, max_age: "P30D", sensitivity: "restricted" }
866
+ - { resource_id: "gps-attestation-schema-v1", required: true, max_age: "P30D", sensitivity: "restricted" }
867
+ evaluation_kit: "evaluation-kit-service-delivery-v1"
868
+ rubric:
869
+ resource_id: "rubric-service-delivery-v1"
870
+ version: "1.0.0"
871
+ order: [ "identity", "location", "completion", "quality" ]
872
+ disqualifiers: [ "identity_mismatch", "tampered_evidence" ]
873
+ reason_codes: [ "complete", "insufficient_evidence", "manual_review" ]
874
+ evaluator_right: "right:evidence-oracle:evaluate-service-claim"
875
+ determiner_right: "right:verifier:determine-service-claim"
876
+ udid: { required: true, schema: "resource:service-delivery-udid-v1", record_authority: "right:verifier:determine-service-claim" }
877
+ allowed_outcomes: [ "approved", "rejected", "manual_review_required", "disputed" ]
878
+ human_review_policy:
879
+ required_for: [ "rejected", "disputed", "manual_review_required", "payment" ]
880
+ reviewer_right: "right:verifier:determine-service-claim"
881
+ approval_proof: "udid"
882
+ next_actions:
883
+ - { outcome: "approved", flow_id: "flow:service-delivery", transition: "determined_to_actioned", settlement_policy: "resource:field-service-settlement-v1" }
884
+ - { outcome: "rejected", flow_id: "flow:service-delivery", transition: "determined_to_closed", settlement_policy: null }
885
+ ```
886
+
887
+ ---
888
+
889
+ ## 10\. PODs, Flows, Matrix
890
+
891
+ A POD is a secure operating domain where people, agents, services, claims, evidence, credentials, workflows, and value cooperate around a shared purpose — distinguished from a chat/DB/DAO by combining shared state \+ human roles \+ scoped agent authority \+ flows \+ verifiable outcomes.
892
+
893
+ Each **Flow** MUST define a typed trigger, one initial state, a finite set of unique state identifiers, and explicit transitions. Every transition names its source and target states, required actor rights, evidence, checks, human-review gate, and bounded effects. Transition identifiers, state identifiers, POD identifiers, and right references MUST resolve uniquely. Effects never authorize themselves: payment, credential, mint, burn, or transfer effects still require the matching right, account policy, claim/UDID condition, and human approval. Agents propose transitions; `execute_transition` stays in `disabled_agent_actions` unless explicitly delegated.
894
+
895
+ **Matrix** is the encrypted communication and shared-state layer (rooms, verifiable history, access controls, SDK surfaces). Reference it for human/agent collaboration and evidence exchange; never publish room history or private payloads to protocol fields.
896
+
897
+ ---
898
+
899
+ ## 11\. Privacy & boundaries
900
+
901
+ Separate **public protocol metadata** from **private service-layer data**:
902
+
903
+ - **Protocol layer** MAY publish DIDs, controllers, service/resource/claim references, proofs, and state transitions. It MUST NOT publish evidence payloads, secrets, personal data, or unredacted traces.
904
+ - **Service layer** MUST encrypt private evidence, room history, personal data, commercial terms, and regulated data; only references, proofs, or hashes are eligible for public fields.
905
+ - Define who may retrieve private payloads, what redaction precedes any citation or summary, and how an unauthorized read fails (`unauthorized_read_behavior`).
906
+ - The index itself **MUST NOT** contain credentials, bearer tokens, private keys, seed phrases, raw evidence, personal data, private room history, or sensitive query parameters. Private locators SHOULD be opaque identifiers resolved only after authorization; public URIs MUST NOT reveal confidential path names or identifiers.
907
+
908
+ ---
909
+
910
+ ## 12\. Agent runtime contract
911
+
912
+ The hot path an agent runs for every task:
913
+
914
+ 1. **Load** — parse safely; validate the declared conformance profile against the matching schema; verify `kind: domain.md`; verify `domain.id` and, for anchored/runtime profiles, `source_of_truth.iid_document`. Treat missing authority as denial.
915
+ 2. **Resolve constitution** — require the tier-appropriate constitutional declaration; resolve the legal-form-independent subject types, archetypes, referenced subject facets, exact instrument bytes, effective/superseded status, norms, procedures, execution artifacts, and constitutional-AI profile. A missing or conflicting constitutional dependency fails closed.
916
+ 3. **Resolve live authority** — resolve the current IID/DID and protocol state before stateful work; verify adoption, controllers, rights, capabilities, revocation, approvals, and enforcement-point authority. Use Blocksync only as a consistent read projection and Matrix only for permitted context.
917
+ 4. **Constitutional evaluate** — evaluate the proposed action against applicable constitutive, prescriptive, and procedural norms. Bind every declared agentic twin and agent controller to the identified principles and procedures. Constitutional AI may supply context, critique/revision, or policy evaluation but may not authorize the action.
918
+ 5. **Authorize** — run §8 authorization resolution and check Flow state before any claim, evaluation, payment, credential, or transition. Both constitutional conformance and live authorization must pass.
919
+ 6. **Act** — cite evidence for every evidence-based output; emit Evaluation Claims where configured; refuse anything exceeding delegated authority.
920
+ 7. **Record** — write determinations as UDIDs at determination points; log authority, principle IDs, inputs, evidence references, tool results, policy/rubric versions, reason codes, outcomes, and receipts. Never require, store, or expose private chain-of-thought; an audit trace contains decision-relevant facts and reproducible rationale only.
921
+ 8. **Escalate or amend** — route to human/governance review whenever the action is gated, ambiguous, disputed, or high-value. Constitutional change follows the declared amendment procedure and produces a new instrument, document CID, index revision, and canonical approval evidence.
922
+
923
+ **Stop and escalate (never auto-proceed) when:** evidence is ambiguous; a claim is disputed; the action is high-value or irreversible; a credential, controller, rights, or rubric change is implied; value moves; or `domain.md` conflicts with resolved protocol/IID state.
924
+
925
+ **Unknown content:** `x-`\-prefixed keys are allowed; unknown sections are preserved; unknown unprefixed top-level keys warn; duplicate canonical sections error.
926
+
927
+ ---
928
+
929
+ ## 13\. Lint rules
930
+
931
+ | Rule | Severity | Check |
932
+ | :---- | :---- | :---- |
933
+ | `missing-frontmatter` | error | File does not start with YAML frontmatter |
934
+ | `unsafe-yaml` | error | Duplicate key, alias, anchor, merge key, custom tag, invalid UTF-8, or declared parser limit exceeded |
935
+ | `spec-artifact-conflict` | error | Normative prose and matching JSON Schema disagree |
936
+ | `invalid-conformance-profile` | error | Declared profile is unknown or its profile-specific invariants fail |
937
+ | `template-placeholder` | error | A conforming domain.md contains a template or publish placeholder |
938
+ | `invalid-kind` | error | `kind` ≠ `domain.md` |
939
+ | `missing-domain-id` | error | `domain.id` absent, or not a DID for anchored/runtime, or not a DID/URN UUID for a draft profile |
940
+ | `missing-source-of-truth` | error | No canonical IID/protocol source declared |
941
+ | `missing-controller` | error | No primary controller or governance model |
942
+ | `missing-rights-baseline` | error | No `rights.agent_baseline` and no `agent_default_mode.mode` |
943
+ | `open-ended-agent-authority` | error | `overrides` raise the mode ceiling, or an agent may execute/pay/issue/govern/update state with no scoped right |
944
+ | `account-without-policy` | error | Account has no spending/authz policy |
945
+ | `claim-without-schema` | error | Claim type lacks a schema |
946
+ | `privacy-public-sensitive` | error | Sensitive payload marked public |
947
+ | `broken-local-reference` | error | A bare-id reference (resource/right/flow/account) does not resolve in-file |
948
+ | `duplicate-entry-id` | error | IDs that share a namespace are not unique after canonical normalization |
949
+ | `invalid-class-binding` | error | `domain.class` is set without an immutable class resource, CID, version, and explicit merge policy |
950
+ | `invalid-cid` | error | CID is malformed, unsupported, or does not verify the exact fetched bytes |
951
+ | `unscoped-authority-conflict` | error | Conflicting facts have no applicable `authority_scopes` rule |
952
+ | `invalid-grant` | error | Grant matching, capability/delegation proof, revocation, time, denomination, or condition validation fails |
953
+ | `duplicate-section` | error | A canonical Markdown section appears more than once |
954
+ | `canonical-conflict` | error | `domain.md` conflicts with resolved IID/protocol state |
955
+ | `claim-without-review-path` | warning | Claim evaluation lacks a human-review or dispute path |
956
+ | `resource-without-sensitivity` | warning | Resource has no sensitivity/access policy |
957
+ | `service-without-auth-boundary` | warning | Service lacks auth method or allowed uses |
958
+ | `linked-entity-without-rel` | warning | Linked entity lacks a relationship |
959
+ | `stale-domain-index` | warning | `last_updated` older than `validation.stale_after` |
960
+ | `section-order` | warning | Canonical sections out of order |
961
+ | `prose-conflicts-yaml` | warning | Markdown appears to contradict frontmatter |
962
+ | `unknown-top-level-key` | warning | Unprefixed top-level key not in §4.1 |
963
+ | `missing-description-doc` | error | No `documents` entry with role `description` |
964
+ | `missing-changelog-doc` | error | No `documents` entry with role `changelog` |
965
+ | `constitution-required` | error | A domain lacks the tier-appropriate constitutional package |
966
+ | `constitutional-subject-profile-unresolved` | error | Subject type, identity, archetype, or declared subject-facet reference is missing or unresolved |
967
+ | `constitution-not-applicable-invalid` | error | A governed or agentic domain declares its constitution not applicable |
968
+ | `constitutional-instrument-unresolved` | error | An instrument does not resolve to a unique `documents.entries[].id` |
969
+ | `constitutional-authority-unverified` | error | Legal effect or constitutional procedure lacks resolvable authority evidence |
970
+ | `constitutional-execution-incomplete` | error | Executable governance lacks implementation, tests, enforcement, or fail-closed policy |
971
+ | `constitutional-ai-incomplete` | error | Agentic constitutional-AI principles, procedures, agent binding, or audit record are incomplete |
972
+ | `constitution-conflicts-canonical` | error | Effective periods conflict or a superseded instrument remains simultaneously canonical |
973
+ | `constitutional-amendment-unapproved` | error | An amending instrument lacks an amendment procedure or authority source |
974
+ | `document-without-cid` | error | A `persisted_draft`, `anchored`, or `runtime` document entry lacks a verified `cid` |
975
+ | `duplicate-document-role` | error | A canonical role (`description` / `changelog` / manifest) appears more than once |
976
+ | `manifest-overrides-canonical` | error | A manifest asserts a fact that conflicts with canonical state |
977
+ | `missing-manifest` | warning | `domain.type` defines a manifest type but no manifest entry exists |
978
+ | `operational-doc-expected` | warning | The domain has a surface (governance / agents / PII / flows) with no matching operational doc, not listed in `not_applicable` |
979
+ | `document-unanchored` | error for anchored/runtime; warning for drafts | Anchoring method/reference or canonical out-of-band CID evidence is absent or unverifiable |
980
+ | `document-pass-mismatch` | warning | `description` / `changelog` / manifest set to a non-standard `disclosure_pass` |
981
+ | `incomplete-claim-contract` | error | Evaluable claim lacks schema/version, fact schema, evidence policy, pinned rubric, evaluator/determiner rights, UDID policy, review proof, or next-action mapping |
982
+ | `invalid-flow` | error | Flow has missing/duplicate states or transitions, unresolved actor rights, unreachable states, or effects without corresponding policy references |
983
+ | `runtime-prerequisite-failed` | error | Runtime profile cannot verify canonical state, required capability, freshness, or review policy |
984
+
985
+ ---
986
+
987
+ ### Active rule registry
988
+
989
+ | Code | Severity | Description |
990
+ | --- | --- | --- |
991
+ | `file-too-large` | error | Reject domain input that exceeds the configured byte limit before model construction. |
992
+ | `encoding` | error | Require strict UTF-8 without a byte-order mark. |
993
+ | `missing-frontmatter` | error | Require YAML frontmatter at the beginning of every domain.md. |
994
+ | `frontmatter-fence` | error | Require exactly one valid frontmatter fence at the beginning of the document. |
995
+ | `frontmatter-shape` | error | Require frontmatter to decode to a mapping. |
996
+ | `unsafe-yaml` | error | Reject duplicate keys, aliases, anchors, custom tags, merge keys, and unsafe YAML limits. |
997
+ | `schema` | error | Require frontmatter to satisfy the matching domain.md JSON Schema. |
998
+ | `profile-mismatch` | error | Require an asserted profile to match the document profile. |
999
+ | `template-placeholder` | error | Reject unresolved authoring or publication placeholders in conforming output. |
1000
+ | `secret-in-index` | error | Reject secret-bearing fields and private key material. |
1001
+ | `privacy-public-sensitive` | error | Reject public access for sensitive documents, resources, and services. |
1002
+ | `duplicate-entry-id` | error | Require controller, right, resource, flow, and transition identifiers to be unique. |
1003
+ | `duplicate-section` | error | Reject duplicate canonical Markdown sections. |
1004
+ | `missing-required-section` | error | Require every section declared by validation.required_sections. |
1005
+ | `section-order` | warning | Report canonical sections that appear out of order. |
1006
+ | `unknown-section` | info | Preserve and report unknown Markdown sections. |
1007
+ | `unknown-top-level-key` | warning | Report unknown non-extension frontmatter fields. |
1008
+ | `document-contract` | error | Enforce universal roles, manifest authority, disclosure, privacy, and profile identity rules. |
1009
+ | `constitution-required` | error | Require governed and agentic domains to declare a complete constitutional package. |
1010
+ | `constitutional-subject-profile-unresolved` | error | Require every domain to classify its subject and resolve each declared constitutional facet. |
1011
+ | `constitution-not-applicable-invalid` | error | Permit not_applicable only for passive domains without agent or executable governance. |
1012
+ | `constitutional-instrument-unresolved` | error | Require every constitutional instrument to resolve to a unique domain document entry. |
1013
+ | `constitutional-authority-unverified` | error | Require jurisdiction and authority evidence before legal effect may be marked verified. |
1014
+ | `constitutional-execution-incomplete` | error | Require executable governance implementations, tests, enforcement points, and fail-closed policy. |
1015
+ | `constitutional-ai-incomplete` | error | Require agentic domains to bind principles, procedures, agents, conflict policy, and an audit record. |
1016
+ | `constitution-conflicts-canonical` | error | Reject inconsistent effective periods or simultaneously canonical superseded instruments. |
1017
+ | `constitutional-amendment-unapproved` | error | Require amending instruments to resolve an amendment procedure and constitutional authority source. |
1018
+ | `broken-local-reference` | error | Require locally scoped controller, right, resource, claim, flow, and transition references to resolve. |
1019
+ | `source-authority` | error | Require fact-scoped authority sources to appear in the conflict-resolution order. |
1020
+ | `incomplete-claim-contract` | error | Require claim evidence, rubric, determination, review, and next-action contracts. |
1021
+ | `invalid-flow` | error | Require valid, reachable, right-gated flow transitions and review for consequential effects. |
1022
+ | `template-contract` | error | Require a pinned protocol, derived type, allowlisted path, parameter schema, and verified file identity. |
1023
+ | `integrity-mismatch` | error | Reject bytes that do not match their declared SHA-256 digest or CID. |
1024
+ | `network-policy` | error | Reject unsafe HTTPS or IPFS retrieval, redirects, credentials, and private network targets. |
1025
+ | `runtime-external-checks-required` | info | Identify checks that static validation cannot prove for anchored and runtime profiles. |
1026
+ | `capsule-file-too-large` | error | Reject an Oracle Capsule JSON document above the frozen byte budget. |
1027
+ | `capsule-encoding` | error | Require strict UTF-8 without a byte-order mark for capsule JSON. |
1028
+ | `capsule-json-syntax` | error | Require unambiguous JSON syntax before validation or hashing. |
1029
+ | `capsule-duplicate-key` | error | Reject duplicate JSON object names before model construction. |
1030
+ | `capsule-unicode` | error | Reject lone Unicode surrogate data that is not I-JSON compatible. |
1031
+ | `capsule-number` | error | Reject non-finite and non-interoperable unsafe integer values. |
1032
+ | `capsule-limit` | error | Enforce capsule depth, node, scalar, file-count and byte budgets. |
1033
+ | `capsule-schema` | error | Require the manifest and source lock to satisfy their frozen schemas. |
1034
+ | `capsule-cid` | error | Require CIDv1 raw sha2-256 content addresses. |
1035
+ | `capsule-integrity` | error | Reject disagreements among exact bytes, byte lengths, SHA-256 digests and CIDs. |
1036
+ | `capsule-uri-policy` | error | Reject invalid, credential-bearing, query-bearing or mutable artifact URI forms. |
1037
+ | `capsule-duplicate-id` | error | Require component, tool and capability request identifiers to be unique. |
1038
+ | `capsule-reference` | error | Require component dependencies and requested tool references to resolve locally. |
1039
+ | `capsule-dependency-cycle` | error | Reject cyclic component dependency graphs. |
1040
+ | `capsule-lock` | error | Require complete, exact and component-bound source locks. |
1041
+ | `capsule-duplicate-path` | error | Reject duplicate paths in source locks. |
1042
+ | `capsule-path-collision` | error | Reject locked paths that collide on case-insensitive portable hosts. |
1043
+ | `capsule-release-digest` | error | Require the declared release digest to match the RFC 8785 release projection. |
1044
+ | `capsule-canonicalization` | error | Reject values that cannot be serialized by the frozen RFC 8785 contract. |
1045
+
1046
+ ## 14\. Change control
1047
+
1048
+ A diff tool classifies changes by operational risk:
1049
+
1050
+ - **Security-sensitive — controller/governance review required:** `constitution`, `controllers`, `rights`, `accounts`, `privacy`, `source_of_truth`, `claims.collections.evaluation_kit`, `claims.collections.rubric`, `agents.permitted_outputs`, `agents.forbidden_outputs`, `agent_default_mode`, `critical_do_not`.
1051
+ - **Operational — domain-operator review required:** `services`, `resources`, `linked_entities`, `pods`, `flows`, `claims.collections.evidence_requirements`, `graph_policy`.
1052
+ - **Informational — maintainer review only:** `description`, Markdown Overview/Playbooks/Changelog, `x-*` fields.
1053
+
1054
+ `validation.review_required_for_changes_to` MUST stay consistent with the security-sensitive set above.
1055
+
1056
+ Document roles map onto the same tiers: a **manifest**, `governance`, `data-policy`, `compliance`, and `risk-register` — and any change to a security-sensitive document's `cid`, `update_authority`, `access_policy`, or `sensitivity` — are **security-sensitive**; `operations`, `agents`, and adding or removing operational docs are **operational**; `description` content, appending a `changelog` entry, document `freshness` updates, and `x-*` docs are **informational**.
1057
+
1058
+ **Changelog significance.** A `changelog` entry is **required** for every security-sensitive change, **recommended** for operational changes, and optional for informational ones. Each entry points to the canonical proof (UDID, governance proposal, rubric CID) and adds the semantic "what and why" the transaction log omits.
1059
+
1060
+ **Specification and migration control.** `version` and `conformance.spec_version` identify this specification, while `document_revision` identifies the domain artifact revision. Backward-compatible schema additions increment the specification minor version; incompatible field, authorization, canonicalization, or profile changes increment the major version. A domain may upgrade only through an explicit migration that records the source/target spec versions, deterministic transformation or manual steps, validation evidence, controller approval, and rollback/supersession policy. Runtime agents **MUST NOT** auto-migrate an authority-bearing document.
1061
+
1062
+ ---
1063
+
1064
+ ## 15\. Minimal compliant example
1065
+
1066
+ ```
1067
+ ---
1068
+ version: "1.0.0-rc.3"
1069
+ kind: "domain.md"
1070
+ conformance:
1071
+ spec_version: "1.0.0-rc.3"
1072
+ schema: "urn:ixo:domain-md:schema:1.0.0-rc.3"
1073
+ profile: "authoring_draft"
1074
+ document_revision: "0.1.0"
1075
+ name: "Verified Field Services POD"
1076
+ description: "Operating index for agents coordinating verified field-service delivery, evidence review, and settlement."
1077
+ last_updated: "2026-06-27"
1078
+ domain:
1079
+ id: "urn:uuid:123e4567-e89b-42d3-a456-426614174000"
1080
+ iid: null
1081
+ type: "project"
1082
+ class: "did:ixo:entity:protocol:verified-services"
1083
+ class_binding: { resource: "ipfs://bafybeigdyrzt", cid: "bafybeigdyrzt", version: "1.0.0", merge_policy: "local_explicit_only" }
1084
+ network: { chain_id: "ixo-5", environment: "mainnet", resolver: "ixo-did-resolver", blocksync_endpoint: "https://example-blocksync", rpc_endpoint: null }
1085
+ status: "draft"
1086
+ purpose: "Coordinate buyers, providers, verifiers, agents, claims, evidence, and settlement for verified services."
1087
+ operating_boundary: "Service requests, evidence submission, claim review, outcome determination, and settlement."
1088
+ source_of_truth:
1089
+ protocol_state: "ixo-protocol"
1090
+ iid_document: null
1091
+ graph_query_layer: "ixo-blocksync"
1092
+ private_collaboration: "ixo-matrix"
1093
+ claims_registry: "claim-collection:field-services"
1094
+ evidence_store: "resource:evidence-store"
1095
+ conflict_resolution_order: [ "protocol_state", "iid_document", "udid", "credential", "claim", "claim_collection_state", "blocksync", "matrix_state", "domain_md", "user_prompt", "agent_memory" ]
1096
+ authority_scopes:
1097
+ - { fact: "controller", sources: [ "protocol_state", "iid_document" ] }
1098
+ - { fact: "right", sources: [ "protocol_state", "iid_document" ] }
1099
+ - { fact: "claim_status", sources: [ "protocol_state", "udid", "claim", "claim_collection_state", "blocksync" ] }
1100
+ - { fact: "domain_intent", sources: [ "domain_md" ] }
1101
+ documents:
1102
+ anchoring: { method: "none", reference: null, cid: null, verified_at: null }
1103
+ not_applicable: []
1104
+ entries:
1105
+ - { id: "description", role: "description", category: "universal", manifest_type: null, name: "Verified Field Services — Description", uri: null, cid: null, media_type: "text/markdown", version: "1.2.0", owner: "did:ixo:dao:marketplace-operators", update_authority: [ "did:ixo:dao:marketplace-operators" ], authority: "interpretive", disclosure_pass: 2, required_for_tasks: [ "onboarding", "read_domain_state" ], sensitivity: "public", access_policy: "public", agent_use: { read: true, cite: true, summarize: true }, freshness: { last_verified: null, max_age: "P180D" }, supersedes: null }
1106
+ - { id: "changelog", role: "changelog", category: "universal", manifest_type: null, name: "Verified Field Services — Changelog", uri: null, cid: null, media_type: "text/markdown", version: null, owner: "did:ixo:dao:marketplace-operators", update_authority: [ "did:ixo:dao:marketplace-operators" ], authority: "advisory", disclosure_pass: 2, required_for_tasks: [ "submit_or_evaluate_claim", "move_funds_or_settle" ], sensitivity: "internal", access_policy: "role_based", agent_use: { read: true, cite: true, summarize: true }, freshness: { last_verified: null, max_age: "P30D" }, supersedes: null }
1107
+ - { id: "domain-charter", role: "manifest", category: "manifest", manifest_type: "charter", name: "Marketplace Operators — Charter", uri: null, cid: null, media_type: "text/markdown", version: "2.0.0", owner: "did:ixo:dao:marketplace-operators", update_authority: [ "did:ixo:dao:marketplace-operators" ], authority: "defining", disclosure_pass: 3, required_for_tasks: [ "participate_in_governance", "diligence", "dispute" ], sensitivity: "public", access_policy: "public", agent_use: { read: true, cite: true, summarize: true }, freshness: { last_verified: null, max_age: "P365D" }, supersedes: null }
1108
+ constitution:
1109
+ status: "draft"
1110
+ reason: null
1111
+ subject: "urn:uuid:123e4567-e89b-42d3-a456-426614174000"
1112
+ type: "con:ProjectConstitution"
1113
+ subject_profile:
1114
+ subject_types: [ "con:Project", "con:Work" ]
1115
+ archetypes: [ "con:Managed", "con:Governed", "con:Verified", "con:Settled" ]
1116
+ identity: [ "urn:uuid:123e4567-e89b-42d3-a456-426614174000" ]
1117
+ purposes: [ "resource:project-purpose-v1" ]
1118
+ interests: [ "resource:project-participant-interests-v1" ]
1119
+ values: [ "resource:constitutional-principles-v1" ]
1120
+ rights: [ "right:submit-service-claim", "right:evaluate-service-claim" ]
1121
+ obligations: [ "resource:project-obligations-v1" ]
1122
+ capabilities: [ "right:evaluate-service-claim" ]
1123
+ claims: [ "claim-collection:field-services" ]
1124
+ wallets: [ "did:ixo:wallet:field-services" ]
1125
+ authorities: [ "did:ixo:dao:marketplace-operators" ]
1126
+ memory: [ "resource:project-memory-policy-v1" ]
1127
+ evidence_policies: [ "resource:project-evidence-policy-v1" ]
1128
+ evaluation_policies: [ "resource:project-evaluation-policy-v1" ]
1129
+ decision_policies: [ "resource:project-decision-procedure-v1" ]
1130
+ settlement_policies: [ "resource:project-settlement-policy-v1" ]
1131
+ governance: [ "domain-charter" ]
1132
+ custodians: []
1133
+ stewards: [ "did:ixo:dao:marketplace-operators" ]
1134
+ owners: []
1135
+ beneficiaries: [ "did:ixo:entity:field-service-participants" ]
1136
+ oracles: [ "did:ixo:agent:evidence-review-oracle" ]
1137
+ agentic_twins: [ "did:ixo:agent:evidence-review-oracle" ]
1138
+ legal_effect: { status: "unknown", jurisdiction: null, authority_evidence: [] }
1139
+ norms: [ "resource:constitutional-principles-v1" ]
1140
+ instruments:
1141
+ - { document_ref: "domain-charter", type: "con:ProjectCharter", functions: [ "constitutive", "governing" ], canonical: true, effective_from: null, effective_until: null }
1142
+ governance:
1143
+ authority_sources: [ "domain-charter" ]
1144
+ decision_procedure: "resource:project-decision-procedure-v1"
1145
+ amendment_procedure: "resource:project-amendment-procedure-v1"
1146
+ interpretation_procedure: "resource:project-interpretation-procedure-v1"
1147
+ dispute_resolution_procedure: "resource:project-dispute-procedure-v1"
1148
+ suspension_procedure: "resource:project-suspension-procedure-v1"
1149
+ dissolution_procedure: "resource:project-dissolution-procedure-v1"
1150
+ execution:
1151
+ mode: "machine_assisted"
1152
+ implementations: [ "resource:project-constitutional-policy-v1" ]
1153
+ conformance_tests: [ "resource:project-constitutional-tests-v1" ]
1154
+ enforcement_points: [ "#matrix" ]
1155
+ failure_policy: "pause_and_escalate"
1156
+ human_review_required_for: [ "payment_release", "rights_change", "constitutional_amendment" ]
1157
+ constitutional_ai:
1158
+ mode: "critique_and_revise"
1159
+ applies_to_agents: [ "did:ixo:agent:evidence-review-oracle" ]
1160
+ principles: [ "resource:constitutional-principles-v1" ]
1161
+ critique_procedure: "resource:constitutional-critique-v1"
1162
+ revision_procedure: "resource:constitutional-revision-v1"
1163
+ decision_procedure: null
1164
+ model_profile: "resource:constitutional-model-profile-v1"
1165
+ conflict_policy: "canonical_authority_prevails"
1166
+ audit_record: "resource:constitutional-audit-schema-v1"
1167
+ agent_default_mode:
1168
+ mode: "propose_only"
1169
+ overrides: { move_value: false, issue_credentials: false, change_rights: false, change_rubrics: false }
1170
+ human_review_required_for: [ "high_value_action", "ambiguous_evidence", "payment_release", "credential_issuance", "rights_change" ]
1171
+ controllers:
1172
+ summary: { primary_controller: "did:ixo:dao:marketplace-operators", governance_model: "dao", agent_controllers_allowed: false }
1173
+ entries:
1174
+ - id: "did:ixo:dao:marketplace-operators"
1175
+ type: "dao"
1176
+ name: "Marketplace Operators DAO"
1177
+ role: "Primary project controller"
1178
+ verification_methods: []
1179
+ addresses: []
1180
+ authorities: [ "update_iid", "manage_services", "grant_rights", "revoke_rights", "manage_accounts" ]
1181
+ approval_policy: { threshold: "2/3", quorum: "50%", timelock: "24h", escalation: "governance-room" }
1182
+ limitations: [ "Cannot bypass claim-evaluation requirements for settlement." ]
1183
+ audit_requirements: { log_to: "protocol", signature_required: true }
1184
+ services:
1185
+ entries:
1186
+ - id: "#matrix"
1187
+ type: "matrix"
1188
+ name: "Project coordination room"
1189
+ endpoint: "matrix:!field-services:ixo.world"
1190
+ service_did: null
1191
+ auth: { method: "matrix_access_token", required_scopes: [ "room.read" ] }
1192
+ allowed_agent_uses: [ "read", "notify" ]
1193
+ forbidden_agent_uses: [ "invite_without_controller_approval" ]
1194
+ data_classification: "confidential"
1195
+ canonical: false
1196
+ fallback_service: null
1197
+ resources:
1198
+ entries:
1199
+ - id: "rubric-service-delivery-v1"
1200
+ type: "rubric"
1201
+ name: "Service Delivery Evidence Rubric v1"
1202
+ uri: "resource:rubric-service-delivery-v1"
1203
+ cid: null
1204
+ hash: null
1205
+ version: "1.0.0"
1206
+ owner: "did:ixo:dao:marketplace-operators"
1207
+ update_authority: [ "did:ixo:dao:marketplace-operators" ]
1208
+ access_policy: "role_based"
1209
+ sensitivity: "internal"
1210
+ agent_use: { read: true, cite: true, summarize: true, transform: false, write: false }
1211
+ freshness: { last_verified: null, max_age: "P90D" }
1212
+ canonical_for: [ "rubric" ]
1213
+ rights:
1214
+ agent_baseline:
1215
+ require_explicit_grant_for: [ "write", "evaluate", "execute", "pay", "issue", "govern" ]
1216
+ entries:
1217
+ - id: "right:evidence-oracle:evaluate-service-claim"
1218
+ type: "evaluate_claim"
1219
+ effect: "allow"
1220
+ subject: "did:ixo:agent:evidence-review-oracle"
1221
+ object: "claim-collection:field-services"
1222
+ action: "create_evaluation_claim"
1223
+ capability: { format: "ucan", reference: "ucan://example" }
1224
+ conditions: { flow_state: "evaluating", claim_type: "service_delivery", max_value: null, not_before: "2026-06-27T00:00:00Z", expiry: "2026-12-31T23:59:59Z", role_required: "evidence_reviewer", credential_required: "vc:evidence-reviewer", human_review: true }
1225
+ revocation: { method: "ucan-revoke", authority: [ "did:ixo:dao:marketplace-operators" ] }
1226
+ audit: { record_as: "evaluation_claim", signature_required: true }
1227
+ - id: "right:verifier:determine-service-claim"
1228
+ type: "verify_claim"
1229
+ effect: "allow"
1230
+ subject: "did:ixo:dao:marketplace-operators"
1231
+ object: "claim-collection:field-services"
1232
+ action: "record_determination"
1233
+ capability: { format: "policy", reference: "resource:service-delivery-governance-v1" }
1234
+ conditions: { flow_state: "review_required", claim_type: "service_delivery", max_value: null, not_before: null, expiry: null, role_required: "verifier", credential_required: null, human_review: true }
1235
+ revocation: { method: "controller-policy", authority: [ "did:ixo:dao:marketplace-operators" ] }
1236
+ audit: { record_as: "udid", signature_required: true }
1237
+ agents:
1238
+ entries:
1239
+ - id: "did:ixo:agent:evidence-review-oracle"
1240
+ name: "Evidence Review Oracle"
1241
+ type: "oracle"
1242
+ operator: "did:ixo:dao:marketplace-operators"
1243
+ service: "#matrix"
1244
+ p_functions: [ "evaluate_claim" ]
1245
+ permitted_context: { domains: [ "urn:uuid:123e4567-e89b-42d3-a456-426614174000" ], claims: [ "claim-collection:field-services" ], resources: [ "rubric-service-delivery-v1" ], rooms: [ "#matrix" ] }
1246
+ permitted_outputs: [ "evaluation_claim", "review_recommendation" ]
1247
+ forbidden_outputs: [ "payment_authorization", "rights_grant", "constitutional_amendment" ]
1248
+ logging: { must_cite_evidence: true, must_record_authority: true, must_emit_trace: true, trace_visibility: "controller_only" }
1249
+ escalation: { human_role: "verifier", matrix_room: "#matrix", timeout: "PT24H" }
1250
+ claims:
1251
+ collections:
1252
+ - id: "claim-collection:field-services"
1253
+ name: "Field Service Delivery Claims"
1254
+ purpose: "Evaluate whether field service orders were completed with sufficient evidence."
1255
+ owner: "did:ixo:dao:marketplace-operators"
1256
+ claim_types:
1257
+ - id: "service_delivery"
1258
+ schema: "resource:service-delivery-claim-schema-v1"
1259
+ schema_version: "1.0.0"
1260
+ fact_schema: "resource:service-delivery-fact-schema-v1"
1261
+ evidence_requirements:
1262
+ - { resource_id: "resource:field-photo-schema-v1", required: true, max_age: "P30D", sensitivity: "restricted" }
1263
+ - { resource_id: "resource:gps-attestation-schema-v1", required: true, max_age: "P30D", sensitivity: "restricted" }
1264
+ evaluation_kit: "resource:evaluation-kit-service-delivery-v1"
1265
+ rubric: { resource_id: "rubric-service-delivery-v1", version: "1.0.0", order: [ "identity", "location", "completion", "quality" ], disqualifiers: [ "identity_mismatch", "tampered_evidence" ], reason_codes: [ "complete", "insufficient_evidence", "manual_review" ] }
1266
+ evaluator_right: "right:evidence-oracle:evaluate-service-claim"
1267
+ determiner_right: "right:verifier:determine-service-claim"
1268
+ udid: { required: true, schema: "resource:service-delivery-udid-v1", record_authority: "right:verifier:determine-service-claim" }
1269
+ allowed_outcomes: [ "approved", "rejected", "manual_review_required", "disputed" ]
1270
+ human_review_policy: { required_for: [ "rejected", "disputed", "manual_review_required", "payment" ], reviewer_right: "right:verifier:determine-service-claim", approval_proof: "udid" }
1271
+ next_actions:
1272
+ - { outcome: "approved", flow_id: "flow:service-delivery", transition: "determined_to_actioned", settlement_policy: "resource:field-service-settlement-v1" }
1273
+ - { outcome: "rejected", flow_id: "flow:service-delivery", transition: "determined_to_closed", settlement_policy: null }
1274
+ protocols:
1275
+ - { id: "did:ixo:entity:protocol:verified-services", version: "1.0.0", constraints: [ "settlement_requires_approved_udid" ] }
1276
+ pods:
1277
+ entries:
1278
+ - id: "pod:field-services"
1279
+ name: "Field Services POD"
1280
+ purpose: "Coordinate evidence review and settlement."
1281
+ matrix_room: null
1282
+ members: [ "did:ixo:dao:marketplace-operators", "did:ixo:agent:evidence-review-oracle" ]
1283
+ roles:
1284
+ - { id: "evidence_reviewer", responsibilities: [ "review evidence" ], rights: [ "right:evidence-oracle:evaluate-service-claim" ] }
1285
+ blueprints: []
1286
+ flows:
1287
+ - id: "flow:service-delivery"
1288
+ name: "Service delivery evaluation"
1289
+ trigger: { type: "claim", reference: "claim-collection:field-services" }
1290
+ initial_state: "submitted"
1291
+ states: [ "submitted", "evaluating", "review_required", "determined", "actioned", "closed" ]
1292
+ human_review_states: [ "review_required", "determined" ]
1293
+ allowed_agent_actions: [ "read_claim", "read_evidence", "read_rubric", "create_evaluation_claim", "propose_transition" ]
1294
+ disabled_agent_actions: [ "execute_transition" ]
1295
+ transitions:
1296
+ - { id: "submitted_to_evaluating", from: "submitted", to: "evaluating", actor_rights: [ "right:evidence-oracle:evaluate-service-claim" ], required_evidence: [ "resource:field-photo-schema-v1", "resource:gps-attestation-schema-v1" ], checks: [ "authority_verified", "evidence_present" ], human_review: false, effects: [ "none" ] }
1297
+ - { id: "evaluating_to_review_required", from: "evaluating", to: "review_required", actor_rights: [ "right:evidence-oracle:evaluate-service-claim" ], required_evidence: [ "resource:service-delivery-fact-schema-v1" ], checks: [ "evaluation_claim_recorded" ], human_review: false, effects: [ "message" ] }
1298
+ - { id: "review_required_to_determined", from: "review_required", to: "determined", actor_rights: [ "right:verifier:determine-service-claim" ], required_evidence: [ "resource:service-delivery-udid-v1" ], checks: [ "human_review_proof", "signed_udid" ], human_review: true, effects: [ "none" ] }
1299
+ - { id: "determined_to_actioned", from: "determined", to: "actioned", actor_rights: [ "right:verifier:determine-service-claim" ], required_evidence: [ "resource:service-delivery-udid-v1" ], checks: [ "approved_udid", "treasury_authorization" ], human_review: true, effects: [ "payment" ] }
1300
+ - { id: "determined_to_closed", from: "determined", to: "closed", actor_rights: [ "right:verifier:determine-service-claim" ], required_evidence: [ "resource:service-delivery-udid-v1" ], checks: [ "rejected_udid" ], human_review: true, effects: [ "none" ] }
1301
+ value_mechanisms: [ "payment", "settlement" ]
1302
+ accounts:
1303
+ entries:
1304
+ - name: "payouts"
1305
+ address: "ixo1..."
1306
+ chain_id: "ixo-5"
1307
+ owner: "did:ixo:dao:marketplace-operators"
1308
+ purpose: "Provider settlement after verified service delivery."
1309
+ asset_types: [ "IXO", "stablecoin" ]
1310
+ controllers: [ "did:ixo:dao:marketplace-operators" ]
1311
+ authz_grants: []
1312
+ spending_policy: { max_single_transaction: { amount: "1000", denom: "uixo" }, daily_limit: { amount: "5000", denom: "uixo" }, allowed_recipients: [], requires_claim: true, requires_udid: true, requires_human_approval: true }
1313
+ settlement_triggers:
1314
+ - { claim_type: "service_delivery", outcome_required: "approved", flow_state_required: "determined", action: "pay" }
1315
+ audit: { record_as: "protocol_tx" }
1316
+ privacy:
1317
+ default_policy: "private_by_default"
1318
+ protocol_layer:
1319
+ may_publish: [ "DID", "controller", "service_reference", "resource_reference", "claim_reference", "proof" ]
1320
+ must_not_publish: [ "private_evidence_payload", "personal_data", "unredacted_trace" ]
1321
+ unauthorized_read_behavior: "deny"
1322
+ validation:
1323
+ lint_profile: "strict"
1324
+ max_document_bytes: 1048576
1325
+ max_linked_document_bytes: 2097152
1326
+ required_sections: [ "Overview", "Authority & Control", "Constitutional Governance", "Rights & Capabilities", "Privacy & Source-of-Truth Boundaries", "Do's and Don'ts" ]
1327
+ required_frontmatter: [ "version", "kind", "conformance", "document_revision", "domain.id", "source_of_truth", "constitution", "controllers.summary", "rights.agent_baseline", "privacy.default_policy", "agent_default_mode.mode" ]
1328
+ stale_after: "P30D"
1329
+ review_required_for_changes_to: [ "constitution", "controllers", "rights", "accounts", "privacy", "source_of_truth", "claims.collections.evaluation_kit", "claims.collections.rubric", "agents", "agent_default_mode" ]
1330
+ critical_do_not:
1331
+ - "Do not release payment without an approved UDID and account authorization."
1332
+ - "Do not expose private evidence in public protocol metadata."
1333
+ - "Do not let an agent execute a Flow transition unless explicitly delegated."
1334
+ ---
1335
+ # domain.md
1336
+ ## Overview
1337
+ Coordinates verified field-service delivery between buyers, providers, verifiers, funders, and evidence-review agents. Full description: `documents[role=description]`; founding mandate and principles: `documents[role=manifest]` (charter).
1338
+ ## Authority & Control
1339
+ The Marketplace Operators DAO controls domain settings, service configuration, account policy, and rights delegation. Mandate and non-negotiable commitments: `documents[role=manifest]` (charter).
1340
+ ## Constitutional Governance
1341
+ The project constitution is embodied by `documents[id=domain-charter]`. Constitutional-AI critique may revise an agent proposal, but neither the model nor the charter self-authorizes action; current rights, capabilities, approvals, controller state, and protocol state prevail.
1342
+ ## Rights & Capabilities
1343
+ Agents are default-denied. The Evidence Review Oracle may create an Evaluation Claim only under its scoped, unexpired right; a verifier with the determination right records the reviewed UDID.
1344
+ ## Claims, Evidence & Evaluation
1345
+ The Evidence Review Oracle inspects permitted evidence and creates an Evaluation Claim. It does not approve payment or close the Flow.
1346
+ ## Privacy & Source-of-Truth Boundaries
1347
+ Private evidence remains in the authorized evidence service. Public protocol state carries only references and proofs; canonical conflict resolution is fact-scoped.
1348
+ ## Do's and Don'ts
1349
+ Cite evidence. Record authority. Escalate ambiguity. Never treat chat, private reasoning, or unreviewed model output as canonical state.
1350
+ ## Changelog
1351
+ Most recent significant change: service-delivery rubric updated to v1. Full semantic history with proof pointers (governing proposal, rubric CID): `documents[role=changelog]`.
1352
+ ```
1353
+
1354
+ ---
1355
+
1356
+ ## 16\. Production processing and interoperability
1357
+
1358
+ A production implementation **MUST** execute these gates in order and emit a machine-readable conformance report:
1359
+
1360
+ 1. **Acquire bytes** — enforce the declared byte limit before parsing; preserve the exact bytes for CID verification; reject compression bombs and ambiguous character encodings.
1361
+ 2. **Parse safely** — use YAML 1.2 core semantics with duplicate keys, aliases, anchors, merge keys, and custom tags disabled. YAML is data, never executable configuration.
1362
+ 3. **Validate structure** — select `domain-md.schema.json` by the exact declared spec version; reject unavailable or mismatched schema artifacts; apply profile-specific JSON Schema rules.
1363
+ 4. **Validate semantics** — run §13 lints, unique-ID and local-reference checks, constitutional tiering, class-binding checks, graph/Flow reachability, denomination-safe value checks, and prose/frontmatter consistency checks.
1364
+ 5. **Verify integrity** — verify each required CID, including constitutional instruments and executable implementations, over the exact returned bytes using supported multicodecs and hashes. Do not assume that two storage systems produce equivalent CIDs unless their codec, chunking, and hash contracts are explicitly compatible.
1365
+ 6. **Resolve runtime state** — for `anchored` and `runtime`, resolve constitutional adoption/effectiveness plus canonical IID/protocol state and anchoring evidence, then apply fact-scoped conflict resolution.
1366
+ 7. **Authorize per action** — require constitutional evaluation and independently verify mode ceiling, deny/allow grants, capability/delegation proofs, revocation, trusted time, conditions, Flow state, value denomination, account policy, and human-review proof.
1367
+ 8. **Report** — return spec version, profile, input digest/CID, schema identity, validator version, errors, warnings, resolved canonical references, capability evidence identifiers, and final state. Never include secrets or private evidence in the report.
1368
+
1369
+ External retrieval **MUST** use an allowlist of schemes and destinations, block loopback/link-local/private-network targets unless explicitly configured, cap redirects and response bytes, separate authenticated from public fetches, and avoid forwarding authorization headers across origins. Mutable HTTP responses are context only unless verified against an immutable CID or digest.
1370
+
1371
+ Conformance fixtures **MUST** include valid authoring, persisted, anchored, and runtime examples plus failures for unsafe YAML, duplicate IDs, invalid class binding, missing CIDs, CID mismatch, stale required documents, broken references, deny/allow conflicts, expired/revoked capabilities, denomination mismatch, incomplete claim contracts, invalid/unreachable Flow transitions, private-data leakage, and canonical-state conflict.
1372
+
1373
+ Promotion from `1.0.0-rc.3` to `1.0.0` requires passing the same fixture corpus in at least two independent validators and completing interoperability tests against the production IID resolver, linked-resource anchoring path, content-addressed storage, capability verifier, and one end-to-end claim → UDID → reviewed settlement loop.
1374
+
1375
+ ---
1376
+
1377
+ ## 17\. Adoption path
1378
+
1379
+ Start with one complete operating loop, then scale:
1380
+
1381
+ one domain → one POD → one Claim Collection → one claim type → one evidence schema → one rubric → one Flow → one scoped agent → one human-review path → one UDID determination → one settlement policy (if value moves).
1382
+
1383
+ Test the complete, incomplete, rejected, disputed, and edge-case submissions before adding a second loop.
1384
+
1385
+ ---
1386
+
1387
+ ## 18\. Verified protocol-template manifests
1388
+
1389
+ A protocol MAY publish a template manifest with `kind: domain.md/template-manifest` to offer deterministic
1390
+ starting bundles for derived domains. The matching `template-manifest.schema.json` is normative. Package and
1391
+ specification versions remain independent; a manifest's `version` selects this specification, while
1392
+ `protocol_version` and each `bundle_version` identify independently governed protocol artifacts.
1393
+
1394
+ Each bundle declares one `derived_type` and an allowlisted set of files. Every file entry MUST declare a
1395
+ recognized `role`, a relative `.tmpl` path under `templates/<type>/`, a recognized media type, `max_bytes`, a
1396
+ required/optional flag, and at least one immutable SHA-256 or CID identity. A bundle MUST contain exactly one
1397
+ required Markdown file with role `domain.md`. Bundle types and logical paths MUST be unique within their
1398
+ respective scopes. Paths containing traversal, absolute paths, ambiguous separators, or symbolic links are
1399
+ invalid.
1400
+
1401
+ Remote HTTPS manifests MUST be pinned by SHA-256 or CID before their bytes are parsed. An `ipfs://` root URI
1402
+ is pinned by its CID; an IPFS URI below the root additionally requires a manifest SHA-256. IPFS resolution
1403
+ requires an explicitly configured HTTPS gateway. HTTPS resolution MUST reject credentials in URLs,
1404
+ non-HTTPS redirects, private/reserved/link-local/loopback destinations, DNS rebinding, excess redirects,
1405
+ timeouts, oversized responses, and resolver results that cross from a remote manifest to a local file.
1406
+ Native IXO VFS resolution is outside this release until a stable endpoint, authentication model, and
1407
+ capability contract are normative.
1408
+
1409
+ A Markdown `domain.md.tmpl` MUST carry an `x-template` mapping that binds the exact protocol DID, derived
1410
+ type, template version, and parameter declarations. Typed YAML substitutions use a whole-node
1411
+ `{$param: name}` form only. Markdown prose substitutions use declared `{{name}}` markers only and are
1412
+ escaped as Markdown text. Unknown parameters, unresolved parameters, type mismatches, unresolved markers,
1413
+ and required declarations that are never used are errors. Conforming rendered output contains no
1414
+ `x-template` metadata or template markers.
1415
+
1416
+ Initialization is a local authoring operation, not an authority-bearing action. A renderer MUST generate a
1417
+ deterministic `urn:uuid` draft identity from the verified template and parameter inputs, set unresolved IID
1418
+ and receipt/CID values to YAML `null`, produce a provenance record containing source identities and output
1419
+ digests but not raw parameter values, and run full static `authoring_draft` validation. It MUST render into a
1420
+ temporary sibling directory and atomically rename only after validation succeeds. It MUST NOT overwrite a
1421
+ non-empty target, persist to VFS, anchor, publish, register an entity, execute a Flow, grant a right, or move
1422
+ value.
1423
+
1424
+ ---
1425
+
1426
+ ## Grounding
1427
+
1428
+ Builds on IXO primitives: DID-anchored IID entity domains (controllers, services, resources, accorded rights, linked claims/entities, accounts); IXO Protocol state truth with Blocksync as an indexed read projection; IXO Matrix as the encrypted collaboration layer; PODs and Qi Flows for coordinated workflows; UDIDs for determination provenance; Agentic Oracles as authority-scoped, evidence-grounded, audit-producing agents; and the claim-evaluation protocol (typed facts → governed rubric → recorded decision). Structurally it follows the `DESIGN.md` pattern: normative YAML tokens first, ordered `##` prose second, explicit consumer behavior for unknown and duplicate content.
1429
+
1430
+ The constitutional terms and catalogue use the merged IXO vocabulary at
1431
+ `https://w3id.org/ixo/vocab/v1/constitution#`, source commit
1432
+ `697e443a69aa1adf23c240c6fc6bd56434d1a9eb`, including the legal-form-independent subject catalogue at
1433
+ `https://w3id.org/ixo/vocab/v1/constitution/subjects`. Terms are specialized with RDFS/OWL and organized with SKOS;
1434
+ provenance reuses DCTERMS and PROV-O, while permissions, prohibitions, and duties reuse ODRL.