@a9i5k4/dsh-auto-memory 2.5.3 → 3.0.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.
Files changed (104) hide show
  1. package/README.md +171 -1
  2. package/README.zh-CN.md +171 -1
  3. package/docs/CONTRIBUTORS.html +471 -0
  4. package/docs/HANDOFF-CRITERIA.md +92 -0
  5. package/docs/INTEGRATION-ANALYSIS.md +350 -348
  6. package/docs/USER-GUIDE.en.md +56 -1
  7. package/docs/USER-GUIDE.zh-CN.md +57 -2
  8. package/docs/internal/ACCEPT-35-LIVE.md +143 -0
  9. package/docs/internal/ACCEPTANCE-20260914.md +90 -0
  10. package/docs/internal/ARCH-REVIEW-BRIEF.md +411 -0
  11. package/docs/internal/ARCH-REVIEW-REQUEST.md +201 -0
  12. package/docs/internal/ARCH-REVIEW-ROUND2.md +169 -0
  13. package/docs/internal/ARCH-REVIEW-ROUND3.md +206 -0
  14. package/docs/internal/AUDIT-WB-GRAPH-FULL-20260916.md +314 -0
  15. package/docs/internal/CONCURRENCY-INVESTIGATION-20260917.md +192 -0
  16. package/docs/internal/CROSS-SESSION-SEARCH-PATH-DECISION.md +72 -0
  17. package/docs/internal/CROSS-SESSION-SEARCH-RESEARCH.md +131 -0
  18. package/docs/internal/DECISIONS-20260914-SESSION.md +269 -0
  19. package/docs/internal/DESIGN-P1-STATE-COMMIT-20260915.md +219 -0
  20. package/docs/internal/DIRECTION-CHECK-WB-GRAPH-20260916.md +132 -0
  21. package/docs/internal/FEEDBACK-TO-DSHAPI-RELAY.md +13 -0
  22. package/docs/internal/GH-DISCUSSION-5732-COMMENT.md +74 -0
  23. package/docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md +352 -0
  24. package/docs/internal/GPT-REVIEW-PROMPT.md +216 -0
  25. package/docs/internal/GROUP-WEBHOOK-SETUP.md +33 -0
  26. package/docs/internal/KICKOFF-P0.md +254 -0
  27. package/docs/internal/MASTER-PLAN-3.0.md +411 -0
  28. package/docs/internal/MEMORY-MUTATION-AND-INDEX-DESIGN.md +85 -0
  29. package/docs/internal/MERGE-CONFLICT-SCAN-20260914.md +222 -0
  30. package/docs/internal/PENDING-FIXES-20260916.md +289 -0
  31. package/docs/internal/RAG-KARPATHY-PROGRAM.md +229 -0
  32. package/docs/internal/REPORT-P0-NIGHTLY.md +212 -0
  33. package/docs/internal/REPORT-P5-ACCEPTANCE.md +31 -0
  34. package/docs/internal/REPORT-WB-GRAPH-NIGHTLY.md +153 -0
  35. package/docs/internal/REVIEW-WB-GRAPH-SELF.md +81 -0
  36. package/docs/internal/ROADMAP-20260917-WEEK.md +305 -0
  37. package/docs/internal/ROADMAP.md +106 -0
  38. package/docs/internal/RUN-P0-NIGHTLY.md +227 -0
  39. package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +175 -0
  40. package/docs/internal/S10-GAPS-PLAIN-20260917.md +125 -0
  41. package/docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md +360 -0
  42. package/docs/internal/SESSION-FILE-REPAIR-PROTOCOL.md +90 -0
  43. package/docs/internal/THREE-LAYER-CONTRACT.md +210 -0
  44. package/docs/internal/TODO-BACKLOG.md +263 -142
  45. package/docs/internal/TODO-GRAPH.html +715 -0
  46. package/docs/internal/TODO-GRAPH.html.bak-20260914-v2 +493 -0
  47. package/docs/internal/TODO-GRAPH.html.bak-20260915-alsfix +710 -0
  48. package/docs/internal/TODO-GRAPH.html.bak-20260915-p1 +710 -0
  49. package/docs/internal/TODO-GRAPH.html.bak-20260915-p6a-rev +703 -0
  50. package/docs/internal/TODO-GRAPH.html.bak-20260915-wshint +710 -0
  51. package/docs/internal/TODO-GRAPH.html.bak-20260916-batch +715 -0
  52. package/docs/internal/WB-FORMAT-CONVENTION.md +112 -0
  53. package/docs/internal/WB-GRAPH-DECISIONS-20260914.md +71 -0
  54. package/docs/internal/reviews/CLAIM-VERIFICATION-20260914.md +56 -0
  55. package/docs/internal/reviews/PLAN-gpt6astra-round2-20260914.md +787 -0
  56. package/docs/internal/reviews/REVIEW-gpt6astra-20260914.md +112 -0
  57. package/docs/internal/reviews/ROUND3-REVIEW-INTEGRATION-20260914.md +230 -0
  58. package/docs/prompts/M8-3-enable-verify.md +49 -49
  59. package/lib/acceptance.js +71 -0
  60. package/lib/activation-host.js +90 -9
  61. package/lib/activation-inbox.js +25 -7
  62. package/lib/board-mode.js +30 -0
  63. package/lib/client.js +878 -75
  64. package/lib/context-bridge.js +2 -2
  65. package/lib/context-host.js +70 -6
  66. package/lib/engine-identity.js +149 -0
  67. package/lib/engine-switch.js +247 -0
  68. package/lib/episodic-store.js +11 -10
  69. package/lib/evidence-store.js +2 -2
  70. package/lib/fact-store.js +1 -1
  71. package/lib/fs-retry.js +46 -0
  72. package/lib/index.js +1987 -153
  73. package/lib/intent-clean-safe.js +40 -0
  74. package/lib/intent-clean.js +12 -16
  75. package/lib/l0-extract.js +263 -149
  76. package/lib/l0-index-sync.js +195 -0
  77. package/lib/l0-index.js +349 -239
  78. package/lib/ledger-criteria.js +142 -0
  79. package/lib/m7-index-sync-host.js +65 -4
  80. package/lib/m7-wire.js +3 -3
  81. package/lib/memory-anchor.js +56 -1
  82. package/lib/memory-envelope.js +252 -0
  83. package/lib/memory-hub.js +14 -4
  84. package/lib/memory-mutation.js +246 -0
  85. package/lib/memory-writer.js +204 -24
  86. package/lib/procedure-observation.js +48 -0
  87. package/lib/procedure-store.js +34 -17
  88. package/lib/python-setup.js +1 -1
  89. package/lib/rerank-host.js +160 -0
  90. package/lib/rules-layer.js +261 -0
  91. package/lib/semantic-js.js +15 -0
  92. package/lib/shadow-retrieval.js +3 -3
  93. package/lib/state-commit.js +245 -0
  94. package/lib/subagent-gc.js +4 -8
  95. package/lib/tier-layer-inject.js +650 -0
  96. package/lib/tier0-catalog.js +693 -0
  97. package/lib/water-window.js +263 -186
  98. package/lib/wb-contract.js +495 -0
  99. package/lib/wb-sidecar.js +839 -0
  100. package/lib/ws-overview-rank.js +2 -2
  101. package/package.json +1 -1
  102. package/python/m7_embedding_v1.py +5 -5
  103. package/python/worker_semantic_v1.py +17 -6
  104. package/python/worker_v1.py +38 -4
