@a9i5k4/dsh-auto-memory 3.0.0 → 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 +30 -13
- package/README.zh-CN.md +30 -13
- package/docs/FRONTEND-CO-CREATION.md +191 -0
- package/docs/GM53-HOMEPAGE-PROMPT.md +323 -0
- package/docs/HANDBOOK.md +88 -52
- package/docs/HOMEPAGE-CONTENT-FOR-GM53.md +299 -0
- package/docs/PROMO-PROMPT-3.0.md +100 -0
- package/docs/USER-GUIDE.en.md +11 -11
- package/docs/USER-GUIDE.zh-CN.md +11 -11
- package/docs/WHITEPAPER.md +207 -0
- package/docs/screenshots/promo/promo-0-banner-v3.png +0 -0
- 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 +69 -10
- package/lib/board-mode.js +1 -1
- package/lib/client.js +1697 -285
- package/lib/config-io.js +156 -0
- package/lib/context-bridge.js +3 -0
- package/lib/context-host.js +23 -10
- package/lib/degrade.js +385 -0
- package/lib/dsh-home.js +143 -0
- package/lib/episodic-store.js +142 -18
- package/lib/evidence-store.js +8 -1
- package/lib/fact-store.js +484 -43
- package/lib/hub-io.js +217 -0
- package/lib/index-sync.js +13 -1
- package/lib/index.js +1730 -202
- package/lib/intent-clean-safe.js +258 -40
- package/lib/l0-extract.js +231 -16
- package/lib/m4-corpus.js +8 -2
- package/lib/m7-index-sync-host.js +8 -1
- package/lib/memory-envelope.js +6 -1
- package/lib/memory-hub.js +164 -17
- package/lib/memory-index.js +4 -2
- package/lib/note-status-apply.js +118 -0
- package/lib/note-status.js +204 -0
- package/lib/procedure-store.js +333 -31
- package/lib/procedure-switch.js +38 -0
- package/lib/python-sidecar-client.js +314 -11
- package/lib/recall-fusion.js +83 -12
- package/lib/rules-edit.js +159 -0
- package/lib/semantic-decide.js +41 -8
- package/lib/semantic-js.js +51 -6
- package/lib/shadow-host.js +3 -5
- package/lib/skill-export-host.js +153 -0
- package/lib/skill-export.js +239 -0
- package/lib/storage-manage.js +6 -0
- package/lib/temporal-parse.js +191 -159
- package/lib/tier0-catalog.js +45 -3
- package/lib/wb-contract.js +198 -2
- package/lib/wb-sidecar.js +54 -3
- 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/ART-DIRECTION-WIREFRAME.md +0 -181
- package/docs/internal/AUDIT-WB-GRAPH-FULL-20260916.md +0 -314
- 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/FEEDBACK-TO-DSHAPI-RELAY.md +0 -13
- 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.md +0 -168
- package/docs/internal/KICKOFF-P0.md +0 -254
- package/docs/internal/MASTER-PLAN-3.0.md +0 -411
- 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/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/REVIEW-WB-GRAPH-SELF.md +0 -81
- package/docs/internal/ROADMAP-20260917-WEEK.md +0 -305
- 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 -175
- 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/THREE-LAYER-CONTRACT.md +0 -210
- 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/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,289 +0,0 @@
|
|
|
1
|
-
# 压缩后施工清单 · 送审前待改项(2026-09-16 归档)
|
|
2
|
-
|
|
3
|
-
> **用途**:本窗口上下文将满,本文件是压缩后新窗口的**唯一施工依据**。
|
|
4
|
-
> **纪律**:本清单一律以代码/git/API 硬证据为准,不采信卡片自述或记忆自述。
|
|
5
|
-
> **时序**:改完 → 全量回归 → 找 ChatGPT 验收 → 一起提交推送。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## ★ 施工完成回执(2026-09-16 本窗口执行)
|
|
10
|
-
|
|
11
|
-
**结果:全量回归 `PASS 104 / FAIL 0 / TIMEOUT 0(159.0s)`**(基线 96 ⇒ 净增 8 套件,零失败)。
|
|
12
|
-
工作区改动 **235 项**,仍**未 commit 未 push**(遵守 pre 线纪律)。
|
|
13
|
-
|
|
14
|
-
| # | 项 | 状态 | 证据 |
|
|
15
|
-
|---|---|---|---|
|
|
16
|
-
| 1 | **issue #54** 写入侧保留语法过滤 + 可诊断性 | ✅ 已修 | 新增 `checkReservedSyntaxInContent()`(复用既有 `MARKER_OPEN`);三处写入原语前置拦截;`conflict:` reason 带 `@行号`。套件 `smoke-test-issue54-pre.mjs` 12/12;变异 A/B 真失败(5 条 / 1 条) |
|
|
17
|
-
| 2 | **PR #53** DATE_RE 锚定(issue #51) | ✅ 已移植 | `ws-overview-rank.js` 改 `^(\d{4})-(\d{2})-(\d{2})$`(与 `index.js:578` 同源)。套件 `smoke-test-issue51.mjs` 29/29 |
|
|
18
|
-
| 3 | **PR #50** EPERM 退避 + 写入失败不降级(issue #48) | ✅ 已移植 | 新增 `lib/fs-retry-pre.js`(有界退避,无 unlink 回退);`atomicReplace` 保留候选快照 + `recoveryPath`;`memory_log/note/user` 失败改为**抛出**(DSH 记 isError,不再假装成功)。套件 37/37;变异真失败(15 条) |
|
|
19
|
-
| 4 | **PR #46** welcomeTourEnabled 失效(issue #40) | ✅ 已移植 | 三个自动弹出分支全部过 `allowTour` 闸;配置未知不自动播放;✕ 直接关闭;焦点陷阱。套件 20/20;变异真失败(5 条) |
|
|
20
|
-
| 5 | **PR #44** 容量整理净增长(issue #38) | ✅ 已按根因修 | **在 pre 线源码上实测复现**(67→77→87 每轮 +10,8 轮单调 +80)。根因 A:`compactLegacyLayer` 无条件重序列化占位段 (文件头) ⇒ 引入 `synthetic` 标记 + `seqOf()`;根因 B:`replace` 误按旧文件额度计费 ⇒ 按动作分口径。套件 `smoke-test-issue38-pre.mjs` 12/12;变异真失败(6 条) |
|
|
21
|
-
| 6 | **PR #49** recall 256 截断(issue #45) | ✅ 已移植 | 移除 `l0Corpus.length = 256` 与 `semanticArm` 的记录预算截断;新增窗口受限提示(未命中≠从未记录)。套件 `smoke-test-issue45-recall-corpus.mjs` 45/45 + `smoke-test-p2-semantic-recall-pre.mjs` 15/15 |
|
|
22
|
-
| 7 | **PR #36** 技能晋升(issue #30) | ✅ 已移植 | 新增 `procedure-observation-pre.js` + `intent-clean-safe-pre.js`;去重口径由 **title 改指纹**(标题不是身份);观察行显式 `observationOnly` 且晋升短接为 `observation-only`。套件 36/36 + m81 41/41 + m84 37/37。**并补齐 PR 自身缺失的根因断言**(同名碰撞链),变异真失败(4 条) |
|
|
23
|
-
| 8 | **issue #52** 子代理模型被旧 cfg 覆盖 | ✅ 已修 | `set()` 改**函数式更新** + 新增 `setMany()`;三个成对入口改原子更新。套件 `smoke-test-issue52-pre.mjs` 9/9;变异真失败(3 条) |
|
|
24
|
-
| 9 | **群反馈 #4 / P0-④d** 注入上限 + 可排除来源 | ✅ 已修 | 新增 `injectExcludeSources` 配置 + `filterExcludedSourcesPre()`(id/整层/目录前缀/精确路径四种口径);在注入闸门**之前**挡下并渲染 `[降级]`;配置端点加类型门。套件 `smoke-test-p0-4d-inject-exclude-pre.mjs` 17/17;变异真失败(3 条)。**上限部分经查已存在**(冻结常量 `TIER_BUDGET_PRE_V1` + `injectBudgetChars`/`tier0BudgetShare`/`tier0MaxTokens`),非缺失项 |
|
|
25
|
-
| 10 | **PR #37** 自动接续(issue #35) | ⛔ **未移植(与用户裁定冲突,待裁定)** | pre 线已于 2026-09-14 按**用户裁定方案**修好:`hostAutoContinue()` 先 `sessionController.cancel()` 停旧回合,再仪式、再建新会话;套件 `smoke-test-autocont-host-pre.mjs` 钉死调用顺序 `cancel → prompt → create` 并覆盖降级路径。PR #37 的 `continuation-safety.js` 文件头明写 **"no cancel of source work"**、改用 idle 门 —— 与 `index.js:3222` 记录的用户裁定**直接相反**。**须用户裁决后再动** |
|
|
26
|
-
| 11 | **群反馈 #1** 接续互锁 | ✅ 已确认为已修 | 见 §5(四处带日期解耦 + 回归套件) |
|
|
27
|
-
|
|
28
|
-
### 施工期间发现并修掉的**额外**缺陷(不在原清单内)
|
|
29
|
-
|
|
30
|
-
**issue #54 守卫暴露出一个既有的静默结构损坏**(由 `smoke-test-m3b3-pre.mjs` E7 抓出):
|
|
31
|
-
`maintain()` 的"无 AI 蒸馏"回退分支把 `archive/` 里日志**原文**内联进 `MEMORY.md`,而原文首行是
|
|
32
|
-
**旧日志自己的 anchor marker** ⇒ 该 marker 变成 `MEMORY.md` 的结构锚点,产生一条**幻影记录**
|
|
33
|
-
(身份属于旧日志、却挂在笔记上)。修前之所以"没报错",是因为整行合法 marker 能被 `parseAnchors`
|
|
34
|
-
当锚点吃下 —— 属**静默结构损坏**,比报错更危险。
|
|
35
|
-
|
|
36
|
-
- 修法:新增 `stripAnchorLines()`(只剥整行合法 marker,正文一字不动),并在 `appendText()` 的
|
|
37
|
-
**写入边界统一收口**(一处覆盖全部调用方),而非逐调用点打补丁。
|
|
38
|
-
- 实测证据:未剥离 ⇒ `appendAnchoredRecord` 直接**拒绝**(fail-closed);剥离后 ⇒ 锚点恰为 2 条
|
|
39
|
-
合法记录、无幻影、`旧日志条目` 正文仍可读。
|
|
40
|
-
- 连带修正:`smoke-test-m3b2-pre.mjs` 的 D7 断言按 PR #50 语义更新(tmp 保留为恢复快照而非清理);
|
|
41
|
-
`smoke-test-p4-l0-response-pre.mjs` 的 import 正则放宽(允许同源附加导入)。
|
|
42
|
-
|
|
43
|
-
### 变异演示总账(全部真失败,非假绿)
|
|
44
|
-
|
|
45
|
-
| 套件 | 变异 | 结果 |
|
|
46
|
-
|---|---|---|
|
|
47
|
-
| issue#54 | 移除 append 守卫 / 移除 replaceSingle 守卫 | 5 条 / 1 条失败 ✅ |
|
|
48
|
-
| issue#48 | 退避重试只试 1 次 | 15 条失败 ✅ |
|
|
49
|
-
| issue#40 | 三处 `allowTour` 闸还原 | 5 条失败 ✅ |
|
|
50
|
-
| issue#38 | `seqOf` 退回无条件 `'## '+title` | 6 条失败 ✅ |
|
|
51
|
-
| issue#30 | 去重回退按 title 匹配 | 4 条失败 ✅ |
|
|
52
|
-
| issue#52 | `set()` 退回读闭包快照 | 3 条失败 ✅ |
|
|
53
|
-
| 反馈#4 | 排除过滤退化为不过滤 | 3 条失败 ✅ |
|
|
54
|
-
|
|
55
|
-
**还原纪律**:每次变异后按 SHA256 逐字节校验还原(`memory-writer-pre.js`、`fs-retry-pre.js`、
|
|
56
|
-
`client.js`、`index.js`、`procedure-store-pre.js`、`tier-layer-inject-pre.js` 均已核对一致)。
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## 0. 当前基线(压缩前实测,供新窗口复核)
|
|
61
|
-
|
|
62
|
-
| 项 | 值 |
|
|
63
|
-
|---|---|
|
|
64
|
-
| 仓库 | `D:\dsh-auto-memory`(pre 线,**未 commit 未 push**) |
|
|
65
|
-
| 工作区改动 | **204 项**(含本文档) |
|
|
66
|
-
| 窗口内 git 提交 | **0** |
|
|
67
|
-
| 全量回归 | `node tools/run-smoke.mjs` → **PASS 96 / FAIL 0 / TIMEOUT 0(143.3s)** |
|
|
68
|
-
| graph 套件 | `tests/smoke/smoke-test-graph-mode-pre.mjs` → **35 断言** |
|
|
69
|
-
| 三处工具数硬锁 | legacy=**14**(`smoke-test.mjs:67`、`smoke-test-m3b3-pre.mjs:43`、`smoke-test-context-observer.mjs:107`) |
|
|
70
|
-
| 本地 vs 远程 | 分叉:本地 `main` 领先 **122** 提交,`origin/main`(`794717d`) 领先 **60** 提交 |
|
|
71
|
-
| 已推送内容 | 仅 3 个文档:`README.md`、`README.zh-CN.md`、`docs/CONTRIBUTORS.html`(提交 `794717d`,零删除) |
|
|
72
|
-
|
|
73
|
-
**重要事实**:`CHANGELOG.md` **本地完好**(32KB,git 跟踪中,工作区干净),但**远程线上从来没有过**(分叉点 `89bd636` 与 `origin/main` 均无)。它是提交 `89641dc` 在**本地线**引入的。**文件没丢**,是两条历史线不同步造成的错觉。合并本地线时它会随之上线。
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## 1. 群反馈 9 条 · 代码实测现状
|
|
78
|
-
|
|
79
|
-
来源:`docs/internal/TODO-GRAPH.html`(原文卡片 + points 已抽取核对)。
|
|
80
|
-
**判定口径**:已在代码中 grep 验证,非采信卡片状态。
|
|
81
|
-
|
|
82
|
-
| # | 反馈内容 | 卡片状态 | **代码实测** | 归档 |
|
|
83
|
-
|---|---|---|---|---|
|
|
84
|
-
| 1 | 接续/强制接续互锁失效;默认**不强制**接续(省成本) | P0-A 封存 3.1 | ✅ **已修(2026-09-14 解耦)** — 见 §5 调研结论 | **无需改**(卡片状态过时) |
|
|
85
|
-
| 2 | 设置里 subagent「模型+思考强度」**选不动** | P0-B 封存 3.1 | `subagentModel`/`reasoningEffort` 配置项**都在**;未查到 disabled 保护 | **要改** → 同 issue **#52**(无 PR) |
|
|
86
|
-
| 3 | 晋升开关:项目记忆→全局记忆可开可关 | P1-8 | `procedurePromotionEnabled` **存在** ✔ | 已有开关;晋升逻辑本身坏 → 见 #8 |
|
|
87
|
-
| 4 | 注入上限 + 可排除来源("避免记忆问题一路走错") | P0-4d **待开工** | 注入上限:`maxInjectChars`/`injectCap`/`snapshotMaxChars` **全 0 命中** ✘;排除来源:仅有 `superseded`,**无用户级排除** | **要改**(确未做) |
|
|
88
|
-
| 5 | 晋升物要**可读**("我都不知道是啥技能") | P1-8 | 归入 #8 | 见 #8 |
|
|
89
|
-
| 6 | 手机端首次指引**太大且关不掉** | P2-12 远期 | `welcomeTourEnabled` 开关**存在** | **要改** → 同 issue **#40**,有 PR **#46 未合并** |
|
|
90
|
-
| 7 | 日历太粗糙,**换开源方案** | P2-11 待调研 | 仍自研 `CALENDAR.md`;`fullcalendar`/`tui-calendar`/`calendar.js` **0 命中** | **本批不改**(新功能,撑大审查面) |
|
|
91
|
-
| 8 | 长时攻关也晋升 + skill 互相指路 | P1-8 封存 3.1 | `skillHandoff`/`breakthrough`/`longRunning` **全 0 命中** ✘ | **要改** → 同 issue **#30**,有 PR **#36 未合并** |
|
|
92
|
-
| 9 | webhook CI 安全收口(签名/限流/密钥) | P2-9 待确认 | `.github/cloud/qq-webhook/index.zip` **仍入库** | **本批不改**(运维项,与审查面无关) |
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## 2. 未关闭 issue / PR 全景(15 条,2026-09-16 快照)
|
|
97
|
-
|
|
98
|
-
### 2.1 有 PR 且未合并(7 组)
|
|
99
|
-
|
|
100
|
-
| Issue | PR | 内容 | 本地是否已有修复 | 归档 |
|
|
101
|
-
|---|---|---|---|---|
|
|
102
|
-
| #38 | **#44** | 笔记容量整理净增长(每轮 +10 字符 → 最终所有写入被永久拒绝) | ❌ 无 | **P0 必合** |
|
|
103
|
-
| #40 | **#46** | `welcomeTourEnabled=false` 无效,向导仍自动弹;移动端浮层吞点击 | ❌ 无 | **P0 必合** |
|
|
104
|
-
| #45 | **#49** | `memory_recall` 够不到 ~5 天前记录(256 条 L0 预算挤出) | ❌ 无 | **P0 必合** |
|
|
105
|
-
| #48 | **#50** | `atomicReplace` 缺 EPERM 退避重试,Windows 并发子代理下硬失败 | ❌ 无(本地 `EPERM` grep **0 命中**) | **P0 必合** |
|
|
106
|
-
| #51 | **#53** | `ws-overview-rank` DATE_RE 未锚定,恢复候选误计活跃度 | ❌ 无(本地 `DATE_RE = /\d{4}-\d{2}-\d{2}/` **仍非锚定**) | **P0 必合** |
|
|
107
|
-
| #30 | **#36** | **技能固化永远无法晋升**(episode 候选未如实标记) | ❌ 无 | **P0 必合**(对应群反馈 #8) |
|
|
108
|
-
| #35 | **#37** | 自动接续 `agree` 路径绕过回合活跃防护,新旧会话并行 | ❌ 无 | **P0 必合** |
|
|
109
|
-
|
|
110
|
-
### 2.2 无 PR(需自修)
|
|
111
|
-
|
|
112
|
-
| Issue | 内容 | 归档 |
|
|
113
|
-
|---|---|---|
|
|
114
|
-
| **#52** | 子代理模型选择被旧 cfg 覆盖:已删除模型无法切换/清空 | **P0 自修**(对应群反馈 #2) |
|
|
115
|
-
| **#54** | **[P0] 写入侧缺保留语法过滤:单条含 `MARKER_OPEN` 的正文使整个记忆文件永久拒写** | **P0 自修**(用户新提,见 §3) |
|
|
116
|
-
|
|
117
|
-
### 2.3 已关闭(背景)
|
|
118
|
-
|
|
119
|
-
#43(channel test)、#42(gh_api 多 token 验收)——测试条目,忽略。
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## 3. issue #54 详析(用户 09-16 15:39 新提)★
|
|
124
|
-
|
|
125
|
-
**标题**:`[P0] 写入侧缺少保留语法过滤:单条含 MARKER_OPEN 的正文会使整个记忆文件永久拒写`
|
|
126
|
-
|
|
127
|
-
**一句话**:`appendAnchoredRecord()` 只校验**文件已有内容**是否干净,**从不校验本次要写入的正文**。
|
|
128
|
-
|
|
129
|
-
**根因(带行号)**:
|
|
130
|
-
- `lib/memory-writer-pre.js:95-111` — `appendAnchoredRecord(content, {memoryId, text})`
|
|
131
|
-
- `text` 的唯一检查是 `!text.trim()`(第 96 行)
|
|
132
|
-
- `parseAnchors(buf)` 解析的是 **`buf`(既有文件)**,不是 `text`
|
|
133
|
-
- 末段 `body = toEol(text, ...)` 仅做行尾转换,随后 `'<!-- memory:' + id + ' -->'` **原样拼接落盘**
|
|
134
|
-
- `MARKER_OPEN` 常量**只出现在** `lib/memory-anchor-pre.js:177/182`(读取路径),**写入路径零引用**
|
|
135
|
-
- `parseAnchors` 判定(`memory-anchor-pre.js:177-186`):`includes(MARKER_OPEN)` → 判 `orphan-content` **fail closed**
|
|
136
|
-
|
|
137
|
-
**后果**:一次误写 → 从**下一次写入起**该文件**全部写入被永久拒绝**(`conflict:orphan-content`,size/mtime 不再变化)。不是丢一条,是**该 workspace 项目笔记写入能力整体中断**。
|
|
138
|
-
|
|
139
|
-
**为什么"转义"救不了**:`parseAnchors` **无转义机制**(不认反引号/代码块/HTML 实体);反引号包裹不匹配 `MARKER_RE` 但 `.includes()` 照样命中 ⇒ 仍判冲突。
|
|
140
|
-
|
|
141
|
-
**用户给的修复建议**:
|
|
142
|
-
- **P0** 所有落盘路径(`appendAnchoredRecord()` / `renderReplace()` 等)对入参 `text`/`replacement` 做 `MARKER_OPEN` 检测。二选一,**建议先做 (a)**:
|
|
143
|
-
- (a) **拒绝并明确报错** `reason: 'reserved-syntax-in-content'`(与既有 fail-closed 语义一致)
|
|
144
|
-
- (b) 提供显式 `sanitizeContent(text)` 辅助,由调用方主动调用
|
|
145
|
-
- **禁止静默改写**(会导致落盘内容与用户原文不一致且无感知)
|
|
146
|
-
- **P1** 可诊断性:当前错误不带行号/文件路径;而 `parseAnchors` 的 conflict 对象**其实已带 `line`/`byteStart`/`byteEnd`**(`memory-anchor-pre.js:184`),只是被 `memory-writer-pre.js:68/102` 的 `.map(c => c.type)` **丢掉了**。修:错误信息保留行号 + 文件路径。
|
|
147
|
-
- **P2**(可选)区分"本次写入引入的冲突"vs"文件本来就有冲突"(当前同一错误,误导调用方)。
|
|
148
|
-
|
|
149
|
-
**用户说"一次代码复用就可以做到"** ⇒ 指 **写入侧复用已有的 `MARKER_OPEN` 常量 + 检测**(该常量已在 `memory-anchor-pre.js` 导出/存在,写入路径 import 即可),成本极低。
|
|
150
|
-
|
|
151
|
-
**验收方法**:修复后,写入含保留串的正文应当 ① 立即返回明确错误(方案 a)或落盘已安全改写(方案 b);② 后续良性写入不受影响。
|
|
152
|
-
|
|
153
|
-
**应急 SOP(若已逃逸)**:备份 `MEMORY.md.bak-<yyyyMMdd-HHmmss>` → Node 脚本定位「含 MARKER_OPEN 但不匹配 MARKER_RE」的行 → **仅改写该行措辞**(逐行核对,行数不变)→ 一次良性写入验证恢复。
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## 4. 送审范围裁定(压缩后按此执行)
|
|
158
|
-
|
|
159
|
-
### 4.1 本批必改(P0,共 11 项)
|
|
160
|
-
|
|
161
|
-
**A. 合并外部 PR(7 个)**:#44、#46、#49、#50、#53、#36、#37
|
|
162
|
-
> 均为 Minervaowl7 提交,其上一批 #31-#34 已合并入 `origin/main`,质量可信。彼此有关联(#44↔#38 同一处容量逻辑),**建议全合而非挑选**。
|
|
163
|
-
|
|
164
|
-
**B. 自修(3 项)**:
|
|
165
|
-
1. **issue #54**(写入侧保留语法过滤 + P1 可诊断性)★ 用户明示"一次代码复用"
|
|
166
|
-
2. **issue #52**(子代理模型选择被旧 cfg 覆盖)— 群反馈 #2
|
|
167
|
-
3. **群反馈 #4**(注入上限 + 可排除来源,P0-4d「待开工」确未做)
|
|
168
|
-
|
|
169
|
-
**C. 已完成,无需再动(1 项)**:
|
|
170
|
-
4. **群反馈 #1**(接续互锁)— ✅ **已修(2026-09-14 解耦)**,见 §5 调研结论
|
|
171
|
-
|
|
172
|
-
### 4.2 本批**不改**(明确排除)
|
|
173
|
-
|
|
174
|
-
| 项 | 理由 |
|
|
175
|
-
|---|---|
|
|
176
|
-
| 群反馈 #7 日历换开源 | 卡片状态"待调研",属**新功能**,会撑大审查面 |
|
|
177
|
-
| 群反馈 #9 webhook CI 收口 | 运维项,与 3.0 审查面无关 |
|
|
178
|
-
| **subagent 智能调度**(用户提的"智能判断是否使用子代理施行") | **未实现的新功能**(`shouldSpawn`/`judgeSubagent`/`needSubagent` grep **全 0 命中**)。现有子代理能力是"被动调用"(时段总结/问候/自动沉淀),**不存在调度判断**。塞进本批会让审查面从 3 件事膨胀到 12 件事 ⇒ **单独排一批** |
|
|
179
|
-
|
|
180
|
-
> **必须向用户说明的一点**:用户希望"验证重构后长期系统是否做到去除 harness 记忆争议点"(① 重复多次项目如发版能否被识别为模式 ② 重大攻关/有价值套件 skill 化 + 智能调度子代理)。
|
|
181
|
-
> **修 issue/PR 不经过"长期记忆系统"这条路,两者没有验证关系**——修 bug 是修 bug。
|
|
182
|
-
> 真实验证点应落在:
|
|
183
|
-
> - ①/②:`lib/procedure-store-pre.js` 的 `sessionDiversity≥3 && successCount≥2` 晋升门槛 + `observed/candidate/validated` 三级 + `/memory-hub` 审批队列。**但该能力现在是坏的**(issue #30)⇒ 修 #30/#36 后**才具备验证前提**。
|
|
184
|
-
> - ③:**根本没实现**,不是"重构后没做好"。
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## 5. 群反馈 #1 调研结论(已修,无需再动)★
|
|
189
|
-
|
|
190
|
-
**用户裁定**:「我觉得应该是修好了。」→ **调研证实用户判断正确。**
|
|
191
|
-
|
|
192
|
-
### 5.1 一个误导性信号(我上次的取证错误,须记住)
|
|
193
|
-
|
|
194
|
-
`git log -S "forceContinue"` **全历史零命中** —— 该字样**从未在代码里存在过**。
|
|
195
|
-
"强制接续"是群里描述症状的**口语说法**,不是配置键名。
|
|
196
|
-
⇒ **凭"某字样消失"判定功能被移除是错的。** 判"是否修好"必须找**行为断言**:
|
|
197
|
-
解耦注释 + 判定函数收口 + 回归套件,而不是找字样。
|
|
198
|
-
|
|
199
|
-
### 5.2 三处带日期、带根因的解耦(真修复)
|
|
200
|
-
|
|
201
|
-
| # | 位置 | 修的内容 | 注释原文要点 |
|
|
202
|
-
|---|---|---|---|
|
|
203
|
-
| 1 | `lib/index.js:2562` | **关白板 ⇒ 自动接续被静默关掉** | 旧实现 `if (handoffEnabled === false) return` ⇒ 水位永不测量 ⇒ `waterLevelModelKnown` 永不写入 ⇒ `shouldArmAutoContinuePre` 的 fail-closed 闸永远拒绝 arm ⇒「**关白板会把自动接续一并静默关掉(实证:确认卡永不出现)**」。改为**测量与白板解耦**(测量只读,产物另由 `handoffEnabled` 把关) |
|
|
204
|
-
| 2 | `lib/index.js:2740` | **反向耦合**:白板关 + 水位越阈 ⇒ 照样写账本并覆盖快照 | 「测量放行后,这条**产物**写入必须由 `handoffEnabled` 单独把关,否则『白板关 + 水位越阈』会照样写交接账本并覆盖 `latestHandoffText`(反向耦合)」 |
|
|
205
|
-
| 3 | `lib/index.js:3189` | **卡片可用性**被白板连累 | 「旧实现的 `&& handoffEnabled !== false` 是**同一处耦合的第二份副本**(白板关 ⇒ 卡片报 disabled)」⇒ 改为只判 `autoContinueEnabled` |
|
|
206
|
-
| 4 | `lib/index.js:5218` | 完整复盘(设计说明) | 「**不是记错,是开关耦合的缺陷**:改前 `autoContinueEnabled` 只管接续资格与 GUI 卡片可用性;而水位自动账本写入只判 `handoffEnabled`/`waterLevelAutoHandoff`,**从不看接续开关**。症状即『不跳窗口、却照样写账本并覆盖 `latestHandoffText`』」+ 语义依据:`waterLevelAutoHandoff` 唯一目的是给自动接续备料,接续关了 ⇒ 没人来接 ⇒ 账本无用且污染快照 |
|
|
207
|
-
|
|
208
|
-
### 5.3 当前三开关语义(已解耦)
|
|
209
|
-
|
|
210
|
-
```
|
|
211
|
-
handoffEnabled = false # 白板:只管产物(写/读 PLAN + 账本)
|
|
212
|
-
autoContinueEnabled = false # 接续:只管资格 + 卡片可用性
|
|
213
|
-
waterLevelAutoHandoff = true # 水位账本:受 handoffChainEnabledPre() 统一把关
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
判定**同源**:`handoffChainEnabledPre()`(`lib/index.js:5234`)统一收口,
|
|
217
|
-
注释明写「与置位点、写入点同源,**避免三处条件漂移**」。
|
|
218
|
-
|
|
219
|
-
### 5.4 有回归套件锁住(非口头承诺)
|
|
220
|
-
|
|
221
|
-
```
|
|
222
|
-
tests/smoke/smoke-test-switch-decouple-pre.mjs 24.0KB ← 专门锁"开关解耦"
|
|
223
|
-
tests/smoke/smoke-test-autocont-host-pre.mjs 35.1KB
|
|
224
|
-
tests/smoke/smoke-test-water-hard-trigger-pre.mjs 12.9KB
|
|
225
|
-
tests/smoke/smoke-test-water-step-pre.mjs 6.3KB
|
|
226
|
-
tests/smoke/smoke-test-water-window-pre.mjs 16.2KB
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
**结论**:群反馈 #1 **已修**,`TODO-GRAPH.html` 的 P0-A 卡片状态「封存(3.1)」**已过时**,
|
|
230
|
-
可在下次回写看板时更新为「已解耦(2026-09-14)」。**本批不动此项。**
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## 6. 施工顺序(**已于 2026-09-16 执行完毕**)
|
|
235
|
-
|
|
236
|
-
```
|
|
237
|
-
第 1 步 合并远程 60 提交 → 本地(解决 CHANGELOG 缺失 + 拿到已合并的 #31/#32/#33/#34)
|
|
238
|
-
⚠️ 不可逆操作 —— **本轮未执行**(等用户裁定;不阻塞其余施工)
|
|
239
|
-
第 2 步 合并 7 个外部 PR → ✅ 已移植 6 个;#37 因与用户裁定冲突**挂起待裁**
|
|
240
|
-
第 3 步 自修 3 项(#54 ★ / #52 / 群反馈 #4)→ ✅ 全部完成
|
|
241
|
-
第 4 步 群反馈 #1 —— ✅ 已确认为已修(2026-09-14 解耦),跳过(见 §5)
|
|
242
|
-
第 5 步 全量回归 + 定向变异演示 → ✅ **PASS 104 / FAIL 0 / TIMEOUT 0(159.0s)**,7 组变异全部真失败
|
|
243
|
-
第 6 步 → 交 ChatGPT 验收(任务书:docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md,
|
|
244
|
-
按本批新增内容更新「声称交付」章节)—— **待执行**
|
|
245
|
-
第 7 步 按验收结论修完 → 一起提交推送 —— **待执行(需用户明确同意)**
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
**关键经验(写给下一个窗口)**:外部 PR 打的是**发布线布局**(`lib/memory-writer.js` 等裸名),
|
|
249
|
-
而 pre 线运行的是 `-pre.js` 具名模块 ⇒ **`git apply` 必然失败**。正确姿势是:
|
|
250
|
-
① `git fetch origin pull/<n>/head` 取分支实体;② 读 PR 的**意图与根因**;
|
|
251
|
-
③ 在 pre 线**按根因重写**(保留 pre 线已有的加固,如 `isCurrentPre` 状态闸、`compactAnchoredLayer` 重做);
|
|
252
|
-
④ 落 PR 自带测试并把 `import` 路径改到 `-pre` 模块、把发布线命名(`memory_recall`/`idx_`/`proc_`/`hub`)
|
|
253
|
-
改回 pre 线命名(`memory_recall_pre`/`idx_pre_`/`proc_pre_`/`hub-pre`);
|
|
254
|
-
⑤ **不要假设 PR 的测试是充分的** —— #36 的用例没覆盖它自己的根因(同名碰撞链),必须补断言。
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## 7. 硬约束(贯穿全程)
|
|
259
|
-
|
|
260
|
-
1. **禁止无差别杀 node 进程**(DSH harness 与插件宿主都在 node 上,2026-09-14 出过事故)。
|
|
261
|
-
2. **`dsh web` 宿主由用户自行重启**,agent 只改文件并说明需重启;严禁 `Stop-Process`/`Start-Process`。
|
|
262
|
-
3. **无 BOM**(任何文件写完须校验前 3 字节 ≠ `EF BB BF`)。
|
|
263
|
-
4. **大文件分块写**,一次工具调用不写超大内容。
|
|
264
|
-
5. **改前备份**(`*.bak-YYYYMMDD-<tag>`);**变异演示基线必须是当前版本备份**(旧备份曾整体回滚改造)。
|
|
265
|
-
6. **代码留在 pre 线**,未经用户明确同意不 commit/push/publish。
|
|
266
|
-
7. 结论必须附代码/日志证据;推断显式标注为推断。
|
|
267
|
-
8. **先核 evidence 再采信**:卡片状态、记忆自述、他人交接声明一律以硬证据为准。
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
## 8. 关键路径索引
|
|
272
|
-
|
|
273
|
-
| 用途 | 路径 |
|
|
274
|
-
|---|---|
|
|
275
|
-
| 全量回归 | `D:\dsh-auto-memory\tools\run-smoke.mjs` |
|
|
276
|
-
| graph 端到端套件 | `D:\dsh-auto-memory\tests\smoke\smoke-test-graph-mode-pre.mjs`(35 断言) |
|
|
277
|
-
| issue #54 根因文件 | `D:\dsh-auto-memory\lib\memory-writer-pre.js`(:95-111、:68/:102) |
|
|
278
|
-
| issue #54 检测常量 | `D:\dsh-auto-memory\lib\memory-anchor-pre.js`(:27-29 常量、:177-186 判定、:184 带行号) |
|
|
279
|
-
| 技能晋升逻辑 | `D:\dsh-auto-memory\lib\procedure-store-pre.js`(:251 `promote()`、:54 门槛) |
|
|
280
|
-
| 群反馈原始卡片 | `D:\dsh-auto-memory\docs\internal\TODO-GRAPH.html`(P0-A/P0-B/P0-4d/P1-8/P2-9/P2-11/P2-12) |
|
|
281
|
-
| 送审任务书 | `D:\dsh-auto-memory\docs\internal\GPT-ACCEPTANCE-PROMPT-20260916.md` |
|
|
282
|
-
| 本次全量粗检审计 | `D:\dsh-auto-memory\docs\internal\AUDIT-WB-GRAPH-FULL-20260916.md` |
|
|
283
|
-
| 施工方自审(3 致命+6 高/中危) | `D:\dsh-auto-memory\docs\internal\REVIEW-WB-GRAPH-SELF.md` |
|
|
284
|
-
| 3.0 蓝本 | `D:\dsh-auto-memory\docs\internal\MASTER-PLAN-3.0.md` |
|
|
285
|
-
|
|
286
|
-
---
|
|
287
|
-
|
|
288
|
-
**归档时间**:2026-09-16 21:20 · **归档人**:施工方(本窗口 agent)
|
|
289
|
-
**数据来源**:GitHub API 实时查询(`state=all`,15 条未关闭)+ `TODO-GRAPH.html` 卡片抽取 + 代码 grep 实测
|
|
@@ -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`),**未发现**漏项。
|