docs: 事件集落地后回写 GovDoc 缺口清单与阶段清单

「审计出口与事件流的关系」那条缺口转到已回答:审计由意图日志承担,出口要包在存储接缝上
而不是接在事件出口上;三类事件里 phase_recovery 那一类在界外。新登记一条缺口:工具单独的
耗时拿不到,本库只有整步墙钟,迁过去口径会变。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-10 22:57:09 -04:00
parent 8c642e7881
commit 95898bccf3
2 changed files with 24 additions and 10 deletions
+2 -3
View File
@@ -42,9 +42,8 @@
- [x] ④ 测试框架 —— unit / integration / contract 三层已在跑;**e2e 还是空的**,它要打真实 - [x] ④ 测试框架 —— unit / integration / contract 三层已在跑;**e2e 还是空的**,它要打真实
模型网关(划分判据是「依赖什么」,见 [CLAUDE.md](CLAUDE.md) §1.9)。`tests/contract/` 模型网关(划分判据是「依赖什么」,见 [CLAUDE.md](CLAUDE.md) §1.9)。`tests/contract/`
那套公共行为一致性用例接上了自带的存储实现,解释器与执行器那几条仍等下游把实现接进来 那套公共行为一致性用例接上了自带的存储实现,解释器与执行器那几条仍等下游把实现接进来
- [x] ⑤ 实现 —— 十个模块全部落地。**处已知欠账**事件出口收下了但没有调用点(`Event` - [x] ⑤ 实现 —— 十个模块全部落地,五个接缝都有调用点。**处已知欠账**`stores` 只有逐行
还没有字段,事件集要独立成一份 design doc);`stores` 只有逐行追加那一种形态,关系 追加那一种形态,关系数据库那种由下游自己实现,契约套件是它的准入标准
数据库那种由下游自己实现,契约套件是它的准入标准
- [ ] ⑥ 迁移验收 —— 真的把 dissect 与 GovDoc-SaaS 迁过来,以两边测试全绿为准 - [ ] ⑥ 迁移验收 —— 真的把 dissect 与 GovDoc-SaaS 迁过来,以两边测试全绿为准
## 本地检查 ## 本地检查
+22 -7
View File
@@ -96,10 +96,24 @@ GovDoc 有两套 agent,形态完全不同,而两套都不能直接当迁移
阶段级续跑本身在界外,但它依赖一个界内的事实:运行结果必须是可持久化、可读回、可判定的 阶段级续跑本身在界外,但它依赖一个界内的事实:运行结果必须是可持久化、可读回、可判定的
结构,而且「这次运行结束了」要由库自己写下来。这条已经落进 `../design/0002-step-level-resume.md` 结构,而且「这次运行结束了」要由库自己写下来。这条已经落进 `../design/0002-step-level-resume.md`
## 已经有答案的(原缺口登记,`0003` 回答) ## 已经有答案的(原缺口登记,`0003` 与 `0013` 回答)
条曾经登记为「PolyLoop 答不上来」,`../design/0003-public-api-shape.md` 已经定了。 条曾经登记为「PolyLoop 答不上来」,现在定了。留在这里是因为它们是 GovDoc 侧真实的接入
留在这里是因为它们是 GovDoc 侧真实的接入约束,迁移时要照着改代码。 约束,迁移时要照着改代码。
**审计纪律由意图日志承担,不由事件流承担**`../design/0013-event-set-and-callbacks.md`
决策一与决策二)。这条原来登记成「事件流能不能覆盖审计需求,取决于事件里带不带原始响应」,
答案是不带——事件流可丢,一件只存在于可丢通道里的事实撑不起「禁止静默修复」。纪律要留痕的
三样在日志里各有位置:模型原文在模型调用结果记录的回复里,修复后的文本是步记录的
`raw_output`,恢复来源是意图日志本身(哪一步有意图没结果、按哪条重放策略处置过)。
对 GovDoc 的实质影响是**审计出口要包在存储接缝上,不是接在事件出口上**。存储的写是运行的
一部分,写失败运行就停;事件的投递不是。今天那个发一条带类型和载荷的接口迁过来之后,位置
变了。事件流仍然可以接——一步走完发一条,带整条步记录——但它是给进度回写用的,不能当审计。
**它的三类事件里有一类在界外。** `phase_recovery` 发自阶段执行器,而阶段编排不归本库;那
一层要发什么事件由它自己定。本库这边它需要的只是「这次运行结束了没有、结果是什么」,那是
存储的结束记录在回答。
**预算挂在请求上,不是定义上。** 一份定义可以被三个阶段共用,各传一份预算,不会长出三份 **预算挂在请求上,不是定义上。** 一份定义可以被三个阶段共用,各传一份预算,不会长出三份
除预算外完全相同的定义。**不设「定义给默认值、请求可覆盖」**——两处取值意味着「这次到底 除预算外完全相同的定义。**不设「定义给默认值、请求可覆盖」**——两处取值意味着「这次到底
@@ -139,10 +153,11 @@ JSON,不用原生工具调用,所以现在不缺。哪天要换成原生工
个 tools 字段——那是兼容变更,但还要看下面那一层的共用库暴不暴露这个参数,以及原生工具调用的 个 tools 字段——那是兼容变更,但还要看下面那一层的共用库暴不暴露这个参数,以及原生工具调用的
返回怎么进决策解释接缝那三个分支。**这条要在换协议之前定,不能边换边定。** 返回怎么进决策解释接缝那三个分支。**这条要在换协议之前定,不能边换边定。**
**审计出口与事件流的关系。** 生产实现的审计出口是一个「发一条带类型和载荷的事件」的接口, **动作被拒绝那一档,工具单独的耗时拿不到。** 生产实现的 `tool_call` 审计事件记的是工具执行
而 PolyLoop 的方向是「观察走事件流、干预走具名回调」。事件流能不能覆盖审计的需求,取决于 那一段的毫秒数,而 PolyLoop 只记整步墙钟——里面混着模型调用、解释和动作执行三段。迁过去这个
事件里带不带原始响应——审计纪律要求原始输出和修复后的输出都留痕。事件集与回调清单要独立 数的口径会变,迁移前后两批数据不可比。要拆开就得往步记录里加分段计时,那是一次持久化结构的
成一份 design doc,这条在那时候定。 改动,得先说清楚这个数拿去做什么(是给人看慢在哪,还是要进统计)。这条在
`../design/0013-event-set-and-callbacks.md` 的代价一节登记过,那份文档没解决它。
**动作被拒绝之后的重复行为。** 生产实现对无效工具调用不设单独的重试上限,靠总迭代上界收敛。 **动作被拒绝之后的重复行为。** 生产实现对无效工具调用不设单独的重试上限,靠总迭代上界收敛。
PolyLoop 目前的想法一致,但要确认这在长阶段(50 步)上够不够——模型反复调用同一个不存在的 PolyLoop 目前的想法一致,但要确认这在长阶段(50 步)上够不够——模型反复调用同一个不存在的