文档批(修正版,取代 #96):27 条留痕 + 结掉 design.md 七层线头(原「1条作废」已撤销并入#108) #101

Closed
opened 2026-07-30 02:53:55 +00:00 by KumaAgent · 6 comments
Member

取代 #96(已作废关闭)。#96 的附录 A(10 条作废)经两轮纠正后只剩 1 条——它的裁决层从未被复核过,而复核跑完发现8 条作废裁决全部未站住。本票是修正后的版本,请以本票为准,#96 正文与评论只作认知轨迹留档。

来源:2026-07-29 全 ADR 查漏(31 份 ADR + CONTEXT.md + design.md 对照 origin/main)+ 同日对 15 条高风险裁决的对抗性复核。纯文档、零代码改动,全部落在 docs 分支。

为什么 #96 被作废

查漏的流水线是 扫描 → 对抗复核 → 裁决对抗复核只覆盖了「这条落差是不是真的」(事实层),而错误全部发生在「该怎么处理它」(裁决层)——复核跑的时候裁决还不存在,结构上不可能复核裁决。

事后补跑的裁决复核结果:

原裁决类别 送审 站住 未站住
作废 8 0 8
待人类拍板 7 4 3(方向不变,理由要修)

作废这个类别 100% 失败,原因是结构性的:「作废」要断言"这条设计不该继续有效",而这必须先正确理解这条设计是什么——恰恰是误读最容易命中的地方。「待拍板」只说"该由人来定",几乎不会错。

查漏系统性地过度倾向撤销设计:把"还没建"和"该由人定"都读成了"当初就是个坏主意"。

两种反复出现的误读(实现本票时也要自己防着)

(A) 机制归属被读错。 最常见的是把「注入侧/声明性/被动」读成「触发侧/决策式/主动」。抓手是原文里的否定式措辞——「不驱动数值方程」「不新增出口」「不抬优先度」「零 LLM」「不新开 port」「core 不自算」——这类句子就是归属声明,也最容易被跳过

(B) 声称的前置条件里有环节是原文自己已经答过的。 典型是「需要 A+B+C+D,无一存在」,而原文早已指定责任方(「由 host 提供」「不新开 port」)。看到这种论证就逐环回原文搜一遍。

任务一:撤销(2026-08-17 评估侧裁决,见本票评论)

原「1 条判为作废」不再是本票的任务。 核实发现附录 A#1 与附录 C#5(=#108 第 8 条)是原始 77 条
查漏把同一条发现(ADR-0009 归档拆分)计成了两个独立条目、各自独立复核、互不知情地得出相反结论——
附录 C#5/#108-8 的「待人类拍板」站得住,附录 A#1 的「作废」不成立(把 ADR-0009 的「checkpoint
archive」误认成了 LangGraph 的 checkpointer,具体见评论)。附录 A 保留在票面只作认知轨迹留档,
不追加作废更新节,不执行。#108 第 8 条已经完整承接这条发现,不需要另开票。

任务二:27 条判为「留痕」

= #96 原附录 B 的 21 条 + 日期临近 2 条(#96 第一条评论已纠正)+ 本轮从作废改判的 5 条。

留痕不是"标个待办",是"如实标注尚未实现、且不许写错理由"。 按 ADR-0010 issue #83 节既定:写清「当下未实现」比写一个听起来合理但错误的理由重要。本轮 5 条改判项的正确理由已逐条给在附录 B-2,不要沿用原查漏的作废理由——那些理由正是被复核推翻的东西。

任务三:结掉 design.md 的七层线头

docs/design.md「作废/取代」节那句「旧 ADR-0003……分层思路留作 core 内部结构参考」从未执行。2026-07-29 结构实测已给出结论,结掉它、不执行,并补实测依据:

  • 55 个模块没有自然簇(摘掉七个最大模块后,剩 49 个里仍有 33 个粘成一坨);
  • 照架构图七层装桶会整个塌成一个 SCC,最小反向边集 26/170 跨层边;加一个 shared 契约桶才降到 5 条;
  • 架构图缺 1~2 个桶:一个 shared/contracts,以及 judge_persona_drift(4 个调用方跨 Memory/Agency)、recency_decay(3 个跨 Memory/Presence)这类横切原语的归属;
  • Routing 层已被 ADR-0028/ADR-0020 搁置,今天无对应代码。

层名保留为叙述词汇(CONTEXT.md 就是按这些分节的),只是不再作为分包依据。

硬性格式要求(本仓惯例)

一律只追加 ## 更新(2026-07-xx,issue #N) 节,绝不就地改写既有「决策」/「拒绝了」节。 三条实证先例:ADR-0004 的「决策」节至今保留已被 ADR-0030 宣布移除的 poke 位;ADR-0010 用「上一条更新(issue #41)记的『尚未实现』已过时」推翻前文而不删前文;ADR-0001 的 #80 更新同形。

CONTEXT.md / design.md 不适用更新节体例,就地修订即可,但改动要能被 git log 追溯到本票。

Acceptance criteria

  • 附录 A 那 1 条追加作废更新节——2026-08-17 撤销,不是本票任务,见上方任务一与本票评论。
  • 27 条留痕各有「尚未实现」标注(原 28 条中,附录 B-3 第 2 条已被 issue #136 实现,不再写入留痕,
    见本票评论);其中附录 B-2 那 5 条必须用更正后的理由
  • design.md 七层线头结掉,附实测依据。
  • 所有改动只在 docs 分支,按既定规则永不推送
  • 不改任何代码、不碰 src/、不碰 tests/
  • 自检一遍:你写的每条「未实现原因」,回原文确认那个原因不是原文已经答过的(失效模式 B)。这条是本票最容易重犯的错。

Not in scope

  • 5 条改判为「待人类拍板」的(含原本就是待拍板的 3 条 + 从作废改判的 2 条)→ 属第四批,先 grill 再拆 PRD。清单见附录 C,本票不要动它们
  • 4 条裁决成立的待拍板项(ADR-0013 单一 DB 事务 / ADR-0008 注入分档 / ADR-0014 环境遥测 / CONTEXT.md 技能三级披露)→ 同属第四批。
  • 39 条判为「实现」的落差 → 第四批。注意:那 39 条的裁决层同样没被复核过,第四批开工前应先补一轮裁决复核(本轮 8/8 的失败率说明这不是多余的)。
  • 本票不做任何代码实现,即使某条留痕项"顺手就能实现"。

附录 A:1 条「作废」(理由已更正)——2026-08-17 已撤销,只作认知轨迹留档

不要按下面的内容执行。 与附录 C#5(=#108 第 8 条)是同一条发现的重复计数,评估侧裁决附录 C#5
站得住、这条不成立(详见本票评论)。保留在这里的原因同 #96 处理先例——留作认知轨迹,说明这个
结论是怎么走到又怎么被推翻的,不代表它现在有效。

1. ADR-0009 记忆工程 —「决策」节

断言:episodic 与 checkpoint archive 拆两 collection;archive blob 分条化

原裁决 作废 不成立(复核:部分成立)。原因:未命中失效模式 A 的主型:把「checkpoint archive」归给 LangGraph checkpointer 有原文直接支持——ADR-0013:5 逐字写「ADR-0002 弃 LangGraph,也就弃了它的 checkpointer」,ADR-0002:7-8 又把「归档 blob」这个旧痛点点名为「迁就框架 @after_agent 钩子的产物」。裁决没有把注入侧读成决策侧、也没有把被动机制读成主动机制。

关键原文:【adr/0009-memory-engineering.md:15】「- 归档拆分:episodic 与 checkpoint archive 拆两 collection;archive blob 分条化(治整块召回)。」
【adr/0009-memory-engineering.md:5-7】「旧实现缺陷:归档器把~60 条原文拼成单 blob 整块召回、episodic 与 archive 混同一 collection」
【adr/0013-crash-recovery-and-side-effect-contract.md:5】「ADR-0002 弃 LangGraph,也就弃了它的 checkpointer。」
【adr/0002-runtime-substrate.md:7-8】「研究亦发现旧痛点(delta 全量写、归档 blob)部分是迁就框架 @after_agent 钩子的产物。」…

改判 → 作废:作废方向站得住,且是本批证据最硬的一条:载体消失有 ADR-0013:5 逐字支持,blob 痛点被 ADR-0002:7-8 自己归因到旧框架钩子,压缩产物在 CONTEXT.md:384 里明写是「画像/事件更新」而非整块归档。两处需要收紧:(1)「这个病在本仓从未存在过」过度绝对——ADR-0009 自己 2026-07-08 更新节把「整批 delta 原样转存为低置信度 tentative 记录(不提炼,只保留原文)」定为降级路径,那是本仓按设计唯一会产生整块记录的地方,作废说明里应把这条留成显式注记(降级路径若要落地,分条仍是应遵守的形状),而不是宣布病从未存在;(2) 同步清单要补 CONTEXT.md:374-375 的三因子召回词条,以及 ADR-0009:45/ADR-0015:39 两处「画像/事件记忆/归档」枚举——它们都是弃 LangGraph 之后写的,不补就等于作废没落地。


