2.0 KiB
ADR: Owner Scoped Task Lineage Supersession P0
决策
TASK-SINGLEHOST-LINEAGE-SUPERSESSION-P0-20260905 新增一个只服务于
TASK-SINGLEHOST-TRUSTROOT-P0-20260904 到
TASK-SINGLEHOST-TRUSTROOT-P0-20260904-S1 的控制面 capability。
它创建 append-only child lineage;绝不重写 source Task、metadata、revision、attempt、claim 或 lease。
安全边界
请求只携带 Owner decision 和 source 身份断言。控制面复用正式 Task identity helper 与现有 Owner verifier,严格校验 namespace、principal、当前 Owner key、短 TTL、nonce、 decision ID、exact-CAS 字段以及唯一 child ID/ordinal。未知字段、任意 child payload、通配 Task/repository/branch、旧 signer 或 replay 均 fail-closed。
child payload 由 canonical initial-execution profile 在服务端构造:QUEUED、revision 1、
attempt 0、无 claim/lease、空初始 capabilities 和 pristine metadata。child 普通 event 链
只允许 TASK_CREATED;lineage/decision/receipt 审计必须写入独立 append-only 表。
一致性和重放
单一 BEGIN IMMEDIATE 事务重读 source exact-CAS、检查 source+ordinal/child/decision/nonce
唯一性、插入 child、lineage、decision 和 receipt,并整体提交。任一步失败必须回滚,不能
留下半创建 child。只有 decision digest 完全相同的请求可返回同一 receipt;相同唯一键而
digest 不同必须拒绝。append-only 表禁止 UPDATE 和 DELETE。
ClaimGuard
source 的 frozen ClaimGuard artifact 永不修改。child 的 Task identity 和 projected metadata identity 必然不同,必须使用新建的版本化、append-only child binding/receipt,精确绑定 child task、projected revision/metadata/capabilities、worker、execution digest、repository、 branch、generation 和 external job。dispatch 只识别 source 与 exact child;缺失或重复 binding 一律拒绝。不得使用 latest、通配符或 caller 指定路径。
验收
live invocation 前必须在 isolated SQLite 完成 source exact state 到 canonical projection、