文档批(修正版,取代 #96):27 条留痕 + 结掉 design.md 七层线头(原「1条作废」已撤销并入#108) #101
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
取代 #96(已作废关闭)。#96 的附录 A(10 条作废)经两轮纠正后只剩 1 条——它的裁决层从未被复核过,而复核跑完发现8 条作废裁决全部未站住。本票是修正后的版本,请以本票为准,#96 正文与评论只作认知轨迹留档。
来源:2026-07-29 全 ADR 查漏(31 份 ADR + CONTEXT.md + design.md 对照
origin/main)+ 同日对 15 条高风险裁决的对抗性复核。纯文档、零代码改动,全部落在docs分支。为什么 #96 被作废
查漏的流水线是
扫描 → 对抗复核 → 裁决。对抗复核只覆盖了「这条落差是不是真的」(事实层),而错误全部发生在「该怎么处理它」(裁决层)——复核跑的时候裁决还不存在,结构上不可能复核裁决。事后补跑的裁决复核结果:
作废这个类别 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 结构实测已给出结论,结掉它、不执行,并补实测依据:shared契约桶才降到 5 条;shared/contracts,以及judge_persona_drift(4 个调用方跨 Memory/Agency)、recency_decay(3 个跨 Memory/Presence)这类横切原语的归属;层名保留为叙述词汇(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 撤销,不是本票任务,见上方任务一与本票评论。见本票评论);其中附录 B-2 那 5 条必须用更正后的理由。
docs分支,按既定规则永不推送。src/、不碰tests/。Not in scope
附录 A:1 条「作废」(理由已更正)——2026-08-17 已撤销,只作认知轨迹留档
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」当成缺失前置。四环实际只有两环。留痕措辞:
date由 host 提供,core 不自算。未实现的现状原因是目前没有 host 提供date。」附录 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(与标定样例同型:把「召回侧/筛候选」读成「判断侧/裁决」)。
关键原文:【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. ADR-0010 更新(2026-07-08 第三方项目对照 grill)「Prompt Cache 命中率遥测」条
2. ADR-0005「更新(2026-07-10 第三方项目对照 grill 第二轮)」节第三条
3. ADR-0006「决策」节「Drive Tick」条,同 CONTEXT.md:223 与 design.md:407
4. ADR-0009 —「更新(2026-07-10 MemPalace 对照 grill):occurred_at」节
5. ADR-0009 —「更新(2026-07-11 第三轮)」节 ADOPTED 第 2 条
6. ADR-0009 —「更新(2026-07-08):晋升通道 + 检索评测 + 压缩容错」节(检索评测)
7. ADR-0020 —「备注(实现期跟进)」节第 2 条
8. ADR-0012「决策 → 6. 治理」节
9. ADR-0014 环境感知「决策」节 tier-2 条目(并被 2026-07-09 更新节复述)
10. ADR-0004 —「决策」节(并被 2026-07-04 更新节以 probe() 复述)
11. ADR-0025 决策节第 1 条群聊分支
12. CONTEXT.md「Outbox」条
13. design.md「occurred_at 相对时间解析」bullet + CONTEXT.md「事件记忆」条 + ADR-0009 两个更新节
14. CONTEXT.md「Port」条(共八类)+ design.md 架构 mermaid(resource/econ 方框)+ Port 契约节两条 bullet
15. design.md「冷启动与渐进解锁(ADR-0007)」节
16. CONTEXT.md「回调(Callback)」条 + design.md 能动性层「深挖任务委托」条
17. CONTEXT.md「深挖任务委托(Deep Task Delegation)」条
18. design.md 架构 mermaid 的 routing 方框 + 决策基线「低争议、直接采纳」列表「必修 bug 批」
19. docs/design.md:451 冷启动节 + :376 真人感层 + :87 同一措辞
20. CONTEXT.md:133-134「能力探测」条 + design.md:229-230 能力 port bullet(另 ADR-0004:11、ADR-0019:12)
21. docs/design.md:195-197 前处理 port bullet + :229-233 能力 port bullet
附录 C:改判「待人类拍板」的 5 条 —— 本票不要动
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 硬约束——是可选能力(能力 portprobe()报是否支持语音,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 真增量还落地了——用一个当时已知情的事实回头撤销,是把原文已权衡过的判断重开成撤销理由。
措辞更正:附录 B-2 第 2 条(资源态推 energy)的留痕理由,避免写下会悬空的引用
只改这一条的措辞,裁决不变(仍是留痕),其余 30 条不受影响。
问题
正文附录 B-2 第 2 条给出的改判理由里,把资源态的数据源写成了「ADR-0001 声明为可选的 host 经济 hook port」。
而「经济 hook 该不该继续留在 ADR-0001 的 port 枚举里」本身就是待拍板的 9 条之一(见附录 C)。如果将来判它作废,本票刚写下的这条留痕理由就会指向一个已不存在的 port——一条留痕的存在目的就是防止后来者被误导,它自己却先悬空了。
改法
留痕理由里不要写死「经济 hook port」,改用不依赖那条待拍板结论的措辞:
同时保留原理由里两条不受影响的事实(它们与经济 hook 的去留无关):
为什么单独说这一条
这是「标成已知却没写归宿 / 写下会过期的引用」这类问题的一个实例,本轮 grill 专门捞出来的。同理,写其余 27 条留痕时也请自查一遍:你写下的「未实现原因」,会不会因为另一条待拍板/待实现项的结论而失效?会的话,把它改写成不依赖那条结论的措辞。
本片纯文档,无 main 分支代码改动,不产生 PR,改动已提交在
docs分支本地(commitaa9529f,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分支全文搜索定位):storage.recover()启动时无条件清空整张 Outbox 表。register_callback/cancel_callback实际已实现(issue #63/PR #65),CONTEXT.md 与 design.md 两处都还写着"仍未实现"。delegate)已实现,非仅 tracing/日志层面标注(ADR-0020 备注节 + CONTEXT.md 深挖任务委托条都有这条过期表述)。反应式 → 主动开口 → ...),CONTEXT.md 早已同步新四级。probe()从未是一个真实可调用方法(capabilities.py自己的文档字符串写着"不做运行时探测"),五处残留措辞已订正为"静态声明"。at_all能力位已被 ADR-0003 issue #28 更新节判定移除,CONTEXT.md/design.md 两处遗留。cost.py架构本身修正(按能力池不按模型),移除这条过期待办。一处误报澄清
附录 B-3 第 21 条(interaction 封闭形状 + ADR-0030)核实后发现 design.md 当前已经准确描述 ADR-0030 的开放 kind 设计(第 203-209 行,含正确的 ADR-0030 链接),并非票面所称"全文零处提及 ADR-0030"——未做任何改动,仅在此说明核实结论。
详见
docs分支 commitaa9529f的完整 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"混成了一个:
附录 A#1 把 (1) 的"随弃用消失"套到了 (3) 头上——这正是本票正文自己列的失效模式 (A):机制归属被读错。
这不是巧合,是同一条发现的两份拷贝:附录 C#5 与 #108 第 8 条文字完全相同(断言、关键原文、"改判→待人类拍板"的推理逐句一致)。原始 77 条查漏显然把"ADR-0009 归档拆分该怎么处置"这一件事,同时计进了"作废"桶(→ 附录 A#1)和"待人类拍板"桶(→ 附录 C#5/#108-8),两边各自独立跑复核,互不知情,得出了相反结论。
裁决:
二、附录 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。文档批(修正版,取代 #96):1 条作废 + 28 条留痕 + 结掉 design.md 七层线头to 文档批(修正版,取代 #96):27 条留痕 + 结掉 design.md 七层线头(原「1条作废」已撤销并入#108)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。