附录 B-1:日期临近 2 条(#96 第一条评论已纠正,措辞照此)

这两条是同一件事的两侧(ADR-0015 决策节 / CONTEXT.md「触发注入」条 + design.md Knowledge bullet),原判作废,已改判留痕

为什么不是作废:CONTEXT.md 原文明写它「装配 context 时检查……即触发注入,同为声明性文本、不驱动情感态数值方程(呼应 ADR-0018「距上次交互」声明性-only 的既定边界哲学)」,且「日期数据来自 host(非 core 自算),不新开 port,只加一种触发条件到本引擎」。即:它是注入侧机制、效果类比召回、主动开口优先度不变date 由 host 提供。原裁决把「注入一条声明性事实」读成「触发一次主动开口」,据此凭空造出「与主动开口门控的交互」这一环;又把原文已指定责任方的「谁来填 date」当成缺失前置。四环实际只有两环。

留痕措辞

  • ADR-0015:追加更新节——「日期临近触发尚未实现(截至 2026-07-29)。设计归属不变:它是触发注入区块的第二种触发条件,产出声明性文本、不驱动情感态方程、不抬主动开口优先度date 由 host 提供,core 不自算。未实现的现状原因是目前没有 host 提供 date。」
  • CONTEXT.md:改成「触发模式设计为两种:① 关键词命中(已实现);② 日期临近(尚未实现,见 ADR-0015 更新节)」。注意别把「现有」原样留着——原文「触发模式现有两种」用"现有"把未实现的写成既成事实,这是必须修的。
  • design.md:Knowledge bullet 同步同一口径。

附录 B-2:从「作废」改判「留痕」的 5 条(理由已更正,不要沿用原措辞)

1. ADR-0010 更新(2026-07-08 第三方项目对照 grill)「系统自检信号层」条

断言:新增不自动修复、只产信号的健康度探针(importance 池积压、drive/关系轴零支撑、tentative 堆积比例)

原裁决 作废 不成立(复核:不成立)。原因:读错了,两处。第一,原文把这一层的性质钉在「跨时间系统健康度」+「帮助运维者发现『该维护了』而不需要靠肉眼排查」,即一个面向部署者的长期运营遥测层;裁决改读成「针对本次查漏里已知落差的诊断工具」,于是得出「建探针去观测一个已知必然发生的病」。

关键原文:adr/0010-operations.md L65-69:「- 记忆/主动性自检信号层(参考 kimi-core curation-health/dim-health,AGPL-3.0-or-later,仅借鉴设计理念非代码):新增一组不自动修复、只产出信号的健康度探针(如高 importance 池积压量、某个 drive/关系轴长期零支撑、tentative 桶堆积未被晋升的比例),阈值触发时写入日常摘要/供 /diagnose 展示。这是决策快照(单次决策可解释性)之外补的跨时间系统健康度信号层,帮助运维者发现"该维护了"而不需要靠肉眼排查。具体阈值留实现期按本 ADR 已定的三层分类标定。」
同文件 L186:「/cost 与六池归池记账已实现(预算与熔断仍属 #82)。」
同文件 L218:「六池预算与熔断已实现(/why 仍属 #83)。」
同文件 L78-79(本 AD…

改判 → 留痕:「作废」是把一条已拍板的设计撤下去、方向不可逆,本条三条理由里两条依赖误读(归属从「面向运维者的跨时间遥测」被改读为「针对本次落差的诊断」;「如」引出的举例被当成穷举),第三条与同 ADR 已落地项的标准不自洽,达不到作废该有的确定性。建议改判留痕:记为「运维遥测层已拍板、尚未实现」,并把裁决里真正有价值的那半句(tentative 堆积与某轴零支撑在当下确实是别的落差的症状,应先修因)作为实现期选哪些探针的输入——就算用户完全认可这个意见,改动也只是删掉原文括号里的两个举例,而不是撤掉整层。若用户确实想重新讨论「要不要有健康度探针这一层」,那是待人类拍板,也不该由查漏方单边作废。

2. ADR-0005「决策」节 + 「更新(2026-07-06)/ 双时间尺度」节(资源态推 energy 保留不变)

断言:energy += … + 资源态推送 + …

原裁决 作废 不成立(复核:不成立)。原因:读错了。裁决第三条理由把「资源态」实质等同于 core 侧的 LLM 六池预算/熔断(「把预算压力喂进人格情绪」、「熔断了所以它心情不好所以更不想说话」),但 ADR-0010 L14 有一句否定式归属声明「扣星等对『清除』收费 = host 经济 hook;core 无经济概念」,ADR-0001 L10-12 也把「资源、经济规则」整体划给宿主经 port 实现——按原文,资源态是 host 侧资源/经济状态(经济 hook 一侧),不是 core 的成本治理池。

关键原文:adr/0005-affective-state.md L86:「资源态推 energy 这一既有项保留不变(曾在本轮草稿中被无意漏抄,已订正补回)。」
同文件 L71(双时间尺度快层方程):「energy += f(互动极性) + 资源态推送 + ε·群传染速率 − k_fast·(energy − slow_energy)
同文件 L125-126(更晚一轮更新仍带此项):「快情感态 energy 方程新增一项昼夜节律 nudgeenergy += f(互动极性) + 资源态推送 + ε·群传染速率 + 昼夜节律nudge(time) − k_fast·(energy − slow_energy)。」
同文件 L5-6(来源):「dxkuma ADR-0006 定情感态为 per-chat valence/energy 标量、纯机械更新(互动 n…

改判 → 留痕:「作废」按更严尺度过不了:三条理由里第一条把 ADR-0001/ADR-0010 已指定的责任方(host,经声明为可选的经济 hook port)当成设计缺口,第三条把资源态误挂到 core 六池预算/熔断上(撞 ADR-0010「core 无经济概念」),第二条把原文「保留不变…无意漏抄,已订正补回」这句肯定性保留决定反读成惯性残留(且忽略它在 L125 更晚一轮更新与 CONTEXT.md L270 里都还在)。建议改判留痕:记为「资源态推 energy 是已拍板的既有项,数据源是 ADR-0001 声明为可选的 host 经济 hook port,port 未建期间该项恒为零输入」,同时把真实的文档缺口一并留痕——arise 文档集从未定义「资源态」是什么量(来源在 dxkuma 仓的 ADR-0006),实现期需要一句口径。若用户确实想重新审「host 侧资源状态该不该进人格情绪方程」,那是待人类拍板的设计问题,不该由查漏方以「core 里没有」为由单边撤下。

3. ADR-0006「决策」节「自发目标并入单一出口」条

断言:core 本地启发式触发候选(熟人久未联系/话题新进展/冒出不懂的梗)

原裁决 作废 不成立(复核:部分成立)。原因:命中失效模式 A(与标定样例同型:把「召回侧/筛候选」读成「判断侧/裁决」)。

  1. 原文是两段式:「本地启发式触发候选」→「主模型轮内决定是否成 pending_intent」。

关键原文:【adr/0006-agency-and-drive.md:14-16】「- 自发目标并入单一出口:允许 core 本地启发式触发候选(熟人久未联系/话题新进展/冒出不懂的梗),主模型轮内决定是否成 context 模式 pending_intent(不新起循环),走 dxkuma ADR-0007 既有 inject_intents + recall 单一出口消费,不新增独立主动出口。」
【adr/0006-agency-and-drive.md:11-13】「- Drive Tick:跑在 isolated/light context(只注 persona + 情感态 + 未决意图 + 近期摘要,不背全量历史);无 due 任务整轮跳过、零 API
【CONTEXT.md:240-241】「级一纯本地启发式打分(零 LLM,高召回廉价——事件触发天然满分直通);级二主…

改判 → 留痕:落差事实(三类只有一类以 core 启发式落地、另两类由模型工具承担)不争。但作废的理由踩了本轮要查的两种失效模式:把级一「零 LLM 高召回筛候选」读成「用规则做判断」,进而把 ADR 自己的下半段(主模型轮内决定)当成对上半段的替代;并且忽略了周期路径「零 API / light context」这条把候选产出钉在级一的成本理由。裁决自己开的处置动作也是「追加更新节追认产出方迁移、保留一类」——那本身就是留痕形状,与「作废」这个不可逆方向的标签不符。

4. ADR-0011 更新(2026-07-08):同维度换模型的增量重嵌入

断言:每条记录旁存 embed_model,按上限滚动重嵌入,服务不停机

原裁决 作废 不成立(复核:部分成立)。原因:命中失效模式 A:机制的性质被读成了另一种。原文给出的动机是两条并列,其中括号里那条是成本平滑——「按表设定每次运行的处理上限(避免一次性 re-embed 冲垮 embedding 调用预算)」——「服务不停机」只是并列的另一半收益。

关键原文:【adr/0011-technology-selection.md:116-121】「参考第三方项目 kimi-core(AGPL-3.0-or-later,仅借鉴方案非代码)的 embedding-sweep:本 ADR“换模型=全量 re-index 迁移”这条硬规则,补一个子场景——同维度换模型(如同厂商发布新版 embedding 模型但维度不变)不必触发全量迁移。做法:每条记录旁存一个 embed_model 字段,WHERE embed_model != 当前 config模型 筛出过期记录,按表设定每次运行的处理上限(避免一次性 re-embed 冲垮 embedding 调用预算)持续滚动重嵌入,服务不停机。仅适用于同维度场景——换维度(如从 1536 维换到不同维度的模型)collection 结构本身要变,仍必须走全量 re-index 迁移,这条不受本次更新影响。…

改判 → 留痕:YAGNI 的事实底座没错(零部署、机制未建、同维度换模型这件事没发生),而且有一条裁决没提但确实支持它的证据:这个子场景从未传播出 ADR-0011——CONTEXT.md:381-382、design.md:552-553、ADR-0009:40 至今都只写不带子场景的硬规则。但作废的理由踩了两种失效模式各一次:把成本平滑机制读成可用性/停机故事(丢掉「避免一次性 re-embed 冲垮 embedding 调用预算」这半个动机),以及把原文已挡过的「全量 re-index 一次性做完」当作自己的结论——而 ADR-0010 的 embedding 日预算+熔断+「熔断时降级不报错」已落地,正好让这个替代方案有真实代价。再加上代价清单虚高(迁移脚本与零部署前提矛盾、上限旋钮属自家最廉价的静态 config 一档),以及 embed_model 字段的不对称性(不从第一天存,将来就无法筛出过期记录,只能被迫全量),按「作废从严」建议改判留痕:记录未实现 + 未传播到 CONTEXT.md/design.md,同维度增量重嵌入是否正式退场,需要连带 ADR-0010 embedding 池熔断语义一起由人类拍板。

5. ADR-0003 回复协议与渲染归属 —「决策」节(并被 2026-07-04 更新节重申)

断言:host 注册文本格式化器(mai~ 口癖、【】/()表达语义)

原裁决 作废 不成立(复核:不成立)。原因:失效模式 A 命中。裁决写「ADR 举的 mai→mai1 那个例子本身是 TTS 发音 override,ADR-0011 已经明确划归 host、不进通用 port」——但 ADR-0011:56-57 同一句的括号明写实现路径是「(persona 侧预处理文本或用引擎特性)」,而「persona 侧注册的文本预处理」正是被作废的那个格式化器(ADR-0003:12 明写格式化器「经 persona/资源 port」注册)。

关键原文:1) adr/0003-reply-protocol-ownership.md:12-13:「host 注册风味经 persona/资源 port):具体标签(sticker_dlx/at…)及其 parser/renderer、文本格式化器(mai~ 口癖、【】/()表达语义)、贴纸/表情目录、TTS。」
2) adr/0003-reply-protocol-ownership.md:35(2026-07-04 更新):「host 仍注册风味(inline 标签 renderer、格式化器、资源目录),core 仍拥机制(inline 解析、节奏),归属原则不变。」
3) adr/0011-technology-selection.md:56-57:「发音/口癖 override(mai→mai1滴蜡熊→迪拉熊)全归 host(**persona 侧预处理文本…

改判 → 留痕:作废的两根支柱都不成立:tag_renderers 由 #28 钉死为 @ 前缀家族、明确排除括号语法,且引入它的 CONTEXT 原句仍把「格式化器」与它并列;speech_patterns 与格式化器在 design.md 同一个 Persona 返回值里共存,不能算取代它的新机制。更关键的是裁决援引 ADR-0011「不进通用 port」时丢掉了同一句里许可的「persona 侧预处理文本」——那正是被作废的东西。加上「【】/()表达语义」这一半完全无人接手,而 ADR-0003 在 2026-07-04 明文「归属原则不变」、CONTEXT.md:23 到 2026-07-28 仍在声明「格式化器注册」。


附录 B-3 与附录 C 见本票评论

  • 附录 B-3:#96 原附录 B 的 21 条留痕(裁决未变、原样沿用)→ 见评论 1
  • 附录 C:改判「待人类拍板」的 5 条(本票不要动,属第四批)→ 见评论 2

(正文有命令行长度上限,长清单只能走评论;两条评论都是本票的一部分,不是补充讨论。)

**取代 #96**(已作废关闭)。#96 的附录 A(10 条作废)经两轮纠正后只剩 **1 条**——它的裁决层从未被复核过,而复核跑完发现**8 条作废裁决全部未站住**。本票是修正后的版本,请以本票为准,#96 正文与评论只作认知轨迹留档。 来源:2026-07-29 全 ADR 查漏(31 份 ADR + CONTEXT.md + design.md 对照 `origin/main`)+ 同日对 15 条高风险裁决的对抗性复核。**纯文档、零代码改动**,全部落在 `docs` 分支。 ## 为什么 #96 被作废 查漏的流水线是 `扫描 → 对抗复核 → 裁决`。**对抗复核只覆盖了「这条落差是不是真的」(事实层),而错误全部发生在「该怎么处理它」(裁决层)**——复核跑的时候裁决还不存在,结构上不可能复核裁决。 事后补跑的裁决复核结果: | 原裁决类别 | 送审 | 站住 | 未站住 | |---|---|---|---| | **作废** | 8 | **0** | **8** | | 待人类拍板 | 7 | 4 | 3(方向不变,理由要修) | **作废这个类别 100% 失败**,原因是结构性的:「作废」要断言"这条设计不该继续有效",而这必须先正确理解这条设计**是什么**——恰恰是误读最容易命中的地方。「待拍板」只说"该由人来定",几乎不会错。 **查漏系统性地过度倾向撤销设计**:把"还没建"和"该由人定"都读成了"当初就是个坏主意"。 ### 两种反复出现的误读(实现本票时也要自己防着) **(A) 机制归属被读错。** 最常见的是把「注入侧/声明性/被动」读成「触发侧/决策式/主动」。抓手是原文里的**否定式措辞**——「不驱动数值方程」「不新增出口」「不抬优先度」「零 LLM」「不新开 port」「core 不自算」——**这类句子就是归属声明,也最容易被跳过**。 **(B) 声称的前置条件里有环节是原文自己已经答过的。** 典型是「需要 A+B+C+D,无一存在」,而原文早已指定责任方(「由 host 提供」「不新开 port」)。**看到这种论证就逐环回原文搜一遍。** ## 任务一:撤销(2026-08-17 评估侧裁决,见本票评论) **原「1 条判为作废」不再是本票的任务。** 核实发现附录 A#1 与附录 C#5(=#108 第 8 条)是原始 77 条 查漏把同一条发现(ADR-0009 归档拆分)计成了两个独立条目、各自独立复核、互不知情地得出相反结论—— 附录 C#5/#108-8 的「待人类拍板」站得住,附录 A#1 的「作废」不成立(把 ADR-0009 的「checkpoint archive」误认成了 LangGraph 的 checkpointer,具体见评论)。附录 A 保留在票面只作认知轨迹留档, **不追加作废更新节,不执行**。#108 第 8 条已经完整承接这条发现,不需要另开票。 ## 任务二:27 条判为「留痕」 = #96 原附录 B 的 21 条 + 日期临近 2 条(#96 第一条评论已纠正)+ 本轮从作废改判的 5 条。 **留痕不是"标个待办",是"如实标注尚未实现、且不许写错理由"。** 按 ADR-0010 issue #83 节既定:**写清「当下未实现」比写一个听起来合理但错误的理由重要**。本轮 5 条改判项的正确理由已逐条给在附录 B-2,**不要沿用原查漏的作废理由**——那些理由正是被复核推翻的东西。 ## 任务三:结掉 design.md 的七层线头 `docs/design.md`「作废/取代」节那句「旧 ADR-0003……**分层思路留作 core 内部结构参考**」从未执行。2026-07-29 结构实测已给出结论,**结掉它、不执行**,并补实测依据: - 55 个模块**没有自然簇**(摘掉七个最大模块后,剩 49 个里仍有 33 个粘成一坨); - **照架构图七层装桶会整个塌成一个 SCC**,最小反向边集 26/170 跨层边;加一个 `shared` 契约桶才降到 5 条; - 架构图缺 1~2 个桶:一个 `shared`/contracts,以及 `judge_persona_drift`(4 个调用方跨 Memory/Agency)、`recency_decay`(3 个跨 Memory/Presence)这类**横切原语**的归属; - Routing 层已被 ADR-0028/ADR-0020 搁置,今天无对应代码。 **层名保留为叙述词汇**(CONTEXT.md 就是按这些分节的),只是不再作为分包依据。 ## 硬性格式要求(本仓惯例) **一律只追加 `## 更新(2026-07-xx,issue #N)` 节,绝不就地改写既有「决策」/「拒绝了」节。** 三条实证先例:ADR-0004 的「决策」节至今保留已被 ADR-0030 宣布移除的 `poke` 位;ADR-0010 用「上一条更新(issue #41)记的『尚未实现』已过时」推翻前文而不删前文;ADR-0001 的 #80 更新同形。 CONTEXT.md / design.md 不适用更新节体例,就地修订即可,但改动要能被 `git log` 追溯到本票。 ## Acceptance criteria - [x] ~~附录 A 那 1 条追加作废更新节~~——2026-08-17 撤销,不是本票任务,见上方任务一与本票评论。 - [ ] 27 条留痕各有「尚未实现」标注(原 28 条中,附录 B-3 第 2 条已被 issue #136 实现,不再写入留痕, 见本票评论);其中附录 B-2 那 5 条**必须用更正后的理由**。 - [ ] design.md 七层线头结掉,附实测依据。 - [ ] 所有改动只在 `docs` 分支,**按既定规则永不推送**。 - [ ] 不改任何代码、不碰 `src/`、不碰 `tests/`。 - [ ] **自检一遍**:你写的每条「未实现原因」,回原文确认那个原因不是原文已经答过的(失效模式 B)。这条是本票最容易重犯的错。 ## Not in scope - **5 条改判为「待人类拍板」的**(含原本就是待拍板的 3 条 + 从作废改判的 2 条)→ 属第四批,先 grill 再拆 PRD。清单见附录 C,**本票不要动它们**。 - 4 条裁决成立的待拍板项(ADR-0013 单一 DB 事务 / ADR-0008 注入分档 / ADR-0014 环境遥测 / CONTEXT.md 技能三级披露)→ 同属第四批。 - **39 条判为「实现」的落差** → 第四批。注意:**那 39 条的裁决层同样没被复核过**,第四批开工前应先补一轮裁决复核(本轮 8/8 的失败率说明这不是多余的)。 - 本票不做任何代码实现,即使某条留痕项"顺手就能实现"。 --- # 附录 A:1 条「作废」(理由已更正)——**2026-08-17 已撤销,只作认知轨迹留档** > **不要按下面的内容执行。** 与附录 C#5(=#108 第 8 条)是同一条发现的重复计数,评估侧裁决附录 C#5 > 站得住、这条不成立(详见本票评论)。保留在这里的原因同 #96 处理先例——留作认知轨迹,说明这个 > 结论是怎么走到又怎么被推翻的,不代表它现在有效。 ### 1. ADR-0009 记忆工程 —「决策」节 **断言**:episodic 与 checkpoint archive 拆两 collection;archive blob 分条化 **原裁决 作废 不成立**(复核:部分成立)。原因:未命中失效模式 A 的主型:把「checkpoint archive」归给 LangGraph checkpointer 有原文直接支持——ADR-0013:5 逐字写「ADR-0002 弃 LangGraph,也就弃了它的 checkpointer」,ADR-0002:7-8 又把「归档 blob」这个旧痛点点名为「迁就框架 `@after_agent` 钩子的产物」。裁决没有把注入侧读成决策侧、也没有把被动机制读成主动机制。 **关键原文**:【adr/0009-memory-engineering.md:15】「- **归档拆分**:episodic 与 checkpoint archive **拆两 collection**;archive **blob 分条化**(治整块召回)。」 【adr/0009-memory-engineering.md:5-7】「旧实现缺陷:归档器把~60 条原文拼成单 blob 整块召回、episodic 与 archive 混同一 collection」 【adr/0013-crash-recovery-and-side-effect-contract.md:5】「ADR-0002 弃 LangGraph,也就弃了它的 checkpointer。」 【adr/0002-runtime-substrate.md:7-8】「研究亦发现旧痛点(delta 全量写、归档 blob)部分是迁就框架 `@after_agent` 钩子的产物。」… **改判 → 作废**:作废方向站得住,且是本批证据最硬的一条:载体消失有 ADR-0013:5 逐字支持,blob 痛点被 ADR-0002:7-8 自己归因到旧框架钩子,压缩产物在 CONTEXT.md:384 里明写是「画像/事件更新」而非整块归档。两处需要收紧:(1)「这个病在本仓从未存在过」过度绝对——ADR-0009 自己 2026-07-08 更新节把「整批 delta 原样转存为低置信度 tentative 记录(不提炼,只保留原文)」定为降级路径,那是本仓按设计唯一会产生整块记录的地方,作废说明里应把这条留成显式注记(降级路径若要落地,分条仍是应遵守的形状),而不是宣布病从未存在;(2) 同步清单要补 CONTEXT.md:374-375 的三因子召回词条,以及 ADR-0009:45/ADR-0015:39 两处「画像/事件记忆/归档」枚举——它们都是弃 LangGraph 之后写的,不补就等于作废没落地。 --- # 附录 B-1:日期临近 2 条(#96 第一条评论已纠正,措辞照此) 这两条是同一件事的两侧(ADR-0015 决策节 / CONTEXT.md「触发注入」条 + design.md Knowledge bullet),原判作废,**已改判留痕**。 **为什么不是作废**:CONTEXT.md 原文明写它「装配 context 时检查……即触发注入,**同为声明性文本、不驱动情感态数值方程**(呼应 ADR-0018「距上次交互」声明性-only 的既定边界哲学)」,且「**日期数据来自 host(非 core 自算),不新开 port,只加一种触发条件到本引擎**」。即:它是**注入侧**机制、效果类比召回、**主动开口优先度不变**,`date` 由 host 提供。原裁决把「注入一条声明性事实」读成「触发一次主动开口」,据此凭空造出「与主动开口门控的交互」这一环;又把原文已指定责任方的「谁来填 date」当成缺失前置。四环实际只有两环。 **留痕措辞**: - **ADR-0015**:追加更新节——「日期临近触发**尚未实现**(截至 2026-07-29)。设计归属不变:它是**触发注入区块的第二种触发条件**,产出声明性文本、不驱动情感态方程、**不抬主动开口优先度**;`date` 由 host 提供,core 不自算。未实现的现状原因是目前没有 host 提供 `date`。」 - **CONTEXT.md**:改成「触发模式设计为两种:① 关键词命中(已实现);② 日期临近(**尚未实现**,见 ADR-0015 更新节)」。**注意别把「现有」原样留着**——原文「触发模式**现有**两种」用"现有"把未实现的写成既成事实,这是必须修的。 - **design.md**:Knowledge bullet 同步同一口径。 --- # 附录 B-2:从「作废」改判「留痕」的 5 条(理由已更正,不要沿用原措辞) ### 1. ADR-0010 更新(2026-07-08 第三方项目对照 grill)「系统自检信号层」条 **断言**:新增不自动修复、只产信号的健康度探针(importance 池积压、drive/关系轴零支撑、tentative 堆积比例) **原裁决 作废 不成立**(复核:不成立)。原因:读错了,两处。第一,原文把这一层的性质钉在「**跨时间**系统健康度」+「帮助**运维者**发现『该维护了』而不需要靠肉眼排查」,即一个面向部署者的长期运营遥测层;裁决改读成「针对本次查漏里已知落差的诊断工具」,于是得出「建探针去观测一个已知必然发生的病」。 **关键原文**:adr/0010-operations.md L65-69:「- **记忆/主动性自检信号层**(参考 kimi-core `curation-health`/`dim-health`,AGPL-3.0-or-later,仅借鉴设计理念非代码):新增一组**不自动修复、只产出信号**的健康度探针(如高 importance 池积压量、某个 drive/关系轴长期零支撑、tentative 桶堆积未被晋升的比例),阈值触发时写入日常摘要/供 `/diagnose` 展示。这是决策快照(单次决策可解释性)之外补的**跨时间系统健康度**信号层,帮助运维者发现"该维护了"而不需要靠肉眼排查。具体阈值留实现期按本 ADR 已定的三层分类标定。」 同文件 L186:「`/cost` 与六池归池记账已实现(预算与熔断仍属 #82)。」 同文件 L218:「六池预算与熔断已实现(`/why` 仍属 #83)。」 同文件 L78-79(本 AD… **改判 → 留痕**:「作废」是把一条已拍板的设计撤下去、方向不可逆,本条三条理由里两条依赖误读(归属从「面向运维者的跨时间遥测」被改读为「针对本次落差的诊断」;「如」引出的举例被当成穷举),第三条与同 ADR 已落地项的标准不自洽,达不到作废该有的确定性。建议改判留痕:记为「运维遥测层已拍板、尚未实现」,并把裁决里真正有价值的那半句(tentative 堆积与某轴零支撑在当下确实是别的落差的症状,应先修因)作为**实现期选哪些探针**的输入——就算用户完全认可这个意见,改动也只是删掉原文括号里的两个举例,而不是撤掉整层。若用户确实想重新讨论「要不要有健康度探针这一层」,那是待人类拍板,也不该由查漏方单边作废。 ### 2. ADR-0005「决策」节 + 「更新(2026-07-06)/ 双时间尺度」节(资源态推 energy 保留不变) **断言**:energy += … + 资源态推送 + … **原裁决 作废 不成立**(复核:不成立)。原因:读错了。裁决第三条理由把「资源态」实质等同于 core 侧的 LLM 六池预算/熔断(「把预算压力喂进人格情绪」、「熔断了所以它心情不好所以更不想说话」),但 ADR-0010 L14 有一句否定式归属声明「扣星等对『清除』收费 = host 经济 hook;**core 无经济概念**」,ADR-0001 L10-12 也把「资源、经济规则」整体划给宿主经 port 实现——按原文,资源态是 **host 侧资源/经济状态**(经济 hook 一侧),不是 core 的成本治理池。 **关键原文**:adr/0005-affective-state.md L86:「资源态推 energy 这一既有项**保留不变**(曾在本轮草稿中被无意漏抄,已订正补回)。」 同文件 L71(双时间尺度快层方程):「`energy += f(互动极性) + 资源态推送 + ε·群传染速率 − k_fast·(energy − slow_energy)`」 同文件 L125-126(更晚一轮更新仍带此项):「快情感态 energy 方程新增一项**昼夜节律 nudge**:`energy += f(互动极性) + 资源态推送 + ε·群传染速率 + 昼夜节律nudge(time) − k_fast·(energy − slow_energy)`。」 同文件 L5-6(来源):「dxkuma ADR-0006 定情感态为 per-chat valence/energy 标量、**纯机械更新**(互动 n… **改判 → 留痕**:「作废」按更严尺度过不了:三条理由里第一条把 ADR-0001/ADR-0010 已指定的责任方(host,经声明为可选的经济 hook port)当成设计缺口,第三条把资源态误挂到 core 六池预算/熔断上(撞 ADR-0010「core 无经济概念」),第二条把原文「保留不变…无意漏抄,已订正补回」这句肯定性保留决定反读成惯性残留(且忽略它在 L125 更晚一轮更新与 CONTEXT.md L270 里都还在)。建议改判留痕:记为「资源态推 energy 是已拍板的既有项,数据源是 ADR-0001 声明为**可选**的 host 经济 hook port,port 未建期间该项恒为零输入」,同时把真实的文档缺口一并留痕——arise 文档集从未定义「资源态」是什么量(来源在 dxkuma 仓的 ADR-0006),实现期需要一句口径。若用户确实想重新审「host 侧资源状态该不该进人格情绪方程」,那是待人类拍板的设计问题,不该由查漏方以「core 里没有」为由单边撤下。 ### 3. ADR-0006「决策」节「自发目标并入单一出口」条 **断言**:core 本地启发式触发候选(熟人久未联系/话题新进展/冒出不懂的梗) **原裁决 作废 不成立**(复核:部分成立)。原因:命中失效模式 A(与标定样例同型:把「召回侧/筛候选」读成「判断侧/裁决」)。 1. 原文是**两段式**:「本地启发式**触发候选**」→「主模型**轮内决定**是否成 pending_intent」。 **关键原文**:【adr/0006-agency-and-drive.md:14-16】「- **自发目标并入单一出口**:允许 core 本地启发式触发候选(熟人久未联系/话题新进展/冒出不懂的梗),主模型**轮内**决定是否成 **context 模式 pending_intent**(不新起循环),**走 dxkuma ADR-0007 既有 inject_intents + recall 单一出口消费,不新增独立主动出口**。」 【adr/0006-agency-and-drive.md:11-13】「- **Drive Tick**:跑在 **isolated/light context**(只注 persona + 情感态 + 未决意图 + 近期摘要,不背全量历史);**无 due 任务整轮跳过、零 API**」 【CONTEXT.md:240-241】「级一纯本地启发式打分(零 LLM,高召回廉价——事件触发天然满分直通);级二主… **改判 → 留痕**:落差事实(三类只有一类以 core 启发式落地、另两类由模型工具承担)不争。但作废的**理由**踩了本轮要查的两种失效模式:把级一「零 LLM 高召回筛候选」读成「用规则做判断」,进而把 ADR 自己的下半段(主模型轮内决定)当成对上半段的替代;并且忽略了周期路径「零 API / light context」这条把候选产出钉在级一的成本理由。裁决自己开的处置动作也是「追加更新节追认产出方迁移、保留一类」——那本身就是留痕形状,与「作废」这个不可逆方向的标签不符。 ### 4. ADR-0011 更新(2026-07-08):同维度换模型的增量重嵌入 **断言**:每条记录旁存 embed_model,按上限滚动重嵌入,服务不停机 **原裁决 作废 不成立**(复核:部分成立)。原因:命中失效模式 A:**机制的性质被读成了另一种**。原文给出的动机是两条并列,其中括号里那条是**成本平滑**——「按表设定每次运行的处理上限(**避免一次性 re-embed 冲垮 embedding 调用预算**)」——「服务不停机」只是并列的另一半收益。 **关键原文**:【adr/0011-technology-selection.md:116-121】「参考第三方项目 kimi-core(AGPL-3.0-or-later,仅借鉴方案非代码)的 `embedding-sweep`:本 ADR“换模型=全量 re-index 迁移”这条硬规则,补一个**子场景**——**同维度换模型**(如同厂商发布新版 embedding 模型但维度不变)不必触发全量迁移。做法:每条记录旁存一个 `embed_model` 字段,`WHERE embed_model != 当前 config模型` 筛出过期记录,按表设定每次运行的处理上限(**避免一次性 re-embed 冲垮 embedding 调用预算**)持续滚动重嵌入,服务不停机。**仅适用于同维度场景**——换维度(如从 1536 维换到不同维度的模型)collection 结构本身要变,仍必须走全量 re-index 迁移,这条不受本次更新影响。… **改判 → 留痕**:YAGNI 的事实底座没错(零部署、机制未建、同维度换模型这件事没发生),而且有一条裁决没提但确实支持它的证据:这个子场景**从未传播出 ADR-0011**——CONTEXT.md:381-382、design.md:552-553、ADR-0009:40 至今都只写不带子场景的硬规则。但作废的理由踩了两种失效模式各一次:把成本平滑机制读成可用性/停机故事(丢掉「避免一次性 re-embed 冲垮 embedding 调用预算」这半个动机),以及把原文已挡过的「全量 re-index 一次性做完」当作自己的结论——而 ADR-0010 的 embedding 日预算+熔断+「熔断时降级不报错」已落地,正好让这个替代方案有真实代价。再加上代价清单虚高(迁移脚本与零部署前提矛盾、上限旋钮属自家最廉价的静态 config 一档),以及 `embed_model` 字段的不对称性(不从第一天存,将来就无法筛出过期记录,只能被迫全量),按「作废从严」建议改判留痕:记录未实现 + 未传播到 CONTEXT.md/design.md,同维度增量重嵌入是否正式退场,需要连带 ADR-0010 embedding 池熔断语义一起由人类拍板。 ### 5. ADR-0003 回复协议与渲染归属 —「决策」节(并被 2026-07-04 更新节重申) **断言**:host 注册文本格式化器(mai~ 口癖、【】/()表达语义) **原裁决 作废 不成立**(复核:不成立)。原因:失效模式 A 命中。裁决写「ADR 举的 mai→mai1 那个例子本身是 TTS 发音 override,ADR-0011 已经明确划归 host、不进通用 port」——但 ADR-0011:56-57 同一句的括号明写实现路径是「(**persona 侧预处理文本**或用引擎特性)」,而「persona 侧注册的文本预处理」正是被作废的那个格式化器(ADR-0003:12 明写格式化器「经 persona/资源 port」注册)。 **关键原文**:1) adr/0003-reply-protocol-ownership.md:12-13:「**host 注册风味**(**经 persona/资源 port**):具体标签(`sticker_dlx`/`at`…)及其 parser/renderer、**文本格式化器(mai~ 口癖、【】/()表达语义)**、贴纸/表情目录、TTS。」 2) adr/0003-reply-protocol-ownership.md:35(2026-07-04 更新):「host 仍注册风味(inline 标签 renderer、**格式化器**、资源目录),core 仍拥机制(inline 解析、节奏),**归属原则不变**。」 3) adr/0011-technology-selection.md:56-57:「**发音/口癖 override(`mai→mai1`、`滴蜡熊→迪拉熊`)全归 host**(**persona 侧预处理文本… **改判 → 留痕**:作废的两根支柱都不成立:tag_renderers 由 #28 钉死为 `@` 前缀家族、明确排除括号语法,且引入它的 CONTEXT 原句仍把「格式化器」与它并列;speech_patterns 与格式化器在 design.md 同一个 Persona 返回值里共存,不能算取代它的新机制。更关键的是裁决援引 ADR-0011「不进通用 port」时丢掉了同一句里许可的「persona 侧预处理文本」——那正是被作废的东西。加上「【】/()表达语义」这一半完全无人接手,而 ADR-0003 在 2026-07-04 明文「归属原则不变」、CONTEXT.md:23 到 2026-07-28 仍在声明「格式化器注册」。 --- # 附录 B-3 与附录 C 见本票评论 - **附录 B-3**:#96 原附录 B 的 21 条留痕(裁决未变、原样沿用)→ 见评论 1 - **附录 C**:改判「待人类拍板」的 5 条(**本票不要动**,属第四批)→ 见评论 2 (正文有命令行长度上限,长清单只能走评论;两条评论都是本票的一部分,不是补充讨论。)
Author
Member

附录 B-3:#96 原附录 B 的 21 条留痕(裁决未变,原样沿用)

这 21 条本轮未送裁决复核——留痕类风险最低(只是标注状态,很难错到有害)。但实现时仍请走正文那条自检 AC:你写的每条「未实现原因」,回原文确认那个原因不是原文已经答过的

1. ADR-0010 更新(2026-07-08 第三方项目对照 grill)「Prompt Cache 命中率遥测」条

  • 断言: 归一化各 provider usage 为 {input_tokens, cached_tokens, savings_ratio},统计真实缓存命中率
  • 理由: 不作废:它验证的是「冻结快照+可变尾部」这个约束了整个 prompt 装配架构的设计假设,是高杠杆信息,llm.py:87 的 _usage_of 多读一层 prompt_tokens_details.cached_tokens 也就十几行。但它需要真实流量才有意义,而现在零部署——现在写等于写一个永远输出 0 的指标。留痕,在 ADR 里标「待首个 host 接入产生真实流量后补」,同时把它挂到 host 接入 checklist 上,别让它跟本批其它条目一样沉底。

2. ADR-0005「更新(2026-07-10 第三方项目对照 grill 第二轮)」节第三条

  • 断言: 新增输入源:未获回应升级(重要性门槛 + 阶梯式时长门槛影响 valence/energy)
  • 理由: 不实现也不作废。不实现的理由:它是叠在一个恒 0 的轴上的精化项,在第 9 条落地前做没有任何可观察效果;且现有 cold→fell-flat→dominance 通路已经覆盖了「发出去没人理」这个现象的主要行为面,再加一套重要性门槛+阶梯时长是三方项目对照带来的复杂度,不是真实需求。不作废的理由:ADR 给了具体来源(Drivesoid checkUnansweredMilestones)与明确的靶子区分(valence/energy 而非 dominance),且这个仓的用户确实为拟人感付复杂度,B 批落地后它会重新变成一个合理候选。留痕:在 ADR-0005 该条下标「尚未实现,依赖 valence 输入源先落地」。

3. ADR-0006「决策」节「Drive Tick」条,同 CONTEXT.md:223 与 design.md:407

  • 断言: 决定沉默输出静默令牌
  • 理由: 能力已由 ADR-0010 的决策快照换名承接并落地(GateVerdict 的 silent_level1/silent_budget + proceed&sends=0 两态,explain.py 还翻成了人话),「静默令牌」是旧词,三处文档按词检索会扑空。文档动作:CONTEXT.md:223 与 design.md:42/407 改写为决策快照措辞,或在术语表加一条别名指向。顺带修一处代码文档不实:gating.py:144 声称调用方会补 silent_level2/silent_silence_window,但两者全仓零命中、Literal 也只有三个取值,模型自主沉默实际靠 proceed+sends=0 表达——这句注释会让下一个人去找不存在的取值。

4. ADR-0009 —「更新(2026-07-10 MemPalace 对照 grill):occurred_at」节

  • 断言: events 新增可选 occurred_at(缺省=created_at),recency_decay 优先读它
  • 理由: 字段本身很便宜,但它与相对时间解析器(23)是一个功能的两半——只加字段没有产出方等于加一列恒为默认值的死列,本仓已经有太多这种东西了(affinity/tension/DriftVerdict.reason)。而 ADR 举的唯一动机场景(跨平台拉取写事件记忆)压根不存在:cross_platform_pull 只产 ProfileCandidate,一条事件都不写。所以当下无危害面。留痕:在 ADR-0009 与 design.md:324 标「未实现,且其动机场景尚未存在」,等首个 host 报出「机器人把时间搞错了」再一起做两半。与 65 同一件事。

5. ADR-0009 —「更新(2026-07-11 第三轮)」节 ADOPTED 第 2 条

  • 断言: Delta 压缩新增确定性正则+日期运算后处理,解析「上周三」写入 occurred_at
  • 理由: 与 20 是同一功能的两半,判定必须一致,否则会出现「加了字段没人写」或「写了没地方存」。留痕而非实现的理由:中文相对时间表达式解析是一个有真实边界面的子系统(跨年、农历、「下周三」相对于说话日还是相对于事件日、时区),ADR 说「零 token 比蹭 LLM 更省」在成本上对,但在维护成本上把账算漏了;且需求来自第三方项目对照,不是任何真实场景反馈。留痕位置:ADR-0009 该条与 design.md:324-325 一并标「未实现,与 occurred_at 字段同批待定」。

6. ADR-0009 —「更新(2026-07-08):晋升通道 + 检索评测 + 压缩容错」节(检索评测)

  • 断言: 建立 hit@k / MRR / 负控用例集,按关键词谓词标注,每次回归写趋势
  • 理由: 前置条件(排序逻辑单一纯函数入口 score_events)确实已满足,断言已到期,所以不能当没这回事。但它是为「调权重」服务的基础设施,而权重标定按 ADR-0011 明确推迟到真实 QQ 数据——评测集没有语料就只能拿人造语料自证,价值接近零,还要养一套趋势产物。1436 条测试已覆盖纯函数正确性,缺的只是排序质量回归网,而排序权重现在是静态 config、不会自己漂。留痕:标「前置已满足、待真实语料后建」,并挂到 host 接入 checklist(同 5)。

7. ADR-0020 —「备注(实现期跟进)」节第 2 条

  • 断言: delegate 池预算推迟标定;六池成本治理本次范围排除,仅 tracing 层归因
  • 理由: 纯文档回填。破折号后的范围描述已被 issue #81/#82 推翻(delegate 池有真计量包装、真熔断闸、真落库、真 e2e 测试),但破折号前的「具体预算数字推迟标定」至今仍成立(arise_pool_budgets 默认空表,core 不内置数字)——所以是改写不是删除,别把整条划掉。事实在 ADR-0010 有完整记录,误导只发生在单读 ADR-0020 时,价值确实低。与 70 同一件事,并入文档回填批。

8. ADR-0012「决策 → 6. 治理」节

  • 断言: 每次 self_recall/edit 记决策快照(接 /why)
  • 理由: 这条是 ADR-0012 治理四件套里唯一可以缓的:它是可观测性而非护栏,缺了不产生错误行为,只是 /why 答不出「它刚才为什么把那条撤了」。而 /why 刚在 issue #83 落地、还没有任何真实用户问过这个问题。改动面也不小(现有 DecisionSnapshot 是按「一轮触发」建模的,撤/改是轮内动作,塞进去要动数据形状或另开一张表)。留痕:在 ADR-0012 §6 标「未实现」,别让后来者按「/why 已覆盖自撤回」去援引。若 35/36/37 那批做完仍有观测需求,再单独评估。

9. ADR-0014 环境感知「决策」节 tier-2 条目(并被 2026-07-09 更新节复述)

  • 断言: tier-2 显著者作群 tick 的 event-driven 触发源(事件入 drive-tick 的 light ctx)
  • 理由: 代码是对的(ADR-0029 明确改成事件触发用全量上下文),落差纯在文档,且根因是两份 ADR 互不指向:ADR-0014 全文零处提及 0029,ADR-0029 的取代关系节只列了 0017/0006/0007/0023、漏了 0014。文档动作:给 ADR-0014 补一个更新节指向 ADR-0029,并在 ADR-0029 的取代关系节补上 0014。这条本身价值低,但它暴露的机制问题(取代关系是单向登记、被取代方不一定知道)值得在 overall 里单说。

10. ADR-0004 —「决策」节(并被 2026-07-04 更新节以 probe() 复述)

  • 断言: host 经 probe() → {typing, poke, recall, at_all, sticker, voice, ...} 声明能力
  • 理由: 实质已完整落地(host 声明 + core 拥降级,降级阶梯八处可逐条指认),CONTEXT.md:133 的术语定义本身用的就是「声明」,ADR-0020 更晚的更新节还把 capabilities 当静态值正面引用。残留问题只是 probe() 这个可调用方法的措辞至今出现在五处(ADR-0004:11/34、ADR-0012:59、ADR-0030:36、design.md:229、CONTEXT.md:350),而 capabilities.py:6 反过来明写「不做运行时探测」——读者会去找一个不存在的 host 侧方法。文档回填批处理,改成「host 在加载时声明的静态能力集」。

11. ADR-0025 决策节第 1 条群聊分支

  • 断言: 群聊复用 drive-tick,成为下一次 drive-tick 评估的事件驱动触发源,不新开输出出口
  • 理由: 采纳复核方的降级:「不新开输出出口」按本仓自己的先例(ADR-0014 tier-2 落地成 run_environment_signal,同样是 RuntimeLoop 新入口、同样独立挂钩点)不成立,「输出出口」在本仓语境里指绕过门控的发送通道,追问没绕。「复用 drive-tick」这半事实不符(群聊压根不在扫描范围内),但 ADR-0010 的两个更新节已经把正确形状写清了(「私聊的即刻追问复用扫描器」+ 即刻追问是独立 TriggerPath)。所以只需回填 ADR-0025 决策节措辞。真危害在第 55 条,不在这里重复计。

12. CONTEXT.md「Outbox」条

  • 断言: Outbox:持久化的待处理累积消息队列,进程重启不丢
  • 理由: 纯文档,但我把紧迫度调到中:这不是「说了没做」,是说反了——recover() 在启动时无条件 delete 全表、ADR-0013 决策节第一条就是「崩溃后丢弃在途请求,不重放」,而 CONTEXT.md 里「崩溃/重启/在途」的全文唯一命中就是这句写反的话。一个照着术语表实现或复核的人会得出相反的正确性判断。更值得记的是 ADR-0013 的取代关系节自己写了「明确 CONTEXT 中 Outbox/句柄/Sent Log 的崩溃语义」——它点名要回填 CONTEXT,回填从没发生。文档回填批里优先级最高的一条。

13. design.md「occurred_at 相对时间解析」bullet + CONTEXT.md「事件记忆」条 + ADR-0009 两个更新节

  • 断言: 确定性正则+日期运算解析相对时间写入 occurred_at;recency_decay 优先读它
  • 理由: 与 20+23 同一件事(字段与解析器两半必须同判),文档三处一并标注「未实现」。这条是全表证据最干净的一条(occurred_at 在 src+tests 零字符),所以留痕的措辞可以最直白:「本条自 2026-07-10/07-11 采纳以来未实现,且其原始动机场景(跨平台拉取写事件记忆)尚未存在」。

14. CONTEXT.md「Port」条(共八类)+ design.md 架构 mermaid(resource/econ 方框)+ Port 契约节两条 bullet

  • 断言: 资源 port(贴纸/TTS 目录)+ 经济 hook port(可选)
  • 理由: 拆两半:经济 hook 那半随第 49 条作废(mermaid 删 econ 方框、八类改七类);资源 port 那半等 48/28 的人类结论再动,在此之前应在 CONTEXT.md 与 design.md 明确标「未实现、待定」。不能现在就照现状改写成「core 无资源 port」——那会把一个待决问题写成既定事实,正是本次查漏要治的病。文档回填批里唯一需要等前置结论的一条。

15. design.md「冷启动与渐进解锁(ADR-0007)」节

  • 断言: 解锁顺序:反应式 → 主动开口 → 三因子召回 → 关系网注入 → 自发目标
  • 理由: 代码与 ADR/CONTEXT 都已按 ADR-0029 的新四级顺序走,只有 design.md 停在旧五级。但根因比这一处大得多,紧迫度按根因给:design.md 全文一次都没提到 ADR-0029、也一次都没提到 ADR-0030——两份最晚、推翻面最大的 ADR 完全没有传播到 design.md,直接造成本表 68/75/77 三处误导。文档回填批里应该把「扫一遍 design.md 对 0029/0030 的全部影响面」当成一个整体动作,而不是逐条改这三处。

16. CONTEXT.md「回调(Callback)」条 + design.md 能动性层「深挖任务委托」条

  • 断言: register_callback 本身仍未实现,只是地基已通用
  • 理由: 反向陈旧:实现跑在文档前面(register_callback.py 存在、两个工具已注册进 schema 并接线、模块文档自称是 Callback 抽象的第二个真实生产者)。危害很低但很典型——三处文档(CONTEXT.md:171/:496、design.md:433)都在主动声明一个已经存在的东西「尚未实现」,说明留痕本身也会过期。文档回填批里一并改,顺手在 overall 里当作「留痕不是免维护」的证据。

17. CONTEXT.md「深挖任务委托(Deep Task Delegation)」条

  • 断言: 独立 delegate 成本池;但六池预算/熔断全仓尚未实现,仅 tracing 层标注
  • 理由: 与第 26 条同源,且是局部陈旧——同一份 CONTEXT.md 的成本治理条目(:532)已经是新表述,只有深挖任务委托条里那个括号停在旧世界。改一个括号即可。这条的价值在于它示范了一种最难发现的陈旧:不是整条没更新,是一条更新了、另一条复述它的没更新,全文检索同一个概念会得到互相矛盾的两句话。

18. design.md 架构 mermaid 的 routing 方框 + 决策基线「低争议、直接采纳」列表「必修 bug 批」

  • 断言: Routing:模型池/按模型熔断/限流/per-能力预算
  • 理由: 三件里没有一件是真落差:模型池有窄实现(arise_fallback_multimodal_models 按 kind 排序兜底,ADR-0028 自己把它归到 Routing 层);按模型熔断是被推翻的(cost.py 顶部「定价表按池声明、不按模型——这不是取舍,是架构逼出来的」,ADR-0010 决策节即按能力分池);限流是被硬预算+熔断取代的(ADR-0010 背景节把「仅软限流不硬停」列为旧系统病症)。真问题是 design.md 内部自相矛盾(第 36 行 per-能力预算 vs 第 44 行按模型熔断),且第 44 行那句是从 2026-07-02 的旧 dxkuma 缺口分析原样搬来的遗留债目。文档回填批:删掉「熔断按模型」「限流」,mermaid 方框改成「模型池/per-能力预算」。

19. docs/design.md:451 冷启动节 + :376 真人感层 + :87 同一措辞

  • 断言: 已读延迟窗 scope_ceiling 收紧 + 选择性回应禁止归零
  • 理由: 取代链完整(ADR-0017 与 ADR-0007 两个更新节都写了 floor=1 适用范围从「选择性回应整批归零」扩到「共享预算本身」,CONTEXT.md 两处已同步),只有 design.md 三处停在旧世界。采纳复核方补的两点:落点是三处不是两处(还有 :87),且 :376 同一句里还有第二处陈旧断言「不共享沉默预算」——那条也被明确推翻了(沉默预算现覆盖全部触发源)。根因同 68:design.md 零处提及 ADR-0029。并入「扫一遍 design.md 对 0029/0030 的影响面」这个整体动作。

20. CONTEXT.md:133-134「能力探测」条 + design.md:229-230 能力 port bullet(另 ADR-0004:11、ADR-0019:12)

  • 断言: probe() → {…, at_all, …}
  • 理由: at_all 能力位是被 ADR-0003 的 issue #28 更新节显式移除的(「能力门控收敛为单一信源,不新增 CapabilitySet 布尔位,at_all 也一并移除」),代码是正确的一方。落差窄而真:只有 at_all 一项,落点是 CONTEXT.md:134、design.md:229、ADR-0004:11、ADR-0019:12 四处。注意 CONTEXT.md 那条不是整条没更新——它已经跟进了 ADR-0030(写了四个交互位已移除),唯独漏了更早的 ADR-0003。这个「跟进了新的、漏了旧的」模式值得记:文档回填时按 ADR 时间倒序追,容易漏掉早于当前注意力窗口的那次移除。

21. docs/design.md:195-197 前处理 port bullet + :229-233 能力 port bullet

  • 断言: ConversationInput.interaction 封闭形状 {kind: "poke"|"reaction", …} + 四个交互能力位
  • 理由: design.md 全文零处提及 ADR-0030、零处 interaction_renderers,四处仍完整保留 ADR-0023 的封闭设计并解释得头头是道。这条单列的价值在于纠正一个会误导排期的印象:CONTEXT.md 已经跟进了 ADR-0030(:142 写四位已移除),只看 CONTEXT 会以为「文档已改、只剩代码没跟」,实际文档也只改了一半。文档动作应与已知种子(ADR-0030 整份未落地)的实现 ticket 绑在一起——ADR-0030 落地时四处 design.md 一并改,否则又是一次「代码改了、design.md 没跟」。
# 附录 B-3:#96 原附录 B 的 21 条留痕(裁决未变,原样沿用) > 这 21 条本轮未送裁决复核——留痕类风险最低(只是标注状态,很难错到有害)。但实现时仍请走正文那条自检 AC:**你写的每条「未实现原因」,回原文确认那个原因不是原文已经答过的**。 ### 1. ADR-0010 更新(2026-07-08 第三方项目对照 grill)「Prompt Cache 命中率遥测」条 - **断言**: 归一化各 provider usage 为 {input_tokens, cached_tokens, savings_ratio},统计真实缓存命中率 - **理由**: 不作废:它验证的是「冻结快照+可变尾部」这个约束了整个 prompt 装配架构的设计假设,是高杠杆信息,llm.py:87 的 _usage_of 多读一层 prompt_tokens_details.cached_tokens 也就十几行。但它需要真实流量才有意义,而现在零部署——现在写等于写一个永远输出 0 的指标。留痕,在 ADR 里标「待首个 host 接入产生真实流量后补」,同时把它挂到 host 接入 checklist 上,别让它跟本批其它条目一样沉底。 ### 2. ADR-0005「更新(2026-07-10 第三方项目对照 grill 第二轮)」节第三条 - **断言**: 新增输入源:未获回应升级(重要性门槛 + 阶梯式时长门槛影响 valence/energy) - **理由**: 不实现也不作废。不实现的理由:它是叠在一个恒 0 的轴上的精化项,在第 9 条落地前做没有任何可观察效果;且现有 cold→fell-flat→dominance 通路已经覆盖了「发出去没人理」这个现象的主要行为面,再加一套重要性门槛+阶梯时长是三方项目对照带来的复杂度,不是真实需求。不作废的理由:ADR 给了具体来源(Drivesoid checkUnansweredMilestones)与明确的靶子区分(valence/energy 而非 dominance),且这个仓的用户确实为拟人感付复杂度,B 批落地后它会重新变成一个合理候选。留痕:在 ADR-0005 该条下标「尚未实现,依赖 valence 输入源先落地」。 ### 3. ADR-0006「决策」节「Drive Tick」条,同 CONTEXT.md:223 与 design.md:407 - **断言**: 决定沉默输出静默令牌 - **理由**: 能力已由 ADR-0010 的决策快照换名承接并落地(GateVerdict 的 silent_level1/silent_budget + proceed&sends=0 两态,explain.py 还翻成了人话),「静默令牌」是旧词,三处文档按词检索会扑空。文档动作:CONTEXT.md:223 与 design.md:42/407 改写为决策快照措辞,或在术语表加一条别名指向。顺带修一处代码文档不实:gating.py:144 声称调用方会补 silent_level2/silent_silence_window,但两者全仓零命中、Literal 也只有三个取值,模型自主沉默实际靠 proceed+sends=0 表达——这句注释会让下一个人去找不存在的取值。 ### 4. ADR-0009 —「更新(2026-07-10 MemPalace 对照 grill):occurred_at」节 - **断言**: events 新增可选 occurred_at(缺省=created_at),recency_decay 优先读它 - **理由**: 字段本身很便宜,但它与相对时间解析器(23)是一个功能的两半——只加字段没有产出方等于加一列恒为默认值的死列,本仓已经有太多这种东西了(affinity/tension/DriftVerdict.reason)。而 ADR 举的唯一动机场景(跨平台拉取写事件记忆)压根不存在:cross_platform_pull 只产 ProfileCandidate,一条事件都不写。所以当下无危害面。留痕:在 ADR-0009 与 design.md:324 标「未实现,且其动机场景尚未存在」,等首个 host 报出「机器人把时间搞错了」再一起做两半。与 65 同一件事。 ### 5. ADR-0009 —「更新(2026-07-11 第三轮)」节 ADOPTED 第 2 条 - **断言**: Delta 压缩新增确定性正则+日期运算后处理,解析「上周三」写入 occurred_at - **理由**: 与 20 是同一功能的两半,判定必须一致,否则会出现「加了字段没人写」或「写了没地方存」。留痕而非实现的理由:中文相对时间表达式解析是一个有真实边界面的子系统(跨年、农历、「下周三」相对于说话日还是相对于事件日、时区),ADR 说「零 token 比蹭 LLM 更省」在成本上对,但在维护成本上把账算漏了;且需求来自第三方项目对照,不是任何真实场景反馈。留痕位置:ADR-0009 该条与 design.md:324-325 一并标「未实现,与 occurred_at 字段同批待定」。 ### 6. ADR-0009 —「更新(2026-07-08):晋升通道 + 检索评测 + 压缩容错」节(检索评测) - **断言**: 建立 hit@k / MRR / 负控用例集,按关键词谓词标注,每次回归写趋势 - **理由**: 前置条件(排序逻辑单一纯函数入口 score_events)确实已满足,断言已到期,所以不能当没这回事。但它是为「调权重」服务的基础设施,而权重标定按 ADR-0011 明确推迟到真实 QQ 数据——评测集没有语料就只能拿人造语料自证,价值接近零,还要养一套趋势产物。1436 条测试已覆盖纯函数正确性,缺的只是排序质量回归网,而排序权重现在是静态 config、不会自己漂。留痕:标「前置已满足、待真实语料后建」,并挂到 host 接入 checklist(同 5)。 ### 7. ADR-0020 —「备注(实现期跟进)」节第 2 条 - **断言**: delegate 池预算推迟标定;六池成本治理本次范围排除,仅 tracing 层归因 - **理由**: 纯文档回填。破折号后的范围描述已被 issue #81/#82 推翻(delegate 池有真计量包装、真熔断闸、真落库、真 e2e 测试),但破折号前的「具体预算数字推迟标定」至今仍成立(arise_pool_budgets 默认空表,core 不内置数字)——所以是改写不是删除,别把整条划掉。事实在 ADR-0010 有完整记录,误导只发生在单读 ADR-0020 时,价值确实低。与 70 同一件事,并入文档回填批。 ### 8. ADR-0012「决策 → 6. 治理」节 - **断言**: 每次 self_recall/edit 记决策快照(接 /why) - **理由**: 这条是 ADR-0012 治理四件套里唯一可以缓的:它是可观测性而非护栏,缺了不产生错误行为,只是 /why 答不出「它刚才为什么把那条撤了」。而 /why 刚在 issue #83 落地、还没有任何真实用户问过这个问题。改动面也不小(现有 DecisionSnapshot 是按「一轮触发」建模的,撤/改是轮内动作,塞进去要动数据形状或另开一张表)。留痕:在 ADR-0012 §6 标「未实现」,别让后来者按「/why 已覆盖自撤回」去援引。若 35/36/37 那批做完仍有观测需求,再单独评估。 ### 9. ADR-0014 环境感知「决策」节 tier-2 条目(并被 2026-07-09 更新节复述) - **断言**: tier-2 显著者作群 tick 的 event-driven 触发源(事件入 drive-tick 的 light ctx) - **理由**: 代码是对的(ADR-0029 明确改成事件触发用全量上下文),落差纯在文档,且根因是两份 ADR 互不指向:ADR-0014 全文零处提及 0029,ADR-0029 的取代关系节只列了 0017/0006/0007/0023、漏了 0014。文档动作:给 ADR-0014 补一个更新节指向 ADR-0029,并在 ADR-0029 的取代关系节补上 0014。这条本身价值低,但它暴露的机制问题(取代关系是单向登记、被取代方不一定知道)值得在 overall 里单说。 ### 10. ADR-0004 —「决策」节(并被 2026-07-04 更新节以 probe() 复述) - **断言**: host 经 probe() → {typing, poke, recall, at_all, sticker, voice, ...} 声明能力 - **理由**: 实质已完整落地(host 声明 + core 拥降级,降级阶梯八处可逐条指认),CONTEXT.md:133 的术语定义本身用的就是「声明」,ADR-0020 更晚的更新节还把 capabilities 当静态值正面引用。残留问题只是 probe() 这个可调用方法的措辞至今出现在五处(ADR-0004:11/34、ADR-0012:59、ADR-0030:36、design.md:229、CONTEXT.md:350),而 capabilities.py:6 反过来明写「不做运行时探测」——读者会去找一个不存在的 host 侧方法。文档回填批处理,改成「host 在加载时声明的静态能力集」。 ### 11. ADR-0025 决策节第 1 条群聊分支 - **断言**: 群聊复用 drive-tick,成为下一次 drive-tick 评估的事件驱动触发源,不新开输出出口 - **理由**: 采纳复核方的降级:「不新开输出出口」按本仓自己的先例(ADR-0014 tier-2 落地成 run_environment_signal,同样是 RuntimeLoop 新入口、同样独立挂钩点)不成立,「输出出口」在本仓语境里指绕过门控的发送通道,追问没绕。「复用 drive-tick」这半事实不符(群聊压根不在扫描范围内),但 ADR-0010 的两个更新节已经把正确形状写清了(「私聊的即刻追问复用扫描器」+ 即刻追问是独立 TriggerPath)。所以只需回填 ADR-0025 决策节措辞。真危害在第 55 条,不在这里重复计。 ### 12. CONTEXT.md「Outbox」条 - **断言**: Outbox:持久化的待处理累积消息队列,进程重启不丢 - **理由**: 纯文档,但我把紧迫度调到中:这不是「说了没做」,是**说反了**——recover() 在启动时无条件 delete 全表、ADR-0013 决策节第一条就是「崩溃后丢弃在途请求,不重放」,而 CONTEXT.md 里「崩溃/重启/在途」的全文唯一命中就是这句写反的话。一个照着术语表实现或复核的人会得出相反的正确性判断。更值得记的是 ADR-0013 的取代关系节自己写了「明确 CONTEXT 中 Outbox/句柄/Sent Log 的崩溃语义」——它点名要回填 CONTEXT,回填从没发生。文档回填批里优先级最高的一条。 ### 13. design.md「occurred_at 相对时间解析」bullet + CONTEXT.md「事件记忆」条 + ADR-0009 两个更新节 - **断言**: 确定性正则+日期运算解析相对时间写入 occurred_at;recency_decay 优先读它 - **理由**: 与 20+23 同一件事(字段与解析器两半必须同判),文档三处一并标注「未实现」。这条是全表证据最干净的一条(occurred_at 在 src+tests 零字符),所以留痕的措辞可以最直白:「本条自 2026-07-10/07-11 采纳以来未实现,且其原始动机场景(跨平台拉取写事件记忆)尚未存在」。 ### 14. CONTEXT.md「Port」条(共八类)+ design.md 架构 mermaid(resource/econ 方框)+ Port 契约节两条 bullet - **断言**: 资源 port(贴纸/TTS 目录)+ 经济 hook port(可选) - **理由**: 拆两半:经济 hook 那半随第 49 条作废(mermaid 删 econ 方框、八类改七类);资源 port 那半等 48/28 的人类结论再动,在此之前应在 CONTEXT.md 与 design.md 明确标「未实现、待定」。不能现在就照现状改写成「core 无资源 port」——那会把一个待决问题写成既定事实,正是本次查漏要治的病。文档回填批里唯一需要等前置结论的一条。 ### 15. design.md「冷启动与渐进解锁(ADR-0007)」节 - **断言**: 解锁顺序:反应式 → 主动开口 → 三因子召回 → 关系网注入 → 自发目标 - **理由**: 代码与 ADR/CONTEXT 都已按 ADR-0029 的新四级顺序走,只有 design.md 停在旧五级。但根因比这一处大得多,紧迫度按根因给:design.md 全文一次都没提到 ADR-0029、也一次都没提到 ADR-0030——两份最晚、推翻面最大的 ADR 完全没有传播到 design.md,直接造成本表 68/75/77 三处误导。文档回填批里应该把「扫一遍 design.md 对 0029/0030 的全部影响面」当成一个整体动作,而不是逐条改这三处。 ### 16. CONTEXT.md「回调(Callback)」条 + design.md 能动性层「深挖任务委托」条 - **断言**: register_callback 本身仍未实现,只是地基已通用 - **理由**: 反向陈旧:实现跑在文档前面(register_callback.py 存在、两个工具已注册进 schema 并接线、模块文档自称是 Callback 抽象的第二个真实生产者)。危害很低但很典型——三处文档(CONTEXT.md:171/:496、design.md:433)都在主动声明一个已经存在的东西「尚未实现」,说明留痕本身也会过期。文档回填批里一并改,顺手在 overall 里当作「留痕不是免维护」的证据。 ### 17. CONTEXT.md「深挖任务委托(Deep Task Delegation)」条 - **断言**: 独立 delegate 成本池;但六池预算/熔断全仓尚未实现,仅 tracing 层标注 - **理由**: 与第 26 条同源,且是局部陈旧——同一份 CONTEXT.md 的成本治理条目(:532)已经是新表述,只有深挖任务委托条里那个括号停在旧世界。改一个括号即可。这条的价值在于它示范了一种最难发现的陈旧:不是整条没更新,是一条更新了、另一条复述它的没更新,全文检索同一个概念会得到互相矛盾的两句话。 ### 18. design.md 架构 mermaid 的 routing 方框 + 决策基线「低争议、直接采纳」列表「必修 bug 批」 - **断言**: Routing:模型池/按模型熔断/限流/per-能力预算 - **理由**: 三件里没有一件是真落差:模型池有窄实现(arise_fallback_multimodal_models 按 kind 排序兜底,ADR-0028 自己把它归到 Routing 层);按模型熔断是被**推翻**的(cost.py 顶部「定价表按池声明、不按模型——这不是取舍,是架构逼出来的」,ADR-0010 决策节即按能力分池);限流是被硬预算+熔断取代的(ADR-0010 背景节把「仅软限流不硬停」列为旧系统病症)。真问题是 design.md 内部自相矛盾(第 36 行 per-能力预算 vs 第 44 行按模型熔断),且第 44 行那句是从 2026-07-02 的旧 dxkuma 缺口分析原样搬来的遗留债目。文档回填批:删掉「熔断按模型」「限流」,mermaid 方框改成「模型池/per-能力预算」。 ### 19. docs/design.md:451 冷启动节 + :376 真人感层 + :87 同一措辞 - **断言**: 已读延迟窗 scope_ceiling 收紧 + 选择性回应禁止归零 - **理由**: 取代链完整(ADR-0017 与 ADR-0007 两个更新节都写了 floor=1 适用范围从「选择性回应整批归零」扩到「共享预算本身」,CONTEXT.md 两处已同步),只有 design.md 三处停在旧世界。采纳复核方补的两点:落点是三处不是两处(还有 :87),且 :376 同一句里还有第二处陈旧断言「不共享沉默预算」——那条也被明确推翻了(沉默预算现覆盖全部触发源)。根因同 68:design.md 零处提及 ADR-0029。并入「扫一遍 design.md 对 0029/0030 的影响面」这个整体动作。 ### 20. CONTEXT.md:133-134「能力探测」条 + design.md:229-230 能力 port bullet(另 ADR-0004:11、ADR-0019:12) - **断言**: probe() → {…, at_all, …} - **理由**: at_all 能力位是被 ADR-0003 的 issue #28 更新节**显式移除**的(「能力门控收敛为单一信源,不新增 CapabilitySet 布尔位,at_all 也一并移除」),代码是正确的一方。落差窄而真:只有 at_all 一项,落点是 CONTEXT.md:134、design.md:229、ADR-0004:11、ADR-0019:12 四处。注意 CONTEXT.md 那条不是整条没更新——它已经跟进了 ADR-0030(写了四个交互位已移除),唯独漏了更早的 ADR-0003。这个「跟进了新的、漏了旧的」模式值得记:文档回填时按 ADR 时间倒序追,容易漏掉早于当前注意力窗口的那次移除。 ### 21. docs/design.md:195-197 前处理 port bullet + :229-233 能力 port bullet - **断言**: ConversationInput.interaction 封闭形状 {kind: "poke"|"reaction", …} + 四个交互能力位 - **理由**: design.md 全文零处提及 ADR-0030、零处 interaction_renderers,四处仍完整保留 ADR-0023 的封闭设计并解释得头头是道。这条单列的价值在于纠正一个会误导排期的印象:CONTEXT.md 已经跟进了 ADR-0030(:142 写四位已移除),只看 CONTEXT 会以为「文档已改、只剩代码没跟」,实际文档也只改了一半。文档动作应与已知种子(ADR-0030 整份未落地)的实现 ticket 绑在一起——ADR-0030 落地时四处 design.md 一并改,否则又是一次「代码改了、design.md 没跟」。
Author
Member

附录 C:改判「待人类拍板」的 5 条 —— 本票不要动

这 5 条属第四批(先 grill 再拆 PRD)。其中 3 条原本就是待拍板(复核判「部分成立」,方向不变但理由要修),2 条从「作废」改判上来。列在这里只为留档「什么从文档批里移出去了」。

1. ADR-0011 决策 6(TTS:引擎无关 port 契约)

断言:资源 port 的 TTS 契约 synthesize(text, voice_id) → (audio_ref, char_count?)

原裁决 待人类拍板 不成立(复核:部分成立)。原因:机制归属大方向读对了:裁决把 synthesize 挂在「资源 port」上,与 adr/0011:55「资源 port 的 TTS 契约」一致,也没有把注入侧说成决策侧。但它漏掉了两处限定归属的措辞,导致对实现现状的定性偏软。

关键原文adr/0011-technology-selection.md:53-58:「### 6. TTS:可选能力,不打包引擎,引擎无关 port 契约 / TTS 非 core 硬约束——是可选能力(能力 port probe() 报是否支持语音,core 无则优雅降级为文本)。arise 不打包任何 TTS 引擎。资源 port 的 TTS 契约保持引擎无关synthesize(text, voice_id) → (audio_ref, char_count?)char_count 喂经济 hook(扣星)。发音/口癖 override(mai→mai1滴蜡熊→迪拉熊)全归 host(persona 侧预处理文本或用引擎特性),不进通用 port……dxkuma 保留现役 gpt-4o-mini-tts……纯 host config,不进 arise 仓。」

`…

改判 → 待人类拍板:结论方向可以留:它确实改 port 契约、确实在免费窗口内、确实牵连另一条(48)必须合并裁,「实现原样 vs 正式作废语音输出」这个取舍交人类拍是保守且不可逆风险最低的选择。但理由需要修三处,否则给人类的选项菜单本身是误导的:(1) 路线 (c) 必须删掉或明确标注「ADR-0024/CONTEXT.md 已判并存不合并,重开需先推翻那条」;(2) 路线 (a) 应标注为「原文既定设计」(ADR-0001 的 TTS 目录 + ADR-0011 的 synthesize + design.md 的目录化),而不是与 (b)(c) 等权的新增工作,人类要拍的其实是二选一:按原文实现,还是正式作废;(3) 「当前形状确实更简单」应补一句:这个形状接近 ADR-0003 已否决的「host 全渲染(语音由 host)」一极,简单是以推翻既有归属原则为代价。因此判部分成立,裁决保留为「待人类拍板」但 reasoning 需订正。

2. ADR-0001 —「决策」节七类 port 枚举(资源 port)

断言:资源 port:贴纸/表情/反应图/TTS 目录,目录化无硬编码

原裁决 待人类拍板 不成立(复核:部分成立)。原因:机制归属大体读对了:裁决说「search_stickers 只覆盖习得贴纸」与 ADR-0024「本 ADR 只覆盖后者」「并存不合并」「一份 context 常驻、一份按需检索」完全一致,没有把注入侧读成决策侧,也没有把被动读成主动。一处轻度性质偏移:ADR-0024:5-8 明写静态目录「纯粹是 host 如何填充既有资源 port 含义 字段……的内部实现细节,不涉及 arise core」,即这个 port 的 core 侧职责只是「接过 host 声明的目录并整份注入」,不是 core 要实现的智能;裁决把它当成一个需要 core 出功能的槽位来估工,因而把「零 core 改动的替代路径」说得比实际更等价(core 侧无论如何要有一个承接字段与一个注入点)。

关键原文:1) design.md:228:「资源 port:贴纸/表情目录(ID→含义→文件)、反应图、TTS。目录化,无硬编码。」
2) adr/0024-learned-stickers.md:5-8:「"贴纸收录"……来源拆两条:本地贴纸集(host 自己的目录)与他人在对话中发送的贴纸。前者纯粹是 host 如何填充既有资源 port 含义 字段([ADR-0001]:贴纸目录 ID→含义→文件,目录化无硬编码)的内部实现细节,不涉及 arise core。本 ADR 只覆盖后者。」
3) adr/0024-learned-stickers.md:52-54:「与资源 port 的静态贴纸目录(ADR-0001)并存不合并——host 声明的是 authoritative 目录(通常整份注入,规模可控),这条是运行时学习的补充目录(检索式,规模不可控);两者共同构成 `se…

改判 → 待人类拍板:裁决方向(不撤、交人类定、免费窗口内必须定)站得住,且它自己就引了 ADR-0024 07-09 的「并存不合并」当作「作者当时仍要它」的证据——这一步是对的。判「部分成立」而非「成立」,是因为呈给人类的两条「零 core 改动替代路径」中,一条被 ADR-0024 明文拒绝、一条撞 ADR-0022 点名的反模式,而这正是会把人类的拍板往「撤下去」方向拉的那根支柱。建议保留原裁决 待人类拍板,但在呈报时补上这两句原文,让人类看到「替代路径」并非与原设计等价。

3. ADR-0001 —「决策」节七类 port 枚举末项(经济 hook)

断言:经济 hook(可选,如扣星)

原裁决 作废 不成立(复核:不成立)。原因:失效模式 A 命中两处。① 归属声明被当成否定引用:ADR-0010:14 整句是「扣星等对『清除』收费 = host 经济 hook;core 无经济概念」——前半句把「清除收费」这个用例指派给经济 hook,后半句「core 无经济概念」正是它必须是 host hook(而不是 core 内部逻辑)的理由

关键原文:1) adr/0001-standalone-core-and-ports.md:10-11:「具体人设(迪拉熊)、平台适配、资源、经济规则由宿主项目通过 port 实现。」
2) adr/0001-standalone-core-and-ports.md:17:「经济 hook可选,如扣星)」
3) adr/0010-operations.md:14:「扣星等对"清除"收费 = host 经济 hook;core 无经济概念。」
4) adr/0011-technology-selection.md:55-56:「资源 port 的 TTS 契约保持引擎无关synthesize(text, voice_id) → (audio_ref, char_count?)char_count 喂经济 hook(扣星)。」
5) CONTEXT.md:351-352:「资源 p…

