@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.
- package/LICENSE +201 -0
- package/NOTICE +6 -0
- package/README.md +30 -0
- package/assets/domain-md.schema.json +1103 -0
- package/assets/oracle-capsule-jcs-vectors.json +57 -0
- package/assets/oracle-capsule-manifest-contract.md +72 -0
- package/assets/oracle-capsule-source-lock.schema.json +45 -0
- package/assets/oracle-capsule.schema.json +265 -0
- package/assets/rules.json +275 -0
- package/assets/spec.md +1434 -0
- package/assets/template-manifest.schema.json +57 -0
- package/dist/capsule/index.d.ts +75 -0
- package/dist/capsule/index.js +20 -0
- package/dist/capsule/index.js.map +1 -0
- package/dist/chunk-BYBC2TSS.js +597 -0
- package/dist/chunk-BYBC2TSS.js.map +1 -0
- package/dist/chunk-G7PZJYAJ.js +31826 -0
- package/dist/chunk-G7PZJYAJ.js.map +1 -0
- package/dist/chunk-R6QZRNEX.js +164 -0
- package/dist/chunk-R6QZRNEX.js.map +1 -0
- package/dist/chunk-T3STBWXP.js +46 -0
- package/dist/chunk-T3STBWXP.js.map +1 -0
- package/dist/chunk-W7MRQP7I.js +862 -0
- package/dist/chunk-W7MRQP7I.js.map +1 -0
- package/dist/chunk-XDIWMZVF.js +1150 -0
- package/dist/chunk-XDIWMZVF.js.map +1 -0
- package/dist/cli-KcUIQEiE.d.ts +171 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +400 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/resolver-B3mwnjJq.d.ts +96 -0
- package/dist/spec.d.ts +20 -0
- package/dist/spec.js +23 -0
- package/dist/spec.js.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.js +24 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/workers-Dr8B8a2O.d.ts +19 -0
- package/dist/workers.d.ts +3 -0
- package/dist/workers.js +31 -0
- package/dist/workers.js.map +1 -0
- package/package.json +97 -0
- package/src/capsule/canonical.ts +74 -0
- package/src/capsule/index.ts +10 -0
- package/src/capsule/json.ts +373 -0
- package/src/capsule/types.ts +63 -0
- package/src/capsule/validate.ts +551 -0
- package/src/cli.ts +405 -0
- package/src/compiled-validators.d.ts +7 -0
- package/src/compiled-validators.js +32512 -0
- package/src/constants.ts +250 -0
- package/src/diff.ts +111 -0
- package/src/export.ts +28 -0
- package/src/index.ts +36 -0
- package/src/lint.ts +42 -0
- package/src/parser.ts +174 -0
- package/src/sarif.ts +49 -0
- package/src/semantic.ts +1156 -0
- package/src/spec.ts +48 -0
- package/src/templates/errors.ts +3 -0
- package/src/templates/index.ts +11 -0
- package/src/templates/manifest.ts +94 -0
- package/src/templates/render.ts +435 -0
- package/src/templates/resolver.ts +200 -0
- package/src/templates/types.ts +98 -0
- package/src/types.ts +195 -0
- 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.
|