@a9i5k4/dsh-auto-memory 2.5.3 → 3.0.1

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.
Files changed (167) hide show
  1. package/README.md +189 -7
  2. package/README.zh-CN.md +189 -7
  3. package/docs/CONTRIBUTORS.html +471 -0
  4. package/docs/FRONTEND-CO-CREATION.md +191 -0
  5. package/docs/GM53-HOMEPAGE-PROMPT.md +323 -0
  6. package/docs/HANDOFF-CRITERIA.md +92 -0
  7. package/docs/HOMEPAGE-CONTENT-FOR-GM53.md +299 -0
  8. package/docs/INTEGRATION-ANALYSIS.md +350 -348
  9. package/docs/PROMO-PROMPT-3.0.md +100 -0
  10. package/docs/USER-GUIDE.en.md +58 -3
  11. package/docs/USER-GUIDE.zh-CN.md +59 -4
  12. package/docs/WHITEPAPER.md +207 -0
  13. package/docs/internal/ACCEPT-35-LIVE.md +143 -0
  14. package/docs/internal/ACCEPTANCE-20260914.md +90 -0
  15. package/docs/internal/ARCH-REVIEW-BRIEF.md +411 -0
  16. package/docs/internal/ARCH-REVIEW-REQUEST.md +201 -0
  17. package/docs/internal/ARCH-REVIEW-ROUND2.md +169 -0
  18. package/docs/internal/ARCH-REVIEW-ROUND3.md +206 -0
  19. package/docs/internal/ARCHITECTURE-FOR-ZCODE-20260920.md +397 -0
  20. package/docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md +351 -0
  21. package/docs/internal/ART-DIRECTION-WIREFRAME.md +191 -181
  22. package/docs/internal/ART-DIRECTION-WIREFRAME.md.bak-superseded +181 -0
  23. package/docs/internal/AUDIT-WB-GRAPH-FULL-20260916.md +314 -0
  24. package/docs/internal/BATTLE-PLAN-20260917.md +871 -0
  25. package/docs/internal/CONCURRENCY-INVESTIGATION-20260917.md +192 -0
  26. package/docs/internal/CROSS-SESSION-SEARCH-PATH-DECISION.md +72 -0
  27. package/docs/internal/CROSS-SESSION-SEARCH-RESEARCH.md +131 -0
  28. package/docs/internal/DECISIONS-20260914-SESSION.md +269 -0
  29. package/docs/internal/DESIGN-P1-STATE-COMMIT-20260915.md +219 -0
  30. package/docs/internal/DIRECTION-CHECK-WB-GRAPH-20260916.md +132 -0
  31. package/docs/internal/FEATURE-INVENTORY.md +531 -0
  32. package/docs/internal/FEEDBACK-TO-DSHAPI-RELAY.md +13 -0
  33. package/docs/internal/G-SERIES-EXECUTION-20260917.md +248 -0
  34. package/docs/internal/G3-DESIGN-20260918.md +82 -0
  35. package/docs/internal/G3-DISK-FORMAT-GAP-20260919.md +92 -0
  36. package/docs/internal/GH-DISCUSSION-5732-COMMENT.md +74 -0
  37. package/docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md +352 -0
  38. package/docs/internal/GPT-REVIEW-PROMPT.md +216 -0
  39. package/docs/internal/GROUP-WEBHOOK-SETUP.md +33 -0
  40. package/docs/internal/HANDOFF-TO-ZCODE-20260920.md +309 -0
  41. package/docs/internal/HERMES-DATA-VERIFICATION-20260919.md +120 -0
  42. package/docs/internal/HERMES-LEGACY-STATUS-20260919.md +74 -0
  43. package/docs/internal/ISSUE-55-58-VERIFICATION-20260918.md +175 -0
  44. package/docs/internal/ISSUE10-FIX-EXECUTION-20260919.md +389 -0
  45. package/docs/internal/ISSUE10-PLAN-20260919.md +254 -0
  46. package/docs/internal/ISSUE10B-FORENSICS-20260919.md +468 -0
  47. package/docs/internal/ISSUE9-PURGE-AND-R1-PLAIN-20260919.md +150 -0
  48. package/docs/internal/ISSUE9-RESIDUAL-FORENSICS-20260919.md +114 -0
  49. package/docs/internal/KICKOFF-P0.md +254 -0
  50. package/docs/internal/LESSON-TO-CANDIDATE-STATUS-20260919.md +79 -0
  51. package/docs/internal/MASTER-PLAN-3.0.md +411 -0
  52. package/docs/internal/MEMORY-GOVERNANCE-20260917.md +309 -0
  53. package/docs/internal/MEMORY-MUTATION-AND-INDEX-DESIGN.md +85 -0
  54. package/docs/internal/MERGE-CONFLICT-SCAN-20260914.md +222 -0
  55. package/docs/internal/PENDING-FIXES-20260916.md +289 -0
  56. package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md +705 -0
  57. package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md.bak-s10 +649 -0
  58. package/docs/internal/PROCEDURAL-MEMORY-AND-APPROVAL-DESIGN-20260918.md +225 -0
  59. package/docs/internal/PROGRESS-20260917.md +93 -0
  60. package/docs/internal/PROMPT-GAP-AUDIT-20260920.md +128 -0
  61. package/docs/internal/R1-DEGRADE-AUDIT-20260918.md +163 -0
  62. package/docs/internal/R1-READABILITY-FORENSICS-20260919.md +127 -0
  63. package/docs/internal/R2-EVIDENCE-DEEP-AUDIT-20260918.md +140 -0
  64. package/docs/internal/R3-DEGRADE-LEDGER-DESIGN-20260918.md +138 -0
  65. package/docs/internal/R4-RECALL-QUOTA-PLAN-20260918.md +218 -0
  66. package/docs/internal/RAG-KARPATHY-PROGRAM.md +229 -0
  67. package/docs/internal/REPORT-P0-NIGHTLY.md +212 -0
  68. package/docs/internal/REPORT-P5-ACCEPTANCE.md +31 -0
  69. package/docs/internal/REPORT-WB-GRAPH-NIGHTLY.md +153 -0
  70. package/docs/internal/RESUME-20260918.md +171 -0
  71. package/docs/internal/RESUME-20260919.md +104 -0
  72. package/docs/internal/REVIEW-WB-GRAPH-SELF.md +81 -0
  73. package/docs/internal/RHINELAB-TO-DEEPSEEK-FEASIBILITY.md +198 -0
  74. package/docs/internal/ROADMAP-20260917-WEEK.md +439 -0
  75. package/docs/internal/ROADMAP.md +106 -0
  76. package/docs/internal/RUN-P0-NIGHTLY.md +227 -0
  77. package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +185 -0
  78. package/docs/internal/S10-GAP-INVENTORY-20260917.md +239 -0
  79. package/docs/internal/S10-GAPS-PLAIN-20260917.md +125 -0
  80. package/docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md +360 -0
  81. package/docs/internal/SESSION-FILE-REPAIR-PROTOCOL.md +90 -0
  82. package/docs/internal/T6-EXECUTION-20260920.md +130 -0
  83. package/docs/internal/TELEMETRY-EFFECT-REPORT-DESIGN-20260918.md +146 -0
  84. package/docs/internal/THESIS-GAP-ANALYSIS-20260918.md +89 -0
  85. package/docs/internal/THESIS-OUTLINE-20260918.md +147 -0
  86. package/docs/internal/THREE-LAYER-CONTRACT.md +219 -0
  87. package/docs/internal/TODO-BACKLOG.md +263 -142
  88. package/docs/internal/TODO-GRAPH.html +715 -0
  89. package/docs/internal/TODO-GRAPH.html.bak-20260914-v2 +493 -0
  90. package/docs/internal/TODO-GRAPH.html.bak-20260915-alsfix +710 -0
  91. package/docs/internal/TODO-GRAPH.html.bak-20260915-p1 +710 -0
  92. package/docs/internal/TODO-GRAPH.html.bak-20260915-p6a-rev +703 -0
  93. package/docs/internal/TODO-GRAPH.html.bak-20260915-wshint +710 -0
  94. package/docs/internal/TODO-GRAPH.html.bak-20260916-batch +715 -0
  95. package/docs/internal/UPSTREAM-ISSUE-PR-TRIAGE-20260919.md +297 -0
  96. package/docs/internal/UPSTREAM-ISSUES-3RD-AUDIT-20260920.md +104 -0
  97. package/docs/internal/WB-FORMAT-CONVENTION.md +112 -0
  98. package/docs/internal/WB-GRAPH-DECISIONS-20260914.md +71 -0
  99. package/docs/internal/reviews/CLAIM-VERIFICATION-20260914.md +56 -0
  100. package/docs/internal/reviews/PLAN-gpt6astra-round2-20260914.md +787 -0
  101. package/docs/internal/reviews/REVIEW-gpt6astra-20260914.md +112 -0
  102. package/docs/internal/reviews/ROUND3-REVIEW-INTEGRATION-20260914.md +230 -0
  103. package/docs/prompts/M8-3-enable-verify.md +49 -49
  104. package/docs/screenshots/promo/promo-0-banner-v3.png +0 -0
  105. package/lib/acceptance.js +71 -0
  106. package/lib/activation-host.js +153 -18
  107. package/lib/activation-inbox.js +25 -7
  108. package/lib/board-mode.js +30 -0
  109. package/lib/client.js +1758 -90
  110. package/lib/config-io.js +156 -0
  111. package/lib/context-bridge.js +5 -2
  112. package/lib/context-host.js +86 -15
  113. package/lib/degrade.js +385 -0
  114. package/lib/dsh-home.js +143 -0
  115. package/lib/engine-identity.js +149 -0
  116. package/lib/engine-switch.js +247 -0
  117. package/lib/episodic-store.js +63 -12
  118. package/lib/evidence-store.js +10 -3
  119. package/lib/fact-store.js +22 -3
  120. package/lib/fs-retry.js +46 -0
  121. package/lib/index-sync.js +13 -1
  122. package/lib/index.js +3446 -263
  123. package/lib/intent-clean-safe.js +258 -0
  124. package/lib/intent-clean.js +12 -16
  125. package/lib/l0-extract.js +478 -149
  126. package/lib/l0-index-sync.js +195 -0
  127. package/lib/l0-index.js +349 -239
  128. package/lib/ledger-criteria.js +142 -0
  129. package/lib/m4-corpus.js +8 -2
  130. package/lib/m7-index-sync-host.js +73 -5
  131. package/lib/m7-wire.js +3 -3
  132. package/lib/memory-anchor.js +56 -1
  133. package/lib/memory-envelope.js +257 -0
  134. package/lib/memory-hub.js +138 -13
  135. package/lib/memory-index.js +4 -2
  136. package/lib/memory-mutation.js +246 -0
  137. package/lib/memory-writer.js +204 -24
  138. package/lib/note-status-apply.js +118 -0
  139. package/lib/note-status.js +196 -0
  140. package/lib/procedure-observation.js +48 -0
  141. package/lib/procedure-store.js +118 -20
  142. package/lib/python-setup.js +1 -1
  143. package/lib/python-sidecar-client.js +29 -3
  144. package/lib/recall-fusion.js +83 -12
  145. package/lib/rerank-host.js +160 -0
  146. package/lib/rules-edit.js +159 -0
  147. package/lib/rules-layer.js +261 -0
  148. package/lib/semantic-decide.js +41 -8
  149. package/lib/semantic-js.js +66 -6
  150. package/lib/shadow-host.js +3 -5
  151. package/lib/shadow-retrieval.js +3 -3
  152. package/lib/skill-export-host.js +153 -0
  153. package/lib/skill-export.js +239 -0
  154. package/lib/state-commit.js +245 -0
  155. package/lib/storage-manage.js +6 -0
  156. package/lib/subagent-gc.js +4 -8
  157. package/lib/temporal-parse.js +191 -159
  158. package/lib/tier-layer-inject.js +650 -0
  159. package/lib/tier0-catalog.js +735 -0
  160. package/lib/water-window.js +263 -186
  161. package/lib/wb-contract.js +691 -0
  162. package/lib/wb-sidecar.js +890 -0
  163. package/lib/ws-overview-rank.js +2 -2
  164. package/package.json +1 -1
  165. package/python/m7_embedding_v1.py +5 -5
  166. package/python/worker_semantic_v1.py +17 -6
  167. package/python/worker_v1.py +38 -4