改判 → 待人类拍板:「作废」的整条立论建立在两个被原文推翻的事实上:唯一挂载场景(错——TTS char_count 是第二个,且在 core 内),以及 core 无需要 hook 的时间点(错,同上;ADR-0013 那句只管时间窗、不管组件归属)。再加上「(可选)」四处明标、ADR-0010 07-08 还在往这个 port 上挂遥测指标,按「作废用更严尺度、有疑义往不成立判」的要求,这条不能撤。建议改判 待人类拍板:需要作者本人裁决 ADR-0011 §6(char_count 喂经济 hook,落在生成窗口内)与 ADR-0013 / design.md:245(扣星是命令前置钩子)之间的真实矛盾,且它触及 ArisePorts 表面(与下标 9 同一形状,免费窗口内应定)。

4. CONTEXT.md「慢中断」条 + design.md 决策基线/真人感层/上线路线第 4 阶段

断言:慢中断/linger:被交互后高活跃窗口,非@消息按衰减概率接话

原裁决 待人类拍板 不成立(复核:部分成立)。原因:有一处归属偏差,方向与标定样例同类。原文对慢中断的自我定性是参数调制而非新接收面:CONTEXT.md:255「建模为情感态短时高 energy 窗口」、design.md:368「被交互后短时高 energy 窗口,衰减概率接后续」,且 ADR-0005:14 与 ADR-0011:66 都把「linger 概率」列为情感态中央调节器/config 系数一栏——也就是文档口径下它是既有 energy→门控链上的一个系数窗口。

