Overview
0. 规范语言
本文中的规范关键字(MUST / SHOULD / MAY 等)按 conformance/normative-language.md 解释;仅大写形式具规范约束力。
1. 目标
Arkret 的核心数据模型是一张以 Realm 为边界、以标准对象和开放 Morph 共同组成的可审计协作图。本目录定义协作图中所有标准对象的语义、字段、行为与互相之间的关系。
阅读建议:
- 第一次接触请按本文 §3 设计原则与 §2 typed-id 一览建立总览。
- 字段细节、必填性、枚举值集中在
common-fields.md(公共字段)与各对象自己的”字段”小节。 - 每个对象在
models/下都有唯一权威文件;文件之间不重复 normative 规则,只在必要处交叉引用。
2. Typed ID 一览
每个 Arkret 对象的种类由 id 的 typed-id 前缀(ak:<kind>:)唯一决定,canonical object 上不再单独写 type 字段。typed-id kind 的完整集合与 wire form 以 artifacts/registry/id-kind-registry.json(生成自 contract-registry)为准;本表仅把协作图核心对象索引到详细文档,不是完整 kind 清单。
DID 的使用边界见 common-fields.md §4.1:DID 标识 actor / principal / issuer / service 等主体,不替代 ak:<kind>: 对象 ID。设备不是主体 DID,使用 device_id + principal 下的 authorization。
2.1 协作图核心对象
| Typed ID | 对象 | 说明 | 详情 |
|---|---|---|---|
ak:realm: | Realm | security / sync / auth / E2EE 边界 | realm-and-space.md |
ak:circle: | Circle | Realm 内子事件 / 子消息边界(子集成员 / 独立 history / 投递裁剪;可选独立 MLS group),对象通过 scope_circle_id 引用 | circle.md |
ak:sidecar: | Agent Sidecar | controller 的个人 AI 私有工作区;Event-derived ID,native scope,参与者由 controller + 当前 Realm 内的 active owned Agents 派生 | sidecar.md |
ak:space: | Space | 产品结构容器与导航节点(project / folder / board / list / section …),通过 realm_id 解析安全边界 | realm-and-space.md |
ak:strand: | Strand | 统一协作主对象(task / decision / incident / channel …) | strand-and-message.md |
ak:message: | Message | Strand discussion track 时间线消息 | strand-and-message.md |
ak:morph: | Morph | 开放形态对象,承载扩展业务类型 | morph.md |
ak:relation: | Relation | 一等关系对象(contains / replies_to / depends_on …) | relation.md |
ak:actor_profile: | Actor Profile | Actor 在协作图中的展示镜像 | actor.md |
ak:view: | View | 投影定义(看板 / 列表 / 时间线 / graph / document …) | views.md |
ak:event: | Event | 签名事件,reducer 输入与审计事实 | event-and-patch.md |
2.2 治理对象
| Typed ID | 对象 | 说明 | 详情 |
|---|---|---|---|
ak:policy: | Policy | access / encryption / retention / federation / moderation 等策略 | governance-objects.md |
ak:capability: | Capability Definition | abstract capability definition reference(非签名 grant;签名 grant 用 ak:grant:)。真源见 id-kind-registry.json capability 条目。 | governance-objects.md |
ak:grant: | Capability Grant | 授权委派 | governance-objects.md |
ak:invite: | Invite | Realm 加入引导 | governance-objects.md |
ak.schema.* | Schema | 标准对象 / Morph type / facet / event 的结构与约束 | governance-objects.md |
2.3 派生 / 私有对象
派生对象不是 canonical truth,由 client / SDK 从 Event 集合本地计算;schema 仅用于 wire 表示。
| Typed ID | 对象 | 说明 | 详情 |
|---|---|---|---|
ak:notification: | Notification | inbox projection | private-objects.md |
Read Cursor(actor-private 已读位置,private-objects.md)没有 typed ID:身份是 (actor_id, realm_id, read_scope) 三元组,ak.read_cursor.advance 的 id_source 为 not_an_object_id。
2.4 内容 / 媒体 / 扩展对象
| Typed ID | 对象 | 说明 | 详情 |
|---|---|---|---|
ak:blob: | Blob | 由 Blob Store 管理的数据,不参与协作图归约。两种形态:ak:blob:<uuid> 是 metadata row id;ak:blob:sha256:...(sha256:<hex>)是内容寻址特殊形态(详见 id-kind-registry.json)。 | extension-objects.md |
ak:applet: | Applet | bot / bridge / portal / 集成服务(extension profile) | extension-objects.md |
| Agent runtime | Agent | 外部 agent 协议互通运行时 | extension-objects.md |
2.5 辅助标识符
| Typed ID | 对象 | 说明 |
|---|---|---|
“、ak:cursor:、ak:realm_commit: | 状态 / 同步原语 | 不是协作图对象;语义见 authz/event-auth-state-resolution.md、sync/operations-sync.md 与 conformance/encoding.md |
字段级、必填性、枚举值与 wire 约束统一以 common-fields.md 与各对象文件中的字段表为准。Schema 引用见 artifacts/schemas/,event/operation registry 见 artifacts/registry/。
2.6 对象关系总览
下图把核心 typed-id 之间的归属、容纳、引用、投影关系画成一张图。ak:event: 是事实根,所有共享对象都是 Event 集合在某个 fixed reducer semantics 下的物化结果。
flowchart TB
Event["ak:event:<br/>签名事件(事实根)"]
subgraph SP ["ak:realm: — security / sync / auth / E2EE 边界"]
direction TB
Space["ak:space:<br/>kind=board / list / ..."]
Strand["ak:strand:"]
Morph["ak:morph:"]
Msg["ak:message:<br/>(discussion 时间线)"]
Rel["ak:relation:"]
Space -- "contains" --> Strand
Space -- "parent_space_id(同 Realm)" --> Space
Strand -- "tracks.discussion" --> Msg
Rel -. "from_ref / to_ref" .-> Strand
Rel -. "from_ref / to_ref" .-> Morph
Rel -. "from_ref / to_ref" .-> Space
end
Circle["ak:circle:<br/>(Realm 内子事件边界)"]
Strand -. "scope_circle_id<br/>(窄化 effective scope)" .-> Circle
View["ak:view:<br/>投影定义(不持有真相)"]
View -. "投影" .-> Strand
View -. "投影" .-> Space
View -. "投影" .-> Msg
Event ==> SP
Event ==> Circle
读图要点:
- 实线箭头是结构归属或容纳关系;虚线是引用 / 投影 / scope 窄化。
ak:realm:是 federation/identity 硬边界——federation、policy、capability registry、Realm-default MLS 都以它为根。ak:space:永远不是边界,Space metadata 由realm_id指向的 home Realm 授权。ak:circle:是 Realm 内的子事件 / 子消息边界——子集成员 / 独立 history / 投递裁剪;在 E2EE Realm 或 policy 要求下还拥有独立 MLS group。Strand.scope_circle_id指向 Circle 表示整个 Strand(所有 track)落在该 Circle scope。ak:sidecar:是独立个人 AI 工作区和原生安全 scope,不是 Circle profile,不复用或隐藏 Circle 对象、membership 与 lifecycle。ak:relation:是一等对象,跨对象语义 MUST 通过 Relation 表达,不藏在字段里。ak:view:拥有投影定义的真相,但不持有被投影对象的协作事实。- Discussion 想要独立 membership / history visibility / 投递裁剪或 E2EE 时,整个 Strand 通过
scope_circle_id落在一个 Circle;v1 不定义 per-track 安全边界。
3. 设计原则
3.1 Realm 边界与 Space 容器
容器选型的 normative 判定顺序以 ../overview/architecture.md §2.0 为准;本节仅作为模型目录导览,具体字段与 reducer 规则仍以各对象专属文件为准。
每个 ak:realm: 都是 security/sync/auth/E2EE 硬边界——复制、权限、schema、policy、membership、history visibility、加密、federation policy 都以它为根。Realm 不承担产品导航树职责:结构性分组、项目、folder、看板、列、泳道、calendar bucket 等由独立的 Space 对象(ak:space:)承担,Space 永远不形成独立边界。
security_class=high_assurance 是 Realm 的可选标签,进一步收紧 federation policy 与默认审计/E2EE 选项。
Realm 之间 MAY 通过 ak.realm.link 形成显式 link graph(governance、discoverability、confidential_extension、mirror 等),但 v1 不定义通用 Realm hierarchy。membership、capability、history visibility、schema、policy 和 encryption key 不因 link 级联;任何继承都必须由目标 Realm 显式声明。详细规则见 realm-links.md。
Space 层级通过 Space 自己的 parent_space_id + ak.space.parent 表达,MUST 位于同一 Realm 内;不传播 Circle 可见性或对象 capability。跨 Realm 展示使用 View / 普通引用。详细规则见 space-hierarchy.md。
3.2 Strand 承载主语义
同一个协作主题由一个 Strand 表达;track primary 解析规则与 track 配置决定默认入口和能力面。
标准对象本身表达主语义:
strand:统一协作主对象。它承载metadata.title/metadata.summary/content等基础字段,并通过 track primary 解析规则决定默认进入哪个 track。message:Stranddiscussiontrack 中的消息。morph:开放形态对象,用于业务扩展、未知类型和实验对象。space:Realm 内部的结构容器(kind=board/kind=list/ 其他 profile 注册的形态)。
标准对象 MAY 暴露 schema/profile 已声明的 facets 来辅助展示或查询,但它的核心职责不依赖 facets 才成立。实现不得要求标准对象先声明 facet 才能承认其主语义。
3.3 Morph 是开放对象
morph 表示协议未固化为标准类型的协作对象,适合插件、未来标准类型实验、外部系统镜像、低频弱互操作扩展数据。
Morph 的可见能力可以由 Realm schema / Morph profile 声明,并通过 facets 暴露给 View、UI、本地搜索或插件。实现遇到未知标准类型 SHOULD fail closed;遇到未知 Morph facet SHOULD 保留数据,但不得让未知 facet 绕过 schema、capability、policy 或 encryption 约束。
Facet 字符串本身不是规范性 reducer 或授权来源。任何会改变写入权限、状态转换、排序、包含关系、事件有效性或跨实现 wire 行为的能力,MUST 由明确 schema/profile/event kind/capability action 定义。详情见 morph.md。
3.4 Relation 是一等对象
跨对象语义 MUST 使用 relation 表达,而不是藏在对象字段里。Relation 连接的是对象引用:标准字段 from_ref / to_ref 指向 canonical 对象的 ak:<kind>: typed ID,合法端点 kind 的权威集合(realm / space / actor_profile / strand / message / morph / relation / event / view / blob)见 relation.md §1 与 relation.schema.json。Actor 端点 MUST 直接使用该 actor 的完整结构化 ActorId(包括 Station 归属),MUST NOT 使用裸 DID 或字符串化 JSON;ak:actor_profile: 只表示展示镜像对象,不能代替 Actor 端点(见 common-fields.md §4.1)。
跨 Realm 引用规则、结构性 Relation 的本地约束(如 contains / belongs_to 不可跨 Realm)见 relation.md。
3.5 Event 是事实
所有协作变化最终都落为签名 event。Event 是审计根和 reducer 输入。当前态只是 Event 集合在某个 fixed reducer semantics 下的物化结果。详情见 event-and-patch.md。
3.6 View 是投影定义
view 是一等协议对象,但它拥有的是投影定义的真相,而不是被投影对象的协作事实。它定义查询、过滤、排序、分组、renderer、布局、可见字段和共享 saved view 配置。
View 不得发明对象能力,也不得持有对象状态的唯一副本;对象能力来自对象类型、schema/profile 和 capability,facets 只作为已声明能力的查询与投影 hint。详情见 views.md。
3.7 Schema 演进
标准类型演进 MUST 遵守:
- 新字段优先 optional。
- 既有字段不得静默改变语义。
- reducer 和客户端 MUST 保留 schema 允许但实现未识别的字段(canonical envelope 层 schema 未声明的字段按 event-and-patch.md §2.2 拒绝),但 MUST NOT 让这些字段绕过 capability、schema、policy 或加密约束。
- UI 遇到未知 Morph type SHOULD 降级为 generic Morph card。
- 标准对象不得阻止 Realm 定义自定义 Morph type。
4. 阅读路径(Reading Paths)
按目标层面索引:
| 关注层面 | 起点 |
|---|---|
| 协作图整体结构 / 标准对象一览 | 本文 §2-§3 |
| 公共字段、lifecycle、reducer 总则 | common-fields.md |
| Realm 边界、看板 / 列 / 容器、位置语义 | realm-and-space.md |
| Circle 子事件 / 子消息边界、成员范围、独立 MLS 与 sub-authority commit | circle.md |
| Agent Sidecar 独立对象、派生 access、backing scope 与 private context | sidecar.md |
| Strand / track / discussion / Message | strand-and-message.md |
| Morph 类型、facets、扩展 | morph.md |
| Relation 基数、跨 Realm、冲突 | relation.md |
| Actor、Actor Profile | actor.md |
| Schema / Policy / Capability Grant / Invite | governance-objects.md |
| Read Cursor / Notification | private-objects.md |
| Event Envelope / Proof / Patch / Receipt / reducer | event-and-patch.md |
| Applet / Agent / Blob | extension-objects.md |
| Content Block(消息正文 / 富文本 / 媒体) | content-types.md |
| 投影 / 看板 / 时间线 / graph / document View | views.md |
| Realm link graph、显式继承、治理关系 | realm-links.md |
| Space 产品结构层级、跨 Realm 导航 | space-hierarchy.md |
5. 规范性引用
- 标准 event type 注册表见
../conformance/schema-registry.md。 - Reducer conformance vector 见
../conformance/conformance-vectors.md。 - Schema evolution 测试见
../conformance/conformance-profiles.md。 - authority-commit projection / capability 校验规则见
../authz/event-auth-state-resolution.md。