@a9i5k4/dsh-auto-memory 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -8
- package/README.zh-CN.md +13 -8
- package/docs/HANDBOOK.md +88 -52
- package/docs/USER-GUIDE.en.md +9 -9
- package/docs/USER-GUIDE.zh-CN.md +9 -9
- package/docs/screenshots/promo/promo-0-banner-v4.png +0 -0
- package/docs/screenshots/promo/promo-1b-auto-recall.png +0 -0
- package/lib/activation-host.js +6 -1
- package/lib/client.js +819 -272
- package/lib/context-host.js +7 -1
- package/lib/episodic-store.js +90 -16
- package/lib/fact-store.js +463 -41
- package/lib/hub-io.js +217 -0
- package/lib/index.js +224 -45
- package/lib/intent-clean-safe.js +1 -1
- package/lib/memory-hub.js +37 -5
- package/lib/note-status.js +9 -1
- package/lib/procedure-store.js +252 -31
- package/lib/procedure-switch.js +38 -0
- package/lib/python-sidecar-client.js +285 -8
- package/package.json +6 -2
- package/docs/internal/ACCEPT-35-LIVE.md +0 -143
- package/docs/internal/ACCEPTANCE-20260914.md +0 -90
- package/docs/internal/ARCH-REVIEW-BRIEF.md +0 -411
- package/docs/internal/ARCH-REVIEW-REQUEST.md +0 -201
- package/docs/internal/ARCH-REVIEW-ROUND2.md +0 -169
- package/docs/internal/ARCH-REVIEW-ROUND3.md +0 -206
- package/docs/internal/ARCHITECTURE-FOR-ZCODE-20260920.md +0 -397
- package/docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md +0 -351
- package/docs/internal/ART-DIRECTION-WIREFRAME.md +0 -191
- package/docs/internal/ART-DIRECTION-WIREFRAME.md.bak-superseded +0 -181
- package/docs/internal/AUDIT-WB-GRAPH-FULL-20260916.md +0 -314
- package/docs/internal/BATTLE-PLAN-20260917.md +0 -871
- package/docs/internal/CONCURRENCY-INVESTIGATION-20260917.md +0 -192
- package/docs/internal/CROSS-SESSION-SEARCH-PATH-DECISION.md +0 -72
- package/docs/internal/CROSS-SESSION-SEARCH-RESEARCH.md +0 -131
- package/docs/internal/CUA-VISION-FIX-NOTES.md +0 -78
- package/docs/internal/DECISIONS-20260914-SESSION.md +0 -269
- package/docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md +0 -292
- package/docs/internal/DESIGN-P1-STATE-COMMIT-20260915.md +0 -219
- package/docs/internal/DIRECTION-CHECK-WB-GRAPH-20260916.md +0 -132
- package/docs/internal/FEATURE-INVENTORY.md +0 -531
- package/docs/internal/FEEDBACK-TO-DSHAPI-RELAY.md +0 -13
- package/docs/internal/G-SERIES-EXECUTION-20260917.md +0 -248
- package/docs/internal/G3-DESIGN-20260918.md +0 -82
- package/docs/internal/G3-DISK-FORMAT-GAP-20260919.md +0 -92
- package/docs/internal/GH-DISCUSSION-5732-COMMENT.md +0 -74
- package/docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md +0 -352
- package/docs/internal/GPT-REVIEW-PROMPT.md +0 -216
- package/docs/internal/GROUP-DIGEST-SETUP.md +0 -62
- package/docs/internal/GROUP-LISTENER-SETUP.md +0 -49
- package/docs/internal/GROUP-WEBHOOK-SETUP.md +0 -93
- package/docs/internal/HANDOFF-TO-ZCODE-20260920.md +0 -309
- package/docs/internal/HANDOFF-TO-ZCODE.md +0 -168
- package/docs/internal/HERMES-DATA-VERIFICATION-20260919.md +0 -120
- package/docs/internal/HERMES-LEGACY-STATUS-20260919.md +0 -74
- package/docs/internal/ISSUE-55-58-VERIFICATION-20260918.md +0 -175
- package/docs/internal/ISSUE10-FIX-EXECUTION-20260919.md +0 -389
- package/docs/internal/ISSUE10-PLAN-20260919.md +0 -254
- package/docs/internal/ISSUE10B-FORENSICS-20260919.md +0 -468
- package/docs/internal/ISSUE9-PURGE-AND-R1-PLAIN-20260919.md +0 -150
- package/docs/internal/ISSUE9-RESIDUAL-FORENSICS-20260919.md +0 -114
- package/docs/internal/KICKOFF-P0.md +0 -254
- package/docs/internal/LESSON-TO-CANDIDATE-STATUS-20260919.md +0 -79
- package/docs/internal/MASTER-PLAN-3.0.md +0 -411
- package/docs/internal/MEMORY-GOVERNANCE-20260917.md +0 -309
- package/docs/internal/MEMORY-MUTATION-AND-INDEX-DESIGN.md +0 -85
- package/docs/internal/MERGE-CONFLICT-SCAN-20260914.md +0 -222
- package/docs/internal/NEXT-VERSION-TODO.md +0 -95
- package/docs/internal/OFFICIAL-DISCUSSION-DRAFT.md +0 -80
- package/docs/internal/PENDING-FIXES-20260916.md +0 -289
- package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md +0 -705
- package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md.bak-s10 +0 -649
- package/docs/internal/PROCEDURAL-MEMORY-AND-APPROVAL-DESIGN-20260918.md +0 -225
- package/docs/internal/PROGRESS-20260917.md +0 -93
- package/docs/internal/PROMPT-GAP-AUDIT-20260920.md +0 -128
- package/docs/internal/R1-DEGRADE-AUDIT-20260918.md +0 -163
- package/docs/internal/R1-READABILITY-FORENSICS-20260919.md +0 -127
- package/docs/internal/R2-EVIDENCE-DEEP-AUDIT-20260918.md +0 -140
- package/docs/internal/R3-DEGRADE-LEDGER-DESIGN-20260918.md +0 -138
- package/docs/internal/R4-RECALL-QUOTA-PLAN-20260918.md +0 -218
- package/docs/internal/RAG-KARPATHY-PROGRAM.md +0 -229
- package/docs/internal/RELEASE-PROCESS.md +0 -99
- package/docs/internal/REPORT-P0-NIGHTLY.md +0 -212
- package/docs/internal/REPORT-P5-ACCEPTANCE.md +0 -31
- package/docs/internal/REPORT-WB-GRAPH-NIGHTLY.md +0 -153
- package/docs/internal/RESUME-20260918.md +0 -171
- package/docs/internal/RESUME-20260919.md +0 -104
- package/docs/internal/REVIEW-WB-GRAPH-SELF.md +0 -81
- package/docs/internal/RHINELAB-TO-DEEPSEEK-FEASIBILITY.md +0 -198
- package/docs/internal/ROADMAP-20260917-WEEK.md +0 -439
- package/docs/internal/ROADMAP.md +0 -106
- package/docs/internal/RUN-P0-NIGHTLY.md +0 -227
- package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +0 -185
- package/docs/internal/S10-GAP-INVENTORY-20260917.md +0 -239
- package/docs/internal/S10-GAPS-PLAIN-20260917.md +0 -125
- package/docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md +0 -360
- package/docs/internal/SESSION-FILE-REPAIR-PROTOCOL.md +0 -90
- package/docs/internal/SUBAGENT-REPORT-ROUTING-PRE-RESEARCH.md +0 -261
- package/docs/internal/T6-EXECUTION-20260920.md +0 -130
- package/docs/internal/TELEMETRY-EFFECT-REPORT-DESIGN-20260918.md +0 -146
- package/docs/internal/THESIS-GAP-ANALYSIS-20260918.md +0 -89
- package/docs/internal/THESIS-OUTLINE-20260918.md +0 -147
- package/docs/internal/THREE-LAYER-CONTRACT.md +0 -219
- package/docs/internal/TODO-BACKLOG.md +0 -263
- package/docs/internal/TODO-GRAPH.html +0 -715
- package/docs/internal/TODO-GRAPH.html.bak-20260914-v2 +0 -493
- package/docs/internal/TODO-GRAPH.html.bak-20260915-alsfix +0 -710
- package/docs/internal/TODO-GRAPH.html.bak-20260915-p1 +0 -710
- package/docs/internal/TODO-GRAPH.html.bak-20260915-p6a-rev +0 -703
- package/docs/internal/TODO-GRAPH.html.bak-20260915-wshint +0 -710
- package/docs/internal/TODO-GRAPH.html.bak-20260916-batch +0 -715
- package/docs/internal/UPSTREAM-ISSUE-PR-TRIAGE-20260919.md +0 -297
- package/docs/internal/UPSTREAM-ISSUES-3RD-AUDIT-20260920.md +0 -104
- package/docs/internal/WB-FORMAT-CONVENTION.md +0 -112
- package/docs/internal/WB-GRAPH-DECISIONS-20260914.md +0 -71
- package/docs/internal/WB-GRAPH-INTEGRATION-PLAN.md +0 -386
- package/docs/internal/WB-GRAPH-RESEARCH-BRIEF.md +0 -118
- package/docs/internal/WB-GRAPH-RESEARCH-EXTERNAL.md +0 -228
- package/docs/internal/WB-GRAPH-RESEARCH-LOCAL.md +0 -190
- package/docs/internal/reviews/CLAIM-VERIFICATION-20260914.md +0 -56
- package/docs/internal/reviews/PLAN-gpt6astra-round2-20260914.md +0 -787
- package/docs/internal/reviews/REVIEW-gpt6astra-20260914.md +0 -112
- package/docs/internal/reviews/ROUND3-REVIEW-INTEGRATION-20260914.md +0 -230
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
# RAG + Karpathy(wiki) 攻关 · 总细则
|
|
2
|
-
|
|
3
|
-
> **效力**:本文件是「RAG + Karpathy(wiki) 攻关」这一**最重要项目**的总细则——人能读、可执行、每条都能判定。
|
|
4
|
-
> **上位规范**:`docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md`(条款 S1–S10、§4 阶段门、§4.1 不采纳项、§5 施工顺序、§7 立场、附录 A–F);接口与预算见 `docs/internal/THREE-LAYER-CONTRACT.md`(I1–I7、C1–C7);白板契约见 `docs/internal/WB-FORMAT-CONVENTION.md`;排期见图 `docs/internal/TODO-GRAPH.html`,主线见 `docs/internal/ROADMAP.md`,待办总表见 `docs/internal/TODO-BACKLOG.md`。
|
|
5
|
-
> **建立**:2026-09-14。**边界**:不新增条款、不改接口形状;本文件只**下拆与判定**,条款冲突以 SPEC 为准。
|
|
6
|
-
> **纪律**:下文凡引用数字/行号/卡片 id 的,均为本次实际读取所得;未读到的写「未找到,需查」。
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. 一句话定位
|
|
11
|
-
|
|
12
|
-
**把「检索」从"每轮靠模型自觉去查"改成"设备端零 token 的自动注入 + 逐层下探取证",同时把 Karpathy 式 wiki 的"索引即自然语言 / 整理 / 答案回流"落到本仓白板上。**
|
|
13
|
-
|
|
14
|
-
- 语义侧要解决的是 **S1/S2/S4/S5 四处草台**(SPEC §3 结论:本轮之前检索侧"算法"只有 S3/S6 是对的)。施工范围就是这四条。
|
|
15
|
-
- wiki 侧要解决的是 **S10 六条**(白板锚点进语料、索引派生、lint 补齐、答案归档回流、人机分区)。
|
|
16
|
-
- **与已完成的三层(open-viking 式)的关系**:三层 = 语义的**接口**(Tier-0 目录 / Tier-1 L0 摘要 / Tier-2 原文块),语义算法 = **层内算法**。接口没冻结就改算法 = 白改(SPEC §4 硬约束)。三层现况**未完成**:C1/C2/C4/C7 已完成,**C3/C5/C6 未做**(`THREE-LAYER-CONTRACT.md` §7 表;`TODO-GRAPH.html` P0-2 状态"施工中(C1/C2/C4 ✅;C3/C5/C6 待做)")。此前"三层已做完"的判断已被明确纠正。
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## 2. 成本模型(谁付费)
|
|
21
|
-
|
|
22
|
-
**判据不是"RAG vs 长上下文",而是"谁付费" —— 且必须分档回答**(SPEC §7,**v2 分档口径**)。下表 = SPEC §7 v2 的分档表 + 补本仓选择列:
|
|
23
|
-
|
|
24
|
-
| 替代方案 | 真实主张 | 隐含前提 | 对最优档 | 对兼容档 | **我们的选择** |
|
|
25
|
-
| --- | --- | --- | --- | --- | --- |
|
|
26
|
-
| LLM Wiki(Karpathy) | 传统 RAG 的病是**没有知识积累**:每次查询都从零重新发现;改为让 LLM 渐进维护持久 wiki(实体页/概念页/交叉引用/矛盾标注/综合结论),靠 `index.md` + `log.md` 导航 | 写入侧与维护侧**由 LLM 长期承担**;原文称在"约 100 份资料、数百页"规模下**可避开嵌入式 RAG 基础设施** | ✅ 可用(查询侧多花 token 换整合质量) | ⚠️ 只能作**可选增强**(查询侧仍要 LLM 读页) | **吸收"索引即自然语言"**:Tier-0 目录 + L0 摘要 = 我们的 `index.md`;维护走**模板化写入**(自动沉淀 + 结构化日志),不让 LLM 自由重写 |
|
|
27
|
-
| Grep agentic(Claude Code) | "早期版本用了 RAG + 本地向量库,很快发现 agentic search 更好";"模型驱动的 glob 和 grep 打败了一切";GrepTool 默认只回文件名、`head_limit` 250 | **每轮多轮 LLM 工具调用**(token 乘数)+ 语料是**精确 token 可匹配**的 | ⚠️ 可作**补充臂** | ❌ 多轮即乘数;自然语言记忆没有可 grep 的字面 | **只吸收"要不要搜由智能判断"**,**默认**判断交给**本地线性分类器 fv2(0 token)**;不引入多轮 LLM(最优档若要,按 S9.2 带三件套) |
|
|
28
|
-
| 长上下文 / 全灌 | 每轮 token ∝ 语料规模 | 上下文无限、token 不计价 | ⚠️ 注入预算 `injectBudgetChars` 默认 **2000** 字符(可配)是硬约束 | ❌ 这一档正是 token 敏感 | **否决**;只给目录,命中不足才下探 |
|
|
29
|
-
| **本地检索(本仓)** | 设备算力,一次性,0 token | 设备能跑端侧嵌入(e5 / BGE-M3) | ✅ 主线(**允许叠加 LLM 增强**,按 S9.2) | ✅ 唯一契合 | **主线** |
|
|
30
|
-
|
|
31
|
-
| 路线 | 谁付费 | 最优档 | 兼容档 |
|
|
32
|
-
| --- | --- | --- | --- |
|
|
33
|
-
| 长上下文 / 全灌 | 每轮 token ∝ 语料规模 | ⚠️ | ❌ |
|
|
34
|
-
| Grep agentic | 每轮多次 LLM 调用的乘数 | ⚠️ 补充臂 | ❌ 最贵的一档 |
|
|
35
|
-
| LLM Wiki | 写入/维护侧 LLM token | ✅ | ⚠️ 可用,但必须模板化写入 |
|
|
36
|
-
| **本地检索(本仓)** | **设备算力,一次性,0 token** | ✅ 主线 | ✅ 唯一契合 |
|
|
37
|
-
|
|
38
|
-
**硬约束(v2 分档,SPEC S9)**:**兼容档** = **token 敏感 + 设备弱** → **S9.1(检索路径零额外 LLM token + 弱设备可跑)是这一档的硬约束**;**最优档**(首要用户 = 项目作者本人)= 以最优为目标,**允许**在检索路径引入 LLM,但每条必须带 **成本 + 门控 + 无 LLM 时的降级路径**三件套(**S9.2**)。两档**共用同一套接口与判据**(S9.3),**禁止**把"只能跑通兼容档"的设计当目标形态(S9.4)。
|
|
39
|
-
> **历史说明**:本文档 v1 时期写的是"轻度用户 = token 敏感 + 设备弱 → S9 是硬约束",把兼容档约束当成了全项目硬约束 —— **那是定调错误,已按用户 2026-09-14 裁定更正为分档**。旧 S9.3 的"token 成本归贵侧、算力成本归设备侧"已并回 SPEC §7。
|
|
40
|
-
|
|
41
|
-
**由此推出的工程约束(SPEC §7.5 末)**:
|
|
42
|
-
1. 端侧嵌入必须**增量**(S1.3)——**两档共同**要求:兼容档上是"弱设备每写一条记忆就全量重嵌 → 风扇、电耗、卡顿";最优档上是"索引追不上写节奏 → 静默丢弃注入"。
|
|
43
|
-
2. 查询侧加工(S2)**按档实现**:兼容档**必须本地实现**(规则(去指示词、抽实体)+ 本仓术语表 + 端侧小模型);最优档可升级为 LLM 改写,但要按 S9.2 带三件套,且降级后回到那条本地路径。
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 3. 工作流总图
|
|
48
|
-
|
|
49
|
-
**六步链路**(`ROADMAP.md` §0 / `SEMANTIC-ARCHITECTURE-SPEC.md` §1):
|
|
50
|
-
|
|
51
|
-
| 步 | 语义算力 | 本攻关归谁 | 判定条件 |
|
|
52
|
-
| --- | --- | --- | --- |
|
|
53
|
-
| ①产生 | 无 | 不在本攻关(B 线 procedural memory,P1-⑧ 封存) | — |
|
|
54
|
-
| ②存储 | **有**(分块/嵌入/索引) | **C 线** S1.3;A 线 C3 接线 | 改 1 条不触发全量重嵌 |
|
|
55
|
-
| ③选取 | **有**(查询理解→召回→精排→决策) | **C 线** S2/S4;S3/S6 已合规**不得削弱** | top-5 命中率、下探可达率 |
|
|
56
|
-
| ④注入 | **有**(压缩/预算/降级标注) | **A 线** C5;**C 线** S5.3 | 缺数据必带降级标注,不许静默 |
|
|
57
|
-
| ⑤晋升 | 无 | 不在本攻关(P1-⑧ 封存) | — |
|
|
58
|
-
| ⑥呈现 | 无 | **wiki 界面层,排在 RAG 之后(封存区)** | — |
|
|
59
|
-
|
|
60
|
-
**三条阶段线**(SPEC §4):
|
|
61
|
-
|
|
62
|
-
| 线 | 内容 | 起点条件 | 可否并行 | 每步归谁 / 判定 |
|
|
63
|
-
| --- | --- | --- | --- | --- |
|
|
64
|
-
| **A · 接口冻结** | C3(接线 L0 向量索引 + 显式落 layer/status)→ C5(Tier-0 常驻 + 闸门 + 配额 + I7 降级标注)→ C6(三层验收套件) | 已开工 | — | 执行方;判据 = 契约 §7「验收判据」1–7 全绿 |
|
|
65
|
-
| **B · 立规与审计**(已启动) | 规范**已升至 v2**(§7 分档重写 + S9 拆条 + 数值口径统一);按 S1–S8 逐条审实现;跑 E1/E3 三策略对照补齐 S7 基线 | 只要不跨界改接口即可开工 | ✅ 与 A 并行 | 执行方;判据 = **分档审计**(兼容档守住 S9.1 + 最优档每条重方案有三件套)+ 每条改造带三策略对照 |
|
|
66
|
-
| **C · 算法改造** | S1.3 → S5.3 → S2 → S4 | **A 全绿 + 宿主重启复核注入 Score 钉子** | ❌ 不得与 A 抢同一批文件 | 执行方;判据 = 每条一项能失败的断言 |
|
|
67
|
-
|
|
68
|
-
**依赖**:`④注入`(C5) 依赖 `②存储`(C3) 的层/状态列;`C 线` 全部依赖 `A 线`接口冻结。**C 线不得与 A 线抢同一批文件**(SPEC §4 表原话)。
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## 4. 施工清单(阶段 C,按顺序)
|
|
73
|
-
|
|
74
|
-
| # | 条款 | 改哪个文件(实际路径与行号) | 判据(能失败的断言) | 成本 / 风险 |
|
|
75
|
-
| --- | --- | --- | --- | --- |
|
|
76
|
-
| 1 | **S1.3** 块级增量 | `python/m7_embedding_pre_v1.py:75`(`chunk_id_for`,块 ID 已内容寻址);`lib/index-sync-pre.js:57`(`buildIndexSyncPlansPre`)/ `:62`(`miv` 取值)/ `:63`(只认 `idx_pre_` 前缀);`lib/m4-corpus-pre.js:128`(`memoryIndexVersion` 出口);`lib/shadow-retrieval-pre.js:145`(`memoryIndexVersion()` canonical tuples → `idx_pre_`+sha256) | 编辑 1 条只嵌变化块;删 1 条 = 零 encode(P0-4 crit 原文);缓存键含**引擎身份**(引擎+模型+维度+归一化) | 约 1 天(P0-4 est);**根因级**,改错 = 索引身份错乱 → 需带 S1.2 引擎身份断言 |
|
|
77
|
-
| 2 | **S5.3** 降级标注 | `lib/context-host-pre.js:352`(`pushDrop('index-not-ready:' + reason …)` 静默丢弃点);`:185`(`diagCtx('ctx-host drop: …')`);注入侧 `lib/activation-inbox-pre.js:250`(`renderReferenceTail`) | 索引未就绪期间注入**不丢空**——至少出现明确降级标注(P0-4e crit 原文);`[语义索引未就绪 · 已降级为词法]` 字样可断言 | 约半天;低风险、止血症 |
|
|
78
|
-
| 3 | **S2.1/S2.2** 查询改写 + 多查询 | `lib/context-host-pre.js:230`(`buildObserveWindowText`)/ `:347`(现直接把该原文送去检索);`:425` / `:515`(JS 决策侧同一文本) | 改写失败**必须回退原始 query**(S2.4),检索不得为空;改写后的 query 与原 query 各召回 → **共同融合**(不是取并集就地打分);**离线可关**开关存在且默认行为可测 | 收益最大、风险最低(不碰索引、不碰接口);**⚠️ 分档要求**:兼容档按 **S9.1** 必须本地实现(规则 + 术语表 + 端侧小模型);最优档若做成 LLM 调用,按 **S9.2** 补三件套,且降级后回到本地路径 |
|
|
79
|
-
| 4 | **S4.2** 精排近似 → cross-encoder | `lib/index.js:4068`(P8 RRF 融合,`:4069` 注释 rank-space `1/(k+rank/divisor)`,`k=60`);`lib/recall-fusion-pre.js:19`(`FUSION_RRF_K_PRE_V1 = 60`) | 先做 S4.2 近似级(融合序 + fv2 决策)并**在规范里标为近似**;精排器必须**离线可评估**;候选池 `K`=8 / `B0`=800 与 S7 判据就绪前**不上 cross-encoder** | 最贵、最后做;无资源时保持近似并标注 |
|
|
80
|
-
|
|
81
|
-
**每条都必须带**(SPEC §5):S7 三策略对照 + 一条能失败的断言 + 引用的条款号。
|
|
82
|
-
|
|
83
|
-
**S1.2 相关**(未落,与 S1.3 同批):缓存键 = **引擎身份** + 块 ID;换引擎即整库重建(**双引擎是 OR 关系**:普通用户 JS `multilingual-e5`,发烧友 Python `BGE-M3`)。
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## 5. 隶属卡片映射
|
|
88
|
-
|
|
89
|
-
来源:`docs/internal/TODO-GRAPH.html` 的 `DATA.items`(本次实际读取,行号见下)。**未在图中出现的本攻关条目,一律标「不在图中」**。
|
|
90
|
-
|
|
91
|
-
| 卡片 id | 图内 lvl / 标题 | 图内现状(原文摘要) | 落在哪条施工项 |
|
|
92
|
-
| --- | --- | --- | --- |
|
|
93
|
-
| `P0-1` | P0-① 解锁会话检索 | 待开工(口径已定) | **本攻关前置**(D1 已拍板 C+B;依赖它才能跑检索) |
|
|
94
|
-
| `P0-2` | P0-② OpenViking 式三层补全(验收实测未过 · **阶段门**) | 施工中(C1/C2/C4 ✅;C3/C5/C6 待做) | **A 线全部**(C3/C5/C6)= 本攻关的开工条件 |
|
|
95
|
-
| `P0-3` | P0-③ 分级精确检索:Tier-0 目录 → L0 摘要 → 原文 | 待开工 | **A 线 C5** 的下探闸门;S5.2 配额 |
|
|
96
|
-
| `P0-4` | P0-④ 记忆增删 × 少重建:块级向量缓存 + 检索 fail-open | 待开工 | **施工项 1(S1.3)** |
|
|
97
|
-
| `P0-4b` | P0-④b supersede 改正语义 | 待开工 | S1.3 后半(supersede 声明 + 双层屏蔽);P1-⑧ 依赖它 |
|
|
98
|
-
| `P0-4c` | P0-④c 差量同步:upsert + tombstone | 待开工 | S1.3(miv 退化为诊断用;缓存键改 `memoryId → recordDigest` 集合) |
|
|
99
|
-
| `P0-4d` | P0-④d 注入压缩上限 + 可排除来源 | 待开工(口径待 D4 确认) | **S5.2 配额 + S5.1 压缩**(C5) |
|
|
100
|
-
| `P0-4e` | P0-④e 索引同步防抖(实测卡死 20 分钟) | 已实测复现 | **施工项 2(S5.3)** + 施工项 1 |
|
|
101
|
-
| `P1-5` | P1-⑤ 验收判据换代:能力可达性套件 | 待开工 | **C6**(每条能力一个"默认配置下可达"的断言) |
|
|
102
|
-
| `P1-6` | P1-⑥ 白板 combine:实时进展 + 全流程可视化 | 契约层已落地(B 线);**界面层封存(3.1)** | **第 7 节 wiki 契约层**;界面层排在 RAG 之后 |
|
|
103
|
-
| `P1-8` | P1-⑧ procedural memory 重构 | 封存(3.1) | 不在本攻关(依赖 P0-4b,但属 ⑤晋升步) |
|
|
104
|
-
| `P1-9` | P1-⑨ 语义架构规范 v2(已立):用规范 RAG 策略清单审计并约束检索 | 规范已立(v2;B 线,可与三层施工并行);**审计待跑** | **B 线全部**;四线顺序与 S9 分档审计在此卡 |
|
|
105
|
-
| `CHK-1` | P1-⑬ 记忆文件卫生:空行残留 / 标题层级 / 容量逼近上限 | 本机已复现(已清理一轮,机制待修) | 与 **S5.3/⑤** 相关(笔记容量 94% → 写入被拒会打断链路) |
|
|
106
|
-
| `P1-14` | P1-⑭ 语义臂会静默失效:miv 一变,0-1 相似度排序就消失 | 已实测复现(含根因) | **施工项 1 + 2**(块级缓存 + 显式降级标注) |
|
|
107
|
-
| `P1-15` | P1-⑮ 注入层不是语义唤回:注入块里看不到 0-1 相似度 | 已修(待宿主重启验证) | **C7 已落**(S5.4);残留"注入层骨架未升级为 Tier-0 目录"归 **P0-③ / C5** |
|
|
108
|
-
| `P1-16` | P1-⑯ 三层检索的量化实验 | 词法基线已跑,待语义臂恢复后正式跑 | **第 6 节实验**(S7,E1/E3) |
|
|
109
|
-
| `P2-7` | P2-⑦ 跨 Agent 记忆入检索(外部文档 + 外部会话) | 待拍板(见 D5) | **不在本攻关**(依赖 P0-3;路径 C 分期) |
|
|
110
|
-
|
|
111
|
-
**说明**:`P0-1`/`P1-5`/`P1-6`/`P1-8`/`P2-7` 列在此表是**边界声明**(前置 / 依赖 / 明确不属本攻关),不是施工项。实际参与本攻关施工的是:`P0-2 / P0-3 / P0-4 / P0-4b / P0-4c / P0-4d / P0-4e / P1-5 / P1-9 / CHK-1 / P1-14 / P1-15 / P1-16`(共 13 张)。
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## 6. 实验与判据(S7)
|
|
116
|
-
|
|
117
|
-
**核心纪律**:**没有实验就没有资格改算法**(S7)。每条改造必须带三策略对照。
|
|
118
|
-
|
|
119
|
-
**三策略(S7.1**,`THREE-LAYER-CONTRACT.md` §4.5 同名 E3):
|
|
120
|
-
|
|
121
|
-
| 策略 | 内容 |
|
|
122
|
-
| --- | --- |
|
|
123
|
-
| **A** | 只给上层目录(Tier-0) |
|
|
124
|
-
| **B** | 目录 + 命中条摘要(Tier-0 + Tier-1 top-`K`) |
|
|
125
|
-
| **C** | 目录 + 候选集全灌(上限 `injectBudgetChars` **2000** 字符;旧文写 4800 是更早的默认值,已作废,见 SPEC §0.2) |
|
|
126
|
-
|
|
127
|
-
**四项指标(S7.2)**:`top-1/top-3/top-5 命中率`、`下探后答案可达率`、`注入 token 成本`、`噪声比`。
|
|
128
|
-
**判据必须能失败(S7.3)**:写成"若实现被改坏则报红",不允许"声明了就算过"。
|
|
129
|
-
|
|
130
|
-
**当前词法基线(2026-09-14,词法臂,语义臂卡死期间;SPEC S7 现状基线原文)**:
|
|
131
|
-
- 3 条事实 → L0 **top-1 命中 1/3**、**top-5 命中 2/3**(`P1-16` 补充:m73 根因那条 top-5 未中)。
|
|
132
|
-
- 命中原因**全是词法、0 条带语义分**。
|
|
133
|
-
- 观察到单字母 token 污染(`词法×3(agent,检索,a)`)。
|
|
134
|
-
- **样本量 3 条 ⇒ 该基线只有方向性意义**;正式实验样本为 **12 条已知答案的事实**(`P1-16` 实验一定义),判据 **top-5 命中 ≥ 10/12 且下探后答案可达 ≥ 10/12**。**正式数字:待跑**(前置 = 语义臂恢复)。
|
|
135
|
-
|
|
136
|
-
**两个实验定义(`P1-16` 原文)**:
|
|
137
|
-
- **实验一 · 下探准确性**:12 条事实 → top-1/3/5 命中率 + expand 后答案可达率 + 每跳 token 成本 + 需要几跳。
|
|
138
|
-
- **实验二 · 直接灌是否够用**:同一批问题跑 A/B/C;指标 = 盲测答题正确率、注入 token 数、噪声比;**结论要能直接决定"中间概览层要不要补"**。
|
|
139
|
-
|
|
140
|
-
**预算校准(`THREE-LAYER-CONTRACT.md` §4.5)**:E1 扫 `L1 ∈ {60,90,140,220,400}`、`B0 ∈ {200,400,800,1600}`,记录命中率与答案可达率;选值规则 = **满足"答案可达率 ≥ 0.9"的前提下取最小预算**(膝盖点);结果回写契约表并同步 `TODO-GRAPH.html` 的 P1-⑯。
|
|
141
|
-
|
|
142
|
-
**token 计量口径**:预算门取 `max(ceil(chars/2), 仓库口径)`(保守值恒 ≥ 仓库值);仓库 `estimateSessionTokens = ceil(chars/4)+4`(`lib/index.js:2471`)**对 CJK 低估 2–4 倍**,直接当预算门会静默突破 I1。
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## 7. Karpathy(wiki) 侧的落地(S10)
|
|
147
|
-
|
|
148
|
-
**S10 六条的施工拆分**(SPEC §8.3 表 + S10.1–S10.6 原文):
|
|
149
|
-
|
|
150
|
-
| 条款 | 要做什么 | 载体 / 现状 | 判定 |
|
|
151
|
-
| --- | --- | --- | --- |
|
|
152
|
-
| **S10.1** 页面即语料 | 白板页面/卡片必须带锚点 `<!-- memory:mem_<32hex> -->` → 白板内容**自动进检索语料**,无需新机制;同时解掉"双状态源" | `WB-FORMAT-CONVENTION.md` §2 锚点契约(id = `mem_`+sha256(workspaceKey+页面路径+卡片标题) 前 32 位) | 每张卡锚点过 `^mem_[0-9a-f]{32}$`;重排 id 不变、改标题 id 变且旧 id 有 supersede 留痕 |
|
|
153
|
-
| **S10.2** 索引自动生成 | `index` 由页面**派生**(每条 = 链接 + 一句话 + `layer`/`status`),与白板**不得各写一份** | `WB-FORMAT-CONVENTION.md` §3 派生格式 | 派生出的 index 与 **Tier-0 目录条目一致** |
|
|
154
|
-
| **S10.3** lint 补齐 | 零 token 四类:①孤立条目 ②陈旧 ③被提及却无独立页 ④缺交叉引用;**只有"矛盾检测"需要 LLM,必须按需触发(用户点一下),不得进自动路径** | `WB-FORMAT-CONVENTION.md` §6 五类清单;**现状 = 缺** | 造一个孤立条目 → lint 报出;造一对矛盾结论 → 手动触发时报出;lint **只报告不自动改** |
|
|
155
|
-
| **S10.4** 不建状态机 | 白板是视图层;状态归**记忆条目**(`layer`+`status` 三值)与 sidecar;lint 只做只读检查 + 留痕 | 沿用既有拍板 | 新增状态 = 违规 |
|
|
156
|
-
| **S10.5** 答案归档回流 | 一次检索/分析的结论要能**一键**存成白板页面或记忆条目(现有 `memory_note_pre` / handoff 即为通道) | **目前半闭环**(SPEC 原文) | 任何"只活在对话里"的结论都算流程不合格 |
|
|
157
|
-
| **S10.6** 人机分区 | 模型维护区 / 用户备注区,`<!-- model -->` / `<!-- user -->`,整篇重写必须原样带回用户段 | `WB-FORMAT-CONVENTION.md` §5 | 模型整篇重写后 `<!-- user -->` 段**逐字节保留** |
|
|
158
|
-
|
|
159
|
-
**白板契约(`WB-FORMAT-CONVENTION.md` 五要素)**:锚点契约(§2)/lint 五类(§6)/人机分区(§5)/答案归档(§7)/写入门"只比对卡片集合,丢卡可检出"(§4)。
|
|
160
|
-
|
|
161
|
-
**顺序(已在 `TODO-GRAPH.html` P1-6 内定,2026-09-14)**:
|
|
162
|
-
- **契约层(格式 / 锚点 / 索引派生)必须在 RAG 底层之前** —— 它决定语料形状,先做 RAG 就得对语料重做一遍。→ 已提前进 B 线,落地为 `WB-FORMAT-CONVENTION.md` v1。
|
|
163
|
-
- **界面层(`lib/client.js` 渲染 / 看板交互)必须排在 RAG 之后** —— 它只是视图。→ **封存(3.1)**。
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## 8. 不采纳清单(照 SPEC §4.1)
|
|
168
|
-
|
|
169
|
-
| 不采纳项 | 理由(SPEC §4.1 原文要点) |
|
|
170
|
-
| --- | --- |
|
|
171
|
-
| **迭代式 RAG(多轮检索/自省循环)** | 我们的场景是**每轮自动注入**,多轮检索会把延迟与 token 乘 2 以上;而"要不要检索"已由 **S6**(fv2 决策 + echo veto + 冷却)承担。迭代式 RAG 适用于"单次检索明显不够 + 允许用户等"的问答场景,不是本仓形态。**不作为默认形态(两档皆然)**;最优档若要当可选增强,按 S9.2 带三件套 |
|
|
172
|
-
| **重排(S4):先做近似级,cross-encoder 留给最优档** | 在候选池(`K`=8 / `B0`=800)与 S7 实验判据就绪前上重排,只会增加延迟而无从证明它比 RRF 融合序更好。**先做 S4.2 的近似级,用实验说话**;判据就绪后 cross-encoder 作为**最优档**重方案上线(按 S9.2 标注成本),兼容档停在近似级 |
|
|
173
|
-
| **多引擎混排:禁止** | 双引擎是 **OR** 关系(JS `multilingual-e5` 或 Python `BGE-M3`),切换即整库重建;两套向量空间混排即错误结果(S1.2)。切换引擎属**换档**(S9.3 允许换引擎与预算) |
|
|
174
|
-
| (隐含)**Query 改写:兼容档不做 LLM 调用** | **S9.1**:兼容档检索路径零额外 LLM token。**S9.2**:最优档可以引入 LLM 改写,但凡要在路径上引入 LLM 的方案,**必须写明 token 成本、触发门控与无 LLM 时的降级路径**,三件套缺一不予采纳 |
|
|
175
|
-
| (隐含)**语义臂不可用时静默** | S3.3/S5.3/I7:必须显式标注,**不得静默** |
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## 9. 风险与已知坑
|
|
180
|
-
|
|
181
|
-
| 坑 | 证据(文档原文 / 代码位置) | 对策 |
|
|
182
|
-
| --- | --- | --- |
|
|
183
|
-
| **整份哈希 miv ⇒ 写一条记忆就全库重嵌** | `lib/index-sync-pre.js:62` 取 `memoryIndexVersion`、`:63` 只校验 `idx_pre_` 前缀;SPEC S3 现状:"索引身份是**整份语料哈希** `memoryIndexVersion`(`lib/index-sync-pre.js:57`),任何细节改动 → miv 变 → 全量重发 + 全量重嵌" | 施工项 1(S1.3):块 ID 进缓存键,只嵌新增块 |
|
|
184
|
-
| **索引未就绪 ⇒ 静默丢弃注入**(曾是注入消失的直接原因) | `lib/context-host-pre.js:352` `pushDrop('index-not-ready:' + …)`;P0-4e 现场:诊断日志 07:43→08:01 每轮刷 `ctx-host drop: index-not-ready:sync-in-progress`(cv 175→612),期间注入被显式丢弃;P1-14 决定性证据:**每轮**都在 drop,从 07:43 起持续 20 分钟未就绪 → packet 归零 | 施工项 2(S5.3):显式降级标注 + 防抖;未就绪期不得丢空 |
|
|
185
|
-
| **"不是重建慢,是同步状态机卡死"** | P0-4e 08:09 补测:worker 子进程 CPU 累计 659.4s、**3 秒内增加 0.00s(在闲着)**,索引产物 26 分钟零更新;对比此前一次重建只花 **6 秒**(07:42:50→07:42:56) | 别按"加速重建"下药;按"任务被反复作废/饥饿"复测 |
|
|
186
|
-
| **语义分整段消失 = miv 一变那条链** | P1-14 根因链:07:53:33 改项目笔记 → 语料变 → miv 变 → 新 miv 对应向量文件不存在 → worker 三重过滤(workspaceRef + scope + miv)返回空分 → 静默退化为纯词法 | 同施工项 1+2;并给 S8.2 语料/索引/向量三件套身份一次打印 |
|
|
187
|
-
| **`l0-index-pre.js` 曾零引用未接线** ⇒ L0 层没有自己的向量索引(现有向量是对**原文块**做的) | P0-2 实测缺口④、P1-16 原文 | A 线 C3 接线(模块已完成,接线点待做) |
|
|
188
|
-
| **`renderReferenceTail` 从不打印 `item.score`** ⇒ 看得见"要不要注入"、看不见"到底多像" | P1-15 原文:分值上游一直算得出来(`act.candidates[].score` → `packet.references[].score`),但只渲染 Source/Reason/Reference 三行;reason 串也只有 lane/decision/reasonCodes | **C7 已修**(`lib/activation-inbox-pre.js:210` `renderItemBlock` 增第四行;Python 侧 `python/worker_semantic_pre_v1.py:707` 补 `intent/dense/margin`) |
|
|
189
|
-
| **粗粒度注入骨架 ≠ Tier-0 目录** | P1-15 残留项:注入层骨架(日志尾/反思摘要/笔记头…)仍未升级为带 `layer/status` 的 Tier-0 目录 | A 线 C5 |
|
|
190
|
-
| **改 `TODO-GRAPH.html` 时把 ASCII 双引号写进 JS 字符串 ⇒ 解析失败** | **今日工作日志**记为 `Unexpected identifier`;本次在 `docs/` 内**未找到**书面记载(`grep` 无命中) | 改图统一用 `「」`;**每次改图必须跑 verify**(日志记载 verify exit=0 且卡片数不变) |
|
|
191
|
-
| **笔记容量逼近上限会打断链路** | CHK-1:笔记容量 **11,308/12,000 = 94%**,随时撞上"超容量 → 写入被拒" | 容量到 90% 就主动折叠,而不是等写入被拒 |
|
|
192
|
-
| **CJK token 被低估** | `THREE-LAYER-CONTRACT.md` §4.6:`estimateSessionTokens = ceil(chars/4)+4`(`lib/index.js:2471`)对 CJK 低估 2–4 倍,直接当预算门会**静默突破 I1** | 预算门取 `max(ceil(chars/2), 仓库口径)` |
|
|
193
|
-
| **三层同给必超预算** | 契约 §4.1 实测:`800 token(≈1600 字符) + 8×140 + 2400 = 5120 字符 > injectBudgetChars 2000`(旧文写 4800,是更早的默认值;改成 2000 后这个结论**更强**) | **逐层下探**,不同时给 |
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## 10. 一页速查
|
|
198
|
-
|
|
199
|
-
**现在在哪**
|
|
200
|
-
> **状态校准(本行由 2026-09-14 口径同步轮补上)**:本节的 A 线旧文字("C3 待接线、C5 待做、C6 待做")**已过期** —— 按 `ARCH-REVIEW-BRIEF.md` §4.2 与实测:**C3/C5/C6 均已完成**,C5 套件 **83/0**、C6 套件 **122/0**(本轮复跑)。A 线状态以该文件为准;下面几条未逐条重写的旧描述请按此读。
|
|
201
|
-
- A 线(接口冻结):C1/C2/C4/C7 已完成;**C3 已接线、C5 已交付、C6 已交付**(旧文字:C3 待接线、C5/C6 待做)。
|
|
202
|
-
- B 线(立规与审计):规范 **v2** 已立(`SEMANTIC-ARCHITECTURE-SPEC.md`,v1→v2:§7 分档 + S9 拆条 + 数值口径),白板契约 v1 已立(`WB-FORMAT-CONVENTION.md`);**审计待跑**、**S7 基线只有 3 条样本**。
|
|
203
|
-
- C 线(算法改造):**未开工**(S1.3 / S5.3 / S2 / S4 全部待做)。
|
|
204
|
-
- 重启后已复核:注入块 `Score: 0.xx (rank n/m)` 出现且严格降序(**C7 钉子通过**);但同批注入 reason 为 `intent=1.00 dense=0.00` ⇒ **候选全部来自词法臂,稠密臂零贡献**(列入实验线追查)。
|
|
205
|
-
|
|
206
|
-
**下一步做什么(按顺序,可直接执行)**
|
|
207
|
-
1. **C3 接线**:把 `lib/l0-index-pre.js` 的 `createL0IndexPre`(此前全仓零引用)接进端侧嵌入通道 `createJsSemanticEnginePre` 的 `embedPassages`,新增配置项(**2026-09-14 用户裁定:默认开** `l0IndexEnabled: true`,设 false 才回到零 IO);接线点必须传 `layer`(`lib/l0-index-pre.js:171/192` 两条入口已透传 `layer`)。验收:`tests/smoke/smoke-test-l0-index-pre.mjs` 全绿 + 旧索引文件不被无谓重建。
|
|
208
|
-
2. **C5 注入层改造**:`lib/index.js` + `lib/context-host-pre.js` —— Tier-0 常驻目录(`lib/tier0-catalog-pre.js` 已出生成器,真实语料 **788 token ≤ 800**)+ per-layer 配额(`project ≤ 60%·B0`;`whiteboard`/`user` 各保底 10%)+ 闸门下探(默认只给 Tier-0;命中 < 2 条或问题含「为什么/怎么/具体/复现」→ 下探 Tier-1)+ **I7 显式降级标注**,并把 `lib/context-host-pre.js:352` 的 `index-not-ready` 静默丢弃改为**降级但仍注入目录层**。
|
|
209
|
-
3. **C6 验收套件**:`tests/smoke/smoke-test-three-layer-pre.mjs`,落地契约 §7 判据 1–7(尤其"造一条被 supersede 的记忆 → 断言它在**结果与注入两处都不出现**,但审计视图可见"+"故意破坏一个源文件 → 仍返回词法命中 + 明确降级标注")。
|
|
210
|
-
4. **B 线补实验**:跑 E1(预算—召回曲线)+ E3(A/B/C 三策略),样本 12 条事实,回写契约 §4.3 表与 `TODO-GRAPH.html` P1-⑯。
|
|
211
|
-
5. **(A 线全绿 + 宿主重启复核 Score 钉子后)** 才启动 C 线施工项 1–4:S1.3 → S5.3 → S2(**兼容档必须本地实现;最优档要 LLM 改写则按 S9.2 另立**)→ S4。
|
|
212
|
-
|
|
213
|
-
**常用命令**
|
|
214
|
-
```powershell
|
|
215
|
-
node --test tests/smoke/ # 全量套件(78 套件);建议改走 tools/run-smoke.mjs(单套件超时按进程树强杀后继续)
|
|
216
|
-
# 注:smoke-test-consolidate-isolation.mjs 的「忙等卡死」已于 2026-09-14 定案修复,无需再回避该套件
|
|
217
|
-
node tests/smoke/smoke-test-tail-score-visible-pre.mjs # C7 钉子(29 断言)
|
|
218
|
-
node tests/smoke/smoke-test-tier0-catalog-pre.mjs # C4 目录(33 断言)
|
|
219
|
-
node tests/smoke/smoke-test-l0-index-pre.mjs # C3 L0 索引
|
|
220
|
-
node tests/smoke/smoke-test-layer-filter-pre.mjs # 检索侧 layer/status 过滤(I5)
|
|
221
|
-
node tests/smoke/smoke-test-l0-layer-pre.mjs # 抽取层 layer/status(C1)
|
|
222
|
-
node tests/smoke/smoke-test-doc-code-consistency-pre.mjs # 代码默认值 ↔ 文档「默认」标注(新增守卫)
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
**未确认 / 需查(不许猜)**
|
|
226
|
-
- 「`edit` 改图时 ASCII 引号写进 JS 字符串 → `Unexpected identifier`」:证据在**今日工作日志**,`docs/internal/` 内**未找到**书面记载。
|
|
227
|
-
- 正式实验数字(12 条样本的 top-1/3/5、下探可达率、A/B/C 正确率与 token 对照):**待跑**(前置 = 语义臂恢复 + 重启)。
|
|
228
|
-
- 稠密臂零贡献(`dense=0.00`)的根因:**未定**,列入实验线追查(可能与 miv 未就绪/向量文件缺失同源)。
|
|
229
|
-
- `TODO-GRAPH.html` 中是否存在其他未被 `P0-*`/`P1-*` 前缀覆盖的本攻关卡片:本次按 `DATA.items` 全量读取(`:145`–`:366`),**未发现**漏项。
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
# 发版固定流程(dsh-auto-memory)
|
|
2
|
-
|
|
3
|
-
> 2026-09-10 固化。本文件是发版的唯一检查表;`tools/release.mjs` 已内置**版本标识一致性闸门**(缺任一项即拒绝构建),所以下面第 2、3 步不是"记得做",而是"不做就发不出去"。
|
|
4
|
-
|
|
5
|
-
## 角色分工(2026-09-13 固化,改点3)
|
|
6
|
-
|
|
7
|
-
- **任务书流向**:主对话读本检查表 → 角色分工指向任务书 → **主对话填入版本号后原文派发给执行子代理**。用户不必、也不要绕过主对话直接投喂子代理(两条入口并存=并发冲突之源)。
|
|
8
|
-
- **主对话 = 决策者,只做三件事**:①开闸前确认前置门(第 0 节:全量回归结果 + 脏树范围核实)②收到子代理回报后**放行或中止** ③失败时决定处置方向。**主对话不得逐步执行本清单**——发版这类固化流程交给子代理执行(主对话上下文最贵)。
|
|
9
|
-
- **子代理 = 执行者**:投喂 [`docs/prompts/RELEASE-AGENT.md`](../prompts/RELEASE-AGENT.md)(自包含任务书,填入版本号),按本清单全跑、**出错即停**,只回结构化结论 `{ ok, version, pre_sha, rel_sha, tag, npm_latest, failed_step, error_tail }`。
|
|
10
|
-
- **不得并发(冲突防线)**:主对话**派活后等待回报**,期间对同一工作区**只读**(看日志/读状态可以;改文件、git 写操作、跑发版命令、再派第二个执行子代理都不行);只读类任务书(回归/对账/巡检)之间可并行,但**不与发版执行并发**(回归占满 CPU 会污染计时敏感套件)。
|
|
11
|
-
- 凭据不经主对话转手:子代理按任务书自行从 `--D--dsh_debug--` 记忆文件读取,回报中一律 `<redacted>`。
|
|
12
|
-
- 同类固化流程的任务书:全量回归=[`REGRESSION-AGENT.md`](../prompts/REGRESSION-AGENT.md) · 双语对账=[`DOCS-AUDIT-AGENT.md`](../prompts/DOCS-AUDIT-AGENT.md) · 痕迹巡检=[`TRACE-PATROL-AGENT.md`](../prompts/TRACE-PATROL-AGENT.md)。
|
|
13
|
-
|
|
14
|
-
## 0. 前置门(不满足不许开工)
|
|
15
|
-
|
|
16
|
-
- [ ] 全量回归:`cd D:\dsh-auto-memory; Get-ChildItem tests\smoke -File -Filter *.mjs | ForEach-Object { node $_.FullName }` → **0 失败**
|
|
17
|
-
- [ ] `node --check lib/index.js` 与 `lib/client.js` 通过;改动文件无 BOM
|
|
18
|
-
- [ ] **脏树范围核实**:`git status --short` 里只有本次要发布的文件(`release.mjs` 的源就是工作区,脏树会整体进包且不可回溯)
|
|
19
|
-
|
|
20
|
-
## 1. 定版本号
|
|
21
|
-
|
|
22
|
-
- 纯修复 → patch;有新行为/新键 → minor。写在 `CHANGELOG.md` 与下文各处。
|
|
23
|
-
|
|
24
|
-
## 2. 必改 CHANGELOG(第 1 笔)
|
|
25
|
-
|
|
26
|
-
- [ ] `CHANGELOG.md` 顶部新增 `## [<ver>] — <日期> · <一句话主题>` 小节,含:覆盖范围 / 缺陷修复 / 内部重构(若有)/ 流程(若有)/ 验证
|
|
27
|
-
- 闸门校验:文件里必须出现 `## [<ver>]`,否则 `release.mjs` 拒绝构建
|
|
28
|
-
|
|
29
|
-
## 3. 必同步软件内版本标识(第 2 笔)
|
|
30
|
-
|
|
31
|
-
- [ ] **应用内更新说明字典**:`lib/client.js` 的 `var CHANGELOG = { ... }` 顶部新增 `'<ver>': { zh: [...], en: [...] }`(这是弹窗里的"更新说明",缺了用户升级后看不到本版说明)
|
|
32
|
-
- [ ] **界面指纹行**:`lib/client.js` 第 10 行 `console.log('[dsh-auto-memory] client v<ver> fingerprint: ...')`
|
|
33
|
-
- [ ] `package.json.version`:**由 `release.mjs` 自动回写开发树**(面板徽标与「检测更新」读的就是它),构建后复核输出里有 `开发树版本回写: x.y.z → <ver>`
|
|
34
|
-
- 闸门校验:以上三项任一与新版本号不一致 → **拒绝构建**(防止检测更新一直拿旧版本号去比对)
|
|
35
|
-
|
|
36
|
-
## 4. pre 线提交
|
|
37
|
-
|
|
38
|
-
```powershell
|
|
39
|
-
cd D:\dsh-auto-memory
|
|
40
|
-
git add lib tests CHANGELOG.md tools/release.mjs
|
|
41
|
-
git -c user.name="Aik358" -c user.email="aik358@users.noreply.github.com" commit -m "v<ver>: <一句话>"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## 5. 先 dry-run 验闸门
|
|
45
|
-
|
|
46
|
-
```powershell
|
|
47
|
-
node tools\release.mjs <ver> --dry-run # 走临时 staging,不碰发布基座
|
|
48
|
-
```
|
|
49
|
-
期望看到:`版本标识一致性: OK(CHANGELOG / 应用内更新说明 / 界面指纹行)` + `语法 ✓ BOM ✓ 无 pre/dev 残留 ✓` + `python/ 运行时完整 ✓ bench 已排除 ✓`
|
|
50
|
-
|
|
51
|
-
## 6. 真构建
|
|
52
|
-
|
|
53
|
-
```powershell
|
|
54
|
-
node tools\release.mjs <ver> # 写 D:\dsh_debug\_publish_dsh-auto-memory + 回写开发树版本
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## 7. REL 提交 + 打 tag
|
|
58
|
-
|
|
59
|
-
```powershell
|
|
60
|
-
cd D:\dsh_debug\_publish_dsh-auto-memory
|
|
61
|
-
git add -A
|
|
62
|
-
git -c user.name="Aik358" -c user.email="aik358@users.noreply.github.com" commit -m "v<ver>: <一句话>"
|
|
63
|
-
git tag -f v<ver>
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## 8. push(必须带 PAT 行内 URL)
|
|
67
|
-
|
|
68
|
-
```powershell
|
|
69
|
-
git -c credential.helper= push https://x-access-token:<PAT>@github.com/Aik358/dsh-auto-memory.git main --tags --force
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## 9. npm publish(单向门,最后一步)
|
|
73
|
-
|
|
74
|
-
```powershell
|
|
75
|
-
cd D:\dsh_debug\_publish_dsh-auto-memory
|
|
76
|
-
npm publish . --registry=https://registry.npmjs.org/ --//registry.npmjs.org/:_authToken=<token> --access public
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## 10. 三处复核(缺一不算发完)
|
|
80
|
-
|
|
81
|
-
```powershell
|
|
82
|
-
npm view @a9i5k4/dsh-auto-memory version --registry=https://registry.npmjs.org # 必须显式指定官方 registry
|
|
83
|
-
git ls-remote https://github.com/Aik358/dsh-auto-memory.git refs/heads/main
|
|
84
|
-
git ls-remote https://github.com/Aik358/dsh-auto-memory.git refs/tags/v<ver>
|
|
85
|
-
```
|
|
86
|
-
三处 sha/版本必须一致。
|
|
87
|
-
|
|
88
|
-
**坑(2026-09-10 实测)**:`npm view` 会命中本地 npm 缓存 —— 刚发布后可能仍回读到**上一个版本**(本次 v2.4.2 发布成功后仍回读 2.4.1)。判定以 **registry 权威接口**为准:
|
|
89
|
-
|
|
90
|
-
```powershell
|
|
91
|
-
Invoke-RestMethod 'https://registry.npmjs.org/@a9i5k4%2Fdsh-auto-memory/latest' | Select-Object -ExpandProperty version
|
|
92
|
-
npm view @a9i5k4/dsh-auto-memory version --registry=https://registry.npmjs.org --prefer-online
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## 纪律
|
|
96
|
-
|
|
97
|
-
- **凭据只走行内 URL / 环境变量,严禁写进任何会上传 GitHub 或 npm 的文件**(本文件亦不写)。
|
|
98
|
-
- 本机 `~/.npmrc` 指向 npmmirror → 查询与发布都必须显式 `--registry=https://registry.npmjs.org`,否则会查到旧版本、误判发布失败。
|
|
99
|
-
- 发布后实机生效:宿主 `lib/index.js` 需重启;界面半边刷新页面即可。`update-check` 有落盘缓存(`~/.dsh/memory/update-check-pre.json`),需要时用「检查更新」强制刷新。
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
# P0 施工汇报 · 过夜托管运行结果(2026-09-15)
|
|
2
|
-
|
|
3
|
-
> **用途**:用户早上拿去给 GPT 验收。本文是**结论汇总**;逐步过程见 `RUN-P0-NIGHTLY.md`。
|
|
4
|
-
> **施工依据**:`KICKOFF-P0.md`(第一份指令)+ `MASTER-PLAN-3.0.md` v2 + `reviews/ROUND3-REVIEW-INTEGRATION-20260914.md`。
|
|
5
|
-
> **结论**:**P0 五步全部完成**,全量回归 **PASS 84 / FAIL 0 / TIMEOUT 0(153.7s)**。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. 改动清单(`文件:函数名`)
|
|
10
|
-
|
|
11
|
-
### 新增模块(5 个)
|
|
12
|
-
|
|
13
|
-
| 文件 | 关键函数 | 作用 |
|
|
14
|
-
|---|---|---|
|
|
15
|
-
| `lib/tier-layer-inject-pre.js`(既有文件,新增) | `filterCurrentHitsPre` | **C8 修复**:注入侧 I5 状态过滤(import 检索侧 `isCurrentPre`,不复制) |
|
|
16
|
-
| 同上 | `selectReusableTierHitsPre` / `describeReuseReasonPre` / `TIER_HITS_REUSE_REASONS_PRE_V1` | **T0-2**:命中投影复用判定(五道门,fail closed) |
|
|
17
|
-
| **`lib/memory-envelope-pre.js`**(新) | `composeMemoryEnvelopePre` / `describeEnvelopeCharsPre` | **T0-3**:分项账本(E1/E2/E3 三条不变式) |
|
|
18
|
-
| **`lib/memory-mutation-pre.js`**(新) | `validateMutationBoundaryPre` / `mutationRefusalTextPre` / `validateProjectionPairPre` / `protectedRegionDigestPre` | **写入门**:共同提交与保护入口(只收规范化投影) |
|
|
19
|
-
| **`lib/wb-contract-pre.js`**(新) | `parseWhiteboardPre` / `computeWhiteboardCardIdPre` / `extractProtectedRegionsPre` / `toMutationProjectionPre` / `checkHandoffCriteriaPre` / `checkPlanCriteriaPre` / `criteriaRefusalTextPre` | **白板最小适配边界** + 判据门(格式只维护一份) |
|
|
20
|
-
| **`lib/rules-layer-pre.js`**(新) | `extractRulesLayerPre` / `renderRulesSectionPre` / `splitMemoryEntriesPre` / `ruleSummaryPre` | **P6A**:规则层抽取(规则 vs 参考) |
|
|
21
|
-
|
|
22
|
-
### 既有文件改动
|
|
23
|
-
|
|
24
|
-
| 文件:函数名 | 改动 |
|
|
25
|
-
|---|---|
|
|
26
|
-
| `lib/tier-layer-inject-pre.js:composeTieredInjectionPre` | 闸门**之前**插入 I5 过滤;`status-filtered` 降级项;返回体加 `hits` 过滤账;**总长门两处缺陷修复**(降级行先计入再裁、裁完真正回写、`headOverBudgetChars` 显式超额);返回体加 `textChars/maxTotalChars/claimedTotalChars` |
|
|
27
|
-
| `lib/activation-host-pre.js:recordTierGateHits` | 投影补 `contextVersion / miv / observationId / requestKey / workspaceKey`(T0-2 版本四元组) |
|
|
28
|
-
| `lib/activation-inbox-pre.js:makeFakeActivationRequestPre` | fixture 支持候选 `status` 与请求 `requestKey` |
|
|
29
|
-
| `lib/index.js:buildTierLayerInjection` | 删掉旧的 `fresh`/`sameSession`(只查时间 + 身份缺失时 fail **open**)⇒ 改调 `selectReusableTierHitsPre`;不复用时输出**可见**降级行;`tier0Meta` 暴露 `reuse`/`statusFiltered` |
|
|
30
|
-
| `lib/index.js:tierCurrentMivPre`(新方法) | 当前 miv 的**零重读**实现(只用 `sourceFingerprint`,不调 `CorpusRegistry.get()`,避免热路径重建语料) |
|
|
31
|
-
| `lib/index.js:peekRuntime`(新方法)+ `SessionRuntimeStore.peek` | **只读**取 runtime,**绝不创建**(修一处我引入的真实回归,见 §5) |
|
|
32
|
-
| `lib/index.js:renderMemoryDynamic` | 由 `lines[]+join('\n')` 改为**边推边归位**的 `segs[]` + 分项账本(**字节等价**);删掉 35% 封顶 `catalogCost` 与注水的 `used`;目录层按**实际注入全文长度**计入 `memoryReferences`;账本挂 `state.envelopeMeta`;超限降级行附尾部;新增 `otherDynamicBudgetChars` 派生逻辑 |
|
|
33
|
-
| `lib/index.js:renderRulesOnlySnapshotPre`(新方法) | P6A:只渲染规则段的最小外壳(节流期间仍随轮返回) |
|
|
34
|
-
| `lib/index.js:parseGapRoundsPre`(新函数) | P6A:零值安全的间隔解析(**0 可表达**) |
|
|
35
|
-
| `lib/index.js:DEFAULT_CONFIG` | `snapshotMinGapRounds: 5 → 1`;新增 `criteriaGate: true`、`rulesLayeringMode: 'off'` |
|
|
36
|
-
| `lib/index.js:DEFAULT_PROMPT_LAYERS` | 新增 `snapshotRulesTitle` / `snapshotRulesGuide`(约束语措辞) |
|
|
37
|
-
| `lib/index.js:checkMutationPre`(新方法) | 写入保护统一入口(判据门 → 保护门,顺序有意为之) |
|
|
38
|
-
| `lib/index.js:writePlanSnapshot` / `writeHandoffLedger` | 接入 `checkMutationPre`;签名加 `opts`(`skipCriteria`) |
|
|
39
|
-
| `lib/index.js:checkWaterLevel`(水位骨架路径) | A6 降级路径:`skipCriteria: true` **只跳判据门**;遇保护门拒绝**绝不绕过**并留痕 |
|
|
40
|
-
| `lib/index.js:memory_note_pre`(工具层) | 两类拒绝都返回**原始可执行文案**(不再是"白板写入失败(未知)") |
|
|
41
|
-
| `lib/index.js`(注入调用方) | P6A:`parseGapRoundsPre` 替换 `Number(v) || 5`;节流分支由"跳过整份快照"改为 `rulesOnlyText + renderReflectionRequest()` |
|
|
42
|
-
|
|
43
|
-
### 新增/修改测试(5 新增 + 4 修改)
|
|
44
|
-
|
|
45
|
-
| 文件 | 断言数 | 覆盖 |
|
|
46
|
-
|---|---|---|
|
|
47
|
-
| `tests/smoke/smoke-test-i5-status-filter-pre.mjs`(新,原红证明转正) | 45 | C8 / I5;取值域、同函数对照、过滤在闸门之前、挡下不静默 |
|
|
48
|
-
| `tests/smoke/smoke-test-t0-2-version-gate-pre.mjs`(新) | 68 | T0-2;★A 快照候选不得用于 B、五道门 fail closed、原因码可读 |
|
|
49
|
-
| `tests/smoke/smoke-test-t0-3-budget-ledger-pre.mjs`(新) | 64 | T0-3;E1/E2/E3、无未计费尾巴、rules 不参与裁剪 |
|
|
50
|
-
| `tests/smoke/smoke-test-t0-8-mutation-gate-pre.mjs`(新) | 110 | T0-8 / **T0-8B** / **T0-8C** / 判据不张冠李戴 / 职责不混 |
|
|
51
|
-
| `tests/smoke/smoke-test-p6a-rules-layer-pre.mjs`(新) | 94 | **T7-1 / T7-3 / T7-4 修订 / T7-6 / T7-7**;零值解析;先规则后 gap |
|
|
52
|
-
| `smoke-test-c5-tier-inject-pre.mjs` | 90 | **改掉 3 条锁死错误现状的断言**(`superseded` 被当成"正确行为") |
|
|
53
|
-
| `smoke-test-handoff-pre.mjs` / `smoke-test-p7-write-fix-pre.mjs` | 53 / 40 | 签名扩展同步 + `checkMutationPre` 桩 |
|
|
54
|
-
| `smoke-test-i5-status-filter-pre.mjs` | — | 接线断言由"写死单行文本"改为**参数语义** |
|
|
55
|
-
|
|
56
|
-
**总新增断言:381 条**(45+68+64+110+94)。
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## 2. 每条新断言的编号 + 现状 + 它证明什么
|
|
61
|
-
|
|
62
|
-
| 编号 | 现状 | 证明什么 |
|
|
63
|
-
|---|---|---|
|
|
64
|
-
| **T0-1 / C8** | ✅ **绿**(原 4/4 报红) | 非 `current` 条目在**注入侧**也被过滤(契约 I5 的两处要求都落地) |
|
|
65
|
-
| **T0-2** | ✅ **绿** | A 快照产生的候选**不会**进 B 快照的注入(I6 同版);五道门任一不可证明即 fail closed |
|
|
66
|
-
| **T0-3** | ✅ **绿** | `chars.total === text.length`(逐字节);分项之和 = 总计(**无未计费尾巴**);分项上限是硬约束且裁剪可见 |
|
|
67
|
-
| **T0-8** | ✅ **绿** | 删卡无归档 → **拒写且文件字节不变**;合法归档 / 合法改名 / 加卡 / 重排 → 放行;用户区被吞或被改 → 拒 |
|
|
68
|
-
| **T0-8B** | ✅ **绿** | **三条写入路径都不能绕过共同保护**(工具 / 水位骨架直调 / 刷新仪式产物) |
|
|
69
|
-
| **T0-8C** | ✅ **绿** | **关掉质量门后仍拒绝丢卡**(`criteriaGate=false` 撤不掉共同保护) |
|
|
70
|
-
| **T7-1** | ✅ **绿**(范围内) | 连续 6 轮规则都在。**如实标注**:测的是**注入函数返回值**;"模型真收到"需宿主 U6 |
|
|
71
|
-
| **T7-3** | ✅ **绿** | 规则类与参考类引导语**不相同**(防改回统一措辞) |
|
|
72
|
-
| **T7-4(v2 修订)** | ✅ **绿** | 含「必须」但带引用/历史语境(`据文档写着`/`曾经`/`已取消`)**不自动升级为规则**,只作待确认候选 |
|
|
73
|
-
| **T7-6** | ✅ **绿**(措辞收紧) | 内容不变 ⇒ 前缀**字节稳定**。**不冒充**"缓存命中"或"按 1/10 计费" |
|
|
74
|
-
| **T7-7** | ✅ **绿**(部分) | 规则以 `rules` 分项进账本 + 代码里**不存在**对 rules 的裁剪调用。可机械判断的**执行结果**仅此;行为级遵守需 U6/U7 |
|
|
75
|
-
| **T4-4** | ❌ **未做** | 投影/快照/Tier-0 同一身份映射 —— 依赖 Phase 1 的 miv 单源,**不属 P0**(KICKOFF 未列入 P0 五步) |
|
|
76
|
-
| T0-6(数值守卫范围) | ❌ **未做** | `smoke-test-doc-code-consistency-pre.mjs` 现覆盖 7 字段,未扩到 `L1`/`K` —— KICKOFF 未列入 P0 五步 |
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 3. 实测数据
|
|
81
|
-
|
|
82
|
-
| 项 | 值 |
|
|
83
|
-
|---|---|
|
|
84
|
-
| **全量回归** | `node tools/run-smoke.mjs` ⇒ **PASS 84 / FAIL 0 / TIMEOUT 0,153.7s,exit 0** |
|
|
85
|
-
| 套件数变化 | **79 → 84**(+5 新套件;KICKOFF 预告"允许变成 80",实际 84) |
|
|
86
|
-
| **红证明** | `red-proof-phase0-t01.mjs`:修复前 **0 通过 / 4 报红** ⇒ 修复后 **4/4 绿** |
|
|
87
|
-
| 守卫 | `verify-todo-graph` exit 0(47 卡);`doc-code-consistency` 44/0 |
|
|
88
|
-
| 回归次数 | 全量跑 **4 次**(每步完成后 1 次 + 收尾 1 次),每次均 0 失败 |
|
|
89
|
-
| **变异演示** | i5 **12 红** / t0-2 **8 红** / t0-8 **15 红** / p6a **11 红**;每次均 SHA256 逐字节还原 |
|
|
90
|
-
| 字节卫生 | 全部改动文件 **无 BOM**;`lib/index.js` 保持 CRLF;新模块与新测试 LF |
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## 4. 回滚方法(每步一个开关 / 一个还原动作)
|
|
95
|
-
|
|
96
|
-
| 步骤 | 回滚 |
|
|
97
|
-
|---|---|
|
|
98
|
-
| C8 状态过滤 | **无开关**(这是契约 I5 的正确行为)。还原 `lib/tier-layer-inject-pre.js` 的 `filterCurrentHitsPre` 调用即可回退 |
|
|
99
|
-
| T0-2 版本校验 | 还原 `lib/index.js:buildTierLayerInjection` 的 `selectReusableTierHitsPre` 调用(旧 `fresh`/`sameSession` 代码片段已作为注释留在原位) |
|
|
100
|
-
| T0-3 分项账本 | 还原 `lib/index.js:renderMemoryDynamic` 为 `lines[]` 版(**旧实现全文在 git 工作区未提交状态中存在**,本步改动集中在该函数)。`otherDynamicBudgetChars` 未配置时自动派生,无副作用 |
|
|
101
|
-
| **写入门** | **`criteriaGate: false`** 退掉**判据门**(质量门)。⚠️ **丢卡/用户区/重复 id 三条共同保护无开关可退**——这是设计(ROUND3 §3.7 第 4 条)。要完全回退需还原 `writePlanSnapshot` / `writeHandoffLedger` 两个函数体 |
|
|
102
|
-
| 水位骨架降级 | A6 行为由 `criteriaGate` + 该分支的 `skipCriteria` 共管;不改则为"照写 + 警示行" |
|
|
103
|
-
| **P6A** | **`rulesLayeringMode: 'off'`**(**默认已是 off**)⇒ 完全回到旧行为(统一措辞 + 原节奏)。`snapshotMinGapRounds` 默认值改回 5 即回退节奏部分 |
|
|
104
|
-
|
|
105
|
-
**⚠️ 关键提醒(回滚不等于零影响)**:P6A 的**措辞**部分在 `rulesLayeringMode='off'` 时**不生效**
|
|
106
|
-
(规则段根本不注入),但 `snapshotMinGapRounds` 默认值 5→1 是**全局默认值变更** ——
|
|
107
|
-
已保存配置的用户不受影响(配置覆盖默认值),**新装用户**会拿到 1。
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## 5. 施工中发生的两处真实缺陷(含我引入的一处)
|
|
112
|
-
|
|
113
|
-
### 5.1 我引入的回归:`runtimeFor` 在 `await` 之后复活已 dispose 的 runtime
|
|
114
|
-
|
|
115
|
-
- **现象**:`smoke-test-context-observer.mjs` P3f 报 `Error: runtime B survived dispose`。
|
|
116
|
-
- **根因**:我在 `buildTierLayerInjection` 里用 `this.runtimeFor(agent)` 读 `contextVersion`;
|
|
117
|
-
该方法底层 `SessionRuntimeStore.get()` **找不到时会 `createSessionRuntime()` 并重新登记**
|
|
118
|
-
⇒ 在 `await` 之后调用就**复活了已销毁的 runtime**。
|
|
119
|
-
这正是本项目硬纪律写死的那条坑("任何 `await` 之后再取 runtime/agent 句柄都可能复活已 dispose 的对象")。
|
|
120
|
-
- **修法**:新增**只读**的 `MemoryEngine.peekRuntime` / `SessionRuntimeStore.peek`(绝不创建),
|
|
121
|
-
注入路径改用它。
|
|
122
|
-
- **教训**:热路径读运行时状态必须用只读查询;`runtimeFor` 是"取或建"语义,不是 getter。
|
|
123
|
-
|
|
124
|
-
### 5.2 首跑抓到的真实实现缺陷:规则行只剩日期
|
|
125
|
-
|
|
126
|
-
- **现象**:`smoke-test-p6a-rules-layer-pre.mjs` 首跑,"连续 6 轮规则都在"报红(got=0)。
|
|
127
|
-
- **根因**:`ruleSummaryPre` 最初直接用 `firstLine`,而既有记忆条目结构是
|
|
128
|
-
「锚点 → `## 日期` → 正文」⇒ 规则行渲染成 `- ## 2026-08-14`,**规则内容全丢**,
|
|
129
|
-
而且**看起来还挺正常**(有内容、有格式)。
|
|
130
|
-
- **修法**:新增 `ruleSummaryPre` 跳过日期小节标题与锚点行,取第一条实质内容。
|
|
131
|
-
|
|
132
|
-
### 5.3 其它已留痕的踩坑
|
|
133
|
-
|
|
134
|
-
- **注释里的裸 ASCII 双花括号**会打断"花括号配平"式源码抽取(`smoke-test-handoff-pre.mjs:extractFn`
|
|
135
|
-
报 `unbalanced`)⇒ 注释改为文字描述。
|
|
136
|
-
- **源码接线守卫不要写死单行调用文本**:T0-3 给 `composeTieredInjectionPre({...})` 补参数并改多行后,
|
|
137
|
-
写死单行的断言变红,但接线仍在 ⇒ 改为断言**参数语义**。
|
|
138
|
-
- **源码抽取型测试必须注入该函数依赖的全部模块级符号**:`renderMemoryDynamic` 接入
|
|
139
|
-
`composeMemoryEnvelopePre` 后,`smoke-test-handoff-pre.mjs` 需把该模块源码一并注入。
|
|
140
|
-
- **字节卫生事故**:`smoke-test-handoff-pre.mjs` 编辑后变 CRLF(原为 LF)⇒ 已逐字节转回并复跑确认。
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## 6. 未完成项与原因
|
|
145
|
-
|
|
146
|
-
| 项 | 状态 | 原因 |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| **T4-4**(投影/快照/Tier-0 同一身份映射) | 未做 | KICKOFF §3 未列入 P0 五步;其前提(miv 单源)属 **Phase 1** |
|
|
149
|
-
| **T0-6**(数值守卫范围扩到 `L1`/`K`) | 未做 | KICKOFF §3 未列入 P0 五步(总纲 Phase 0 提到,但施工顺序表未含) |
|
|
150
|
-
| **白板锚点实装** | 未做(**刻意**) | 锚点完备性属白板线 **P1/P2**。P0 若硬判锚点,**现存 `PLAN.md` 一个锚点都没有 ⇒ 所有既有白板立刻写不进去**(会把"保护"变成"锁死")。故写入门在"能证明丢卡"时才生效(before 侧解析出了卡片集合) |
|
|
151
|
-
| **UI 侧**(记忆窗格"当前受什么约束"页) | 未做 | 总纲归"UI 提质排期",非 P0 |
|
|
152
|
-
| **规则分类持久化 / 规则修改撤回 / 跨窗口失效** | 未做 | 这是 **P6B**(接在 P1 上),v2 明确"不能绕过状态提交" |
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## 7. 预授权默认值的实际使用情况
|
|
157
|
-
|
|
158
|
-
| 编号 | 预授权决定 | 实际使用 | 我认为该改的地方 |
|
|
159
|
-
|---|---|---|---|
|
|
160
|
-
| **B1**(丢卡风险) | **做**:前后卡片集合对比,只能移动/完成,不能消失 | ✅ **完全按此实现**(M1) | 无 |
|
|
161
|
-
| **B5**(双状态源) | 看板=现在时(唯一事实);账本=过去时,其"任务状态"段只指路 | ⚠️ **P0 只做了写入门侧的引用**(B5 的 miv 语义属 P1,KICKOFF 如此规定) | 无 |
|
|
162
|
-
| **B4**(人机冲突) | 从选项 (c) 起步:每卡分「模型维护区 / 用户备注区」 | ✅ 适配器实现分区解析 + M2 保护 | **建议**:`<!-- model -->` 为可选(未加标记的卡片不报错),但**一旦用了就严格校验闭合**。这个宽容度是我加的,需 GPT 确认是否过宽 |
|
|
163
|
-
| **A8**(条目锚点) | 做:`mem_` + sha256(workspaceKey + 页面相对路径 + 卡片标题) 前 32 位 | ✅ `computeWhiteboardCardIdPre` 按此实现 | 无 |
|
|
164
|
-
| **A6**(水位骨架硬判据失败策略) | 照写 + 警示行 | ✅ 按此实现,且**收紧了一处**:遇**保护门**拒绝时**不绕过**(A6 只覆盖判据门) | **建议 GPT 审**:我把 A6 的"照写"限定在判据门内,这是我的判断(依据 ROUND3 §3.7 第 4 条"开关不能撤掉共同保护")。若 GPT 认为 A6 也应覆盖保护门,则该处需改 |
|
|
165
|
-
| 其余 A1–A7 / B2/B3/B6/B7 | 按方案建议 | 未触及(P1/P2 范围) | — |
|
|
166
|
-
| **Q3b 的 `Bo`** | 新增为独立配置;未配置时以 `Bm` 作派生初值,不另设魔数 | ✅ `otherDynamicBudgetChars`,未配置时 = `injectBudgetChars` | 无 |
|
|
167
|
-
| **P6A 的"改默认值"** | 默认 5 → 1 | ✅ 已改;并**额外实现**了"先规则后 gap"(v2 要求,光改默认值不足以声称"规则每轮在场") | 无 |
|
|
168
|
-
| **P6A 的规则真源** | 既有用户级 `MEMORY.md`,不新增 `RULES.md` | ✅ 严格遵守 | 无 |
|
|
169
|
-
| **`rulesLayeringMode` 默认值** | KICKOFF 未指定(新配置项) | ⚠️ **我选了 `'off'`(默认关)** | **建议 GPT 审**:按"新旧并存 + 开关回退"纪律,默认关是对的;但**用户的痛正是"规矩不在场"**,默认关意味着新用户**仍然**拿不到收益。这是一个纪律与疗效的张力点 |
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## 8. 🎯 我认为最值得让 GPT 审的三个点
|
|
174
|
-
|
|
175
|
-
### ① 写入门在「before 侧没有卡片集合」时 fail-soft 放行,是否留下了一个长期缺口?
|
|
176
|
-
|
|
177
|
-
**我的判断**:P0 若硬判锚点,**现存 `PLAN.md` 一个锚点都没有** ⇒ 所有既有白板立刻写不进去。
|
|
178
|
-
故我的实现是:**当 before 侧解析出卡片集合时**才做丢卡比对;解析不出(无锚点)则不放行丢卡检查
|
|
179
|
-
(但用户区检查仍跑,若 before 有受保护区域)。
|
|
180
|
-
**风险**:这意味着**在用户给白板加锚点之前,丢卡事故仍然拦不住** —— 也就是"规范已批准、代码从未实现"
|
|
181
|
-
这个事故根因**只是部分关闭**。
|
|
182
|
-
**请审**:这个过渡策略对不对?有没有更安全又不会锁死既有白板的做法(例如"首次重写时自动补锚点 + 建档基线")?
|
|
183
|
-
|
|
184
|
-
### ② 「规则每轮在场」的可验证边界在哪里?我是否把 U6 依赖标注得够诚实?
|
|
185
|
-
|
|
186
|
-
**我的实现**:`rulesLayeringMode='off'` 时规则段不注入;开启后规则段**每轮**随注入函数返回
|
|
187
|
-
(节流只作用于参考内容),进 `rules` 分项且**代码里不存在对 rules 的裁剪**。
|
|
188
|
-
**我没有声称的**:模型**真的收到了**规则 —— 那需要宿主最终请求 messages 的确认(**U6**,未具备)。
|
|
189
|
-
T7-7 要求"可机械判断的执行结果",我只能给到"规则进了最终注入文本的分项账本"。
|
|
190
|
-
**请审**:这个边界够不够?在 U6 之前,是否还有**其他**可机械判断、且能证明"规则确实在场"的证据?
|
|
191
|
-
|
|
192
|
-
### ③ A6(水位骨架照写)与"共同保护不可绕过"的边界,我划对了吗?
|
|
193
|
-
|
|
194
|
-
**背景**:A6 预授权决定的水位骨架失败策略 = **照写 + 警示行**(优先保证接续材料存在)。
|
|
195
|
-
ROUND3 §3.7 第 4 条要求"新旧开关不能撤掉共同保护"。
|
|
196
|
-
**我的划法**:`skipCriteria: true` **只跳判据门**(质量门);遇**保护门**拒绝时
|
|
197
|
-
**放弃本次写入并留痕**(绝不绕过)。即"宁可这次没有接续材料,也不静默丢卡"。
|
|
198
|
-
**请审**:这与 A6 的原意("优先保证接续材料存在")是否冲突?两个原则(I4 绝不阻塞接续 vs 保护不可绕过)
|
|
199
|
-
在这里谁优先?我的选择是**保护优先**,但这使 A6 的"照写"承诺在我实现里**打了折扣**,需要 GPT 明确裁定。
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## 9. 附:本次施工的文件清单(供验收时逐个打开)
|
|
204
|
-
|
|
205
|
-
**新增源码**:`lib/memory-envelope-pre.js`、`lib/memory-mutation-pre.js`、`lib/wb-contract-pre.js`、`lib/rules-layer-pre.js`
|
|
206
|
-
**改动源码**:`lib/index.js`、`lib/tier-layer-inject-pre.js`、`lib/activation-host-pre.js`、`lib/activation-inbox-pre.js`
|
|
207
|
-
**新增测试**:`tests/smoke/smoke-test-i5-status-filter-pre.mjs`、`smoke-test-t0-2-version-gate-pre.mjs`、`smoke-test-t0-3-budget-ledger-pre.mjs`、`smoke-test-t0-8-mutation-gate-pre.mjs`、`smoke-test-p6a-rules-layer-pre.mjs`
|
|
208
|
-
**改动测试**:`smoke-test-c5-tier-inject-pre.mjs`、`smoke-test-handoff-pre.mjs`、`smoke-test-p7-write-fix-pre.mjs`
|
|
209
|
-
**过程留痕**:`docs/internal/RUN-P0-NIGHTLY.md`(逐步记录,含每次变异演示与踩坑)
|
|
210
|
-
|
|
211
|
-
**未提交改动**:本工作区仍有约 98+ 个用户的未提交文件。**全程未执行任何 git 写操作**
|
|
212
|
-
(无 commit / push / checkout / stash / reset),未触碰 `~/.dsh/` 配置,未重启任何宿主进程。
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# P5 验收报告 · 分档运行验收与发布(2026-09-16)
|
|
2
|
-
|
|
3
|
-
依据:`MASTER-PLAN-3.0.md` §Phase 5 + `TODO-GRAPH.html` V2-P5 卡。
|
|
4
|
-
纪律(卡内原文):**发布材料逐项记录通过/失败/未执行 —— 不把「没测试环境」写成「已验收」**;U1(兼容档实测)未完成时不能填写「兼容已验收」;T6-3 资源界限必须事前登记。
|
|
5
|
-
|
|
6
|
-
## 结论
|
|
7
|
-
|
|
8
|
-
- **releaseReady = false(如实记录)**——兼容档 U1 尚未实测(无登记设备与负载的实测流程),按 V2-P5 卡口径不得宣称「兼容已验收」。
|
|
9
|
-
- 3.0 主体八阶段(P0/P6A/P1/P6B/P2/P3/P4/P5)代码与测试侧全部结项;**发布动作(npm publish / git tag)待用户明示节奏**(用户级既有约定:UI/功能改动先本地联调,未经明确要求不发布)。
|
|
10
|
-
|
|
11
|
-
## 逐项验收状态(acceptance_pre_v1 清单,7 项必需)
|
|
12
|
-
|
|
13
|
-
| 项 | 状态 | 证据 / 理由 |
|
|
14
|
-
|---|---|---|
|
|
15
|
-
| T6-1 兼容配置拦截生成式调用=0 | **通过(代码+测试侧)** | P1 兼容档真值表断言(`smoke-test-p1-concurrency-pre.mjs` T1-8/T1-9)+ 兼容档目录/词法展开路径在 92 套件回归全绿(PASS 92 / FAIL 0 / TIMEOUT 0,147.1s) |
|
|
16
|
-
| T6-2 前台/后台时间分开测 | **通过(结构侧)** | P4 rerank-host:offer 即返 accepted(前台绝不等待),后台完成只进缓存 — `smoke-test-p4-rerank-window-pre.mjs` T5-3R 断言 |
|
|
17
|
-
| T6-3 资源界限事前登记 | **通过(登记侧)** | 实测数据已登记:bge P95 37.4s/RSS 3.84GB、qwen P95 8.8s/RSS 4.95GB、torch 2.13.0+cpu(`artifacts/m7-rerank-pre/results.json` + `results-qwen-probe.json`);P4 killGrace 5s 机制化 |
|
|
18
|
-
| T6-5 最终动态文本全量计费/尾注不重复/交付幂等 | **通过(代码+测试侧)** | P6A/P0 分项账本(`memory-envelope-pre.js`)+ 注入断言套件;92 套件回归全绿 |
|
|
19
|
-
| T6-6 开关退回后撤回不出现/预算守住 | **通过(代码+测试侧)** | P6B kind 持久化+撤回套件、P2 引擎开关解耦(identity 门=indexing 开关、复用=delta 开关);legacy 回滚路径=P3 `opts.fusion:'legacy'`、P4 rerank 档位 off |
|
|
20
|
-
| T6-7 隔离目录发行产物入口测试 + 工具能力矩阵 | **未执行(如实)** | 未在隔离目录从 npm 发行产物运行入口测试(需发布产物先打包;发布节奏由用户明示)——不写成「已验收」 |
|
|
21
|
-
| compat-U1 兼容档实测(冷启动/P95/RSS/峰值/磁盘/积压年龄) | **未执行(如实)** | 无登记设备与负载的实测流程;本机仅有 bge/qwen 精排基准(T6-3),不构成兼容档全量实测 |
|
|
22
|
-
|
|
23
|
-
## 变异演示(守卫真失败证明)
|
|
24
|
-
|
|
25
|
-
`artifacts/_mutate-p5.mjs`:撤 U1 兼容门 → 红;撤 release-ready 门 → 红;撤未知项拒绝 → 红(3/3,SHA256 逐字节还原)。
|
|
26
|
-
|
|
27
|
-
## 后续(待用户明示)
|
|
28
|
-
|
|
29
|
-
1. 兼容档实测流程(登记设备+负载 → 跑 U1 → 回填 acceptance 清单 → releaseReady 翻 true)。
|
|
30
|
-
2. 隔离目录发行产物入口测试(T6-7)——随首次发布一并执行。
|
|
31
|
-
3. 发布节奏由用户裁定;本窗口不发布、不推送、不建 tag。
|