@a9i5k4/dsh-auto-memory 3.0.1 → 3.1.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.
- package/README.md +13 -8
- package/README.zh-CN.md +13 -8
- package/docs/HANDBOOK.md +92 -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 +1376 -255
- package/lib/config-io.js +59 -6
- package/lib/context-host.js +17 -2
- package/lib/episodic-store.js +90 -16
- package/lib/evidence-store.js +27 -1
- package/lib/fact-store.js +463 -41
- package/lib/hub-io.js +217 -0
- package/lib/index.js +904 -87
- package/lib/intent-clean-safe.js +1 -1
- package/lib/jsonl-tail-cursor.js +75 -0
- package/lib/m7-index-sync-host.js +4 -6
- package/lib/memory-hub.js +62 -7
- package/lib/migrate-pack.js +351 -0
- package/lib/note-status.js +9 -1
- package/lib/procedure-store.js +252 -31
- package/lib/procedure-switch.js +38 -0
- package/lib/python-setup.js +109 -27
- package/lib/python-sidecar-client.js +285 -8
- package/lib/recall-stats.js +242 -0
- package/lib/rules-layer.js +106 -15
- package/lib/semantic-js.js +25 -7
- package/lib/shadow-host.js +41 -2
- 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,352 +0,0 @@
|
|
|
1
|
-
# GPT 验收任务书 · dsh-auto-memory「2026-09-15 下午 → 09-16 上午」全窗口改动
|
|
2
|
-
|
|
3
|
-
> **交付对象**:具备本地文件读取与命令执行能力的 AI 验收者(GPT)。
|
|
4
|
-
> **你的角色**:**独立第三方验收者**。不要相信施工方的任何自述——包括本文件。
|
|
5
|
-
> **产出**:一份**可执行的验收报告**,含逐项判定(通过/不通过/证据不足)+ 缺陷清单 + 放行建议。
|
|
6
|
-
> **铁律**:**只读审查,禁止修改任何文件**。本文件里凡是"作者声称"的部分,都是**待你证伪的假设**,不是事实。
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 0. 一句话背景
|
|
11
|
-
|
|
12
|
-
`dsh-auto-memory` 是 DeepSeek Harness(DSH)的记忆插件。本窗口(15 日下午到 16 日上午)施工方完成了一次**底层重建(代号 3.0,八阶段)**,并在 16 日白天追加了**白板可视化兼并改造**与**文档/贡献者页**工作。
|
|
13
|
-
|
|
14
|
-
施工方**自认这段窗口"比较不严谨"**(用户原话),因此本轮验收的重点不是"功能能不能跑",而是:
|
|
15
|
-
|
|
16
|
-
1. **声称与事实是否一致**(有没有把未做的写成已做);
|
|
17
|
-
2. **绿灯是否可信**(测试全过 ≠ 缺陷不存在——本窗口已两次踩到"假绿");
|
|
18
|
-
3. **与权威规划是否对得上**(有没有跑偏、有没有擅自扩大范围)。
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 1. 审查对象与时间窗(精确边界)
|
|
23
|
-
|
|
24
|
-
| 项 | 值 |
|
|
25
|
-
| --- | --- |
|
|
26
|
-
| 代码仓库(pre 开发线,**唯一审查对象**) | `D:\dsh-auto-memory` |
|
|
27
|
-
| 时间窗 | **2026-09-15 12:00 → 2026-09-16 12:00(本地时间)** |
|
|
28
|
-
| 窗口内 Git 提交数 | **0**(全部是未提交的工作区改动) |
|
|
29
|
-
| 工作区待审改动 | **204 项**(`git -C D:\dsh-auto-memory status --short`;**含本任务书自身**,去掉它是 203 项) |
|
|
30
|
-
| 宿主插件主体 | `D:\dsh-auto-memory\lib\index.js`(约 12,000 行,单文件) |
|
|
31
|
-
| 浏览器半边 | `D:\dsh-auto-memory\lib\client.js`(约 5,300 行) |
|
|
32
|
-
| 用户配置(**只读**) | `C:\Users\JH Z\.dsh\dsh-auto-memory-pre.json` |
|
|
33
|
-
| 全量回归入口 | `cd D:\dsh-auto-memory && node tools/run-smoke.mjs` |
|
|
34
|
-
| **施工方声称的当前基线** | `PASS 96 / FAIL 0 / TIMEOUT 0(143.3s)` |
|
|
35
|
-
|
|
36
|
-
**取窗口内文件清单的权威命令**(不要凭本文件的表格当结论):
|
|
37
|
-
|
|
38
|
-
```powershell
|
|
39
|
-
cd D:\dsh-auto-memory
|
|
40
|
-
# 窗口内改动过的 lib 业务文件(排除备份)
|
|
41
|
-
Get-ChildItem lib -File | Where-Object {
|
|
42
|
-
$_.LastWriteTime -ge '2026-09-15 12:00' -and $_.LastWriteTime -le '2026-09-16 12:00' -and $_.Name -notlike '*.bak*'
|
|
43
|
-
} | Sort-Object Name | Select-Object LastWriteTime, Length, Name
|
|
44
|
-
|
|
45
|
-
# 窗口内新增的测试套件
|
|
46
|
-
Get-ChildItem tests\smoke -File | Where-Object {
|
|
47
|
-
$_.LastWriteTime -ge '2026-09-15 12:00' -and $_.LastWriteTime -le '2026-09-16 12:00' -and $_.Name -notlike '*.bak-*'
|
|
48
|
-
} | Sort-Object Name | Select-Object LastWriteTime, Length, Name
|
|
49
|
-
|
|
50
|
-
# 窗口内产出的内部文档
|
|
51
|
-
Get-ChildItem docs\internal -File | Where-Object {
|
|
52
|
-
$_.LastWriteTime -ge '2026-09-15 12:00' -and $_.LastWriteTime -le '2026-09-16 12:00'
|
|
53
|
-
} | Sort-Object LastWriteTime | Select-Object LastWriteTime, Length, Name
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## 2. 环境与硬约束(违反任一条即验收失败)
|
|
59
|
-
|
|
60
|
-
1. **禁止修改、创建、删除仓库内任何文件**;禁止改配置文件。
|
|
61
|
-
2. **禁止重启、停止任何 dsh / node 进程**。该进程承载验收者本体,杀它会中断验收。
|
|
62
|
-
禁止 `Stop-Process` / `taskkill` / `Get-Process node | Stop-Process` 等**按进程名批量杀**的命令。
|
|
63
|
-
3. 禁止 `git commit` / `git push` / `git checkout` / `npm publish`。**只读 Git 命令(log/diff/status/ls-files)允许**。
|
|
64
|
-
4. 不要为"验证"而写入用户真实记忆目录 `C:\Users\JH Z\.dsh\memory\...`。
|
|
65
|
-
需要文件系统实验时,**只用系统临时目录**(如 `$env:TEMP\gpt-verify-*`)。
|
|
66
|
-
5. 允许:读文件、grep、跑测试命令、跑只读探针、把临时脚本写到系统临时目录后执行。
|
|
67
|
-
6. **不要采信记忆文件、不要运行任何会改动状态的命令**。若某条结论必须靠"跑一下"才能验证,且该命令有副作用,**请标注为"未能验证"并说明原因**,不要擅自执行。
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## 3. 权威依据(合规审查的唯一标尺,请先读它们)
|
|
72
|
-
|
|
73
|
-
按优先级从高到低:
|
|
74
|
-
|
|
75
|
-
| # | 文件(绝对路径) | 作用 |
|
|
76
|
-
| --- | --- | --- |
|
|
77
|
-
| 1 | `D:\dsh-auto-memory\docs\internal\MASTER-PLAN-3.0.md` | **3.0 底层重建蓝本**——八阶段的目标、判据、验收口径 |
|
|
78
|
-
| 2 | `D:\dsh-auto-memory\docs\internal\TODO-GRAPH.html` | 3.0 看板(声称 47 卡全 ✅);**这是施工方自己的记账,可核对但不可作为证据** |
|
|
79
|
-
| 3 | `D:\dsh-auto-memory\docs\internal\WB-FORMAT-CONVENTION.md` | 白板格式契约(§2 锚点 id 契约 / §3 索引派生 / §4 写入门 / §6 lint / §8 验收清单) |
|
|
80
|
-
| 4 | `D:\dsh-auto-memory\docs\internal\WB-GRAPH-DECISIONS-20260914.md` | 用户拍板记录(§E 为最新裁定) |
|
|
81
|
-
| 5 | `D:\dsh-auto-memory\docs\internal\REVIEW-WB-GRAPH-SELF.md` | **施工方自审**(3 致命 + 6 高/中危)——请独立复核,**不要照抄** |
|
|
82
|
-
| 6 | `D:\dsh-auto-memory\docs\internal\AUDIT-WB-GRAPH-FULL-20260916.md` | 全量粗检审计报告(带行号证据) |
|
|
83
|
-
| 7 | `D:\dsh-auto-memory\docs\internal\DIRECTION-CHECK-WB-GRAPH-20260916.md` | 方向核对清单(6 个裁决点) |
|
|
84
|
-
| 8 | `D:\dsh-auto-memory\docs\internal\REPORT-WB-GRAPH-NIGHTLY.md` | 施工方交付报告(**注意:其中的"交付总览"含未完成项,可能与实际不符**) |
|
|
85
|
-
| 9 | `D:\dsh-auto-memory\docs\internal\REPORT-P5-ACCEPTANCE.md` | P5 验收清单(含 `releaseReady=false` 的如实标注) |
|
|
86
|
-
| 10 | `D:\dsh-auto-memory\docs\HANDOFF-CRITERIA.md` | 交接账本判据表(H1-H4 / P-H1 / P-S1 + 正反例)——**注意在 `docs\` 而非 `docs\internal\`** |
|
|
87
|
-
|
|
88
|
-
**若上述文件互相矛盾**:以文件 #1(MASTER-PLAN-3.0)与 #3(格式契约)为准;并把矛盾本身**作为一条发现记入报告**。
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## 4. 施工方声称的交付(**全部是待证伪的假设**)
|
|
93
|
-
|
|
94
|
-
### 4.1 3.0 八阶段(15 日下午 → 16 日凌晨)
|
|
95
|
-
|
|
96
|
-
声称全部结项,顺序为 `P0 → P6A → P1 与 P6B → P2 → P3 → P4 → P5`:
|
|
97
|
-
|
|
98
|
-
| 阶段 | 声称交付 | 对应文件(绝对路径) |
|
|
99
|
-
| --- | --- | --- |
|
|
100
|
-
| P0 | 写入门 + 判据账本 + 注入表达 | `lib\memory-envelope-pre.js`、`lib\memory-writer-pre.js` |
|
|
101
|
-
| P6A | 注入节奏与措辞 | `lib\rules-layer-pre.js` |
|
|
102
|
-
| P1 | 状态提交 + miv 单源 + 并发原子写 | `lib\state-commit-pre.js`、`lib\ledger-criteria-pre.js` |
|
|
103
|
-
| P6B | kind 持久化 + 撤回 + 迁移 | `lib\rules-layer-pre.js` |
|
|
104
|
-
| P2 | 真增量(真实输入数/复用顺序/引擎身份门) | `lib\engine-identity-pre.js`、`lib\engine-switch-pre.js`、`lib\l0-index-sync-pre.js` |
|
|
105
|
-
| P3 | 共同检索融合决策(R1 双显示 + `opts.fusion:'legacy'` 回滚) | `lib\l0-index-pre.js`、`lib\m7-index-sync-host-pre.js` |
|
|
106
|
-
| P4 | 精排多级 + 有界异步窗口 | `lib\rerank-host-pre.js` |
|
|
107
|
-
| P5 | 验收清单(7 必需项 + U1 兼容门 + release-ready 门) | `lib\acceptance-pre.js`、`docs\internal\REPORT-P5-ACCEPTANCE.md` |
|
|
108
|
-
|
|
109
|
-
窗口内新增 13 个 smoke 套件(**点名**,请核对是否真实存在且断言数对得上):
|
|
110
|
-
|
|
111
|
-
```
|
|
112
|
-
tests\smoke\smoke-test-t0-3-budget-ledger-pre.mjs
|
|
113
|
-
tests\smoke\smoke-test-switch-decouple-pre.mjs
|
|
114
|
-
tests\smoke\smoke-test-capture-paths-pre.mjs
|
|
115
|
-
tests\smoke\smoke-test-state-commit-pre.mjs
|
|
116
|
-
tests\smoke\smoke-test-p1-concurrency-pre.mjs
|
|
117
|
-
tests\smoke\smoke-test-p6a-rules-layer-pre.mjs
|
|
118
|
-
tests\smoke\smoke-test-ws-hint-first-round-pre.mjs
|
|
119
|
-
tests\smoke\smoke-test-p6b-rules-kind-pre.mjs
|
|
120
|
-
tests\smoke\smoke-test-p2-delta-engine-pre.mjs
|
|
121
|
-
tests\smoke\smoke-test-p3-recall-decision-pre.mjs
|
|
122
|
-
tests\smoke\smoke-test-p4-rerank-window-pre.mjs
|
|
123
|
-
tests\smoke\smoke-test-p5-acceptance-pre.mjs
|
|
124
|
-
tests\smoke\smoke-test-p1-ledger-criteria-pre.mjs
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### 4.2 白板可视化「兼并」(16 日凌晨 → 白天)
|
|
128
|
-
|
|
129
|
-
**用户裁定(原话口径)**:让 auto-memory **兼并** dsh-graph(**包括可视化**),不是往 profile 里再挂一个 dsh-graph 插件。
|
|
130
|
-
|
|
131
|
-
施工方声称的落点(**请逐条核对代码**):
|
|
132
|
-
|
|
133
|
-
1. `lib\wb-sidecar-pre.js` —— 纯函数投影层:`buildKanbanPre`(泳道卡片)、`buildKanbanMatrixPre`(矩阵:行=日期分组、列=5 泳道 + `misc` 兜底)、`ledgerDateOfPre`
|
|
134
|
-
2. `lib\board-mode-pre.js` —— 总开关:`legacy`(默认)/ `graph`,**非法值 fail-closed 回 legacy**
|
|
135
|
-
3. `lib\index.js` —— `kanbanBoardData` 同一路由**同时**返回 `lanes`(窄容器用)与 `matrix`(宽容器用)
|
|
136
|
-
4. `lib\client.js` —— 双承载面:面板 `KanbanBoard`(侧边栏,列表视图)+ `KanbanView`(注册到 `conversation.view` 上栏,矩阵视图)
|
|
137
|
-
|
|
138
|
-
**声称的关键不变量**(可独立验证):
|
|
139
|
-
- 矩阵列合计 == 总卡数(**不得静默丢卡**);施工方称初版漏 `misc` 兜底列导致 59 张卡落不进任何列,已修
|
|
140
|
-
- `__undated__` 行必须存在(`PLAN.md` / 归档文件归此行)
|
|
141
|
-
- 行按日期倒序
|
|
142
|
-
- 同一输入**打乱顺序后**输出不变(注意:施工方自认"两次同输入结果相同"是**弱断言**,因为 V8 sort 稳定,撤掉 id 破平也照样通过)
|
|
143
|
-
|
|
144
|
-
### 4.3 16 日白天的文档与贡献者页
|
|
145
|
-
|
|
146
|
-
| 交付 | 状态 | 证据 |
|
|
147
|
-
| --- | --- | --- |
|
|
148
|
-
| `D:\dsh-auto-memory\docs\CONTRIBUTORS.html` | 新建,**已推送** | 远程 `origin/main` = `794717d` |
|
|
149
|
-
| `D:\dsh-auto-memory\README.md` | 修改,**已推送** | 同上 |
|
|
150
|
-
| `D:\dsh-auto-memory\README.zh-CN.md` | 修改,**已推送** | 同上 |
|
|
151
|
-
| 贡献者数据 | 声称 18 位外部贡献者 / 17 PR / 32 Issue | 施工方称取自 GitHub API |
|
|
152
|
-
|
|
153
|
-
**注意一处施工方主动交代的错误**:初次统计时凭印象写成"14 PR / 37 issue"与"Minervaowl7 11 PR + 12 issue",后用脚本核对修正为 **17 PR / 32 issue**、**15 PR + 8 issue**。请复算验证最终数字是否正确。
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## 4.4 【本批新增】2026-09-16 送审前缺陷清理批次(**请重点证伪**)
|
|
158
|
-
|
|
159
|
-
背景:用户要求在送审**之前**先把已知 issue / 外部 PR / 群反馈一次性清掉,避免带着已知缺陷送审。
|
|
160
|
-
施工清单与回执:`D:\dsh-auto-memory\docs\internal\PENDING-FIXES-20260916.md`(§「施工完成回执」)。
|
|
161
|
-
**关键前提**:外部 PR 打的是**发布线布局**(`lib/memory-writer.js` 等裸名),而 pre 线运行 `-pre.js` 具名模块,
|
|
162
|
-
⇒ **不能 `git apply`**,施工方是按**根因在 pre 线重写**的。请重点核查"是否真的等价修好,而非贴着 PR 抄"。
|
|
163
|
-
|
|
164
|
-
| # | 项 | 施工方声称 | 建议验证 |
|
|
165
|
-
|---|---|---|---|
|
|
166
|
-
| N1 | **issue #54** 写入侧保留语法过滤 | 新增 `checkReservedSyntaxInContent()`(复用既有 `MARKER_OPEN`);`appendAnchoredRecord`/`replaceSingleRecord` 前置拦截;`conflict:` reason 带 `@行号` | 跑 `tests\smoke\smoke-test-issue54-pre.mjs`(声称 12/12);**独立构造**一条含 `<!-- memory:` 的正文,确认被拒且**后续良性写入仍成功**(本 issue 的核心危害是"整体中断"而非丢一条) |
|
|
167
|
-
| N2 | **issue #51** DATE_RE 锚定 | `ws-overview-rank.js` 改 `^(\d{4})-(\d{2})-(\d{2})$` | 跑 `smoke-test-issue51.mjs`(声称 29/29);核对与 `lib\index.js` 的 `DATE_RE` 是否**同源** |
|
|
168
|
-
| N3 | **issue #48** EPERM 退避 + 失败不降级 | 新增 `lib/fs-retry-pre.js`;`atomicReplace` 保留候选快照 + `recoveryPath`;`memory_log/note/user` 失败改为**抛出**(DSH 记 isError) | 跑 `smoke-test-issue48.mjs`(声称 37/37);**重点**:确认"写入失败不再被包装成成功字符串"——这是静默丢记忆的根因 |
|
|
169
|
-
| N4 | **issue #40** welcomeTourEnabled 失效 | 三处自动弹出分支全过 `allowTour`;配置未知不自动播放;✕ 直接关闭 | 跑 `smoke-test-startup-dispatch-pre.mjs`(声称 20/20);核对 `if (allowTour && ` 出现 **3** 次 |
|
|
170
|
-
| N5 | **issue #38** 容量整理净增长 | 根因 A:占位段 `(文件头)` 被凭空写出(引入 `synthetic` + `seqOf`);根因 B:`replace` 误按旧文件额度计费 | 跑 `smoke-test-issue38-pre.mjs`(声称 12/12)。**请独立复现**:施工方称修前在 pre 线实测 **67→77→87、8 轮单调 +80**;请检查 `lib\index.js` 的 `compactLegacyLayer` 是否还有无条件 `'## ' + s.title` 重序列化 |
|
|
171
|
-
| N6 | **issue #45** recall 256 截断 | 移除 `l0Corpus.length = 256` 与语义臂记录预算;新增"窗口受限"提示 | 跑 `smoke-test-issue45-recall-corpus.mjs`(声称 45/45)+ `smoke-test-p2-semantic-recall-pre.mjs`(声称 15/15) |
|
|
172
|
-
| N7 | **issue #30** 技能永久无法晋升 | **去重口径由 title 改指纹**(标题不是身份);观察行显式 `observationOnly`,晋升短接为 `observation-only` | 跑 `smoke-test-issue30-procedure-promotion-pre.mjs`(声称 36/36)。**注意**:施工方称 PR #36 自带用例**未覆盖它自己的根因**(同名碰撞链),故补了断言 —— 请复核该断言是否真的能抓住回归 |
|
|
173
|
-
| N8 | **issue #52** 子代理模型被旧 cfg 覆盖 | `set()` 改函数式更新 + 新增 `setMany()`;三个成对入口改原子更新 | 跑 `smoke-test-issue52-pre.mjs`(声称 9/9);核对 `set(` 是否**不再**引用闭包变量 `cfg` |
|
|
174
|
-
| N9 | **群反馈 #4** 注入可排除来源 | 新增 `injectExcludeSources` + `filterExcludedSourcesPre()`(id/整层/目录前缀/精确路径);注入闸门**之前**挡下 | 跑 `smoke-test-p0-4d-inject-exclude-pre.mjs`(声称 17/17)。**请核查施工方的一处自我更正**:该卡片写"注入上限待开工",但施工方称**上限部分早已存在**(冻结常量 `TIER_BUDGET_PRE_V1`),只有"排除来源"是真缺口 —— 请判定此说法是否成立 |
|
|
175
|
-
| N10 | **PR #37**(issue #35)**未移植** | 施工方称 pre 线已于 2026-09-14 按**用户裁定方案**修好(`sessionController.cancel()` 停旧回合),而 PR #37 的方案(idle 门、**不** cancel)与用户裁定**直接冲突**,故挂起待裁 | 请读 `lib\index.js` 中 `hostAutoContinue()` 的 2026-09-14 注释与 `decideAutoContinue()` 的 2026-09-14 注释,判定"挂起"是否是有据可依,而非回避 |
|
|
176
|
-
|
|
177
|
-
### 4.5 施工期间**额外发现并修掉**的既有缺陷(不在原清单内 —— 请重点审这一条)
|
|
178
|
-
|
|
179
|
-
施工方声称:**issue #54 的守卫暴露出一个既有的静默结构损坏**。
|
|
180
|
-
|
|
181
|
-
- **症状**:`maintain()` 的"无 AI 蒸馏"回退分支把 `archive/` 里日志**原文**内联进 `MEMORY.md`,
|
|
182
|
-
而原文首行是**旧日志自己的 anchor marker** ⇒ 该 marker 变成 `MEMORY.md` 的结构锚点,产生**幻影记录**。
|
|
183
|
-
- **为何此前无人发现**:整行合法 marker 能被 `parseAnchors` 当锚点**吃下**,所以不报错 —— 静默损坏比报错更危险。
|
|
184
|
-
- **声称的修法**:新增 `stripAnchorLines()`(只剥整行合法 marker,正文一字不动),在 `appendText()` 的
|
|
185
|
-
**写入边界统一收口**(一处覆盖全部调用方),而非逐调用点打补丁。
|
|
186
|
-
- **建议验证**:跑 `tests\smoke\smoke-test-m3b3-pre.mjs`(E7 用例);并独立构造"把含 marker 的文档原文
|
|
187
|
-
追加进另一个锚点文档",判定①是否被拒/被安全剥离 ②**是否产生幻影锚点**。
|
|
188
|
-
- **连带改动**(请一并复核是否合理,而非"为了过测试而改测试"):
|
|
189
|
-
- `smoke-test-m3b2-pre.mjs` D7:断言由"tmp 必须被清理"改为"完整候选必须保留"(与 N3 同一行为变更)
|
|
190
|
-
- `smoke-test-p4-l0-response-pre.mjs`:import 正则放宽为允许同源附加导入(因 `index.js` 新增 `stripAnchorLines` 导入)
|
|
191
|
-
|
|
192
|
-
### 4.6 请特别检查的**方法论**问题(施工方自曝)
|
|
193
|
-
|
|
194
|
-
外部 PR 自带测试可能**不覆盖它自己的根因**(#36 即如此:其用例只验 `observationOnly` 标记,
|
|
195
|
-
未覆盖"同名观察行吞掉富候选"这条真实病灶链)。请抽查其余移植项是否也存在同类"测试在场但没测到点上"。
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## 5. 施工方的"修复声明"(请逐条用命令证伪)
|
|
200
|
-
|
|
201
|
-
自审报告 `docs\internal\REVIEW-WB-GRAPH-SELF.md` 列出 **3 个致命 bug**。施工方声称**全部已修**,请逐条验证:
|
|
202
|
-
|
|
203
|
-
| BUG | 症状 | 声称的修法 | 建议验证命令 |
|
|
204
|
-
| --- | --- | --- | --- |
|
|
205
|
-
| **BUG-1** | 工具注册时机早于配置加载 ⇒ graph 档永不生效(注册闸门结构性恒假) | 新增同步读取器 `loadConfigSync()`,在构建 tools **之前**调用 | `Select-String -Path D:\dsh-auto-memory\lib\index.js -Pattern "loadConfigSync"` —— 确认**调用点**位于 tools 构建之前(不是只定义了函数) |
|
|
206
|
-
| **BUG-2** | 用 `agent.cwd` 取工作区路径 ⇒ 跑到 DSH 安装目录 | 改走 `await this.resolvePaths(agent)` | 统计 `resolvePaths(agent)` 与 `agent.cwd` 的出现次数(**残留的 `agent.cwd` 若只在注释里,请注明**) |
|
|
207
|
-
| **BUG-3** | 设置页按钮只 `setCfg+setDirty` 未写盘即 reload ⇒ 用户点完等于没点 | 改走 `saveConfigPatch` | `Select-String -Path D:\dsh-auto-memory\lib\client.js -Pattern "saveConfigPatch"`,并核对该函数**真正落盘** |
|
|
208
|
-
|
|
209
|
-
**其余 6 项高/中危(施工方未声明已修,请独立判定现状)**:
|
|
210
|
-
|
|
211
|
-
| BUG | 内容 |
|
|
212
|
-
| --- | --- |
|
|
213
|
-
| BUG-4 | sidecar 用了不存在的 `this.wsDirKey`(真名 `wsKey(ws)`) |
|
|
214
|
-
| BUG-5 | 三处工具数硬锁未同步(`smoke-test.mjs` / `smoke-test-m3b3-pre.mjs` / `smoke-test-context-observer.mjs`)——**注意**:施工方称 legacy 档保持 **14**、graph 档为 **16**,两组断言分工不同 |
|
|
215
|
-
| BUG-6 | `events.jsonl` 未实现(方案 A2 与 P2-1 明确要求 appended-only `{ts,...}`) |
|
|
216
|
-
| BUG-7 | 遍历工具不返回正文(方案 §4.1 要求返回条目 Content) |
|
|
217
|
-
| BUG-8 | 无正文级检索兜底(方案 P3-1 要求 index.json 缺失时 fail-soft 回落 `searchHandoffCorpus`) |
|
|
218
|
-
| BUG-9 | 未接线 dsh-graph —— **此处注意**:用户后来裁定"兼并"而非"接线",请判断现行实现是否符合**兼并**语义(可视化长在 auto-memory 自己身上、不新增插件/存储/profile 改动) |
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## 6. 施工方主动交代的"已踩过的坑"(请验证这些坑是否真的填上了)
|
|
223
|
-
|
|
224
|
-
施工方称本窗口踩到以下陷阱并已处理,**每一条都是可验证的**:
|
|
225
|
-
|
|
226
|
-
1. **结构性假绿**:graph 新能力全挂在 `boardMode==='graph'` 闸门后,而回归跑 legacy 档 ⇒ 新分支**一行都不执行**,测试全绿却漏掉 4 条致命缺陷。
|
|
227
|
-
→ 请确认是否存在一条**真正切到 graph 档**的端到端套件,并检查它是否**真的**在跑 graph 分支(而不是被 fail-closed 回落到 legacy)。
|
|
228
|
-
→ 相关文件:`D:\dsh-auto-memory\tests\smoke\smoke-test-graph-mode-pre.mjs`(声称 35 断言)
|
|
229
|
-
|
|
230
|
-
2. **异步断言未被 await**:该套件的 `ta()` 曾是 `async`,汇总行在异步断言完成前就打印 ⇒ 失败被漏计("32 passed" 实为 35 条,甚至可能 exit 0)。
|
|
231
|
-
→ 请检查该套件是否用 `pending[]` 收集 + 汇总前 `await Promise.all(pending)`
|
|
232
|
-
|
|
233
|
-
3. **空 fixture 上的等式断言是假绿温床**:`totalCards=0` 时 `0 === 0` 恒真,第一版 G4 因此等于没测。
|
|
234
|
-
→ 请检查 G5 类断言是否**喂了带真实卡的 fixture**
|
|
235
|
-
|
|
236
|
-
4. **"函数写了但没人调用"**:`whiteboardTagMapPre()` 存在且逻辑正确,但**没有任何调用点**——这类缺陷无副作用,行为测试与 grep 定义处都会误判为"已实现"。
|
|
237
|
-
→ 请对**新增的关键函数**抽查调用点是否存在
|
|
238
|
-
|
|
239
|
-
5. **CSS 令牌凭印象拼写**:曾用 7 个**不存在**的 `--dsw-alias-*` 令牌(如 `--dsw-alias-text-primary`)⇒ 变量不解析 ⇒ 颜色静默失效(用户报"全都看不清")。
|
|
240
|
-
→ 请 grep `D:\dsh-auto-memory\lib\client.js`,确认没有臆造令牌。**注意**:DSH 令牌由运行时注入,在 `dist/assets/*.css` 里 grep"定义"会全部落空,**判定真伪必须到官方 UI 包的 JS 源码里找"使用点"取并集**:
|
|
241
|
-
```powershell
|
|
242
|
-
Get-ChildItem "$env:APPDATA\npm\node_modules\@deepseek-ai\dsh\node_modules\@deepseek-ai\dsh-client-ui-*" -Recurse -File -Include *.js |
|
|
243
|
-
Select-String -Pattern "--dsw-alias-[a-z0-9-]+" -AllMatches |
|
|
244
|
-
ForEach-Object { $_.Matches } | ForEach-Object { $_.Value } | Sort-Object -Unique
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
6. **浮层定位三次返工**:`fixed` → 容器内 `absolute` → `createPortal` 到 `document.body`。
|
|
248
|
-
→ 请确认 `lib\client.js` 中抽屉最终用的是 `createPortal` + `position:fixed`(容器内 absolute 会随容器滚动而看不见)
|
|
249
|
-
|
|
250
|
-
7. **变异演示基线必须是当前版本备份**:旧备份曾整体回滚改造。
|
|
251
|
-
→ 请检查 `lib\*.bak-*` 的时间戳,判断是否有"用旧备份当变异基线"的痕迹
|
|
252
|
-
|
|
253
|
-
---
|
|
254
|
-
|
|
255
|
-
## 7. 你的验收任务(按档执行,逐项给判定)
|
|
256
|
-
|
|
257
|
-
### A 档 · 事实核对(必做)
|
|
258
|
-
|
|
259
|
-
- **A1** 跑全量回归,**如实记录** `PASS / FAIL / TIMEOUT` 三个数字与实际耗时。若与施工方声称的 `104 / 0 / 0` 不符,**以你的实测为准**并写入报告。(注:本窗口早期基线为 `96 / 0 / 0`;本批新增 8 个套件后为 `104 / 0 / 0`,耗时 159.0s。)
|
|
260
|
-
- **A2** 单独跑 `tests\smoke\smoke-test-graph-mode-pre.mjs`,记录断言总数,**核对是否为 35**。
|
|
261
|
-
- **A3** 用第 1 节的命令列出窗口内改动文件,与第 4 节表格**逐项对账**:有没有"声称交付但文件不存在"、或"文件存在但不在窗口内"。
|
|
262
|
-
- **A4** 核对第 5 节的**三个致命 bug 修复声明**,各给出「已修 / 未修 / 证据不足」+ 证据(文件:行号)。
|
|
263
|
-
- **A5** 核对贡献者数字(18 / 17 / 32)与 `Minervaowl7` 的 15 PR + 8 Issue。(可用 `https://api.github.com/repos/Aik358/dsh-auto-memory/issues?state=all&per_page=100`;注意该端点**同时返回 PR 和 issue**,靠 `pull_request` 字段区分。)
|
|
264
|
-
|
|
265
|
-
### B 档 · 合规审查(必做)
|
|
266
|
-
|
|
267
|
-
- **B1** 打开 `docs\internal\MASTER-PLAN-3.0.md`,逐一核对八阶段的**验收口径**是否达成。给出三态判定:**达成 / 部分达成 / 未达成**,每项附证据。
|
|
268
|
-
- **B2** 核对 `docs\internal\WB-FORMAT-CONVENTION.md` 的 §2(锚点 id 契约)/ §3(索引派生)/ §4(写入门)/ §8(验收清单)是否被实现遵守。
|
|
269
|
-
- **B3** 核对 `docs\internal\REVIEW-WB-GRAPH-SELF.md` 的 9 项缺陷**逐条现状**(不只 3 个致命的)。
|
|
270
|
-
- **B4** 判断有无**擅自扩大范围**的改动(规划没要求但改了)。
|
|
271
|
-
|
|
272
|
-
### C 档 · 独立找缺陷(**这是本轮验收的核心价值**)
|
|
273
|
-
|
|
274
|
-
施工方已两次踩到"绿灯撒谎"。请主动寻找**自审未覆盖**的缺陷,重点方向:
|
|
275
|
-
|
|
276
|
-
- **C1** 新能力是否真的**被调用**(而不是定义了没人用)——抽查 3-5 个新增关键函数,grep 调用点
|
|
277
|
-
- **C2** 新旧档切换是否**真的解耦**(用户硬性要求:单一开关不得顺带改变其他功能行为)
|
|
278
|
-
- **C3** legacy 档是否**字节级不变**(用户要求旧行为不能被污染)
|
|
279
|
-
- **C4** 断言是否**可证伪**——是否存在"恒真断言"(空 fixture 上的等式、自己断言自己)
|
|
280
|
-
- **C5** 是否存在**静默失败路径**(出错时不报错、不提示、直接返回空)
|
|
281
|
-
- **C6** 前后端 API 路径表是否一致(施工方称有 `smoke-test-api-paths-pre.mjs` 强制两侧同步)
|
|
282
|
-
- **C7** 有没有**测试自己改自己**(测试里写死了与被测代码同源的期望值)
|
|
283
|
-
|
|
284
|
-
### D 档 · 变异测试(可选,但强烈建议)
|
|
285
|
-
|
|
286
|
-
挑 2-3 条**关键断言**做变异演示:把被断言的代码**故意改坏**(**只在你自己的临时副本上改,禁止改仓库内文件**),确认测试**真的变红**。
|
|
287
|
-
|
|
288
|
-
若某条断言在代码被改坏后**仍然通过**,说明它是**假绿**——这条发现的价值高于任何"全绿"报告。
|
|
289
|
-
|
|
290
|
-
---
|
|
291
|
-
|
|
292
|
-
## 8. 产出格式(严格按此结构)
|
|
293
|
-
|
|
294
|
-
```markdown
|
|
295
|
-
# GPT 验收报告 · dsh-auto-memory 2026-09-15→16 窗口
|
|
296
|
-
|
|
297
|
-
## 0. 结论先行
|
|
298
|
-
- 放行建议:☐ 通过 ☐ 有条件通过 ☐ 不通过
|
|
299
|
-
- 一句话理由:
|
|
300
|
-
- 最严重发现(1-3 条):
|
|
301
|
-
|
|
302
|
-
## 1. 实测基线
|
|
303
|
-
| 项 | 施工方声称 | 我的实测 | 是否一致 |
|
|
304
|
-
|---|---|---|---|
|
|
305
|
-
| 全量回归 | PASS 96 / FAIL 0 / TIMEOUT 0 (143.3s) | | |
|
|
306
|
-
| graph 套件 | 35 断言 | | |
|
|
307
|
-
| 窗口内改动文件数 | 203(不含本任务书) | | |
|
|
308
|
-
|
|
309
|
-
## 2. A 档 · 事实核对
|
|
310
|
-
(逐项:A1…A5,每条给 判定 + 证据文件:行号)
|
|
311
|
-
|
|
312
|
-
## 3. B 档 · 合规审查
|
|
313
|
-
(B1…B4。B1 用表格:阶段 / 声称 / 判定 / 证据)
|
|
314
|
-
|
|
315
|
-
## 4. C 档 · 独立发现
|
|
316
|
-
(每条:编号 / 症状 / 最小复现 / 影响面 / 建议修法 / 严重度)
|
|
317
|
-
|
|
318
|
-
## 5. D 档 · 变异测试
|
|
319
|
-
(每条:被变异代码 / 变异内容 / 测试是否变红 / 结论)
|
|
320
|
-
|
|
321
|
-
## 6. 与施工方自述的差异清单
|
|
322
|
-
| 施工方声称 | 实际情况 | 性质(误报/漏报/口径偏差) |
|
|
323
|
-
|---|---|---|
|
|
324
|
-
|
|
325
|
-
## 7. 未验证项
|
|
326
|
-
(列出你**没能验证**的结论及原因——这比硬凑结论更有价值)
|
|
327
|
-
|
|
328
|
-
## 8. 建议的下一步
|
|
329
|
-
(按优先级排序,每条可执行)
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
---
|
|
333
|
-
|
|
334
|
-
## 9. 报告纪律(重要)
|
|
335
|
-
|
|
336
|
-
1. **结论必须附证据**:文件路径 + 行号,或命令 + 原始输出。**没有证据的结论请标注为"推断"**。
|
|
337
|
-
2. **不要照抄施工方自述**。本文件第 4、5 节的全部内容是**待证伪的假设**,不是事实。
|
|
338
|
-
3. **区分三态**:确认 / 证伪 / 证据不足。**"证据不足"是合法且必要的结论**,不要为了给出结论而猜测。
|
|
339
|
-
4. **绿不等于对**。若你发现某条断言在代码被改坏后仍然通过,**这比任何全绿报告都重要**,请优先报告。
|
|
340
|
-
5. **不要修改任何文件**。若某条验证必须写文件,只用系统临时目录,并在报告中说明。
|
|
341
|
-
6. **不要重启任何 dsh / node 进程**。
|
|
342
|
-
7. 若你判断本任务书本身有误导、口径不当或遗漏关键审查面,**请在报告第 6 节直接指出**——这同样是有价值的验收结论。
|
|
343
|
-
|
|
344
|
-
---
|
|
345
|
-
|
|
346
|
-
## 附:施工方主动申报的已知边界(请验证这些"边界"是否被如实履行)
|
|
347
|
-
|
|
348
|
-
1. **未接线的部分**:施工方称 `vendor\dsh-graph\` 只作**形态参照**,未搬运其代码、未新增 profile 依赖。请验证仓库中确实没有 `dsh-graph` 的运行时接线(比如 `~/.dsh/profiles/web/package.json` 未被改动)。
|
|
349
|
-
2. **未发布**:施工方称所有功能代码**留在 pre 线未提交未推送**,仅 `README` / `README.zh-CN.md` / `docs/CONTRIBUTORS.html` 三个文档被推到 `origin/main`(提交 `794717d`)。
|
|
350
|
-
请用只读命令验证:`git -C D:\dsh-auto-memory log --oneline origin/main -3` 与 `git -C D:\dsh-auto-memory status --short -- lib/`
|
|
351
|
-
3. **P5 如实标注 `releaseReady=false`**:施工方称没有把未完成的说成已完成。请核对 `docs\internal\REPORT-P5-ACCEPTANCE.md` 与 `lib\acceptance-pre.js` 的实际门禁逻辑是否一致。
|
|
352
|
-
4. **已知未做项**:BUG-6(`events.jsonl`)/ BUG-7(遍历工具不返回正文)/ BUG-8(无正文级检索兜底)。施工方**未声称这三项已修**——请确认真实状态,并判断它们是否影响 3.0 的验收结论。
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
# GPT 全量测试任务书 · dsh-auto-memory「WB-GRAPH 白板线」改动审查
|
|
2
|
-
|
|
3
|
-
> 交付对象:一个具备文件读取与命令执行能力的 AI 审查者(GPT)。
|
|
4
|
-
> 你的角色:**独立第三方审查者**。不要相信作者的自述,一切以代码、配置、命令输出为准。
|
|
5
|
-
> 产出:一份可执行的缺陷报告 + 规划合规清单。**禁止修改任何代码/配置**(只读审查)。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 0. 环境与边界(硬约束,务必遵守)
|
|
10
|
-
|
|
11
|
-
| 项 | 值 |
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| 代码仓库(pre 开发线) | `D:\dsh-auto-memory` |
|
|
14
|
-
| 宿主插件主体 | `lib/index.js`(约 9800 行,单文件巨兽) |
|
|
15
|
-
| 浏览器半边 | `lib/client.js`(约 4700 行) |
|
|
16
|
-
| 用户配置文件(**只读,不要改**) | `C:\Users\JH Z\.dsh\dsh-auto-memory-pre.json` |
|
|
17
|
-
| 全量回归命令 | `cd D:\dsh-auto-memory && node tools/run-smoke.mjs` |
|
|
18
|
-
| 当前回归基线 | `PASS 95 / FAIL 0 / TIMEOUT 0 (145.4s)` |
|
|
19
|
-
|
|
20
|
-
**禁止事项**(违反即审查失败):
|
|
21
|
-
1. 不要修改、创建、删除仓库内任何文件;不要改配置文件。
|
|
22
|
-
2. **不要重启、停止任何 dsh 进程**(该进程承载审查者本体,杀它会中断审查)。不要执行 `Stop-Process` / `taskkill` / 任何按进程名批量杀进程的命令。
|
|
23
|
-
3. 不要 `git commit` / `git push` / `npm publish`。
|
|
24
|
-
4. 不要为"验证"而写入用户真实记忆目录(`C:\Users\JH Z\.dsh\memory\...`)——如需文件系统测试,只用系统临时目录。
|
|
25
|
-
5. 允许:读文件、grep、跑测试命令、写临时脚本到系统临时目录后执行。
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## 1. 项目背景(30 秒版)
|
|
30
|
-
|
|
31
|
-
`dsh-auto-memory` 是 DeepSeek Harness(DSH)的记忆插件。它有两条「白板线」形态:
|
|
32
|
-
|
|
33
|
-
- **旧版(legacy)**:白板 = `handoff/PLAN.md`(人可读全貌)+ `handoff/handoff-*.md`(四段式交接账本),纯 Markdown,无结构化索引。
|
|
34
|
-
- **新版(graph)**:引入 `boardMode` 开关,切换到 graph 档后应额外启用:① 结构化 sidecar 索引 `handoff/index.json`;② 两个遍历工具 `memory_expand_pre`(按 tag 正向展开)/ `memory_trace_pre`(按 id 反向回溯);③ 预留接入第三方看板插件 `dsh-graph`(已 vendor 到 `vendor/dsh-graph/`,**尚未接线**)。
|
|
35
|
-
|
|
36
|
-
**本窗口(2026-09-16 凌晨)新交付**,全部在未提交的 pre 线:
|
|
37
|
-
|
|
38
|
-
| 文件 | 性质 | 说明 |
|
|
39
|
-
| --- | --- | --- |
|
|
40
|
-
| `lib/board-mode-pre.js` | 新增 | 总开关解析:`legacy`(默认)/`graph`,非法值 fail-closed 回 legacy |
|
|
41
|
-
| `lib/wb-sidecar-pre.js` | 新增 | sidecar 纯函数:条目 id 派生、tag 提取、index 重建、expand/trace |
|
|
42
|
-
| `lib/ledger-criteria-pre.js` | 新增 | P1 判据对账 + 从 `wb-contract-pre.js` 转发再导出(单一真源) |
|
|
43
|
-
| `lib/index.js` | 修改 | `DEFAULT_CONFIG.boardMode='legacy'`;两咽喉挂 `writeSidecarEntryPre`;新增 `rebuildSidecarIndexPre` / `expandWhiteboardByTagPre` / `traceWhiteboardByIdPre`;条件注册 2 个新工具 |
|
|
44
|
-
| `lib/client.js` | 修改 | 设置页双按钮 + 接续面板快捷按钮(同一配置键 `boardMode`) |
|
|
45
|
-
| `vendor/dsh-graph/` | 新增 | dsh-graph v0.11.0 搬运(MIT),含 `NOTICE-VENDOR.md` |
|
|
46
|
-
| `tests/smoke/smoke-test-p1-ledger-criteria-pre.mjs` | 新增 | 10 断言 |
|
|
47
|
-
| `tests/smoke/smoke-test-p23-wb-sidecar-pre.mjs` | 新增 | 10 断言 |
|
|
48
|
-
| `artifacts/_mutate-p23-sidecar.mjs` | 新增 | 变异演示脚本(3 例) |
|
|
49
|
-
|
|
50
|
-
**权威规划文档**(合规审查的唯一依据,请先读它们):
|
|
51
|
-
1. `docs/internal/WB-GRAPH-INTEGRATION-PLAN.md` —— 逐项改动清单(P2-1…P2-6、P3-1…P3-3)、判据 schema(§2.2)、改动清单与工程量
|
|
52
|
-
2. `docs/internal/WB-FORMAT-CONVENTION.md` —— 格式契约(§2 锚点 id 契约、§3 索引派生、§4 写入门、§5 人机分区、§6 lint、§8 验收清单)
|
|
53
|
-
3. `docs/internal/WB-GRAPH-DECISIONS-20260914.md` —— 用户拍板记录(§E 为最新裁定)
|
|
54
|
-
4. `docs/internal/REVIEW-WB-GRAPH-SELF.md` —— **作者自审**(含作者已发现的疑点,请独立复核,不要照抄)
|
|
55
|
-
5. `docs/internal/REPORT-WB-GRAPH-NIGHTLY.md` —— 作者交付报告(**注意:其中的"交付总览"含未完成项,可能与实际不符**)
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 2. 你的任务
|
|
60
|
-
|
|
61
|
-
### 任务 A · 复核作者自审声称的 3 个致命 bug(首要,逐条给结论)
|
|
62
|
-
|
|
63
|
-
作者在 `REVIEW-WB-GRAPH-SELF.md` 中声称发现 3 个致命 bug。**请独立验证每一条,给出「确认 / 证伪 / 部分成立」+ 代码证据(文件:行号 + 关键代码片段)**:
|
|
64
|
-
|
|
65
|
-
**A1(作者称):工具注册时机早于配置加载 ⇒ graph 档永不生效。**
|
|
66
|
-
作者证据链:`lib/index.js` 内 `const tools = [...]`(约 :8506)在 `apply()`(约 :7633)中同步构建;注册闸门读 `engine.config.boardMode`;而 `engine.config` 在构造时只有 `DEFAULT_CONFIG`(`boardMode: 'legacy'`),真配置需 `loadConfig()` 合并,`loadConfig()` 唯一自动触发点是 `resolvePaths()`(懒加载,首次工具调用才发生)。
|
|
67
|
-
**请验证**:① `apply()` 全段内是否真的没有 `await ... loadConfig()`;② `tools` 数组构建与 `ctx.tools.register` 的先后;③ 结论是否成立(graph 档下 2 个新工具是否真的注册不了)。
|
|
68
|
-
**重要**:请进一步判断——如果 A1 成立,那么**回归是否应该变红**?为什么 95 个套件仍然全绿?(提示:想清楚测试跑在哪个 boardMode 下、以及"锁"是否真的建全)
|
|
69
|
-
|
|
70
|
-
**A2(作者称):P2/P3 取工作区路径的 API 用错。**
|
|
71
|
-
作者证据:新增方法用 `agent && agent.cwd ? agent.cwd : process.cwd()`;`agent.cwd` 在全仓仅这 2 处命中;既有权威写法是 `await this.resolvePaths(agent)`(返回 `{ws, projectDir, handoffDir, planPath, ...}`,见约 :1738-1790,全仓 20+ 处在用)。
|
|
72
|
-
**请验证**:① `agent` 对象在 DSH 插件上下文里究竟有哪些字段(可从 `lib/index.js` 既有用法归纳);② `agent.cwd` 是否真不存在;③ 若成立,两个遍历工具的实际行为是什么(会去哪个目录找 `index.json`?会不会在错误目录创建文件?)。
|
|
73
|
-
|
|
74
|
-
**A3(作者称):设置页按钮"改了不保存就刷新" ⇒ 用户点完等于没点。**
|
|
75
|
-
作者证据:设置页新按钮调用 `set('boardMode', m)` 后 `window.location.reload()`;`set()` 实现(`lib/client.js` 约 :4047)只做 `setCfg(next); setDirty(true)`(本地 state + 脏标记),真正写盘要靠"保存"按钮;而接续面板的按钮用的是 `saveConfigPatch(...)`(立即写盘)。
|
|
76
|
-
**请验证**:① 该 `set()` 语义是否属实;② 350ms reload 是否会丢脏数据;③ 用户配置文件里 `"boardMode": "graph"` 已存在(见 §3),据此反推用户实际点的是哪个按钮;④ 是否还有别的写入路径能让它落盘。
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
### 任务 B · 寻找作者**没有**发现的新缺陷(重点)
|
|
81
|
-
|
|
82
|
-
请特别审查以下高风险区域,逐项给结论(有问题 → 给复现步骤 + 期望/实际):
|
|
83
|
-
|
|
84
|
-
**B1 · 新工具的参数与返回契约**
|
|
85
|
-
- `memory_expand_pre` / `memory_trace_pre` 的 `execute` 签名是否为 `(args, exec)`(对照既有工具,如 `memory_recall_pre` 等);`exec.agent` 是否存在(A2 相关)。
|
|
86
|
-
- 工具返回值的结构是否与 DSH 工具协议一致(既有哪些工具返回什么?新工具是否会被前端正常渲染)。
|
|
87
|
-
- `defineTool` 的 `parameters` 字段是否符合既有约定(注意作者手写的 `limit` 用了 `type: 'integer'`——既有工具怎么写?不匹配会怎样)。
|
|
88
|
-
|
|
89
|
-
**B2 · sidecar 写入路径**
|
|
90
|
-
- `writeSidecarEntryPre` 的 fail-soft 是否正确(try/catch 是否覆盖全部可能抛错点;`mkdir`/`writeFile` 是否都在 try 内)。
|
|
91
|
-
- **并发安全**:读 `index.json` → 改内存 → 写回,三步非原子。若两次写入并发(或账本与 PLAN 同轮各写一次),是否会丢条目?既有代码库有没有已确立的原子写/串行化约定(本仓库历史上有 `state-commit-pre.js` 等并发修复,请查)?
|
|
92
|
-
- 写入的 `relPath` 用的是 `path.relative(projectDir, p)` —— 在 Windows 上会产生**反斜杠**相对路径(如 `handoff\handoff-xxx.md`),而 PLAN 那条却写死正斜杠 `'handoff/PLAN.md'`。这会不会导致同一个文件两条记录、或 id 不一致、或 `source` 字段跨平台不一致?
|
|
93
|
-
|
|
94
|
-
**B3 · 条目 id 与锚点契约一致性**
|
|
95
|
-
- `wbEntryIdPre(workspaceKey, relPath, title)` 是否真的符合 `WB-FORMAT-CONVENTION.md` §2 的锚点契约(读文档原文对照:拼接顺序、分隔符、哈希算法、取前多少位)。
|
|
96
|
-
- `workspaceKey` 传入的是 `path.basename(projectDir)`(因为 `this.wsDirKey` 不存在,见 A 之外的 BUG-4)——这与 `resolvePaths()` 的 `ws` / `wsKey(ws)` 口径是否一致?会不会导致**同一工作区在不同入口算出不同 id**?
|
|
97
|
-
- `title` 参数:账本传的是 `'交接账本 ' + basename`,PLAN 传 `'白板 PLAN'`——与实际文件里的标题行是否一致?不一致会导致什么?
|
|
98
|
-
|
|
99
|
-
**B4 · tag 提取的鲁棒性**
|
|
100
|
-
- `extractTagsPre` 的正则 `/(^|\s)((?:tag|type|topic):[\w\u4e00-\u9fff-]{2,24})/g`:`\w` 在 JS 里是 `[A-Za-z0-9_]`,中文靠显式区间。请构造边界用例(标签紧贴标点、行首、全角冒号、长度超限、大小写、重复)看是否漏提/误提。
|
|
101
|
-
- 章节标题降 tag 用 `'sec:' + 标题.slice(0,24)` —— 若标题含 `:` 或空格,与 expand 的精确匹配是否会失配?
|
|
102
|
-
|
|
103
|
-
**B5 · legacy 档"字节级不变"是否成立**
|
|
104
|
-
- 作者声称默认档旧行为完全不变。请**实际验证**:检查所有新代码路径是否都被 `graphEnabled` 闸门罩住(含 `writeSidecarEntryPre`、两个工具的注册、`rebuildSidecarIndexPre` 的调用者)。
|
|
105
|
-
- 特别注意:新增的 `import`(`board-mode-pre.js` / `wb-sidecar-pre.js`)是否引入了任何**模块级副作用**(读文件、建目录、注册监听、改全局)。
|
|
106
|
-
- 特别注意:`DEFAULT_CONFIG` 新增字段,是否会影响配置序列化/比对/指纹(本仓库有"同输入同字节"的注入契约与配置指纹,请查有无受影响)。
|
|
107
|
-
|
|
108
|
-
**B6 · 测试有效性(是否存在假绿)**
|
|
109
|
-
- `tests/smoke/smoke-test-p23-wb-sidecar-pre.mjs`:作者在其中一条断言里把 `src.includes(...)` 改成了正则行首锚定 `/^\s*defineTool\(/`,理由是 includes 会被注释里的同名字符串骗过。请检查**其余断言**是否还有同类"被注释/字符串骗过"的假绿风险。
|
|
110
|
-
- 该套件是否真的会在实现被破坏时变红?请**实际做一次变异测试**:挑 2–3 处实现(例如把 `expandByTagPre` 的过滤条件改成恒真、把闸门去掉、把 tag 前缀去掉),改到**临时副本**上验证测试变红(**注意:不要改动仓库原文件**——请复制整个仓库到临时目录后再变异,或仅在临时目录操作;若无法安全变异,就静态论证并说明局限)。
|
|
111
|
-
- 三处工具数硬锁(`tests/smoke/smoke-test.mjs:67`、`smoke-test-m3b3-pre.mjs:43`、`smoke-test-context-observer.mjs:107`)当前都断言 `!== 14`。请判断:这是"锁对了"还是"锁没建全"?在 A1 成立的前提下,graph 档下这三个套件会怎样?
|
|
112
|
-
|
|
113
|
-
**B7 · dsh-graph vendor 的完整性与合规**
|
|
114
|
-
- `vendor/dsh-graph/` 是否包含运行所需的全部文件(对照 `dsh-graph-host/package.json` 的 `files` 字段与 `main`/`exports`)。
|
|
115
|
-
- MIT 许可文件是否保留、`NOTICE-VENDOR.md` 的记述是否准确(对照 `dsh-graph-host/LICENSE`)。
|
|
116
|
-
- vendor 目录是否残留 `.git`、绝对路径、构建产物缺失等搬运事故。
|
|
117
|
-
- 该 vendor 与主插件的命名空间是否有冲突(工具名前缀、REST 路径、client 槽位、存储目录)。
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
### 任务 C · 规划合规审查("什么没有按照规划完成")
|
|
122
|
-
|
|
123
|
-
逐项对照 `docs/internal/WB-GRAPH-INTEGRATION-PLAN.md` §5 改动清单与 `WB-GRAPH-DECISIONS-20260914.md` §E 拍板,做出**完成 / 部分完成 / 未完成**三态判定,每项附证据:
|
|
124
|
-
|
|
125
|
-
| 编号 | 规划要求(摘要) | 请判定 |
|
|
126
|
-
| --- | --- | --- |
|
|
127
|
-
| P2-1 | 两咽喉落盘 sidecar:每账本同名 `.json` + 汇总 `index.json`;含 tag/cue 映射与 `criteria.passed/warned` 事件追加 | ? |
|
|
128
|
-
| P2-2 | `rebuildHandoffIndex()` 从 PLAN + 账本白名单确定性重建 | ? |
|
|
129
|
-
| P2-3 | 结构化检索升级 + `recall` scope 路由与 scope 枚举扩展 | ? |
|
|
130
|
-
| P2-4 | 注入端导航层加 tag 摘要行(保持"同输入同字节") | ? |
|
|
131
|
-
| P2-5 | GUI `handoffPanelData` 增加 tag/段视图;fileQ 白名单放行 `.json` | ? |
|
|
132
|
-
| P2-6 | 条目锚点(`<!-- memory:mem_... -->`)写入 | ? |
|
|
133
|
-
| P3-1 | 注册 `memory_expand_pre`/`memory_trace_pre`;**index.json 缺失时 fail-soft 回落 `searchHandoffCorpus`** | ? |
|
|
134
|
-
| P3-2 | 唤醒逻辑:`buildContinueCarry` 第 3 层 guide 加"可用遍历工具重建"提示 | ? |
|
|
135
|
-
| P3-3 | **三处工具数硬锁同步 14→16(标注为必须项)** | ? |
|
|
136
|
-
| A2 | sidecar 放 `memoryRoot/<ws>/handoff/` 旁挂 | ? |
|
|
137
|
-
| A6 | 水位骨架硬判据失败时"照写 + 警示行" | ? |
|
|
138
|
-
| B7 | 跳过试点直接实装 | ? |
|
|
139
|
-
| B4 | 搬 dsh-graph 接管看板层(**用户核心诉求:可视化看到立项至今全流程**) | ? |
|
|
140
|
-
|
|
141
|
-
**特别要求**:作者交付报告 `REPORT-WB-GRAPH-NIGHTLY.md` 的"交付总览"表把这些都列成了 ✅ 或有备注。请明确指出**哪些是作者高报/漏报的**,并给出该文档与实际代码的差异清单。
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
### 任务 D · 端到端可用性判定
|
|
146
|
-
|
|
147
|
-
综合以上,回答三个问题(要给证据,不要给结论词):
|
|
148
|
-
|
|
149
|
-
1. **如果把 `boardMode` 设成 `graph` 并重启 dsh web,用户会看到什么变化?**(逐项:配置文件、注册的工具、磁盘新文件、GUI 显示)
|
|
150
|
-
2. **这些变化里,哪些是用户真正想要的"可视化看到全流程"?**(对照用户原话:「让用户可以实时、可视化地看到项目从立项到现在的所有流程、弯路、版本更迭等事无巨细的信息;同时也可以让 AI 看到,作为接续的重要参考之一」)
|
|
151
|
-
3. **要达成该目标,还缺哪些步骤?**(请按依赖顺序列出,并标注哪些步骤涉及修改用户配置文件、哪些需要重启宿主)
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## 3. 已知环境事实(供你交叉验证,不要盲信)
|
|
156
|
-
|
|
157
|
-
- 用户配置文件 `C:\Users\JH Z\.dsh\dsh-auto-memory-pre.json` 中当前存在 `"boardMode": "graph"` 与 `"handoffEnabled": true`。
|
|
158
|
-
- 全量回归当前为 `PASS 95 / FAIL 0 / TIMEOUT 0`。
|
|
159
|
-
- 用户报告症状:**"切换白板形态后什么都没发生,还是旧版的"**。
|
|
160
|
-
- 作者口头解释(待你验证):"需要重启 dsh web 才生效"。
|
|
161
|
-
- 本机 DSH 安装位置:`C:\Users\JH Z\AppData\Roaming\npm\node_modules\@deepseek-ai\dsh\`(可读,用于核对插件加载与 patch 机制)。
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## 4. 产出格式(严格遵循)
|
|
166
|
-
|
|
167
|
-
```markdown
|
|
168
|
-
# 审查报告 · dsh-auto-memory WB-GRAPH 白板线
|
|
169
|
-
|
|
170
|
-
## 结论摘要
|
|
171
|
-
- 致命缺陷 N 个 / 高危 M 个 / 中低 K 个 / 规划未完成项 J 个
|
|
172
|
-
- 一句话结论:<这套改动当前能否达到用户目标?为什么>
|
|
173
|
-
|
|
174
|
-
## A. 作者自审 3 条复核
|
|
175
|
-
### A1 工具注册时机
|
|
176
|
-
- 判定:确认 / 证伪 / 部分成立
|
|
177
|
-
- 证据:<文件:行号 + 代码片段>
|
|
178
|
-
- 补充发现:<例如"回归为什么没红">
|
|
179
|
-
|
|
180
|
-
### A2 路径 API
|
|
181
|
-
### A3 设置页保存
|
|
182
|
-
|
|
183
|
-
## B. 新发现缺陷(按严重度降序)
|
|
184
|
-
### [致命] 标题
|
|
185
|
-
- 位置:<文件:行号>
|
|
186
|
-
- 证据:<代码/命令输出>
|
|
187
|
-
- 复现步骤:
|
|
188
|
-
- 期望 vs 实际:
|
|
189
|
-
- 修法建议(可给方向,不要改代码):
|
|
190
|
-
|
|
191
|
-
## C. 规划合规清单
|
|
192
|
-
| 编号 | 判定 | 证据 | 与作者报告是否一致 |
|
|
193
|
-
(逐行填,不一致的必须点名)
|
|
194
|
-
|
|
195
|
-
## D. 测试有效性评估
|
|
196
|
-
- 假绿风险点:
|
|
197
|
-
- 变异验证结果(做了哪些、结果如何;未做则说明局限):
|
|
198
|
-
|
|
199
|
-
## E. 端到端可用性判定
|
|
200
|
-
(回答任务 D 的三问)
|
|
201
|
-
|
|
202
|
-
## F. 修复优先级建议
|
|
203
|
-
1. <第一优先:为什么>
|
|
204
|
-
2. ...
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## 5. 审查纪律(重要)
|
|
210
|
-
|
|
211
|
-
1. **每条结论必须有可复核证据**(文件:行号、命令、输出片段)。无证据的推测必须显式标注「推断」。
|
|
212
|
-
2. **区分「确认」与「推断」**——不要把推断写成结论。
|
|
213
|
-
3. **主动证伪**:对作者自审的每条声称,先尝试反驳它。
|
|
214
|
-
4. **不修改任何文件**;若做了变异测试,必须在临时目录进行并说明。
|
|
215
|
-
5. 若发现作者报告(`REPORT-WB-GRAPH-NIGHTLY.md`)存在高报,请**明确指出具体条目**——这比多找一个普通 bug 更重要。
|
|
216
|
-
6. 报告用中文;代码/路径/命令保留原文。
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# 群同步日报(GROUP-DIGEST)部署说明
|
|
2
|
-
|
|
3
|
-
> 2026-09-12 搭建。每天北京时间 **12:00 / 21:00** 由 **GitHub Actions** 自动统计仓库
|
|
4
|
-
> issues / PRs / commits / release,生成中文摘要投递到 QQ 群「dsh-auto-memory交流群」。
|
|
5
|
-
> 跑在 GitHub 云端,**本机电脑关机也照常执行**;本机从未登录任何 QQ 协议端。
|
|
6
|
-
|
|
7
|
-
## 文件清单
|
|
8
|
-
|
|
9
|
-
| 文件 | 作用 |
|
|
10
|
-
| --- | --- |
|
|
11
|
-
| `.github/workflows/group-digest.yml` | 定时(UTC 4:00/13:00)+ 手动触发入口;凭据走 secrets/vars |
|
|
12
|
-
| `.github/scripts/group-digest.mjs` | 统计 + 生成 + 多通道投递,零依赖;`--print` 本机试跑 |
|
|
13
|
-
| `.github/scripts/qq-capture-openid.mjs` | 一次性工具:连官方 WS 网关抓群 `group_openid`(仅本机跑) |
|
|
14
|
-
| `.github/digest/NOTES.md` | 人工备注区:写了什么,群消息「备注」栏就带什么(改完要上 main 才生效) |
|
|
15
|
-
| `.github/digest/PREVIEW.md` | 「下版本前瞻」板块文案:网页编辑,写几行就整块出现在日报里,留空隐藏 |
|
|
16
|
-
| `tools/release.mjs` | 复制白名单已加 `.github` → 以后每次发版自动带到 REL 树,不会被发版清掉 |
|
|
17
|
-
|
|
18
|
-
**窗口口径**=上一次「成功」的 workflow run → 现在;错过一次自动并进下一次,封顶 7 天。
|
|
19
|
-
**发送失败**的 run 记为失败(不重置窗口);**未配置通道**时 run 成功,消息只归档到 run 页面。
|
|
20
|
-
|
|
21
|
-
## 通道配置(仓库 Settings → Secrets and variables → Actions)
|
|
22
|
-
|
|
23
|
-
先设仓库**变量** `DIGEST_CHANNEL`(variables 区,非 secret),再按下表配 secrets:
|
|
24
|
-
|
|
25
|
-
| 通道 | DIGEST_CHANNEL 值 | 需要的 secrets | 说明 |
|
|
26
|
-
| --- | --- | --- | --- |
|
|
27
|
-
| QQ 官方机器人(推荐) | `qq_official` | `QQ_APP_ID` / `QQ_APP_SECRET` / `QQ_GROUP_OPENID` | 零服务器、零封号风险;QQ 群消息**禁止 URL**,脚本自动剥链接 |
|
|
28
|
-
| NapCat(OneBot11) | `napcat` | `NAPCAT_HTTP_URL` / `NAPCAT_GROUP_ID` /(`NAPCAT_TOKEN`) | 功能最全,可加「群内反馈」采集(见下);需一台常开设备 |
|
|
29
|
-
| Telegram | `telegram` | `TG_BOT_TOKEN` / `TG_CHAT_ID` | 最简单,2 分钟配完 |
|
|
30
|
-
| Discord / 飞书 / 钉钉 / 自定义 | `discord` / `feishu` / `dingtalk` / `generic` | 对应 `*_WEBHOOK_URL` | 备用/转发用 |
|
|
31
|
-
|
|
32
|
-
### A. QQ 官方机器人(推荐路径)
|
|
33
|
-
|
|
34
|
-
1. [q.qq.com](https://q.qq.com) 注册开发者 → **个人身份证认证**(主动消息频控:认证后 60 条/分钟、单群 1000 条/天,每天 2 条绰绰有余;未认证 30/分钟也够)。
|
|
35
|
-
2. 创建机器人(名字建议 `auto-memory 助手`),拿到 AppID / AppSecret。
|
|
36
|
-
3. 群主把机器人添加进群(机器人管理页 → 添加到群聊)。
|
|
37
|
-
4. 本机抓 `group_openid`(开放平台不直接展示,只随「@机器人」事件下发):
|
|
38
|
-
```
|
|
39
|
-
QQ_APP_ID=xxx QQ_APP_SECRET=xxx node .github/scripts/qq-capture-openid.mjs
|
|
40
|
-
# 然后在群里发一条「@机器人 你好」,脚本会打印 group_openid
|
|
41
|
-
```
|
|
42
|
-
5. 配 secrets + 变量 → Actions 页手动触发 `group-digest` 验证。
|
|
43
|
-
|
|
44
|
-
### B. NapCat(顺带把"群内问题反馈"带进日报)
|
|
45
|
-
|
|
46
|
-
在任一常开设备(旧安卓手机 Termux / 学生机 / NAS)Docker 跑 [NapCat](https://napneko.github.io),
|
|
47
|
-
开 OneBot11 HTTP 服务(如 `http://IP:3000`,建议配 access_token)。
|
|
48
|
-
之后把采集地址填到 secret `FEEDBACK_URL`(relay 提供 `GET /feedback?hours=N` 返回
|
|
49
|
-
`{"items":[{"user","text"}]}`),日报自动多一栏「群内反馈」。relay 可后补,不阻塞日报上线。
|
|
50
|
-
|
|
51
|
-
### C. 其他平台 webhook
|
|
52
|
-
|
|
53
|
-
TG / Discord / 飞书 / 钉钉按表配即可,适合"先进别的群/推给自己,再转发 QQ 群"的过渡期。
|
|
54
|
-
|
|
55
|
-
## 测试与运维
|
|
56
|
-
|
|
57
|
-
- **手动试跑**:GitHub 仓库 → Actions → group-digest → Run workflow(可填 `since_hours=24`)。
|
|
58
|
-
消息全文写在 run 的 Summary 里,发送结果看日志最后一行。
|
|
59
|
-
- **临时改备注**:直接在 GitHub 网页编辑 main 的 `.github/digest/NOTES.md`,下次统计生效。
|
|
60
|
-
- **已知限制**:GitHub schedule 可能有 5~30 分钟调度延迟(照常按窗口统计,不丢数据);
|
|
61
|
-
首次运行窗口=过去 12 小时;secret 没配齐时该通道报错,run 页面能直接看到原因。
|
|
62
|
-
- **改文案/格式**:`group-digest.mjs` 的 `compose()`;改动要走 pre 树 + 发版流程,或直接网页改 main(下次发版前会被 pre 版本覆盖,注意同步)。
|