@@ -0,0 +1,191 @@
1
+ # 前端共创计划 · dsh-auto-memory
2
+
3
+ > **一句话**:这个插件的前端(记忆面板 12 页签 + 设置页 8 分组)目前是「能用」的水平,
4
+ > 我们知道它离「好用」还有距离。**视觉与交互的改进,交给社区。**
5
+ > 你有想法,提 PR;我们提供完整的落点地图、约束清单和一个不碰后端的沙盒。
6
+
7
+ ---
8
+
9
+ ## 一、为什么把前端交给社区
10
+
11
+ 三条实话:
12
+
13
+ 1. **功能已经稳定,前端是短板。** 后端 17 个模型工具、49 条路由、98 个设置键都在跑,
14
+ 但记忆面板的信息密度高、布局拥挤,用户第一眼常常不知道该看哪里。
15
+ 2. **前端的取舍没有唯一答案。** 「唤起回顾该怎么展示」「12 个页签该不该合并」
16
+ 这类问题取决于你自己的工作方式——而你们的工作方式比我们更丰富。
17
+ 3. **改前端的边际成本低于改后端。** 前端零构建、单文件、纯 ESM,
18
+ 你不需要装任何东西就能跑起来改。
19
+
20
+ 我们同时公开了**落点地图**(每个能力现在住在哪一行)和**视觉远期规划**(哪些不做、为什么),
21
+ 避免你花了力气做出来的东西因为「不在规划里」被拒。
22
+
23
+ ---
24
+
25
+ ## 二、你可以改什么(三档)
26
+
27
+ ### 🟢 A 档 · 随时欢迎,几乎不会被拒
28
+
29
+ | 方向 | 具体例子 |
30
+ |---|---|
31
+ | **信息层级** | 12 页签分组/折叠/重排;概览页只留最关键的三行 |
32
+ | **可读性** | 长列表虚拟滚动;日志页签的行距与等宽字体;中文断行 |
33
+ | **交互细节** | 键盘导航;Esc/焦点管理;加载态与空态;错误提示人话化 |
34
+ | **一致性** | 组件间距/圆角/字号收敛到设计令牌(见 §5) |
35
+ | **无障碍** | 对比度、focus-visible、aria-label、屏幕阅读器路径 |
36
+ | **文案** | 设置项说明从「参数名」改成人话 |
37
+
38
+ ### 🟡 B 档 · 欢迎,但请先开 issue 对齐
39
+
40
+ | 方向 | 为什么需要先对齐 |
41
+ |---|---|
42
+ | **页签合并/拆分** | 会改变所有人的肌肉记忆,属于破坏性变更 |
43
+ | **新增面板内视图** | 需要确认数据源已有路由支持(见 §4 路由表) |
44
+ | **动效体系** | 需要与「背景顺滑 / 角色克制」的分层帧率原则一致 |
45
+ | **亮色主题补全** | 令牌已备(`#f9f8f8`),但需要整套校验 |
46
+
47
+ ### 🔴 C 档 · 请不要做
48
+
49
+ | 方向 | 原因 |
50
+ |---|---|
51
+ | **改动注入语义** | 注入时机/预算/分层措辞是引擎契约,前端改不了也不该改 |
52
+ | **绕过 `saveConfigPatch` 直写配置** | 它是唯一写入出口(含校验与原子落盘),绕过会破坏配置完整性 |
53
+ | **新增运行时依赖** | 插件受单文件/无构建约束,不允许引入构建链或 npm 运行时依赖 |
54
+ | **改 `lib/*-pre.js` 的写入路径** | 这些文件的改动属于后端,需走另一套评审 |
55
+ | **提交后端 bug 修到前端 PR 里** | 请分开提,便于独立 review 与回滚 |
56
+
57
+ ---
58
+
59
+ ## 三、落点地图(你改的东西住在哪)
60
+
61
+ ### 3.1 六处插槽(插件 UI 的物理入口,全在 `lib/client.js`)
62
+
63
+ | # | 插槽 | 承载 | 定义行 |
64
+ |---|---|---|---|
65
+ | 1 | `sidebar.footer.action` | 侧栏入口按钮 | `client.js:5664` |
66
+ | 2 | `shell.overlay` | 浮层面板(12 页签) | `client.js:5667` |
67
+ | 3 | `shell.overlay` | 7 种弹窗 | `client.js:5670` |
68
+ | 4 | `shell.overlay` | 自动接续确认卡 | `client.js:5673` |
69
+ | 5 | `settings.section` | 设置页分区「自动记忆」 | `client.js:5676` |
70
+ | 6 | `conversation.view` | 会话页顶栏白板看板 | `client.js:5683` |
71
+
72
+ ### 3.2 12 页签 → 组件 → 数据源
73
+
74
+ | 页签 | 组件(定义行) | 读 | 写 |
75
+ |---|---|---|---|
76
+ | 概览 | OverviewTab(2315)+ GreetingCard(2115) | `/state` `/workspaces` `/greet` | `/reflect-auto` |
77
+ | 日志 | LogsTab(2537)**+ 硬约束编辑器**(2590) | `/list` `/file` | `/rules/apply` |
78
+ | 唤起回顾 | RefineTab(2413) | `/shadow-recent` | `/review-feedback` |
79
+ | 记忆中枢 | MemoryHubTab(2724) | `/memory-hub` | `/memory-hub` |
80
+ | 存储管理 | StorageTab(2850) | `/storage-manage` | `/storage-manage` `/scan-dirty` |
81
+ | 笔记 | NotesTab(2936) | `/state` | `/note` |
82
+ | 白板 | PlanTab(3111) | `/handoff-state` | `/handoff-continue` |
83
+ | 反思 | ReflectionsTab(3364) | `/file` | `/reflect` |
84
+ | 接续 | ConnectTab(3764) | `/external` `/external-view` | `/external-import` `/external-remove` |
85
+ | 日历 | CalendarTab(3594) | `/calendar` | `/calendar` |
86
+ | 检索 | SearchTab(3420) | — | `/recall` `/smart-recall` |
87
+ | 工作区 | WorkspaceTab(3543) | `/workspaces` | — |
88
+
89
+ 面板外壳另有:`/config` `/notices` `/update-check` `/debug`;看板另有 `/kanban-board`。
90
+
91
+ ### 3.3 设置页 8 分组(60 个可写键,共 98 个配置键)
92
+
93
+ | 分组 | 键数 | 内容 |
94
+ |---|---|---|
95
+ | 自动记忆引擎 | 9 | 联想开关/锚点/冷却/候选策略/思维链观察 |
96
+ | 记忆中枢 | 8 | 情节与技能的晋升门限、高风险审批 |
97
+ | 外观 | 2 | 欢迎向导、语言 |
98
+ | 存储 | 3+ | 用户级/项目级/记忆根目录 |
99
+ | 记忆窗口 | 10 | 注入预算、容量、排除源、快照节奏 |
100
+ | 自动化 | 17 | 自动固化、无人值守、时段总结、定时班 |
101
+ | 上下文管理 | 11 | 交接、自动接续、水位、看板模式、子代理回收 |
102
+ | 维护 | — | 版本/更新/调试中心(只读) |
103
+
104
+ **写入唯一出口**:`saveConfigPatch`(`client.js:999-1200`)→ `POST /config`。**不要绕过它。**
105
+
106
+ ---
107
+
108
+ ## 四、约束清单(提交前请自查)
109
+
110
+ ### 4.1 硬约束
111
+
112
+ - [ ] **零新增依赖**:不引 React/Vue/构建链/任何 npm 运行时包。现有 UI 是组件库内置原语 + 手写 CSS。
113
+ - [ ] **配置写入走 `saveConfigPatch`**:不得直写 `/config` 或本地存储绕开校验。
114
+ - [ ] **不改注入语义**:不碰任何决定「什么时候注入、注入多少」的逻辑。
115
+ - [ ] **失败要留痕**:新增的 fail-soft 分支必须产生**可观察信号**(面板可见或日志留痕),禁止静默吞异常。
116
+ - [ ] **开关解耦**:单个开关不得顺带改变其它功能的行为。
117
+ - [ ] **双语**:所有面向用户的文案必须同时给中文与英文(现有 `data-en` / 中文源文模式)。
118
+ - [ ] **不引入授权待清的资产**:字体/图标/图片必须自带许可或使用系统字体。
119
+
120
+ ### 4.2 自查清单
121
+
122
+ - [ ] 本地能跑起来(见 §5)
123
+ - [ ] 键盘可达:Tab 能走到,Esc 能退出,焦点可见
124
+ - [ ] 空态 / 加载态 / 错误态 都有处理
125
+ - [ ] 长内容不溢出(工作区名可能很长、日志可能几千行)
126
+ - [ ] 改设置后**界面立刻回显**(写盘成功但界面没变 = 功能坏了,这是明确的项目红线)
127
+ - [ ] 在窄窗口(≤640px)下不横向滚动
128
+
129
+ ---
130
+
131
+ ## 五、怎么跑起来改(零安装)
132
+
133
+ 插件是**纯 ESM 单文件 + 手写 CSS,没有构建步骤**:
134
+
135
+ ```bash
136
+ git clone https://github.com/Aik358/dsh-auto-memory.git
137
+ cd dsh-auto-memory
138
+ # 把 profile 指向你的开发树(link: 挂载)
139
+ # 然后重启 DSH,侧栏就会出现「记忆」入口
140
+ ```
141
+
142
+ 改 `lib/client.js` / `lib/client-*.js` 后刷新页面即可看到效果。
143
+
144
+ **回归自检**(改完请跑,PR 里贴上结果):
145
+
146
+ ```bash
147
+ node tools/run-smoke.mjs --timeout=90000 \
148
+ --exclude=-live- --exclude=m79-feature-v2-pre \
149
+ --exclude=m710-fv2-emit-pre --exclude=c4-fresh-install-pre
150
+ ```
151
+
152
+ 期望:**PASS 141 / FAIL 0 / TIMEOUT 0**(并行 ×4,约 44 秒)。
153
+
154
+ ---
155
+
156
+ ## 六、已公开的设计文献(动笔前先读)
157
+
158
+ | 文档 | 内容 |
159
+ |---|---|
160
+ | `docs/internal/FEATURE-INVENTORY.md` | 三层功能全量清单:L1 39 条用户能力 / L2 承载面 / L3 工程细节(含全部 17 工具、49 路由、98 键) |
161
+ | `docs/internal/ARCHITECTURE-FOR-ZCODE-20260920.md` | 面向新开发者的结构文档,61 个模块职责表 |
162
+ | `docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md` | 现行美术方向(DeepSeek 官网体系) |
163
+ | `.dsh/skills/transitions-motion/` | 43 个生产级动效的完整源码与技法文档(含 motion token 刻度) |
164
+ | `site/` | 项目主页(纯静态,可直接本地打开) |
165
+
166
+ ---
167
+
168
+ ## 七、视觉远期规划(哪些暂时不做,为什么)
169
+
170
+ 以下方向**已经论证过可行性,但明确排在远期**。原因是它们属于「重投入、收益不确定」,
171
+ 在当前阶段不适合占用主线资源。**如果你愿意做,我们欢迎——前提是先开 issue 对齐范围。**
172
+
173
+ | 方向 | 结论 | 阻塞点 |
174
+ |---|---|---|
175
+ | **项目主页三维档案终端** | 技术已验证可行(Three.js 阵列 + 逐帧开场,本机跑通) | ① 参考项目的 3D 模型受 MIT 覆盖范围限制,**不可直接沿用**,需自建或程序化几何;② 配色需从暖灰底整体重标定为深底+品牌蓝(含光照/雾/AO);③ 40 份档案正文需重写 |
176
+ | **角色层(鲸鱼娘)** | 抽象线描已产出(Ark9 生图 + 本地亮度键控) | 三维场景内使用需要模型,非 2D 位图;2D 图层叠加是可行的降级方案 |
177
+ | **亮色主题** | 令牌已备(`#f9f8f8`) | 需整套对比度与光照校验 |
178
+ | **面板整体重排** | 需要先有特征化测试 | 前端目前回归网极薄(146 个套件里仅 3 个断言组件行为) |
179
+
180
+ ---
181
+
182
+ ## 八、怎么提 PR
183
+
184
+ 1. **先开 issue** 说明你想改什么、为什么、大概怎么做(B 档方向必须先走这步)
185
+ 2. Fork → 建分支 → 改 → 跑 §5 回归 → 提 PR
186
+ 3. PR 描述里请写:**改了什么 / 为什么 / 怎么验证 / 截图或录屏**
187
+ 4. 我们会用同一份 §4 约束清单 review
188
+ 5. 后端改动请单独提 PR,不要混在前端 PR 里
189
+
190
+ **许可**:本插件代码以 **BSD-3-Clause** 发布。你的贡献将以同一许可合入。
191
+ 页脚的角色设定署名(CC BY-NC-SA 4.0)与上游项目署名(MIT)**请勿删除或改写**。
@@ -0,0 +1,323 @@
1
+ # GM5.3 主页构建 Prompt(可直接粘贴)
2
+
3
+ > **用法**:把本文件**全文**粘给 GM5.3。它自带全部上下文,不需要再读别的文件。
4
+ > **产出**:一个可直接打开的静态站点(`index.html` + `assets/site.css` + `assets/site.js`)。
5
+ > **不要问澄清问题**——所有决策已在本 prompt 内给定。
6
+
7
+ ---
8
+
9
+ # 任务
10
+
11
+ 构建 **dsh-auto-memory** 的项目主页(GitHub Pages 用)。这是一个 **DeepSeek Harness(DSH)** 的记忆插件,当前版本 **3.0.0**。
12
+
13
+ **交付形态**:纯静态站点,零构建、零依赖、零 CDN。产出三个文件:
14
+
15
+ ```
16
+ index.html 单页,11 个 section
17
+ assets/site.css 样式
18
+ assets/site.js 双语切换 + 滚动揭示 + 复制按钮
19
+ ```
20
+
21
+ **目标**:让一个已经在用 DSH 的人在 60 秒内相信三件事,然后去装:
22
+
23
+ 1. 这个插件**自己会记事**,不用你提醒它「记得记一下」
24
+ 2. 它记的东西**你能查、能改、能删**,不是黑盒
25
+ 3. 装它**没有代价**:零运行时依赖、无账号、无云端、BSD-3、跨平台
26
+
27
+ ---
28
+
29
+ # 一、硬约束(违反即返工)
30
+
31
+ ## 1.1 技术约束
32
+
33
+ - **零依赖**:不引 React / Vue / Tailwind / 任何 CDN / 任何 npm 包。**手写 HTML + CSS + 原生 JS**。
34
+ - **单页**:11 个 `<section>`,锚点导航跳转,不做多页路由。
35
+ - **双语**:所有面向用户的文案必须**中文原文 + `data-en` 属性**两套。
36
+ - ⚠️ **铁律**:`data-en` 元素内部**不得有任何子标签**。语言切换用 `textContent` 整体替换,子元素会被永久抹平。要在 `data-en` 元素里加粗,请把强调移到元素**之外**的兄弟节点。
37
+ - **响应式**:1440 / 1024 / 610 / 390 四个视口都不能横向溢出。
38
+ - **无障碍**:`<section>` 有 `aria-label`;SVG 有 `role="img"` + `aria-label`;键盘可达。
39
+
40
+ ## 1.2 视觉约束
41
+
42
+ **色板**(DeepSeek 官方暗色体系,直接照用,不要自创):
43
+
44
+ ```css
45
+ :root {
46
+ --ds-bg: #0a0a0a; /* 页面底色 */
47
+ --ds-brand: #4d6bfe; /* 品牌蓝 */
48
+ --ds-brand-dark:#6799fe; /* 亮蓝,用于 hover / 强调 */
49
+ --ds-brand-deep:#3a65c2; /* 深蓝 */
50
+ --ds-text: #ffffff;
51
+ --ds-text-2: rgba(255,255,255,.72);
52
+ --ds-text-3: rgba(255,255,255,.54);
53
+ --ds-surface-1: rgba(255,255,255,.04);
54
+ --ds-surface-3: rgba(255,255,255,.06);
55
+ --ds-border: rgba(255,255,255,.10);
56
+ --ds-border-2: rgba(255,255,255,.18);
57
+ --ds-radius-panel: 16px;
58
+ --ds-radius-card: 24px;
59
+ --ds-radius-pill: 100px;
60
+ --ds-blur: 12px;
61
+ }
62
+ ```
63
+
64
+ - 深色底 + 品牌蓝点缀,**玻璃质感**用 `backdrop-filter: blur(var(--ds-blur))`
65
+ - 中文正文用系统字体栈,代码/标签用等宽
66
+ - **每节必须有视觉元素**(SVG 示意图或图形化列表),不能只有纯文字段落
67
+
68
+ ## 1.3 内容约束
69
+
70
+ - **每节必须有一个「怎么核」证据行** —— 一句**可当场验证**的事实(比如「打开面板的日志页签,每条自动归档都带时间戳」)。这是这个插件的调性(唤起可审计),不能省。
71
+ - **不许出现**:厂商腔(赋能 / 极致体验 / 无缝 / 颠覆 / 引领)、空洞形容词、编造的数据。
72
+ - **统一用「她」指代插件**(不要用「本插件」「系统」)。这是作者定的人格。
73
+ - **诚实**:不知道的不写,没做的写「施工中」。
74
+
75
+ ## 1.4 法务约束(★ 四段必须分列,不得合并)
76
+
77
+ 页脚必须有四段,**不可合并成一句「本项目采用 XX 许可」**:
78
+
79
+ | 段 | 内容 |
80
+ |---|---|
81
+ | **许可** | dsh-auto-memory 以 **BSD-3-Clause** 发布 |
82
+ | **上游署名** | 三维场景结构参考 RhineLabUI / rhinelab-blog-theme(LBEILC / JesseLee-CN),**MIT**,Copyright (c) 2026 LBEILC。本项目**不包含**其三维模型、Blender 工程、原片素材或游戏品牌 |
83
+ | **角色** | 角色设定「溟月」原作者 **上善无形**,**CC BY-NC-SA 4.0**——非商业衍生并署名、以同协议共享。该许可与上述代码许可**相互独立且更严格** |
84
+ | **免责** | DeepSeek Harness 社区插件,与 **DeepSeek 官方无关**,与上述参考仓库作者亦无隶属关系 |
85
+
86
+ ---
87
+
88
+ # 二、逐页内容(11 节)
89
+
90
+ > 每节结构:**标题/一句话** → **人话正文** → **示意** → **「怎么核」证据行**
91
+
92
+ ---
93
+
94
+ ## §01 · 首屏 HERO
95
+
96
+ **主张**:无问自忆,且件件可查。
97
+
98
+ **正文(中文原文)**:
99
+ > 你不用交代她「记得记一下」。她自己留意、自己归档,在该用上的时候自己想起来——每次想起都带一条你能读、能评、能改的证据。上下文写满时,她也不把自己压缩成一段摘要:合上一本写满批注的笔记,翻开新的一页。
100
+
101
+ **必备元素**:
102
+ - 安装命令 `pnpm add @a9i5k4/dsh-auto-memory@latest` + **复制按钮**
103
+ - 五个事实芯片:`v3.0.0` · `BSD-3-Clause` · `零运行时依赖` · `Windows / macOS / Linux` · `中英双语`
104
+ - 一张四步闭环 SVG:**你说话 → 她留意 → 归档 → 想起来(带证据链)**,中心标注「零指令,不需要」
105
+
106
+ **怎么核**:打开面板的「概览」页签,安装向导第一步会把每个开关讲一遍。
107
+
108
+ ---
109
+
110
+ ## §02 · 她做六件事(全站导航骨架)
111
+
112
+ **一句话**:看完这六条,你就了解这个插件了。下面都是细节。
113
+
114
+ **六张卡片**(可点跳转到 §03–§08):
115
+
116
+ | # | 标题 | 一句话 |
117
+ |---|---|---|
118
+ | ① | 她自己记 | 不用你说「记得记一下」。她留意、归档,并在该用上时自己想起来。 |
119
+ | ② | 每条都查得到 | 每次想起都带证据链:能读、能评、能改、能删。全在你自己盘上。 |
120
+ | ③ | 三层分工 | 硬规矩、项目笔记、每日流水。常驻注入 + 按需检索,各管各的。 |
121
+ | ④ | 她替你记日子 | 对话里的截止日期与承诺,她记进日历,到点提醒你。 |
122
+ | ⑤ | 能搬,也不串味 | 别的 AI 工具的记忆能搬进来;多个项目并行互不打扰。 |
123
+ | ⑥ | 脏东西进不来 | 乱码、卡顿、JSON 注入在写入时就被拦;凭据不进提示词;每个功能单独可关。 |
124
+
125
+ **怎么核**:每张卡片点进去都能看到该节自己的「怎么核」那一行。
126
+
127
+ ---
128
+
129
+ ## §03 · ① 她自己记
130
+
131
+ **正文**:
132
+ > 你不用记得去告诉她「要记住」。每一轮结束,一个安静的子代理会读一遍刚发生的事,把值得留的按主题归档——不是往一堵墙上继续堆。等这些内容重新变得相关时,宿主会在上下文的固定边界把它们注入进去。模型不需要「想起来去查」,你的前缀缓存也不会被打散。
133
+
134
+ **要点四条**:
135
+ - 你没有任何「记得要做」的动作——根本没有一个会忘的保存键
136
+ - 按主题成组,一周后翻出来仍像笔记,不是一堆流水
137
+ - 固定边界注入,前缀缓存友好,不会每轮全量重算
138
+ - 窗口写满时她写一份交接账本,而不是把自己压缩掉
139
+
140
+ **示意**:上下文窗口右段高亮「她想起的」+ 上方标「固定边界」;下方三步链:读这一轮 → 按主题成组 → 落盘归档
141
+
142
+ **怎么核**:打开面板的**日志页签**,每条自动归档都带时间戳,并标明来自哪一轮。
143
+
144
+ ---
145
+
146
+ ## §04 · ② 每条都查得到
147
+
148
+ **正文**:
149
+ > 查不到源头的记忆就是传闻。每次唤起都带完整证据链:哪几条被激活、依据是什么、分数多少。你可以在「唤起回顾」里逐条评分——评分会回流到晋升判定,所以差了会越来越安静,好用的会越来越牢。没有黑盒,也没有任何东西离开你的磁盘。
150
+
151
+ **要点四条**:
152
+ - 你能在一条错记忆悄悄影响后面几个月之前就抓出它
153
+ - 评分就是反馈回路——技能就是这样挣到晋升的
154
+ - 凭据不进提示词:写入前卫生检查会剥掉
155
+ - 一切都在你本地磁盘;没有账号,没有云端
156
+
157
+ **示意**:一次唤起 → 展开证据链(来源条目 / 命中依据 / 评分)→ 四个动作:读、评、改、**删**(删高亮)
158
+
159
+ **怎么核**:唤起回顾页签 → 任选一次唤起 → 能看到它的来源与评分;改或删立即生效。
160
+
161
+ ---
162
+
163
+ ## §05 · ③ 三层分工
164
+
165
+ **正文**:
166
+ > 她记的东西分三层放,放在哪一层,决定它怎么进入模型。硬规矩每一轮都进——没有例外。项目笔记住在常驻目录里,随手可用但不吃窗口。每日日志平时不占地方,真需要的时候才被拉进来。
167
+
168
+ **三层 × 三种到达方式**:
169
+
170
+ | 层 | 内容 | 到达方式 |
171
+ |---|---|---|
172
+ | 用户级硬约束 | 「绝不要 X」「永远用中文答」——你自己定的 | **每轮无条件注入**(不做相关性判断) |
173
+ | 项目级笔记 | 决策、架构、约定——本来要反复解释的东西 | **常驻目录 + 命中即用**(≤400 token) |
174
+ | 每日日志 | 今天发生了什么,带时间戳 | **仅按需检索**(不进窗口,直到被需要) |
175
+
176
+ **要点**:你把东西放进哪一层,本身就是调度决策。你不需要手工调注入策略。
177
+
178
+ **示意**:三层堆叠 + 三条箭头指向模型,箭头粗细表示注入频率
179
+
180
+ **怎么核**:设置页显示每一层当前占多少 token;规则层有可视化编辑器;笔记层显示常驻目录体积。
181
+
182
+ ---
183
+
184
+ ## §06 · ④ 她替你记日子
185
+
186
+ **正文**:
187
+ > 截止日期、约好的时间、顺口一说就忘的承诺,都是在聊别的事的时候被顺手记下的——「周五交报告」「下周给你发过去」。它们会带着解析好的日期进日历,并在**日期到之前**回来找你,不是之后。
188
+
189
+ **要点四条**:
190
+ - 明确日期:「10 月 4 日前」「30 号」
191
+ - 相对日期:「下周」「三天后」——按今天换算
192
+ - 时间与象限:截止时刻和重要度一并记下
193
+ - 你对别人许的承诺,不只是你自己的任务
194
+
195
+ **示意**:对话里一句话 → 解析成 `2026-11-01 23:59 · 重要不紧急` → 标注「日期到之前回来找你」
196
+
197
+ **怎么核**:问一句「我最近有什么安排」,她会从日历文件里读回来——那个文件你自己也能打开看。
198
+
199
+ ---
200
+
201
+ ## §07 · ⑤ 能搬,也不串味
202
+
203
+ **正文**:
204
+ > 如果你已经在别的 AI 工具里干过活,那段历史不用重来。她会扫描 **WorkBuddy、CodeBuddy、Claude Code、Codex、ZCode、Kimi Code、TRAE** 留下的记忆,按来源分别导入——进哪些你挑,事后也能把一个来源整个撤掉。另一半是反过来的:并行的工作区和会话各自保留自己的召回决策与索引缓存,你跟她讲过的工作上的事,不会串到另一个小项目里去。
205
+
206
+ **要点四条**:
207
+ - 扫描是**只读**的,在你点确认之前不会写任何东西
208
+ - 按来源分列,进哪些你挑
209
+ - 一个来源可以整个撤掉
210
+ - 全局层(硬规矩)是**故意共享**的——那是你的长期约束;其余全部按工作区隔离
211
+
212
+ **示意**:左四个外部工具 → 中间「扫描 + 逐源导入」→ 右侧项目 A / 项目 B 各自隔离,中间画 ╳
213
+
214
+ **怎么核**:设置 → 外部记忆,会先列出检测到的每个来源及其路径与体积,**在你点确认之前不会写任何东西**。
215
+
216
+ ---
217
+
218
+ ## §08 · ⑥ 脏东西进不来
219
+
220
+ **正文**:
221
+ > 一个会写垃圾的记忆插件还不如没有。每次写入都先过闸门:乱码、卡顿输出、JSON 形状的注入都在那里被拦下;任何像凭据的东西在进入提示词之前就被剥掉。在那之上,每个功能是独立开关——你可以让它全自动跑,也可以只关掉某一项、其余照旧。
222
+
223
+ **闸门拦三类**:乱码 / 卡顿与重复输出 / JSON 注入 → **丢弃 + 留痕**(不静默)
224
+
225
+ **要点四条**:
226
+ - 关掉提醒不影响召回;关掉召回不影响规矩(**开关互不牵连**)
227
+ - 无人值守模式整圈自动跑、不弹任何确认,挂着机也能用
228
+ - 任何模型开箱可用:词法档 0 GB 起步,内置 JS 语义档约 130 MB
229
+ - Python int8 进阶档(约 563 MB)是向导式可选安装,**永远不是前置条件**
230
+
231
+ **怎么核**:设置里每个功能各占一行、各有独立开关,点一下标签立刻翻面。
232
+
233
+ ---
234
+
235
+ ## §09 · 亮点页入口
236
+
237
+ **一句话**:把它当成一间屋子,而不是一页纸。
238
+
239
+ **正文**:
240
+ > 三维档案终端把同样的内容变成一个能走进去的阵列:五列、四十份档案,方向键移动,拖拽环绕。选中的卡片会向镜头抬起,解密线随之合拢。它读的是和本页同一份数据——是同一个插件的另一种看法,不是另一个插件。
241
+
242
+ **必须诚实标注**:需要 WebGL;**当前施工中**,不支持时自动退回本页这种可读版。
243
+
244
+ **怎么核**:入口指向一个说明页,写清了还差哪三件事。
245
+
246
+ ---
247
+
248
+ ## §10 · 安装
249
+
250
+ **STEP 01 安装**(两条命令都给):
251
+ ```
252
+ pnpm add @a9i5k4/dsh-auto-memory@latest
253
+ npm i @a9i5k4/dsh-auto-memory@latest
254
+ ```
255
+ 提示:pnpm v11 的 `minimumReleaseAge` 默认 24 小时,可能拦下刚发布的版本——设为 0 或写死版本号。
256
+
257
+ **STEP 02 重启 DSH** —— 侧栏出现「记忆」入口。无账号、无云端、不上传任何东西。
258
+
259
+ **STEP 03 30 秒验证** —— 说一件带日期的事(「周五交报告」),再问「我最近有什么安排」。日期答得出来,整条链路就是通的。
260
+
261
+ **手册四链**:用户手册(中)/ User guide (EN) / Changelog / Issues
262
+
263
+ ---
264
+
265
+ ## §11 · 已知边界(五条)
266
+
267
+ > **这一页不是自黑,是信任凭证。** 保留、不要删、不要减少。
268
+
269
+ 1. 交接白板与水位感知是实验特性。**白板与账本 3.0 起默认开启**;自动接续默认关闭。
270
+ 2. 语义档可选。内置 JS 语义档(约 130 MB)是默认值、无需配置;Python int8 进阶档(约 563 MB)走向导安装。
271
+ 3. 面板 API 仅监听本机回环地址。外部访问返回 401 属预期行为,**不是故障**。
272
+ 4. 三维档案终端需要 WebGL。不支持时会退回可读版——信息不丢,只是没有三维呈现。
273
+ 5. 首屏角色的 24 fps 序列帧尚未交付;目前是内联 SVG 线稿,挂载位已按交付契约预埋。
274
+
275
+ **怎么核**:白皮书里每个数字都标注了代码出处。
276
+
277
+ ---
278
+
279
+ # 三、功能底表(供取用,主页只展示上面 6 组)
280
+
281
+ **规模数字(必须准确)**:`17 个模型工具` · `49 条 HTTP 路由` · `98 个配置键`(其中 60 可写)· `12 个面板页签` · `6 处插槽` · `0 运行时依赖`
282
+
283
+ **12 个页签**:概览 / 日志 / 唤起回顾 / 记忆中枢 / 存储管理 / 笔记 / 白板 / 反思 / 接续 / 日历 / 检索 / 工作区
284
+
285
+ **39 条能力分组**(主页只在 §02 展示 6 组):
286
+
287
+ - **A 记忆沉淀(5)**:全自动记忆沉淀 · 三层本地记忆 · 做梦式定时固化(每日 09:30)· 30 天蒸馏(每日 10:00)· 每日反思
288
+ - **B 检索与召回(5)**:跨会话记忆检索 · 两段式省 token 检索(L0 摘要 → 按 id 展开)· 分层语义检索(词法 + 语义 RRF 融合)· 历史会话全文检索 · 外部 AI 工具记忆继承(7 种工具)
289
+ - **C 注入与上下文(5)**:自动记忆注入(预算可调)· Tier-0 常驻目录(400 token 预算 / 占注入 25%)· 用户级硬性约束规则层 · 精简注入节奏(每 N 轮完整快照)· 结论生命周期(superseded / retracted / restore)
290
+ - **D 白板与接续(6)**:项目白板 PLAN.md · 四段式交接账本 · 白板看板(5 泳道)· 白板溯源工具 · 自动接续 · 上下文水位提示
291
+ - **E 技能库(4)**:模型直写技能 · 晋升门槛与审批(observed→candidate→validated→active)· 自动导出 SKILL.md · 审批界面人话化
292
+ - **F 面板与界面(10)**:12 页签记忆面板 · 用户级硬性约束可视编辑 · 主动联想记忆 · 唤起回顾打分闭环 · 工作区地图 · 用户级日历 · 首启欢迎向导 · 安装向导与环境检测 · 双语界面 · 面板字号可调
293
+ - **G 工程保障(4)**:写入闸门 · 凭据不进提示词 · 一切皆开关 · 工作区隔离
294
+
295
+ ---
296
+
297
+ # 四、交付要求
298
+
299
+ 1. **三个文件直接可跑**:双击 `index.html` 就能看,不需要服务器、不需要构建。
300
+ 2. **`assets/site.js` 必须实现**:
301
+ - 语言切换(读 `data-en`,`textContent` 整体替换;当前语言存 `localStorage`)
302
+ - 滚动揭示(IntersectionObserver,`threshold: 0.15`,加 `.in` 类)
303
+ - 复制按钮(`navigator.clipboard`,成功后按钮文字变「已复制」)
304
+ - ⚠️ 尊重 `prefers-reduced-motion`
305
+ 3. **占位页**:§09 的入口指向 `lab/index.html`。也请生成这个页面,内容是**真实说明**「三维档案终端施工中,还差哪三件事」,**不要**留死链。
306
+ 4. **不要把角色定妆稿放首屏** —— 那是给画师看的交付契约,不是给访客看的。
307
+
308
+ ---
309
+
310
+ # 五、自查清单(交付前逐条过)
311
+
312
+ - [ ] 四个视口(1440/1024/610/390)都无横向滚动
313
+ - [ ] 所有 `data-en` 元素内部**没有**子标签
314
+ - [ ] 所有 `href="#xxx"` 的锚点在页面里都存在
315
+ - [ ] §11 的五条边界**一条不少**
316
+ - [ ] 法务四段**分列**,未合并
317
+ - [ ] 每一节都有「怎么核」证据行
318
+ - [ ] 无 CDN、无外链 JS/CSS、无 npm 依赖
319
+ - [ ] 切到英文后页面文字完整可读,无丢字
320
+
321
+ ---
322
+
323
+ **开始构建。产出后请报告:三个文件的行数、四个视口的自查结果、以及任何你做了但本 prompt 没要求的设计决策。**
@@ -0,0 +1,92 @@
1
+ # 交接账本 / 白板 判据表(P0-1)
2
+
3
+ > 规格源:`docs/internal/WB-GRAPH-INTEGRATION-PLAN.md` §2.2(判据定义表)、§2.3(硬/软分层理由)、§2.4(校验时机)。
4
+ > 实现:`lib/ledger-criteria-pre.js`(纯函数、零 IO、fail closed)+ `lib/index.js` 的 `writeHandoffLedger` / `writePlanSnapshot` 入口。
5
+ > 本文档是**人与模型共读的判据原文**:模型写账本/白板前应自检,人类维护时应以本文为唯一口径。
6
+
7
+ ## 1. 为什么需要判据
8
+
9
+ 白板(`handoff/PLAN.md`)与交接账本(`handoff/handoff-*.md`)是**跨会话续命的唯一材料源**。它们一旦写坏,
10
+ 下游全部退化:权重化截断失效、注入端解析 null、接续会话拿到垃圾上下文。所以判据集中在**写入这一个门**上设防
11
+ (不引入 dsh-graph 的状态机;白板是单对话进度快照,七阶段迁移图是为多目标管理设计的)。
12
+
13
+ ## 2. 判据定义表
14
+
15
+ ### 2.1 交接账本(ledger)—— 四段式硬判据
16
+
17
+ | ID | 范围 | 判据 | 层级 | 校验方式 | 拒绝后果 |
18
+ | --- | --- | --- | --- | --- | --- |
19
+ | **H1** | 全篇 | 四段标题**齐全且逐字匹配**:`## 任务状态` / `## 目标` / `## 已试方案与失败原因` / `## 进度与下一步` | **硬·拒绝** | `parseHandoffLedgerPre()`(`lib/handoff-anchor-pre.js`)返回非 null,且四标题集合与权重表相等 | 拒绝写入,返回缺失段清单 |
20
+ | **H2** | 全篇 | 各段 body **非空**(不得只有标题) | **硬·拒绝** | 逐段 trim 后长度 > 0 | 拒绝写入,指出空段 |
21
+ | **H3** | 全篇 | **无占位符行**:段 body 不得只含 `(待补充)` / `TODO` / `同上` / `略` / `N/A` | **硬·拒绝** | 占位符黑名单集合匹配(借 dsh-graph `CRITERIA_PLACEHOLDERS` 技巧) | 拒绝写入 |
22
+ | H4 | 全篇 | 无未闭合代码围栏 | 软·警告 | 围栏计数为偶 | 通过,记 warning |
23
+ | P-H1 | 「进度与下一步」段 | 至少一行可执行下一步(含文件路径或命令) | 软·警告 | 正则 | 通过,记 warning |
24
+ | P-S1 | 全篇 | 含至少一处前瞻内容(`下一步\|待办\|计划\|todo`) | 软·警告 | 正则 | 通过,记 warning |
25
+
26
+ ### 2.2 白板(PLAN)
27
+
28
+ | ID | 判据 | 层级 |
29
+ | --- | --- | --- |
30
+ | P-H1 | 非空正文(不得为空文件) | **硬·拒绝** |
31
+ | P-H2 | 含至少一个 `##` 级标题 | **硬·拒绝** |
32
+ | P-S1 | 含「下一步 / 当前状态 / 待办」之类进展线索 | 软·警告 |
33
+
34
+ ## 3. 硬 / 软分层的理由
35
+
36
+ - **硬判据只拦「结构性损坏」**:段落缺失、段落全空、占位符——这些会让下游解析直接失败或产出误导性上下文。
37
+ - **软判据只记录不拦**:文案质量、前瞻性、详细程度是**判断问题**,机器判不准;拦了会误伤正常写入(fail closed 的代价必须可控)。
38
+ - **fail closed**:判据函数本身抛异常时按「拒绝」处理,而不是放行——写坏材料的代价 > 少写一次的代价。
39
+
40
+ ## 4. 校验时机(两层)
41
+
42
+ 1. **写入前(代码校验,强制)**:`writeHandoffLedger` / `writePlanSnapshot` 入口处调用,硬判据不过 → 返回
43
+ `{ok:false, gate:'criteria', report}`,附**可执行改写指引**(缺哪些段 / 哪段空 / 占位符行原文)。
44
+ 2. **写入后(事件,确认)**:校验通过或带软警告的事实作为**确认事件**追加到 `handoff/events.jsonl`
45
+ (`criteria.passed` / `criteria.warned`),供刷新仪式轮询、GUI 面板与图重建消费。
46
+
47
+ > **登记 ≠ 合格**:写入成功只代表「写进去了」,判据事件才代表「写合格了」。两者分离,防止模型用一次敷衍写入骗过仪式等待。
48
+
49
+ ## 5. 正例
50
+
51
+ ```markdown
52
+ # 交接账本 · 2026-09-16 14:30
53
+
54
+ ## 任务状态
55
+ - 已完成 13 项修复,全量回归 PASS 96 / FAIL 0 / TIMEOUT 0。
56
+
57
+ ## 目标
58
+ - 补 P2/P3 的输入端与检索端,默认仍走旧白板。
59
+
60
+ ## 已试方案与失败原因
61
+ - 方案:在 `apply()` 内 `await loadConfig()` → 失败原因:cordis 不 await apply 返回值,工具注册落进微任务。
62
+ - 方案:把闸门写成 `this.wbGraphGatePre()` → 失败原因:抽取式沙箱里 `this` 是裸对象,原型方法不可达。
63
+
64
+ ## 进度与下一步
65
+ - 下一步:跑 `node tools/run-smoke.mjs` 确认 FAIL 0。
66
+ ```
67
+
68
+ ## 6. 反例
69
+
70
+ ```markdown
71
+ # 交接账本
72
+
73
+ ## 任务状态
74
+ (待补充)
75
+
76
+ ## 目标
77
+
78
+ ## 进度与下一步
79
+ 同上
80
+ ```
81
+
82
+ **为什么被拒**:缺「已试方案与失败原因」段(H1 不过);「任务状态」只含占位符(H3 不过);「目标」段为空(H2 不过)。
83
+
84
+ ## 7. 引用关系
85
+
86
+ | 位置 | 作用 |
87
+ | --- | --- |
88
+ | `lib/ledger-criteria-pre.js` | 判据实现(纯函数、零 IO、fail closed) |
89
+ | `lib/handoff-anchor-pre.js`(权重表 + `parseHandoffLedgerPre`) | 段解析与权重化截断的真源 |
90
+ | `lib/index.js` → `writeHandoffLedger` / `writePlanSnapshot` | 写入咽喉(校验插入点) |
91
+ | `handoff/events.jsonl` | 判据确认事件(append-only) |
92
+ | `docs/internal/WB-FORMAT-CONVENTION.md` | tag 语法、条目 id(`mem_<32hex>`)、锚点行的格式约定 |