关键原文:docs-text/CONTEXT.md:255:「慢中断:被交互后一段高活跃窗口,非@消息按时间衰减概率接话;建模为情感态短时高 energy 窗口。」

docs-text/design.md:41-42:「低争议、直接采纳(研究已充分论证,不单列决策):智能体死循环熔断主动开口三件套(沉默窗口 + 本地兴趣门 + linger)、drive tick 架构(isolated/light/静默令牌/开工先读/不抢 lane)」

docs-text/design.md:368:「+ 本地兴趣门(级一零主 LLM,阈值随情感态动态化)+ linger(被交互后短时高 energy 窗口,衰减概率接后续)。」

docs-text/adr/0005-affective-state.md:14:「- 情感态升为所有拟人参数的中央调节器:调节打字速度、linger 概率、门控…

改判 → 待人类拍板:裁决落点(待人类拍板、建议单开 PRD)不改任何设计、方向可逆,且它指出的缺口有原文侧支撑:ADR-0029:12 的触发源枚举确实没有「群内非@普通消息」,而 CONTEXT.md:255 的慢中断又要求这类消息可见,文档内部本身有张力,交人类拍板是合适处置,故裁决本身保留。但理由需要修正两处再交上去:(一) 归属——原文把慢中断定性为「情感态短时高 energy 窗口」(CONTEXT.md:255)、把 linger 概率列为情感态调制系数(ADR-0005:14、ADR-0011:66),裁决用「这不是补一个 boost 接线的事」直接推翻了这个定性却未引用它;同时 design.md:41-42「低争议、直接采纳」与裁决「本仓最大的未做产品决定」正相反,也未被回应。(二) 前置范围——原文已把可见面限定在「被交互后一段高活跃窗口 + 时间衰减」,并在邻案里两次拒绝 full-reactive(ADR-0014:19/45),级一又已定为「零 LLM,高召回廉价」(CONTEXT.md:240),群聊主动路径本身也被定为既有(ADR-0014:16-18);所以要拍的板不是「看不看全量群消息」,而是窄得多的「窗口内非@消息由谁投递、不回应的消息留不留」。

