# GPT-5.5 Pro 系统详细设计审查 Date: 2026-05-29 Status: Requires repair before freeze Auditor: GPT-5.5 Pro Scope: `system-detailed-design.md` against frozen baselines, contracts, registry, runtime semantics, code view, and frozen overview. 本报告只记录本轮审查发现的合同级、语义级不一致,供后续统一处理。未对原有审计报告做修改。 --- ## 1. Overall Verdict `system-detailed-design.md` 当前还不能作为一致、可实施的详细设计冻结版。 主要问题不是章节缺失,而是几处上游冻结文档之间的语义冲突没有被详细设计收束,且其中两处在详细设计中被继续放大: 1. Worker 退出码语义冲突。 2. EventStore 投影职责越界。 3. `memory.promoted` / outbox 阶段语义自相矛盾。 4. `docs` task 类型未闭合。 5. Prompt role/profile 类型覆盖不完整。 6. contracts 包文件集仍有两套命名。 建议先修复这些合同级裂缝,再继续冻结详细设计。 --- ## 2. Findings ### Finding 1 — High — Worker exit code 语义冲突 **问题** Worker 退出码在不同权威文档中定义不一致。 `baselineV1.md` 定义: - `0` = protocol-level completion, including task failed/blocked - `1` = uncaught exception - `2` = startup/protocol error - `3` = permission error - `5` = hard timeout killed 但 `system-overview-design.md` 和 `system-detailed-design.md` 采用另一套语义: - `1` = task failed - `2` = crashed - `3` = protocol error - `5` = permission/policy blocked **证据** - `baselineV1.md:351` - `system-overview-design.md:856` - `system-detailed-design.md:566` **影响** 实现 `WorkerManager` 时,父进程会无法稳定区分: - 任务失败但协议正常 - worker 崩溃 - 启动/协议错误 - 权限阻断 - 硬超时 kill 这会直接影响 Scheduler 的 retry、blocked、failed、lost 判定。 **建议处理** 统一以一份权威退出码表为准,并在详细设计中明确: - task failed / blocked 是否仍通过 exit code `0` 返回 WorkerResult。 - 非零 exit code 只表示 worker/process/protocol 层异常,还是也表示业务任务失败。 - permission blocked 应归入 WorkerResult 还是进程退出码。 --- ### Finding 2 — High — EventStore.project 职责越界 **问题** `runtime-semantics-v1.md` 明确要求 EventStore 不应创建 scheduler tasks、permission decisions、memory promotions、doctor fixes 等策略动作。 但 `system-detailed-design.md` 的 durable projection map 中,仍把部分跨服务/跨存储行为写进 `EventStore.project`: - `context.compaction.requested` -> insert compaction task if accepted - `memory.promoted` -> append + write rules/skill/learned-memory.db - `debug.record.created` -> insert/update debug-records.db **证据** - `runtime-semantics-v1.md:38` - `runtime-semantics-v1.md:43` - `system-detailed-design.md:350` - `system-detailed-design.md:367` **影响** 这会把 Scheduler、ExperienceMiner/Curator、DebugKnowledgeStore 等 owning service 的职责错误塞进 EventStore,并破坏 runtime-semantics 对事务边界的要求。 特别是: - session DB event/domain projection 应在同一 SQLite transaction 内完成。 - 外部 DB/file side effect 应走 cross-store semantics/outbox/recovery 规则。 - EventStore 不应隐藏调度策略或 promotion 策略。 **建议处理** 将 `EventStore.project(event, tx)` 严格限制为 session DB domain table projection。 需要移出 EventStore 的行为: - compaction task 创建:由 Scheduler 或 Context/Scheduler 协调服务处理。 - memory/rule/skill 写入:由 ExperienceMiner/Curator owning service 处理。 - debug-records.db 写入:由 DebugKnowledgeStore/Debugger flow 处理。 详细设计的 projection map 应只描述 event -> session DB domain row update,不描述跨 DB/文件副作用。 --- ### Finding 3 — Medium — `memory.promoted` outbox 阶段语义自相矛盾 **问题** `runtime-semantics-v1.md` 说明 `memory.promoted` 表示 promotion 已完成,并记录 target ref: ```text candidate was approved/promoted by owning service rule/skill/learned-memory write is performed by ExperienceMiner/Curator service session event records completed promotion and target ref ``` 如果文件/DB 写失败,应发 failure event,并让 candidate 保持未 promoted 或 pending repair。 但 `system-detailed-design.md` §18.4 又把 `memory.promoted` 同时当作: 1. step 1 intent/event 2. step 4 completion evidence **证据** - `runtime-semantics-v1.md:145` - `runtime-semantics-v1.md:153` - `system-detailed-design.md:1161` **影响** 同一个 event 同时表示“准备 promotion”和“已经 promotion 成功”,会导致 recovery、dedupe、UI 状态、candidate 状态无法可靠判断。 **建议处理** 拆清事件阶段: - 如果需要 intent:新增或使用明确的 request/intent event。 - `memory.promoted` 只表示 completed promotion + target ref。 - 写入失败时发 `memory.promotion.failed` 或对应 failure event,并保持 candidate 未完成或 pending repair。 --- ### Finding 4 — Medium — `docs` task 类型进入 contracts/DB,但事件与 worker output 未闭合 **问题** `TaskType` 和 DB enum 都包含 `docs`,但事件 registry 和 worker output contract 没有闭合这一路径。 已包含 `docs` 的位置: - `TaskType` - DB closed enum / task type 未包含 `docs` 的位置: - `TaskCreatedPayload.type` 只允许五类 worker task,不含 `docs`。 - `WorkerOutputContract` 没有 docs result 类型。 - `system-detailed-design.md` 没有说明 `ArchitectureDesigner.update_architecture_docs` 是非 task service,还是 `docs` task 的正式执行路径。 **证据** - `interface-contracts-v1.md:222` - `db-schema-v1.md:666` - `event-registry-v1.md:296` - `interface-contracts-v1.md:435` - `system-detailed-design.md:992` **影响** 如果实现时按 DB/contracts 创建 `docs` task,则 event validation 和 worker result contract 会断裂;如果 `docs` 不是 task,则 DB/contracts 中的 task type 会误导实现。 **建议处理** 二选一收束: 1. `docs` 是正式 task type:补齐 event registry、worker output/result、Scheduler dispatch 规则。 2. `docs` 不是 task type:从 TaskType/DB enum 中移除或标注为非 worker internal type,并明确 ArchitectureDesigner 直接服务路径。 --- ### Finding 5 — Medium — Prompt role/profile 类型覆盖不完整 **问题** `prompt-layering-v1.md` 要求内置 role 覆盖: - `main` - `architecture` - `scheduler` - `executor` - `reviewer` - `debugger` - `compactor` - `experience_miner` 但 `interface-contracts-v1.md` 的 `AgentType` 只覆盖 worker role。`PromptLayerLoader.load_role(role: AgentType)` 因而无法类型化加载 main/architecture/scheduler role。 `system-detailed-design.md` 沿用了该接口,但没有补一个 `PromptRole` / `RuntimeRole` union 来承接非 worker role。 **证据** - `prompt-layering-v1.md:71` - `interface-contracts-v1.md:142` - `interface-contracts-v1.md:1049` - `system-detailed-design.md:769` **影响** Main Agent、Architecture Designer、Scheduler 的 prompt role/profile 在设计上没有类型入口,实现时可能被迫用 string escape hatch,削弱 prompt layering 的冻结语义。 **建议处理** 补一个覆盖所有 prompt profile 的类型,例如: ```ts export type PromptRole = | "main" | "architecture" | "scheduler" | WorkerRole ``` 并将 `PromptLayerLoader.load_role` 参数从 `AgentType` 调整为完整 prompt role 类型,或明确 `AgentType` 扩展为包含 runtime roles。 --- ### Finding 6 — Low — contracts 包文件集仍有两套命名 **问题** `c4/code-view.md` 期望 contracts 包文件集为: ```text ids.ts runtime.ts event.ts ipc.ts task.ts worker-result.ts tool.ts artifact.ts evidence.ts project.ts provider.ts permission.ts ui.ts error.ts ``` 但 `system-overview-design.md` 期望另一套文件集: ```text types.ts errors.ts events.ts storage.ts project.ts scheduler.ts workers.ts tools.ts permissions.ts artifacts.ts providers.ts context.ts projection.ts capabilities.ts doctor.ts knowledge.ts ``` `system-detailed-design.md` 引用 code-view,但没有明确最终文件树如何处理这两套命名。 **证据** - `c4/code-view.md:67` - `system-overview-design.md:196` **影响** 后续脚手架可能出现重复文件、错位 re-export、或者实现者不知道哪份文件树是冻结目标。 **建议处理** 在详细设计中冻结唯一 contracts package file tree,并明确另一套命名是: - 已废弃;或 - overview-level logical grouping;或 - code-view 需要更新的旧版本。 --- ## 3. Recommended Repair Order 1. 统一 Worker exit code 语义。 2. 重写 EventStore durable projection map,移除所有跨服务/跨存储副作用。 3. 拆清 `memory.promoted` 的 intent/completion 事件阶段。 4. 决定 `docs` 是否为正式 task type,并补齐或移除相关 contracts。 5. 补齐 prompt role/profile 类型模型。 6. 冻结 contracts 包唯一文件树。 前三项会直接影响 runtime 核心实现,应优先处理。