跳转到内容

Runtime Kernel 契约

版本:kernel.v0.1 状态:首版可执行契约 实现边界:进程内可嵌入 Runtime + 可插拔 Adapter/Port

Kernel 的权威范围是跨应用稳定存在的关系事实、证据、状态、事件和治理控制。应用领域对象和业务规则不进入 Kernel 核心;它们由 Adapter 映射为 Kernel 引用、命令和受控扩展。

Kernel 拥有:

  • 规范化对象状态、接受事件、版本和 Kernel 审计;
  • 命令校验、幂等、预期版本冲突和状态迁移;
  • FactInferenceSourceEvidence 的可追溯引用;
  • 权限结果结构、Agent Control 闸门和回放输入。

Adapter 拥有:

  • 应用领域字段、外部系统标识、应用工作流和业务规则;
  • 身份提供方、组织角色、数据存储、消息系统和应用事务边界;
  • 将 Kernel 事件、审计和权限结果投影回应用查询模型。

禁止应用共享数据库写旁路或直接修改 Kernel canonical state。

所有对象都有稳定不可复用的 *_idcreated_atoccurred_atstatus(如适用)、version 和可保留但不由 Kernel 解释的 extensions。未知扩展必须被保留,不能改变核心字段语义。

对象 最小字段 核心不变量
Entity 实体 entity_id, entity_type, status, created_at, version, extensions 标识不可复用;实体存在不代表身份已核验
Identity 身份 identity_id, entity_id, kind, verification_level, status, declared_at, version, extensions 身份声明、凭证、核验状态和展示权限分离
Relationship 关系 relationship_id, participant_refs, relationship_type, context, state, created_at, version, extensions 至少两个参与实体;状态变化必须有事件和依据
Interaction 互动 interaction_id, actor_ref, subject_refs, kind, occurred_at, source_ref, visibility, extensions 记录行为或接触,不自动等于关系成立
Fact 事实 fact_id, subject_refs, predicate, value, source_refs, evidence_refs, observed_at, status, version, extensions 可追溯;更正/撤回用显式事件,不覆盖历史
Inference 推断 inference_id, subject_refs, conclusion, basis_fact_refs, evidence_refs, rule_version, valid_until, status, version, extensions 必须引用事实或证据;失效不自动改写事实或关系
Source 来源 source_id, source_type, source_ref, produced_at, status, version, extensions 表示信息产生主体、系统或渠道,不等于证据内容
Evidence 证据 evidence_id, source_ref, subject_refs, evidence_type, content_digest, collected_at, status, version, extensions 可支持复核;撤回/过期必须保留失效原因
Event 事件 event_id, event_type, occurred_at, producer, subject_refs, causation_id, correlation_id, schema_version, payload, resulting_version, rule_version, policy_version, visibility 只表示 Kernel 已接受的已发生记录;不可变、可回放

TrustNetworkRanAuthority 不在九类最小对象中:信任判断属于带依据和有效期的 InferenceNetwork 是授权范围内关系结构的聚合视图;RanAuthority 是可复核的贡献/治理 Profile。

Command 是请求意图,不能被当作已发生事实。只有命令通过对象校验、权限结果、版本约束和 Agent Control 后,Kernel 才原子地产生 Event、更新状态并写 Kernel 审计。

{
"command_id": "cmd-001",
"command_type": "create_entity",
"actor_ref": "entity:operator",
"subject_refs": ["entity:subject"],
"purpose": "fixture",
"idempotency_key": "idem-001",
"request_hash": "sha256:...",
"expected_version": 0,
"payload": {},
"schema_version": "kernel.v0.1",
"policy_result": {"decision": "allow", "policy_version": "policy.v0.1"}
}

request_hash 必须覆盖命令类型、主体、用途、预期版本、payload、schema 版本和 Agent Control;同一幂等键重用时,哈希不同必须返回冲突。

结果状态固定为:

  • completed:已产生事件并完成 Kernel 原子提交;
  • rejected:输入、权限、状态或对象约束失败;
  • conflict:幂等键哈希不一致或 expected_version 过期;
  • pending_review:需要人工审批,尚未产生领域事件;
  • accepted_async:已接受受控异步任务,领域结果尚未完成;
  • unknown:无法确认提交结果,调用方必须查询幂等键或对账,不得盲目重写。

事件必须记录 causation_idcorrelation_idschema_versionrule_versionpolicy_versionresulting_version。事件 payload 应包含足以重建规范化状态的变更快照或明确的可重放变更。

首版通用迁移表如下;应用可以在 Adapter 中增加业务前置条件,但不能绕过 Kernel 的版本、权限、审计和事件约束。