5. design.md 存储与记忆工程「归档」bullet + 决策基线表第 7 行 + CONTEXT.md「三因子召回」条 + ADR-0009 决策节

断言:归档:episodic 与 checkpoint archive 拆两 collection;archive blob 分条化

原裁决 作废 不成立(复核:不成立)。原因:归属被读窄了。裁决把「checkpoint archive」整体归属到 LangGraph checkpointer 这个基座层产物(「载体随 ADR-0002 弃 LangGraph 一并消失」),但原文的归属是记忆层:ADR-0009:5-6 说的是「归档器把 ~60 条原文拼成单 blob 整块召回、episodic 与 archive 混同一 collection」——一个写进向量库、被语义召回的记忆对象,不是 checkpointer 的状态快照;ADR-0013:5 只写了「弃了它的 checkpointer」,全篇没有一句说归档层随之消失,ADR-0013:11 反而把 checkpoint 明确界定为会话状态;而 ADR-0010:11 与 CONTEXT.md:526 里「checkpoint」的用法就是「短期记忆(会话上下文/checkpoint)」,这东西在自研 loop 下照样存在。

关键原文:docs-text/adr/0009-memory-engineering.md:15(决策节):「- 归档拆分:episodic 与 checkpoint archive 拆两 collection;archive blob 分条化(治整块召回)。」;同文件 5-6(背景):「旧实现缺陷:归档器把 ~60 条原文拼成单 blob 整块召回、episodic 与 archive 混同一 collection、召回只按向量相似度」

