Add system-detailed-design.md (2033 lines, 23 sections) derived from frozen baselines and overview. Complete four-model cross-review: - DeepSeek: baseline coverage audit (PASS, 9.6/10) - MIMO 2.5 Pro: internal consistency (PASS, 9.4/10) - GPT-5.5 Pro: baseline conflict detection (Requires repair) - Opus 4.8: validation + root cause analysis (CONDITIONAL PASS, 9.1/10) Key findings requiring resolution before freeze: - P1-01: Worker exit code semantic conflict (baselineV1 vs overview) - P1-02: PromptLayerLevel enum vs L0-L9 layer name mismatch - P1-03: EventStore.project() error handling undefined - P1-04: PromptLayerLoader interface incomplete for 10 layers Coverage verified: 100% contracts, events, DB schema, state machines. Architecture validated: no circular dependencies, proper separation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
9.0 KiB
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 当前还不能作为一致、可实施的详细设计冻结版。
主要问题不是章节缺失,而是几处上游冻结文档之间的语义冲突没有被详细设计收束,且其中两处在详细设计中被继续放大:
- Worker 退出码语义冲突。
- EventStore 投影职责越界。
memory.promoted/ outbox 阶段语义自相矛盾。docstask 类型未闭合。- Prompt role/profile 类型覆盖不完整。
- contracts 包文件集仍有两套命名。
建议先修复这些合同级裂缝,再继续冻结详细设计。
2. Findings
Finding 1 — High — Worker exit code 语义冲突
问题
Worker 退出码在不同权威文档中定义不一致。
baselineV1.md 定义:
0= protocol-level completion, including task failed/blocked1= uncaught exception2= startup/protocol error3= permission error5= hard timeout killed
但 system-overview-design.md 和 system-detailed-design.md 采用另一套语义:
1= task failed2= crashed3= protocol error5= permission/policy blocked
证据
baselineV1.md:351system-overview-design.md:856system-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 acceptedmemory.promoted-> append + write rules/skill/learned-memory.dbdebug.record.created-> insert/update debug-records.db
证据
runtime-semantics-v1.md:38runtime-semantics-v1.md:43system-detailed-design.md:350system-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:
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 同时当作:
- step 1 intent/event
- step 4 completion evidence
证据
runtime-semantics-v1.md:145runtime-semantics-v1.md:153system-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,还是docstask 的正式执行路径。
证据
interface-contracts-v1.md:222db-schema-v1.md:666event-registry-v1.md:296interface-contracts-v1.md:435system-detailed-design.md:992
影响
如果实现时按 DB/contracts 创建 docs task,则 event validation 和 worker result contract 会断裂;如果 docs 不是 task,则 DB/contracts 中的 task type 会误导实现。
建议处理
二选一收束:
docs是正式 task type:补齐 event registry、worker output/result、Scheduler dispatch 规则。docs不是 task type:从 TaskType/DB enum 中移除或标注为非 worker internal type,并明确 ArchitectureDesigner 直接服务路径。
Finding 5 — Medium — Prompt role/profile 类型覆盖不完整
问题
prompt-layering-v1.md 要求内置 role 覆盖:
mainarchitectureschedulerexecutorreviewerdebuggercompactorexperience_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:71interface-contracts-v1.md:142interface-contracts-v1.md:1049system-detailed-design.md:769
影响
Main Agent、Architecture Designer、Scheduler 的 prompt role/profile 在设计上没有类型入口,实现时可能被迫用 string escape hatch,削弱 prompt layering 的冻结语义。
建议处理
补一个覆盖所有 prompt profile 的类型,例如:
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 包文件集为:
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 期望另一套文件集:
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:67system-overview-design.md:196
影响
后续脚手架可能出现重复文件、错位 re-export、或者实现者不知道哪份文件树是冻结目标。
建议处理
在详细设计中冻结唯一 contracts package file tree,并明确另一套命名是:
- 已废弃;或
- overview-level logical grouping;或
- code-view 需要更新的旧版本。
3. Recommended Repair Order
- 统一 Worker exit code 语义。
- 重写 EventStore durable projection map,移除所有跨服务/跨存储副作用。
- 拆清
memory.promoted的 intent/completion 事件阶段。 - 决定
docs是否为正式 task type,并补齐或移除相关 contracts。 - 补齐 prompt role/profile 类型模型。
- 冻结 contracts 包唯一文件树。
前三项会直接影响 runtime 核心实现,应优先处理。