命令 前置 接受事件 结果状态
create_entity 标识不存在,expected_version=0 EntityCreated 实体 active 或 payload 指定状态
declare_identity entity_id 已存在 IdentityDeclared 身份声明状态
transition_identity 身份存在,目标状态迁移合法 IdentityStateChanged 身份进入目标状态
create_relationship 至少两个已存在实体,标识不存在 RelationshipCreated proposed 或 payload 指定状态
transition_relationship 关系存在,目标状态在允许集合 RelationshipStateChanged 新关系状态
record_interaction actor 和 subject 引用存在,来源合法 InteractionRecorded 互动追加,不改变关系状态
record_fact 来源/证据引用存在或由同一命令创建 FactRecorded 事实 active
record_inference 事实或证据引用存在,规则版本明确 InferenceRecorded 推断 active
register_source 来源标识不存在 SourceRegistered 来源 active
record_evidence 来源存在,摘要存在 EvidenceRecorded 证据 active
invalidate_fact / invalidate_evidence 对象存在且当前有效 FactInvalidated / EvidenceInvalidated 对象 invalidated

允许的关系迁移:proposed -> active|under_review|closedactive -> restricted|under_review|inactive|closedunder_review -> active|restricted|closedinactive -> active|closed。非法迁移不得产生部分写入。

事实或证据失效时,依赖它们的推断会被标记为 staleinvalidated,但关系状态不会被隐式改写;应用必须显式发起重新评估或状态迁移命令。

原始事实、推断、来源和证据必须独立存储并可分别查询:

Source -> Evidence -> Fact -> Inference
\-> Relationship transition request

Inferencebasis_fact_refsevidence_refsrule_version、有效期和复核状态是强制审计依据。模型输出、评分或推荐不能直接写成 Fact

更正、撤回、过期和争议通过新命令产生新事件,历史事件不被编辑。读取失效推断时必须返回失效状态及触发事件引用。

Adapter 是应用边界内的映射层;Port 是 Kernel 依赖的最小能力接口。首版 Port 不承诺分布式事务。

Port Kernel 使用 Adapter/宿主责任
EventStorePort 追加不可变事件、读取回放输入 持久化、并发条件写、备份和对账
AuditPort 追加 Kernel 审计 审计存储、查询授权、保留与脱敏
PolicyPort 获取结构化 allow/deny/mask/approval_required 结果 身份、组织角色、用途和应用授权判定
MessagePort 发布已接受事件或受控异步任务 消息投递、重试、去重和死信处理
ClockPort 提供可测试时间 生产时钟、时区和时间同步

提交顺序是 Kernel 内部原子状态、事件和 Kernel 审计;外部消息采用 outbox/受控任务、确认、重试、补偿和对账。外部失败不能伪装成已完成领域提交。

权限结果由应用 PolicyPort 提供,Kernel 负责结构校验、绑定 actor_ref/purpose/资源范围、版本记录和执行门禁。结果只允许:

decision Kernel 行为
allow 继续命令校验和提交
deny 返回 rejected,不得写领域事件
mask 仅允许策略声明的脱敏读取或受限动作
approval_required 返回 pending_review,等待明确责任人批准

Agent Control 至少声明 agent_refcapabilitytool_refrisk_classcapability_versionapproval_owner、所需权限和降级动作。高风险工具没有有效批准不得执行;拒绝、超时和降级都必须审计。

每条审计至少记录 audit_idcommand_id、actor、purpose、resource、decision、policy_version、result、occurred_at 和事件引用。审计只追加。

8. 幂等、冲突、回放与版本治理

Section titled “8. 幂等、冲突、回放与版本治理”
  • 同一 idempotency_key + 同一 request_hash:返回等价的原结果,不产生新事件;
  • 同一 idempotency_key + 不同 request_hash:返回 conflict
  • expected_version 与当前对象版本不一致:返回 conflict
  • 状态、事件、审计在同一 Kernel 提交边界中更新;失败不得留下半条记录;
  • unknown 只表示提交确认丢失,必须通过幂等查询或对账恢复;
  • 事件使用记录时的 schema_versionrule_versionpolicy_version 回放,不能用当前版本重算历史;
  • 旧事件只能在显式兼容转换器存在时迁移,原始版本和转换记录必须保留;
  • kernel.v0.x 允许增加可选扩展,删除/改变必需字段或状态语义必须升级主版本。

性能边界:回放、证据遍历和批量处理必须支持页大小/事件深度、时间范围、内存预算和取消信号;首版内存实现仅作为参考实现,不宣称生产吞吐目标。

一致性测试使用两个合成 Adapter:一个把扁平外部记录映射为 entity_key/state,另一个把嵌套记录映射为 record_key/lifecycle。测试只断言 Kernel 契约、事件、版本和审计,不读取任何应用业务字段。

合格标准:两个 Adapter 都能创建实体、声明身份、建立关系、登记事实和推断;同一组幂等、冲突、失效、回放、权限和 Agent Control 向量均得到相同 Kernel 语义。