docs-text/adr/0009-memory-engineering.md:45(2026-07-06 更新节,晚于弃 LangGraph):「"向量必备,无降级分支"仅约束本 ADR 的三因子语义召回路径(画像/事件记忆/归档)。」

docs-text/adr/0015-topic-memory-knowledge-and-persona-lore.md:39…

改判 → 待人类拍板:这是作废类,按更严尺度看站不住。第一,文档在弃 LangGraph 之后仍有三处把「归档」当活的三因子语义召回路径枚举(ADR-0009:45、ADR-0015:39、CONTEXT.md:441),而裁决的整改范围只覆盖 design.md:322 / 决策基线表第 7 行 / CONTEXT.md:375——若真作废,这三处也必须处理;漏掉它们本身说明「归档」被当成了残留名词而非承重概念。第二,「载体随弃 LangGraph 消失」在原文里找不到依据:ADR-0013:5 只写「弃了它的 checkpointer」,ADR-0013:11 把 checkpoint 界定为会话状态,ADR-0010:11/CONTEXT.md:526 里 checkpoint 就是「短期记忆(会话上下文)」,这东西自研 loop 照样有;而 ADR-0002:7 早已自陈旧痛点「部分是迁就框架…的产物」,ADR-0009 是在知情下仍立决策,姐妹项 delta 真增量还落地了——用一个当时已知情的事实回头撤销,是把原文已权衡过的判断重开成撤销理由。