@@ -0,0 +1,471 @@
1
+ <!DOCTYPE html>
2
+ <!-- ============================================================
3
+ dsh-auto-memory · 贡献者与赞助 (Contributors & Sponsors)
4
+ 单文件零外部依赖;与 docs/promo/homepage.html 同一套 liquid-glass 暗色主题。
5
+ 数据来源:GitHub API issues?state=all&per_page=100 (2026-09-16 快照,51 条)
6
+ ============================================================= -->
7
+ <html lang="zh-CN">
8
+ <head>
9
+ <meta charset="UTF-8">
10
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
11
+ <title>贡献者与赞助 · dsh-auto-memory</title>
12
+ <style>
13
+ :root {
14
+ --bg0: #060913;
15
+ --bg1: #0b1020;
16
+ --glass: rgba(255, 255, 255, 0.045);
17
+ --glass-2: rgba(255, 255, 255, 0.075);
18
+ --glass-border: rgba(255, 255, 255, 0.10);
19
+ --txt: #e8ecf6;
20
+ --txt-dim: #93a0bd;
21
+ --accent: #5b8cff;
22
+ --accent2: #8f6bff;
23
+ --accent3: #38d2c2;
24
+ --ok: #3ecf8e;
25
+ --warn: #f0b34e;
26
+ --radius: 18px;
27
+ --font: "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
28
+ --mono: "Cascadia Code", Consolas, monospace;
29
+ }
30
+ * { box-sizing: border-box; }
31
+ html, body { margin: 0; padding: 0; }
32
+ body {
33
+ background:
34
+ radial-gradient(1100px 620px at 12% -8%, rgba(91, 140, 255, .20), transparent 60%),
35
+ radial-gradient(900px 560px at 88% 6%, rgba(143, 107, 255, .17), transparent 62%),
36
+ linear-gradient(180deg, var(--bg0), var(--bg1) 45%, var(--bg0));
37
+ color: var(--txt); font-family: var(--font);
38
+ line-height: 1.7; font-size: 15px; min-height: 100vh;
39
+ }
40
+ .wrap { max-width: 1080px; margin: 0 auto; padding: 56px 22px 80px; }
41
+
42
+ /* ── Hero ── */
43
+ .hero { text-align: center; margin-bottom: 52px; }
44
+ .hero .badge {
45
+ display: inline-block; padding: 5px 14px; border-radius: 999px;
46
+ background: var(--glass); border: 1px solid var(--glass-border);
47
+ color: var(--txt-dim); font-size: 12.5px; letter-spacing: .06em;
48
+ text-transform: uppercase; margin-bottom: 18px;
49
+ }
50
+ .hero h1 {
51
+ font-size: 40px; line-height: 1.24; margin: 0 0 14px;
52
+ background: linear-gradient(100deg, var(--accent), var(--accent2) 52%, var(--accent3));
53
+ -webkit-background-clip: text; background-clip: text; color: transparent;
54
+ }
55
+ .hero p { color: var(--txt-dim); font-size: 16px; margin: 0 auto; max-width: 660px; }
56
+
57
+ /* ── 统计带 ── */
58
+ .stats {
59
+ display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
60
+ gap: 14px; margin: 38px 0 56px;
61
+ }
62
+ .stat {
63
+ background: var(--glass); border: 1px solid var(--glass-border);
64
+ border-radius: var(--radius); padding: 20px 18px; text-align: center;
65
+ backdrop-filter: blur(14px);
66
+ }
67
+ .stat b { display: block; font-size: 30px; line-height: 1.1;
68
+ background: linear-gradient(100deg, var(--accent), var(--accent3));
69
+ -webkit-background-clip: text; background-clip: text; color: transparent; }
70
+ .stat span { color: var(--txt-dim); font-size: 12.5px; }
71
+
72
+ /* ── 段落标题 ── */
73
+ h2.sec {
74
+ font-size: 23px; margin: 0 0 8px; display: flex; align-items: center; gap: 10px;
75
+ }
76
+ h2.sec::before {
77
+ content: ''; width: 4px; height: 22px; border-radius: 2px;
78
+ background: linear-gradient(180deg, var(--accent), var(--accent2));
79
+ }
80
+ .sec-sub { color: var(--txt-dim); font-size: 13.5px; margin: 0 0 24px; }
81
+
82
+ /* ── 贡献者卡 ── */
83
+ .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(310px, 1fr)); gap: 16px; }
84
+ .card {
85
+ background: var(--glass); border: 1px solid var(--glass-border);
86
+ border-radius: var(--radius); padding: 20px; backdrop-filter: blur(14px);
87
+ transition: transform .16s ease, border-color .16s ease, background .16s ease;
88
+ display: flex; flex-direction: column; gap: 10px;
89
+ }
90
+ .card:hover { transform: translateY(-3px); border-color: rgba(91,140,255,.5); background: var(--glass-2); }
91
+ .card .top { display: flex; align-items: center; gap: 12px; }
92
+ .card img { width: 46px; height: 46px; border-radius: 50%; flex-shrink: 0;
93
+ border: 2px solid var(--glass-border); background: rgba(255,255,255,.06); }
94
+ .card .who { min-width: 0; }
95
+ .card .who a { color: var(--txt); text-decoration: none; font-weight: 700; font-size: 15.5px; }
96
+ .card .who a:hover { color: var(--accent); }
97
+ .card .tier { font-size: 11.5px; color: var(--txt-dim); }
98
+ .card .desc { color: var(--txt-dim); font-size: 13.5px; margin: 0; }
99
+ .card .refs { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; }
100
+ .card .refs a {
101
+ font-family: var(--mono); font-size: 11px; padding: 2px 8px; border-radius: 6px;
102
+ background: rgba(91,140,255,.14); border: 1px solid rgba(91,140,255,.28);
103
+ color: #a9c2ff; text-decoration: none;
104
+ }
105
+ .card .refs a.pr { background: rgba(143,107,255,.15); border-color: rgba(143,107,255,.32); color: #c6b2ff; }
106
+ .card .refs a:hover { filter: brightness(1.25); }
107
+
108
+ /* ── 紧凑列表(单人 issue) ── */
109
+ .compact { display: grid; grid-template-columns: repeat(auto-fill, minmax(232px, 1fr)); gap: 11px; }
110
+ .chip {
111
+ display: flex; align-items: center; gap: 10px; padding: 11px 14px;
112
+ background: var(--glass); border: 1px solid var(--glass-border);
113
+ border-radius: 12px; text-decoration: none; color: var(--txt);
114
+ transition: border-color .15s ease, background .15s ease;
115
+ }
116
+ .chip:hover { border-color: rgba(91,140,255,.5); background: var(--glass-2); }
117
+ .chip img { width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0; background: rgba(255,255,255,.06); }
118
+ .chip .n { font-weight: 600; font-size: 13.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
119
+ .chip .r { font-family: var(--mono); font-size: 11px; color: var(--txt-dim); margin-left: auto; flex-shrink: 0; }
120
+
121
+ /* ── 赞助卡 ── */
122
+ .sponsor {
123
+ background: linear-gradient(135deg, rgba(91,140,255,.14), rgba(143,107,255,.12));
124
+ border: 1px solid rgba(91,140,255,.34); border-radius: var(--radius);
125
+ padding: 28px; display: flex; align-items: center; gap: 22px; flex-wrap: wrap;
126
+ }
127
+ .sponsor .mark {
128
+ width: 62px; height: 62px; border-radius: 15px; flex-shrink: 0;
129
+ background: linear-gradient(135deg, var(--accent), var(--accent2));
130
+ display: flex; align-items: center; justify-content: center;
131
+ font-size: 25px; font-weight: 800; color: #fff; letter-spacing: -.02em;
132
+ }
133
+ .sponsor .body { flex: 1; min-width: 240px; }
134
+ .sponsor h3 { margin: 0 0 6px; font-size: 20px; }
135
+ .sponsor h3 a { color: var(--txt); text-decoration: none; }
136
+ .sponsor h3 a:hover { color: var(--accent3); }
137
+ .sponsor p { margin: 0; color: var(--txt-dim); font-size: 14px; }
138
+ .sponsor .tag {
139
+ display: inline-block; margin-top: 10px; padding: 3px 11px; border-radius: 999px;
140
+ background: rgba(62,207,142,.16); border: 1px solid rgba(62,207,142,.34);
141
+ color: var(--ok); font-size: 11.5px;
142
+ }
143
+
144
+ /* ── 参与方式 ── */
145
+ .steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; }
146
+ .step {
147
+ background: var(--glass); border: 1px solid var(--glass-border);
148
+ border-radius: 14px; padding: 20px;
149
+ }
150
+ .step .k { font-family: var(--mono); font-size: 11.5px; color: var(--accent3); margin-bottom: 8px; }
151
+ .step b { display: block; margin-bottom: 6px; font-size: 15px; }
152
+ .step p { margin: 0; color: var(--txt-dim); font-size: 13px; }
153
+
154
+ footer { margin-top: 66px; padding-top: 26px; border-top: 1px solid var(--glass-border);
155
+ text-align: center; color: var(--txt-dim); font-size: 13px; }
156
+ footer a { color: var(--accent); text-decoration: none; }
157
+ footer a:hover { text-decoration: underline; }
158
+
159
+ /* 语言切换 */
160
+ .lang { display: flex; justify-content: center; gap: 8px; margin-top: 22px; }
161
+ .lang button {
162
+ padding: 6px 18px; border-radius: 999px; cursor: pointer; font-family: inherit;
163
+ font-size: 13px; background: var(--glass); border: 1px solid var(--glass-border);
164
+ color: var(--txt-dim); transition: all .15s ease;
165
+ }
166
+ .lang button.on { background: rgba(91,140,255,.20); border-color: rgba(91,140,255,.5); color: var(--txt); }
167
+ body[data-lang="zh"] .en, body[data-lang="en"] .zh { display: none; }
168
+
169
+ @media (max-width: 640px) {
170
+ .hero h1 { font-size: 29px; }
171
+ .wrap { padding: 38px 16px 60px; }
172
+ .sponsor { padding: 22px; }
173
+ }
174
+ </style>
175
+ </head>
176
+ <body data-lang="zh">
177
+ <div class="wrap">
178
+
179
+ <!-- ══════════ Hero ══════════ -->
180
+ <header class="hero">
181
+ <div class="badge">Contributors &amp; Sponsors</div>
182
+ <h1><span class="zh">一起把她养大的人</span><span class="en">The people who raised her</span></h1>
183
+ <p class="zh">dsh-auto-memory 从一个人的实验,长成了有人在用的工具。这页记录所有提过 issue、交过 PR、以及赞助过开发资源的人——名字和贡献都在这里。</p>
184
+ <p class="en">dsh-auto-memory grew from a solo experiment into something people actually use. This page credits everyone who filed an issue, sent a pull request, or sponsored the development resources.</p>
185
+ <div class="lang">
186
+ <button id="lb-zh" class="on" onclick="setLang('zh')">中文</button>
187
+ <button id="lb-en" onclick="setLang('en')">English</button>
188
+ </div>
189
+ </header>
190
+
191
+ <!-- ══════════ 统计带 ══════════ -->
192
+ <section class="stats">
193
+ <div class="stat"><b id="s-ppl">18</b><span class="zh">外部贡献者</span><span class="en">contributors</span></div>
194
+ <div class="stat"><b id="s-pr">17</b><span class="zh">Pull Request</span><span class="en">pull requests</span></div>
195
+ <div class="stat"><b id="s-iss">32</b><span class="zh">Issue</span><span class="en">issues</span></div>
196
+ <div class="stat"><b>1</b><span class="zh">资源赞助方</span><span class="en">resource sponsor</span></div>
197
+ </section>
198
+
199
+ <!-- ══════════ 突出贡献者 ══════════ -->
200
+ <h2 class="sec"><span class="zh">突出贡献者</span><span class="en">Top contributors</span></h2>
201
+ <p class="sec-sub zh">按贡献条目数排序。每条都指向原始的 issue / PR。</p>
202
+ <p class="sec-sub en">Sorted by number of contributions. Every entry links back to the original issue or PR.</p>
203
+
204
+ <div class="grid">
205
+
206
+ <div class="card">
207
+ <div class="top">
208
+ <img src="https://github.com/Minervaowl7.png?size=92" alt="Minervaowl7" loading="lazy">
209
+ <div class="who">
210
+ <a href="https://github.com/Minervaowl7" target="_blank" rel="noopener">@Minervaowl7</a>
211
+ <div class="tier"><span class="zh">15 PR · 8 issue</span><span class="en">15 PRs · 8 issues</span></div>
212
+ </div>
213
+ </div>
214
+ <p class="desc zh">贡献量最大。工作区概览日志日期锚定修复(未锚定子串正则误纳恢复候选 ⇒ 排序被污染、概览可能为空)、自动续跑宿主加固、恢复候选生命周期与幂等重放。</p>
215
+ <p class="desc en">The most prolific contributor. Anchored workspace-overview log-date matching (an unanchored substring regex admitted recovery candidates, polluting ranking and sometimes emptying the overview), auto-continuation host hardening, and recovery-candidate lifecycle / idempotent replay.</p>
216
+ <div class="refs">
217
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/53">PR #53</a>
218
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/50">PR #50</a>
219
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/49">PR #49</a>
220
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/46">PR #46</a>
221
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/44">PR #44</a>
222
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/37">PR #37</a>
223
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/36">PR #36</a>
224
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/34">PR #34</a>
225
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/33">PR #33</a>
226
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/32">PR #32</a>
227
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/31">PR #31</a>
228
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/27">PR #27</a>
229
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/25">PR #25</a>
230
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/23">PR #23</a>
231
+ <a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/17">PR #17</a>
232
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/16">#16</a>
233
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/22">#22</a>
234
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/24">#24</a>
235
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/28">#28</a>
236
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/35">#35</a>
237
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/48">#48</a>
238
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/51">#51</a>
239
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/52">#52</a>
240
+ </div>
241
+ </div>
242
+
243
+ <div class="card">
244
+ <div class="top">
245
+ <img src="https://github.com/JIE42393.png?size=92" alt="JIE42393" loading="lazy">
246
+ <div class="who">
247
+ <a href="https://github.com/JIE42393" target="_blank" rel="noopener">@JIE42393</a>
248
+ <div class="tier"><span class="zh">7 issue</span><span class="en">7 issues</span></div>
249
+ </div>
250
+ </div>
251
+ <p class="desc zh">持续的问题反馈者,覆盖面板行为、召回质量与配置边界等场景。</p>
252
+ <p class="desc en">A persistent reporter covering panel behaviour, recall quality, and configuration edge cases.</p>
253
+ <div class="refs">
254
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/15">#15</a>
255
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/26">#26</a>
256
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/30">#30</a>
257
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/41">#41</a>
258
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/42">#42</a>
259
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/43">#43</a>
260
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/45">#45</a>
261
+ </div>
262
+ </div>
263
+
264
+ <div class="card">
265
+ <div class="top">
266
+ <img src="https://github.com/Fishsb.png?size=92" alt="Fishsb" loading="lazy">
267
+ <div class="who">
268
+ <a href="https://github.com/Fishsb" target="_blank" rel="noopener">@Fishsb</a>
269
+ <div class="tier"><span class="zh">3 issue</span><span class="en">3 issues</span></div>
270
+ </div>
271
+ </div>
272
+ <p class="desc zh">关于记忆召回与注入行为的连续反馈。</p>
273
+ <p class="desc en">Successive reports on memory recall and injection behaviour.</p>
274
+ <div class="refs">
275
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/18">#18</a>
276
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/19">#19</a>
277
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/20">#20</a>
278
+ </div>
279
+ </div>
280
+
281
+ <div class="card">
282
+ <div class="top">
283
+ <img src="https://github.com/ProperSAMA.png?size=92" alt="ProperSAMA" loading="lazy">
284
+ <div class="who">
285
+ <a href="https://github.com/ProperSAMA" target="_blank" rel="noopener">@ProperSAMA</a>
286
+ <div class="tier"><span class="zh">1 PR</span><span class="en">1 PR</span></div>
287
+ </div>
288
+ </div>
289
+ <p class="desc zh">DSH Desktop 增强模式(透明 / Mica 材质)下的面板可读性修复,以及入口按钮防遮挡与外点 / Esc 关闭。</p>
290
+ <p class="desc en">Panel readability fix for DSH Desktop enhanced mode (transparent / Mica materials), plus entry-button anti-occlusion and outside-click / Esc dismissal.</p>
291
+ <div class="refs"><a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/12">PR #12</a></div>
292
+ </div>
293
+
294
+ <div class="card">
295
+ <div class="top">
296
+ <img src="https://github.com/nkh0472.png?size=92" alt="nkh0472" loading="lazy">
297
+ <div class="who">
298
+ <a href="https://github.com/nkh0472" target="_blank" rel="noopener">@nkh0472</a>
299
+ <div class="tier"><span class="zh">1 issue</span><span class="en">1 issue</span></div>
300
+ </div>
301
+ </div>
302
+ <p class="desc zh">无人值守 / 批处理场景的加固反馈——直接推动了欢迎向导与逐功能开关化。</p>
303
+ <p class="desc en">Unattended / batch-workflow hardening feedback that directly drove the welcome tour and per-feature switches.</p>
304
+ <div class="refs"><a href="https://github.com/Aik358/dsh-auto-memory/issues/10">#10</a></div>
305
+ </div>
306
+
307
+ <div class="card">
308
+ <div class="top">
309
+ <img src="https://github.com/messiahyl.png?size=92" alt="messiahyl" loading="lazy">
310
+ <div class="who">
311
+ <a href="https://github.com/messiahyl" target="_blank" rel="noopener">@messiahyl</a>
312
+ <div class="tier"><span class="zh">2 issue</span><span class="en">2 issues</span></div>
313
+ </div>
314
+ </div>
315
+ <p class="desc zh">早期问题反馈,帮助校准了最初的行为预期。</p>
316
+ <p class="desc en">Early feedback that helped calibrate the initial behaviour expectations.</p>
317
+ <div class="refs">
318
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/8">#8</a>
319
+ <a href="https://github.com/Aik358/dsh-auto-memory/issues/9">#9</a>
320
+ </div>
321
+ </div>
322
+
323
+ <div class="card">
324
+ <div class="top">
325
+ <img src="https://github.com/fei009009.png?size=92" alt="fei009009" loading="lazy">
326
+ <div class="who">
327
+ <a href="https://github.com/fei009009" target="_blank" rel="noopener">@fei009009</a>
328
+ <div class="tier"><span class="zh">1 PR</span><span class="en">1 PR</span></div>
329
+ </div>
330
+ </div>
331
+ <p class="desc zh">提交代码贡献。</p>
332
+ <p class="desc en">Contributed code via pull request.</p>
333
+ <div class="refs"><a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/29">PR #29</a></div>
334
+ </div>
335
+
336
+ </div>
337
+
338
+ <!-- ══════════ 其他贡献者 ══════════ -->
339
+ <h2 class="sec" style="margin-top:56px"><span class="zh">其他贡献者</span><span class="en">Also contributed</span></h2>
340
+ <p class="sec-sub zh">每一位的第一个反馈都算数——很多修复就是从这些 issue 开始的。</p>
341
+ <p class="sec-sub en">Every first report counts — many of these fixes started right here.</p>
342
+
343
+ <div class="compact">
344
+ <a class="chip" href="https://github.com/Architectxz" target="_blank" rel="noopener">
345
+ <img src="https://github.com/Architectxz.png?size=56" alt="" loading="lazy">
346
+ <span class="n">@Architectxz</span><span class="r">#1</span>
347
+ </a>
348
+ <a class="chip" href="https://github.com/ALuoXue" target="_blank" rel="noopener">
349
+ <img src="https://github.com/ALuoXue.png?size=56" alt="" loading="lazy">
350
+ <span class="n">@ALuoXue</span><span class="r">#2</span>
351
+ </a>
352
+ <a class="chip" href="https://github.com/lhbsaa" target="_blank" rel="noopener">
353
+ <img src="https://github.com/lhbsaa.png?size=56" alt="" loading="lazy">
354
+ <span class="n">@lhbsaa</span><span class="r">#3</span>
355
+ </a>
356
+ <a class="chip" href="https://github.com/alexchenzl" target="_blank" rel="noopener">
357
+ <img src="https://github.com/alexchenzl.png?size=56" alt="" loading="lazy">
358
+ <span class="n">@alexchenzl</span><span class="r">#6</span>
359
+ </a>
360
+ <a class="chip" href="https://github.com/zjj871114037" target="_blank" rel="noopener">
361
+ <img src="https://github.com/zjj871114037.png?size=56" alt="" loading="lazy">
362
+ <span class="n">@zjj871114037</span><span class="r">#7</span>
363
+ </a>
364
+ <a class="chip" href="https://github.com/eclgo" target="_blank" rel="noopener">
365
+ <img src="https://github.com/eclgo.png?size=56" alt="" loading="lazy">
366
+ <span class="n">@eclgo</span><span class="r">#13</span>
367
+ </a>
368
+ <a class="chip" href="https://github.com/moonltppt" target="_blank" rel="noopener">
369
+ <img src="https://github.com/moonltppt.png?size=56" alt="" loading="lazy">
370
+ <span class="n">@moonltppt</span><span class="r">#14</span>
371
+ </a>
372
+ <a class="chip" href="https://github.com/swtseaman" target="_blank" rel="noopener">
373
+ <img src="https://github.com/swtseaman.png?size=56" alt="" loading="lazy">
374
+ <span class="n">@swtseaman</span><span class="r">#21</span>
375
+ </a>
376
+ <a class="chip" href="https://github.com/xiaochaZ" target="_blank" rel="noopener">
377
+ <img src="https://github.com/xiaochaZ.png?size=56" alt="" loading="lazy">
378
+ <span class="n">@xiaochaZ</span><span class="r">#38</span>
379
+ </a>
380
+ <a class="chip" href="https://github.com/jeffsui" target="_blank" rel="noopener">
381
+ <img src="https://github.com/jeffsui.png?size=56" alt="" loading="lazy">
382
+ <span class="n">@jeffsui</span><span class="r">#39</span>
383
+ </a>
384
+ <a class="chip" href="https://github.com/cuohua" target="_blank" rel="noopener">
385
+ <img src="https://github.com/cuohua.png?size=56" alt="" loading="lazy">
386
+ <span class="n">@cuohua</span><span class="r">#40</span>
387
+ </a>
388
+ </div>
389
+
390
+ <!-- ══════════ 赞助方 ══════════ -->
391
+ <h2 class="sec" style="margin-top:56px"><span class="zh">资源赞助</span><span class="en">Resource sponsors</span></h2>
392
+ <p class="sec-sub zh">本项目不接广告、不做付费墙。以下赞助方提供的是开发本身要烧掉的东西——API 额度。</p>
393
+ <p class="sec-sub en">No ads, no paywall. These sponsors provide what development actually burns: API quota.</p>
394
+
395
+ <div class="sponsor">
396
+ <div class="mark">DSH</div>
397
+ <div class="body">
398
+ <h3><a href="https://api.dshapi.icu/" target="_blank" rel="noopener">DSH API · api.dshapi.icu</a></h3>
399
+ <p class="zh">API 中转站,为本项目的开发、回归测试,以及 M 系列语义引擎的选型与激活策略研究提供模型端点。没有这些额度,那些基准实验根本跑不起来。</p>
400
+ <p class="en">An API relay station providing the model endpoints used for development, regression testing, and the M-series semantic-engine selection / activation research. Without that quota, those benchmark runs simply would not have happened.</p>
401
+ <div class="tag"><span class="zh">API 额度赞助</span><span class="en">API quota sponsor</span></div>
402
+ </div>
403
+ </div>
404
+
405
+ <!-- ══════════ 如何参与 ══════════ -->
406
+ <h2 class="sec" style="margin-top:56px"><span class="zh">如何参与</span><span class="en">How to contribute</span></h2>
407
+ <p class="sec-sub zh">不需要先成为"核心贡献者"。一个能复现的 issue 就是有效贡献。</p>
408
+ <p class="sec-sub en">You do not need to be a "core contributor" first. A reproducible issue is a real contribution.</p>
409
+
410
+ <div class="steps">
411
+ <div class="step">
412
+ <div class="k">01 / issue</div>
413
+ <b><span class="zh">报一个能复现的问题</span><span class="en">File a reproducible issue</span></b>
414
+ <p class="zh">带上 DSH 版本、插件版本、复现步骤和实际 vs 预期。这一步比什么都重要。</p>
415
+ <p class="en">Include DSH version, plugin version, steps, and actual vs expected. This matters more than anything else.</p>
416
+ </div>
417
+ <div class="step">
418
+ <div class="k">02 / pr</div>
419
+ <b><span class="zh">提交一个 PR</span><span class="en">Send a pull request</span></b>
420
+ <p class="zh">小步、单一目的、带上验证结果。回归套件是绿的才算完成。</p>
421
+ <p class="en">Small, single-purpose, with verification results. It counts as done only when the regression suite is green.</p>
422
+ </div>
423
+ <div class="step">
424
+ <div class="k">03 / qq</div>
425
+ <b><span class="zh">加入交流群</span><span class="en">Join the QQ group</span></b>
426
+ <p class="zh">问题反馈、使用技巧交流,响应通常比 issue 更快。</p>
427
+ <p class="en">Feedback and usage tips — usually faster than issues.</p>
428
+ <p style="margin-top:10px"><a href="https://qm.qq.com/q/v7Asxn6vPa" target="_blank" rel="noopener" style="color:var(--accent)">→ <span class="zh">点击加入</span><span class="en">Join now</span></a></p>
429
+ </div>
430
+ <div class="step">
431
+ <div class="k">04 / sponsor</div>
432
+ <b><span class="zh">赞助开发资源</span><span class="en">Sponsor resources</span></b>
433
+ <p class="zh">提供 API 额度或其他开发资源。开个 issue 说明来意即可。</p>
434
+ <p class="en">Provide API quota or other development resources. Just open an issue.</p>
435
+ </div>
436
+ </div>
437
+
438
+ <footer>
439
+ <p class="zh">数据来源:GitHub Issues &amp; Pull Requests(2026-09-16 快照,共 51 条)。头像由 GitHub 提供。</p>
440
+ <p class="en">Data source: GitHub Issues &amp; Pull Requests (snapshot 2026-09-16, 51 entries). Avatars served by GitHub.</p>
441
+ <p style="margin-top:14px">
442
+ <a href="https://github.com/Aik358/dsh-auto-memory">README</a> ·
443
+ <a href="https://github.com/Aik358/dsh-auto-memory/blob/main/docs/USER-GUIDE.zh-CN.md">用户文档</a> ·
444
+ <a href="https://github.com/Aik358/dsh-auto-memory" target="_blank" rel="noopener">GitHub</a> ·
445
+ <a href="https://api.dshapi.icu/" target="_blank" rel="noopener">DSH API</a>
446
+ </p>
447
+ <p style="margin-top:10px;opacity:.6">dsh-auto-memory · BSD-3-Clause</p>
448
+ </footer>
449
+
450
+ </div>
451
+
452
+ <script>
453
+ function setLang(l) {
454
+ document.body.setAttribute('data-lang', l);
455
+ document.documentElement.lang = (l === 'zh' ? 'zh-CN' : 'en');
456
+ document.getElementById('lb-zh').className = (l === 'zh' ? 'on' : '');
457
+ document.getElementById('lb-en').className = (l === 'en' ? 'on' : '');
458
+ try { localStorage.setItem('dam-contrib-lang', l); } catch (e) {}
459
+ }
460
+ (function () {
461
+ var saved = null;
462
+ try { saved = localStorage.getItem('dam-contrib-lang'); } catch (e) {}
463
+ if (!saved) {
464
+ // 跟随浏览器语言: 非中文默认英文
465
+ saved = /^zh\b/i.test(navigator.language || '') ? 'zh' : 'en';
466
+ }
467
+ setLang(saved);
468
+ })();
469
+ </script>
470
+ </body>
471
+ </html>
@@ -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>`)、锚点行的格式约定 |