# 附录 C:改判「待人类拍板」的 5 条 —— **本票不要动** > 这 5 条属**第四批**(先 grill 再拆 PRD)。其中 3 条原本就是待拍板(复核判「部分成立」,方向不变但理由要修),2 条从「作废」改判上来。列在这里只为留档「什么从文档批里移出去了」。 ### 1. ADR-0011 决策 6(TTS:引擎无关 port 契约) **断言**:资源 port 的 TTS 契约 synthesize(text, voice_id) → (audio_ref, char_count?) **原裁决 待人类拍板 不成立**(复核:部分成立)。原因:机制归属大方向读对了:裁决把 synthesize 挂在「资源 port」上,与 `adr/0011:55`「资源 port 的 TTS 契约」一致,也没有把注入侧说成决策侧。但它漏掉了两处限定归属的措辞,导致对实现现状的定性偏软。 **关键原文**:`adr/0011-technology-selection.md:53-58`:「### 6. TTS:可选能力,不打包引擎,引擎无关 port 契约 / TTS 非 core 硬约束——是**可选能力**(能力 port `probe()` 报是否支持语音,core 无则优雅降级为文本)。arise **不打包任何 TTS 引擎**。资源 port 的 TTS 契约保持**引擎无关**:`synthesize(text, voice_id) → (audio_ref, char_count?)`;`char_count` 喂经济 hook(扣星)。**发音/口癖 override(`mai→mai1`、`滴蜡熊→迪拉熊`)全归 host**(persona 侧预处理文本或用引擎特性),不进通用 port……dxkuma 保留现役 `gpt-4o-mini-tts`……纯 host config,不进 arise 仓。」 `… **改判 → 待人类拍板**:结论方向可以留:它确实改 port 契约、确实在免费窗口内、确实牵连另一条(48)必须合并裁,「实现原样 vs 正式作废语音输出」这个取舍交人类拍是保守且不可逆风险最低的选择。但理由需要修三处,否则给人类的选项菜单本身是误导的:(1) 路线 (c) 必须删掉或明确标注「ADR-0024/CONTEXT.md 已判并存不合并,重开需先推翻那条」;(2) 路线 (a) 应标注为「原文既定设计」(ADR-0001 的 TTS 目录 + ADR-0011 的 synthesize + design.md 的目录化),而不是与 (b)(c) 等权的新增工作,人类要拍的其实是二选一:按原文实现,还是正式作废;(3) 「当前形状确实更简单」应补一句:这个形状接近 ADR-0003 已否决的「host 全渲染(语音由 host)」一极,简单是以推翻既有归属原则为代价。因此判部分成立,裁决保留为「待人类拍板」但 reasoning 需订正。 ### 2. ADR-0001 —「决策」节七类 port 枚举(资源 port) **断言**:资源 port:贴纸/表情/反应图/TTS 目录,目录化无硬编码 **原裁决 待人类拍板 不成立**(复核:部分成立)。原因:机制归属大体读对了:裁决说「search_stickers 只覆盖习得贴纸」与 ADR-0024「本 ADR 只覆盖后者」「并存不合并」「一份 context 常驻、一份按需检索」完全一致,没有把注入侧读成决策侧,也没有把被动读成主动。一处轻度性质偏移:ADR-0024:5-8 明写静态目录「纯粹是 host 如何填充既有资源 port `含义` 字段……的内部实现细节,**不涉及 arise core**」,即这个 port 的 core 侧职责只是「接过 host 声明的目录并整份注入」,不是 core 要实现的智能;裁决把它当成一个需要 core 出功能的槽位来估工,因而把「零 core 改动的替代路径」说得比实际更等价(core 侧无论如何要有一个承接字段与一个注入点)。 **关键原文**:1) design.md:228:「**资源 port**:贴纸/表情目录(ID→含义→文件)、反应图、TTS。目录化,无硬编码。」 2) adr/0024-learned-stickers.md:5-8:「"贴纸收录"……来源拆两条:**本地贴纸集**(host 自己的目录)与**他人在对话中发送的贴纸**。前者纯粹是 host 如何填充既有资源 port `含义` 字段([ADR-0001]:贴纸目录 `ID→含义→文件`,目录化无硬编码)的内部实现细节,**不涉及 arise core**。本 ADR 只覆盖**后者**。」 3) adr/0024-learned-stickers.md:52-54:「与资源 port 的静态贴纸目录(ADR-0001)**并存不合并**——host 声明的是 authoritative 目录(通常整份注入,规模可控),这条是运行时学习的补充目录(检索式,规模不可控);两者共同构成 `se… **改判 → 待人类拍板**:裁决方向(不撤、交人类定、免费窗口内必须定)站得住,且它自己就引了 ADR-0024 07-09 的「并存不合并」当作「作者当时仍要它」的证据——这一步是对的。判「部分成立」而非「成立」,是因为呈给人类的两条「零 core 改动替代路径」中,一条被 ADR-0024 明文拒绝、一条撞 ADR-0022 点名的反模式,而这正是会把人类的拍板往「撤下去」方向拉的那根支柱。建议保留原裁决 `待人类拍板`,但在呈报时补上这两句原文,让人类看到「替代路径」并非与原设计等价。 ### 3. ADR-0001 —「决策」节七类 port 枚举末项(经济 hook) **断言**:经济 hook(可选,如扣星) **原裁决 作废 不成立**(复核:不成立)。原因:失效模式 A 命中两处。① **归属声明被当成否定引用**:ADR-0010:14 整句是「扣星等对『清除』收费 = host 经济 hook;core 无经济概念」——前半句把「清除收费」这个用例**指派给经济 hook**,后半句「core 无经济概念」正是它必须是 host hook(而不是 core 内部逻辑)的**理由**。 **关键原文**:1) adr/0001-standalone-core-and-ports.md:10-11:「具体人设(迪拉熊)、平台适配、资源、**经济规则**由宿主项目通过 port 实现。」 2) adr/0001-standalone-core-and-ports.md:17:「**经济 hook**(**可选**,如扣星)」 3) adr/0010-operations.md:14:「**扣星等对"清除"收费 = host 经济 hook**;core 无经济概念。」 4) adr/0011-technology-selection.md:55-56:「资源 port 的 TTS 契约保持**引擎无关**:`synthesize(text, voice_id) → (audio_ref, char_count?)`;**`char_count` 喂经济 hook(扣星)**。」 5) CONTEXT.md:351-352:「资源 p… **改判 → 待人类拍板**:「作废」的整条立论建立在两个被原文推翻的事实上:唯一挂载场景(错——TTS char_count 是第二个,且在 core 内),以及 core 无需要 hook 的时间点(错,同上;ADR-0013 那句只管时间窗、不管组件归属)。再加上「(可选)」四处明标、ADR-0010 07-08 还在往这个 port 上挂遥测指标,按「作废用更严尺度、有疑义往不成立判」的要求,这条不能撤。建议改判 `待人类拍板`:需要作者本人裁决 ADR-0011 §6(char_count 喂经济 hook,落在生成窗口内)与 ADR-0013 / design.md:245(扣星是命令前置钩子)之间的真实矛盾,且它触及 ArisePorts 表面(与下标 9 同一形状,免费窗口内应定)。 ### 4. CONTEXT.md「慢中断」条 + design.md 决策基线/真人感层/上线路线第 4 阶段 **断言**:慢中断/linger:被交互后高活跃窗口,非@消息按衰减概率接话 **原裁决 待人类拍板 不成立**(复核:部分成立)。原因:有一处归属偏差,方向与标定样例同类。原文对慢中断的自我定性是**参数调制**而非新接收面:CONTEXT.md:255「建模为情感态短时高 energy 窗口」、design.md:368「被交互后短时高 energy 窗口,衰减概率接后续」,且 ADR-0005:14 与 ADR-0011:66 都把「linger 概率」列为情感态中央调节器/config 系数一栏——也就是文档口径下它是既有 energy→门控链上的一个系数窗口。 **关键原文**:docs-text/CONTEXT.md:255:「**慢中断**:被交互后一段高活跃窗口,非@消息按时间衰减概率接话;建模为情感态短时高 energy 窗口。」 docs-text/design.md:41-42:「低争议、直接采纳(研究已充分论证,不单列决策):**智能体死循环熔断**、**主动开口三件套**(沉默窗口 + 本地兴趣门 + linger)、**drive tick 架构**(isolated/light/静默令牌/开工先读/不抢 lane)」 docs-text/design.md:368:「+ **本地兴趣门**(级一零主 LLM,阈值随情感态动态化)+ **linger**(被交互后短时高 energy 窗口,衰减概率接后续)。」 docs-text/adr/0005-affective-state.md:14:「- **情感态升为所有拟人参数的中央调节器**:调节打字速度、linger 概率、门控… **改判 → 待人类拍板**:裁决落点(待人类拍板、建议单开 PRD)不改任何设计、方向可逆,且它指出的缺口有原文侧支撑:ADR-0029:12 的触发源枚举确实没有「群内非@普通消息」,而 CONTEXT.md:255 的慢中断又要求这类消息可见,文档内部本身有张力,交人类拍板是合适处置,故裁决本身保留。但理由需要修正两处再交上去:(一) 归属——原文把慢中断定性为「情感态短时高 energy 窗口」(CONTEXT.md:255)、把 linger 概率列为情感态调制系数(ADR-0005:14、ADR-0011:66),裁决用「这不是补一个 boost 接线的事」直接推翻了这个定性却未引用它;同时 design.md:41-42「低争议、直接采纳」与裁决「本仓最大的未做产品决定」正相反,也未被回应。(二) 前置范围——原文已把可见面限定在「被交互后一段高活跃窗口 + 时间衰减」,并在邻案里两次拒绝 full-reactive(ADR-0014:19/45),级一又已定为「零 LLM,高召回廉价」(CONTEXT.md:240),群聊主动路径本身也被定为既有(ADR-0014:16-18);所以要拍的板不是「看不看全量群消息」,而是窄得多的「窗口内非@消息由谁投递、不回应的消息留不留」。 ### 5. design.md 存储与记忆工程「归档」bullet + 决策基线表第 7 行 + CONTEXT.md「三因子召回」条 + ADR-0009 决策节 **断言**:归档:episodic 与 checkpoint archive 拆两 collection;archive blob 分条化 **原裁决 作废 不成立**(复核:不成立)。原因:归属被读窄了。裁决把「checkpoint archive」整体归属到 LangGraph checkpointer 这个**基座层产物**(「载体随 ADR-0002 弃 LangGraph 一并消失」),但原文的归属是**记忆层**:ADR-0009:5-6 说的是「**归档器**把 ~60 条原文拼成单 blob **整块召回**、episodic 与 archive **混同一 collection**」——一个写进向量库、被语义召回的记忆对象,不是 checkpointer 的状态快照;ADR-0013:5 只写了「弃了它的 checkpointer」,全篇没有一句说归档层随之消失,ADR-0013:11 反而把 checkpoint 明确界定为**会话状态**;而 ADR-0010:11 与 CONTEXT.md:526 里「checkpoint」的用法就是「短期记忆(会话上下文/checkpoint)」,这东西在自研 loop 下照样存在。 **关键原文**:docs-text/adr/0009-memory-engineering.md:15(决策节):「- **归档拆分**:episodic 与 checkpoint archive **拆两 collection**;archive **blob 分条化**(治整块召回)。」;同文件 5-6(背景):「旧实现缺陷:归档器把 ~60 条原文拼成单 blob 整块召回、episodic 与 archive 混同一 collection、召回只按向量相似度」 docs-text/adr/0009-memory-engineering.md:45(2026-07-06 更新节,晚于弃 LangGraph):「**"向量必备,无降级分支"仅约束本 ADR 的三因子语义召回路径**(画像/事件记忆/归档)。」 docs-text/adr/0015-topic-memory-knowledge-and-persona-lore.md:39… **改判 → 待人类拍板**:这是作废类,按更严尺度看站不住。第一,文档在弃 LangGraph 之后仍有三处把「归档」当活的三因子语义召回路径枚举(ADR-0009:45、ADR-0015:39、CONTEXT.md:441),而裁决的整改范围只覆盖 design.md:322 / 决策基线表第 7 行 / CONTEXT.md:375——若真作废,这三处也必须处理;漏掉它们本身说明「归档」被当成了残留名词而非承重概念。第二,「载体随弃 LangGraph 消失」在原文里找不到依据:ADR-0013:5 只写「弃了它的 checkpointer」,ADR-0013:11 把 checkpoint 界定为会话状态,ADR-0010:11/CONTEXT.md:526 里 checkpoint 就是「短期记忆(会话上下文)」,这东西自研 loop 照样有;而 ADR-0002:7 早已自陈旧痛点「**部分**是迁就框架…的产物」,ADR-0009 是在知情下仍立决策,姐妹项 delta 真增量还落地了——用一个当时已知情的事实回头撤销,是把原文已权衡过的判断重开成撤销理由。
Author
Member

措辞更正:附录 B-2 第 2 条(资源态推 energy)的留痕理由,避免写下会悬空的引用

只改这一条的措辞,裁决不变(仍是留痕),其余 30 条不受影响。

问题

正文附录 B-2 第 2 条给出的改判理由里,把资源态的数据源写成了「ADR-0001 声明为可选的 host 经济 hook port」。

而「经济 hook 该不该继续留在 ADR-0001 的 port 枚举里」本身就是待拍板的 9 条之一(见附录 C)。如果将来判它作废,本票刚写下的这条留痕理由就会指向一个已不存在的 port——一条留痕的存在目的就是防止后来者被误导,它自己却先悬空了

改法

留痕理由里不要写死「经济 hook port」,改用不依赖那条待拍板结论的措辞:

资源态推 energy 是已拍板的既有项,数据源是 host 侧资源状态(其载体 port 的去留见 #103 待拍板清单);该 port 未建期间,该项恒为零输入。

同时保留原理由里两条不受影响的事实(它们与经济 hook 的去留无关):

  • 「core 里不存在资源态」正是设计要求的状态(ADR-0010「core 无经济概念」、ADR-0001「资源、经济规则由宿主项目通过 port 实现」),不是设计缺口;
  • arise 文档集从未定义过「资源态」是什么量(来源在 dxkuma 仓的旧 ADR-0006),实现期需要一句口径——这条本身也该一并留痕。

为什么单独说这一条

这是「标成已知却没写归宿 / 写下会过期的引用」这类问题的一个实例,本轮 grill 专门捞出来的。同理,写其余 27 条留痕时也请自查一遍:你写下的「未实现原因」,会不会因为另一条待拍板/待实现项的结论而失效?会的话,把它改写成不依赖那条结论的措辞。

## 措辞更正:附录 B-2 第 2 条(资源态推 energy)的留痕理由,避免写下会悬空的引用 **只改这一条的措辞,裁决不变(仍是留痕),其余 30 条不受影响。** ### 问题 正文附录 B-2 第 2 条给出的改判理由里,把资源态的数据源写成了「**ADR-0001 声明为可选的 host 经济 hook port**」。 而「**经济 hook 该不该继续留在 ADR-0001 的 port 枚举里**」本身就是待拍板的 9 条之一(见附录 C)。如果将来判它作废,本票刚写下的这条留痕理由就会指向一个已不存在的 port——**一条留痕的存在目的就是防止后来者被误导,它自己却先悬空了**。 ### 改法 留痕理由里**不要写死「经济 hook port」**,改用不依赖那条待拍板结论的措辞: > 资源态推 energy 是已拍板的既有项,数据源是 **host 侧资源状态**(其载体 port 的去留见 #103 待拍板清单);该 port 未建期间,该项恒为零输入。 同时**保留**原理由里两条不受影响的事实(它们与经济 hook 的去留无关): - 「core 里不存在资源态」**正是设计要求的状态**(ADR-0010「core 无经济概念」、ADR-0001「资源、经济规则由宿主项目通过 port 实现」),不是设计缺口; - arise 文档集**从未定义过「资源态」是什么量**(来源在 dxkuma 仓的旧 ADR-0006),实现期需要一句口径——这条本身也该一并留痕。 ### 为什么单独说这一条 这是「**标成已知却没写归宿 / 写下会过期的引用**」这类问题的一个实例,本轮 grill 专门捞出来的。同理,写其余 27 条留痕时也请自查一遍:**你写下的「未实现原因」,会不会因为另一条待拍板/待实现项的结论而失效**?会的话,把它改写成不依赖那条结论的措辞。
Author
Member

本片纯文档,无 main 分支代码改动,不产生 PR,改动已提交在 docs 分支本地(commit aa9529f,15 个文件、291 行新增)。按 AC 要求"按既定规则永不推送",docs 分支不会 push。

落地范围

附录 B-1(2 条日期临近)+ 附录 B-2(5 条)+ 附录 B-3(21 条中 20 条落地)+ design.md 七层线头结掉。

两处对票面的偏离(均已核实,需要评估侧确认)

1. 跳过了任务一"1 条作废"(ADR-0009 归档拆分):核实发现票面自身存在矛盾——附录 A#1 对 ADR-0009 决策节"episodic 与 checkpoint archive 拆两 collection"这句话判"作废",附录 C#5 对完全相同的一句话判"待人类拍板",两条复核给出相反结论(都标注"原裁决作废不成立",但改判方向不同)。这不是我该单方面裁决的分歧——附录 A#1 与附录 C#5 大概率是同一条底层落差在原始 77 条查漏里被计成了两个独立条目、各自独立复核后互不知情地得出了相反结论。跳过,留给评估侧核对哪条复核站得住再定,避免我武断选一边导致"作废"这个不可逆动作用错了理由。

2. 跳过了附录 B-3 第 2 条(ADR-0005 未获回应升级):核实发现这个机制已经被 issue #136(2026-08-17)完整实现,且 ADR-0005 已有对应的"issue #136 实现期"更新节记录(含群聊作用域裁定、AC 字面偏离留痕等完整细节)。本票写于 2026-07-29,中间被 issue #136 超越——若仍按票面写"留痕:尚未实现"会是一条错误文档,故跳过不写。

时效性修正(超出票面原文,核实时发现的真实过期表述)

工单侧多数条目按 2026-07-29 快照撰写,本次落地(2026-08-17)核实时发现若干处已被本会话内 issue #123/#124/#104/#63 等超越,一并订正(均标注"issue #101 文档批订正",可用该关键词在 docs 分支全文搜索定位):

  • CONTEXT.md「Outbox」条"进程重启不丢"实际说反了——storage.recover() 启动时无条件清空整张 Outbox 表。
  • register_callback/cancel_callback 实际已实现(issue #63/PR #65),CONTEXT.md 与 design.md 两处都还写着"仍未实现"。
  • 六池成本治理(含 delegate)已实现,非仅 tracing/日志层面标注(ADR-0020 备注节 + CONTEXT.md 深挖任务委托条都有这条过期表述)。
  • design.md「冷启动与渐进解锁」节仍是 ADR-0029 之前的旧五级顺序(反应式 → 主动开口 → ...),CONTEXT.md 早已同步新四级。
  • design.md 三处"不共享沉默预算"/"选择性回应"独立机制表述已被 ADR-0029 推翻(并入两级门控)。
  • probe() 从未是一个真实可调用方法(capabilities.py 自己的文档字符串写着"不做运行时探测"),五处残留措辞已订正为"静态声明"。
  • at_all 能力位已被 ADR-0003 issue #28 更新节判定移除,CONTEXT.md/design.md 两处遗留。
  • design.md"必修 bug 批"里的"熔断按模型"一项已被 cost.py 架构本身修正(按能力池不按模型),移除这条过期待办。

一处误报澄清

附录 B-3 第 21 条(interaction 封闭形状 + ADR-0030)核实后发现 design.md 当前已经准确描述 ADR-0030 的开放 kind 设计(第 203-209 行,含正确的 ADR-0030 链接),并非票面所称"全文零处提及 ADR-0030"——未做任何改动,仅在此说明核实结论。

详见 docs 分支 commit aa9529f 的完整 diff。

本片纯文档,无 main 分支代码改动,不产生 PR,改动已提交在 `docs` 分支本地(commit `aa9529f`,15 个文件、291 行新增)。按 AC 要求"按既定规则永不推送",`docs` 分支不会 push。 ## 落地范围 附录 B-1(2 条日期临近)+ 附录 B-2(5 条)+ 附录 B-3(21 条中 20 条落地)+ design.md 七层线头结掉。 ## 两处对票面的偏离(均已核实,需要评估侧确认) **1. 跳过了任务一"1 条作废"(ADR-0009 归档拆分)**:核实发现票面自身存在矛盾——附录 A#1 对 ADR-0009 决策节"episodic 与 checkpoint archive 拆两 collection"这句话判"作废",附录 C#5 对**完全相同的一句话**判"待人类拍板",两条复核给出相反结论(都标注"原裁决作废不成立",但改判方向不同)。这不是我该单方面裁决的分歧——附录 A#1 与附录 C#5 大概率是同一条底层落差在原始 77 条查漏里被计成了两个独立条目、各自独立复核后互不知情地得出了相反结论。跳过,留给评估侧核对哪条复核站得住再定,避免我武断选一边导致"作废"这个不可逆动作用错了理由。 **2. 跳过了附录 B-3 第 2 条(ADR-0005 未获回应升级)**:核实发现这个机制已经被 issue #136(2026-08-17)完整实现,且 ADR-0005 已有对应的"issue #136 实现期"更新节记录(含群聊作用域裁定、AC 字面偏离留痕等完整细节)。本票写于 2026-07-29,中间被 issue #136 超越——若仍按票面写"留痕:尚未实现"会是一条错误文档,故跳过不写。 ## 时效性修正(超出票面原文,核实时发现的真实过期表述) 工单侧多数条目按 2026-07-29 快照撰写,本次落地(2026-08-17)核实时发现若干处已被本会话内 issue #123/#124/#104/#63 等超越,一并订正(均标注"issue #101 文档批订正",可用该关键词在 `docs` 分支全文搜索定位): - CONTEXT.md「Outbox」条"进程重启不丢"实际说反了——`storage.recover()` 启动时无条件清空整张 Outbox 表。 - `register_callback`/`cancel_callback` 实际已实现(issue #63/PR #65),CONTEXT.md 与 design.md 两处都还写着"仍未实现"。 - 六池成本治理(含 `delegate`)已实现,非仅 tracing/日志层面标注(ADR-0020 备注节 + CONTEXT.md 深挖任务委托条都有这条过期表述)。 - design.md「冷启动与渐进解锁」节仍是 ADR-0029 之前的旧五级顺序(`反应式 → 主动开口 → ...`),CONTEXT.md 早已同步新四级。 - design.md 三处"不共享沉默预算"/"选择性回应"独立机制表述已被 ADR-0029 推翻(并入两级门控)。 - `probe()` 从未是一个真实可调用方法(`capabilities.py` 自己的文档字符串写着"不做运行时探测"),五处残留措辞已订正为"静态声明"。 - `at_all` 能力位已被 ADR-0003 issue #28 更新节判定移除,CONTEXT.md/design.md 两处遗留。 - design.md"必修 bug 批"里的"熔断按模型"一项已被 `cost.py` 架构本身修正(按能力池不按模型),移除这条过期待办。 ## 一处误报澄清 附录 B-3 第 21 条(interaction 封闭形状 + ADR-0030)核实后发现 design.md 当前已经准确描述 ADR-0030 的开放 kind 设计(第 203-209 行,含正确的 ADR-0030 链接),并非票面所称"全文零处提及 ADR-0030"——未做任何改动,仅在此说明核实结论。 详见 `docs` 分支 commit `aa9529f` 的完整 diff。
Author
Member

2026-08-17(评估侧):两处偏离均已裁决,且发现它们背后是同一个更早的重复计数问题

一、附录 A#1 与附录 C#5(=#108 第 8 条)是同一条发现,原始 77 条查漏把它计成了两个独立条目

回了 ADR-0009/0013/0002/0010/0015/CONTEXT.md 原文逐句核对,结论:附录 C#5(也就是 #108 第 8 条)站得住,附录 A#1 的「作废」不成立

附录 A#1 的立论核心是"「checkpoint archive」的载体是 LangGraph 的 checkpointer,随 ADR-0002 弃用 LangGraph 一并消失"。但这是一次真实误读——把三个不同的"checkpoint"混成了一个:

  1. LangGraph 自己的 checkpointer(ADR-0013 背景节:"ADR-0002 弃 LangGraph,也就弃了它的 checkpointer")——框架机制,确实随弃用消失,但这不是 ADR-0009 在说的东西。
  2. ADR-0013 的"checkpoint rollback"——同一份 ADR 用括号显式划清了边界:"旧 dxkuma 的 checkpoint rollback 回退的是会话状态,从不回退已发出的平台动作——两件事必须分开"。这管的是崩溃恢复时"已发送消息要不要重放",跟记忆存储毫无关系。
  3. ADR-0009 的"checkpoint archive"——这是记忆工程 ADR 决策节里的一个命名集合,跟"episodic"并列,由"归档拆分"这条决策拆出来。ADR-0009 自己 07-06 更新节把它明说成三因子语义召回的三个目标之一:"仅约束本 ADR 的三因子语义召回路径**(画像/事件记忆/归档)**"——ADR-0015:39 逐字复述同一句。它是被向量语义召回的记忆对象,结构上跟"episodic"是同一层的兄弟概念,从头到尾没有一句话说它跟着 LangGraph 走。

附录 A#1 把 (1) 的"随弃用消失"套到了 (3) 头上——这正是本票正文自己列的失效模式 (A):机制归属被读错。

这不是巧合,是同一条发现的两份拷贝:附录 C#5 与 #108 第 8 条文字完全相同(断言、关键原文、"改判→待人类拍板"的推理逐句一致)。原始 77 条查漏显然把"ADR-0009 归档拆分该怎么处置"这一件事,同时计进了"作废"桶(→ 附录 A#1)和"待人类拍板"桶(→ 附录 C#5/#108-8),两边各自独立跑复核,互不知情,得出了相反结论。

裁决

  • 附录 A#1 不是本票的任务,撤销——没有"1 条作废"这个任务,它是重复计数产生的幻影条目。
  • #108 第 8 条已经完整、正确地承接了这条发现,不需要新开票,也不需要改 #108 任何内容。
  • 建议 77 条的对账表补一条注记:"原 77 条中有 1 条重复计数(ADR-0009 归档拆分,同时落在附录 A 与附录 C),去重后为 76 条独立发现"——不影响任何已完成的工作,只是把账目算对。

二、附录 B-3 第 2 条:确认已被 #136 完整覆盖,不写"尚未实现"

核对了 #136(PR #143,已合并)的 AC,逐句对得上附录 B-3 第 2 条的断言("重要性门槛 + 阶梯式时长门槛影响 valence/energy"),不是表面相似的两件事。跳过写入这条留痕是对的——现在写"尚未实现"会是错误文档。

顺带一提:#136 开票时自己的 Parent 字段写着"'未获回应升级'信号在 31 条清单/#101/#108 里从未有过归宿"——但它其实从一开始就在附录 B-3 第 2 条里有归宿(只是被合理地判成"留痕,等 valence 输入源先落地"),只是没人把两者连起来,才被当成孤儿条目重新发现了一次。不是错误,只是再一次说明:查漏来源分散在好几张票里时,"这条到底有没有人管"这件事本身需要主动核对,不能只信"我这边没找到归宿"就断定它是新发现。

#101 的任务一(1 条作废)与 28 条留痕的总数需要相应更正——已直接改票面,不再单独发评论确认。

三、docs 分支本地提交 aa9529f 这次比前三次更严重——建议改变提交方式

git cat-file -t aa9529f 在这个仓库里报 Not a valid object name——不是"提交在但没上 docs 分支",是这个 git object 在这个共享仓库里完全不存在,比 #112/#133/#137 三次都更彻底。已确认的三次好歹提交对象本身存在(只是分支指针没到),这次连对象都没有,说明这次的提交动作可能发生在一个从未与这个共享仓库同步过任何东西的地方。

15 个文件、291 行的实际 diff 我现在没有任何办法核实——只能读到你转述的这份文字描述。内容详实、且能独立核实的部分(如上面 #136 那条)确实对得上,所以我倾向相信描述整体可信,但"可信"不等于"已核实"。建议这次不要再补一次隐形 backfill——请实现侧把这次的改动通过一条能真正进到这个共享仓库 docs 分支的路径重新提交(哪怕是重新跑一遍改动),而不是我再从文字描述反推 diff。

## 2026-08-17(评估侧):两处偏离均已裁决,且发现它们背后是同一个更早的重复计数问题 ### 一、附录 A#1 与附录 C#5(=#108 第 8 条)是同一条发现,原始 77 条查漏把它计成了两个独立条目 回了 ADR-0009/0013/0002/0010/0015/CONTEXT.md 原文逐句核对,结论:**附录 C#5(也就是 #108 第 8 条)站得住,附录 A#1 的「作废」不成立**。 附录 A#1 的立论核心是"「checkpoint archive」的载体是 LangGraph 的 checkpointer,随 ADR-0002 弃用 LangGraph 一并消失"。但这是一次真实误读——把三个不同的"checkpoint"混成了一个: 1. **LangGraph 自己的 checkpointer**(ADR-0013 背景节:"ADR-0002 弃 LangGraph,也就弃了它的 checkpointer")——框架机制,确实随弃用消失,但这不是 ADR-0009 在说的东西。 2. **ADR-0013 的"checkpoint rollback"**——同一份 ADR 用括号显式划清了边界:"旧 dxkuma 的 checkpoint rollback 回退的是**会话状态**,从不回退**已发出的平台动作**——两件事必须分开"。这管的是崩溃恢复时"已发送消息要不要重放",跟记忆存储毫无关系。 3. **ADR-0009 的"checkpoint archive"**——这是记忆工程 ADR 决策节里的一个命名集合,跟"episodic"并列,由"归档拆分"这条决策拆出来。ADR-0009 自己 07-06 更新节把它明说成三因子语义召回的三个目标之一:"仅约束本 ADR 的三因子语义召回路径**(画像/事件记忆/归档)**"——ADR-0015:39 逐字复述同一句。它是被向量语义召回的记忆对象,结构上跟"episodic"是同一层的兄弟概念,从头到尾没有一句话说它跟着 LangGraph 走。 附录 A#1 把 (1) 的"随弃用消失"套到了 (3) 头上——这正是本票正文自己列的失效模式 (A):机制归属被读错。 **这不是巧合,是同一条发现的两份拷贝**:附录 C#5 与 #108 第 8 条**文字完全相同**(断言、关键原文、"改判→待人类拍板"的推理逐句一致)。原始 77 条查漏显然把"ADR-0009 归档拆分该怎么处置"这一件事,同时计进了"作废"桶(→ 附录 A#1)和"待人类拍板"桶(→ 附录 C#5/#108-8),两边各自独立跑复核,互不知情,得出了相反结论。 **裁决**: - 附录 A#1 **不是本票的任务,撤销**——没有"1 条作废"这个任务,它是重复计数产生的幻影条目。 - **#108 第 8 条已经完整、正确地承接了这条发现**,不需要新开票,也不需要改 #108 任何内容。 - 建议 77 条的对账表补一条注记:"原 77 条中有 1 条重复计数(ADR-0009 归档拆分,同时落在附录 A 与附录 C),去重后为 76 条独立发现"——不影响任何已完成的工作,只是把账目算对。 ### 二、附录 B-3 第 2 条:确认已被 #136 完整覆盖,不写"尚未实现" 核对了 #136(PR #143,已合并)的 AC,逐句对得上附录 B-3 第 2 条的断言("重要性门槛 + 阶梯式时长门槛影响 valence/energy"),不是表面相似的两件事。**跳过写入这条留痕是对的**——现在写"尚未实现"会是错误文档。 顺带一提:#136 开票时自己的 Parent 字段写着"'未获回应升级'信号在 31 条清单/#101/#108 里从未有过归宿"——但它其实**从一开始就在附录 B-3 第 2 条里有归宿**(只是被合理地判成"留痕,等 valence 输入源先落地"),只是没人把两者连起来,才被当成孤儿条目重新发现了一次。不是错误,只是再一次说明:查漏来源分散在好几张票里时,"这条到底有没有人管"这件事本身需要主动核对,不能只信"我这边没找到归宿"就断定它是新发现。 **#101 的任务一(1 条作废)与 28 条留痕的总数需要相应更正**——已直接改票面,不再单独发评论确认。 ### 三、`docs` 分支本地提交 `aa9529f` 这次比前三次更严重——建议改变提交方式 `git cat-file -t aa9529f` 在这个仓库里报 `Not a valid object name`——不是"提交在但没上 docs 分支",是这个 git object **在这个共享仓库里完全不存在**,比 #112/#133/#137 三次都更彻底。已确认的三次好歹提交对象本身存在(只是分支指针没到),这次连对象都没有,说明这次的提交动作可能发生在一个从未与这个共享仓库同步过任何东西的地方。 15 个文件、291 行的实际 diff 我现在没有任何办法核实——只能读到你转述的这份文字描述。内容详实、且能独立核实的部分(如上面 #136 那条)确实对得上,所以我倾向相信描述整体可信,但"可信"不等于"已核实"。**建议这次不要再补一次隐形 backfill——请实现侧把这次的改动通过一条能真正进到这个共享仓库 `docs` 分支的路径重新提交**(哪怕是重新跑一遍改动),而不是我再从文字描述反推 diff。
KumaAgent changed title from 文档批(修正版,取代 #96):1 条作废 + 28 条留痕 + 结掉 design.md 七层线头 to 文档批(修正版,取代 #96):27 条留痕 + 结掉 design.md 七层线头(原「1条作废」已撤销并入#108) 2026-08-17 09:55:14 +00:00
Author
Member

2026-08-17(评估侧):核实完毕,关闭。PR #149 已合并,main 现在真的有 docs/adr/CONTEXT.md/CLAUDE.md 了——抽查了实际落地内容:design.md 七层线头正确结掉(且顺手重新验证了模块数从55涨到74,定性结论不变);ADR-0009 没有被误写「作废」(附录A#1按裁决正确跳过);ADR-0005「未获回应升级」正确记成「issue #136 已实现」而不是「尚未实现」。两处偏离的裁决都对得上落地内容。77→76 对账更正已同步到 #103。

2026-08-17(评估侧):核实完毕,关闭。PR #149 已合并,main 现在真的有 docs/adr/CONTEXT.md/CLAUDE.md 了——抽查了实际落地内容:design.md 七层线头正确结掉(且顺手重新验证了模块数从55涨到74,定性结论不变);ADR-0009 没有被误写「作废」(附录A#1按裁决正确跳过);ADR-0005「未获回应升级」正确记成「issue #136 已实现」而不是「尚未实现」。两处偏离的裁决都对得上落地内容。77→76 对账更正已同步到 #103。
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ProjectKuma/arise#101
No description provided.