dsh-memu-memory 1.1.3 → 1.2.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 (184) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +39 -6
  3. package/README.zh.md +39 -7
  4. package/docs/active-memory-ab.md +385 -0
  5. package/docs/binding-lifecycle.md +99 -0
  6. package/docs/contributing.md +3 -3
  7. package/docs/emotion-model-spec.md +281 -0
  8. package/docs/env-and-commands.md +8 -0
  9. package/docs/host-api.md +2 -2
  10. package/docs/memory-semantics.md +12 -10
  11. package/docs/recall-benchmark.md +238 -0
  12. package/docs/troubleshooting.md +396 -395
  13. package/lib/active-memory.js +165 -0
  14. package/lib/activity-log.js +23 -6
  15. package/lib/binding-diagnostics.js +8 -3
  16. package/lib/client.js +335 -35
  17. package/lib/consolidation-ledger.js +347 -0
  18. package/lib/consolidation-receipt.js +284 -0
  19. package/lib/consolidation-snapshot.js +274 -0
  20. package/lib/consolidation-worker.js +144 -0
  21. package/lib/curator.js +86 -31
  22. package/lib/cycle.js +40 -6
  23. package/lib/graph.js +139 -5
  24. package/lib/index.js +33 -1
  25. package/lib/inject.js +104 -76
  26. package/lib/local-embedding-manager.js +24 -6
  27. package/lib/memory.js +534 -88
  28. package/lib/mood.js +268 -39
  29. package/lib/preset-scope.js +1 -1
  30. package/lib/private.js +430 -43
  31. package/lib/prompts/private-consolidation.coding.md +1 -0
  32. package/lib/prompts/private-consolidation.md +1 -0
  33. package/lib/prompts/private-consolidation.mixed.md +1 -0
  34. package/lib/prompts/private-consolidation.rp.md +1 -0
  35. package/lib/prompts.js +4 -4
  36. package/lib/remote-summary.js +51 -25
  37. package/lib/rpc.js +54 -5
  38. package/lib/state.js +29 -12
  39. package/lib/text-similarity.js +106 -0
  40. package/lib/tools.js +113 -10
  41. package/lib/vector-migration.js +28 -3
  42. package/lib/vector-profile.js +51 -0
  43. package/package.json +4 -2
  44. package/scripts/acceptance-local.mjs +2 -1
  45. package/scripts/active-memory-ab-live.mjs +655 -0
  46. package/scripts/active-memory-ab.mjs +1302 -0
  47. package/scripts/chain-matrix.mjs +11 -1
  48. package/scripts/check-all.mjs +10 -1
  49. package/scripts/replay.mjs +573 -0
  50. package/tests/activation.test.mjs +89 -0
  51. package/tests/active-memory-ab.test.mjs +745 -0
  52. package/tests/active-memory.test.mjs +129 -0
  53. package/tests/activity-log.test.mjs +126 -0
  54. package/tests/activity-wiring.test.mjs +103 -0
  55. package/tests/appendix-b.test.mjs +216 -0
  56. package/tests/appendix-b2.test.mjs +166 -0
  57. package/tests/audit-regression.test.mjs +272 -0
  58. package/tests/audit-safety.test.mjs +227 -0
  59. package/tests/backend-compensation.test.mjs +272 -0
  60. package/tests/backup.test.mjs +793 -0
  61. package/tests/binding-diagnostics.test.mjs +720 -0
  62. package/tests/browser.test.mjs +366 -0
  63. package/tests/client-render.test.mjs +892 -0
  64. package/tests/coalesce.test.mjs +113 -0
  65. package/tests/config.test.mjs +159 -0
  66. package/tests/consolidation-credential.test.mjs +331 -0
  67. package/tests/consolidation-feed.test.mjs +96 -0
  68. package/tests/consolidation-fork.test.mjs +489 -0
  69. package/tests/consolidation-ledger.test.mjs +298 -0
  70. package/tests/consolidation-snapshot.test.mjs +360 -0
  71. package/tests/consolidation-value.test.mjs +89 -0
  72. package/tests/context-scope.test.mjs +40 -0
  73. package/tests/cue.test.mjs +44 -0
  74. package/tests/curator-commit.test.mjs +277 -0
  75. package/tests/curator-probe.test.mjs +433 -0
  76. package/tests/curator.test.mjs +150 -0
  77. package/tests/cycle.test.mjs +411 -0
  78. package/tests/disclosure.test.mjs +231 -0
  79. package/tests/doc-drift.test.mjs +222 -0
  80. package/tests/embedding-catalog.test.mjs +266 -0
  81. package/tests/embedding-download.test.mjs +391 -0
  82. package/tests/embedding-runtime.test.mjs +389 -0
  83. package/tests/emotion-chain.test.mjs +84 -0
  84. package/tests/emotion-contract.test.mjs +445 -0
  85. package/tests/engine.test.mjs +35 -0
  86. package/tests/fixtures/active-memory-ab/README.md +56 -0
  87. package/tests/fixtures/active-memory-ab/cases/01-clean-dense-turn.json +351 -0
  88. package/tests/fixtures/active-memory-ab/cases/02-clean-thin-turn.json +122 -0
  89. package/tests/fixtures/active-memory-ab/cases/03-clean-starved-small.json +125 -0
  90. package/tests/fixtures/active-memory-ab/cases/04-clean-large-thin.json +137 -0
  91. package/tests/fixtures/active-memory-ab/cases/05-clean-half-step.json +166 -0
  92. package/tests/fixtures/active-memory-ab/cases/06-clean-duplicate-reread.json +197 -0
  93. package/tests/fixtures/active-memory-ab/cases/07-clean-recent-recall.json +125 -0
  94. package/tests/fixtures/active-memory-ab/cases/08-global-relevant.json +111 -0
  95. package/tests/fixtures/active-memory-ab/cases/09-global-irrelevant-conflict.json +158 -0
  96. package/tests/fixtures/active-memory-ab/cases/10-no-human-turn.json +97 -0
  97. package/tests/fixtures/active-memory-ab/cases/11-clean-scale-100.json +137 -0
  98. package/tests/fixtures/active-memory-ab/cases/12-clean-scale-1000.json +137 -0
  99. package/tests/fixtures/active-memory-ab/cases/13-clean-scale-5000.json +137 -0
  100. package/tests/fixtures/active-memory-ab/cases/14-clean-scale-20000.json +137 -0
  101. package/tests/fixtures/active-memory-ab/lead-ai-reviewed-reference.json +191 -0
  102. package/tests/fixtures/active-memory-ab/manifest.json +199 -0
  103. package/tests/fixtures/recall-bench/01-paraphrase.json +184 -0
  104. package/tests/fixtures/recall-bench/02-exact.json +153 -0
  105. package/tests/fixtures/recall-bench/03-negation.json +173 -0
  106. package/tests/fixtures/recall-bench/04-no-answer.json +162 -0
  107. package/tests/fixtures/recall-bench/05-conflict.json +194 -0
  108. package/tests/fixtures/recall-bench/06-boundary.json +273 -0
  109. package/tests/fixtures/recall-bench/07-secret.json +191 -0
  110. package/tests/fixtures/recall-bench/08-coding.json +164 -0
  111. package/tests/fixtures/recall-bench-gold-candidates/01-paraphrase.json +193 -0
  112. package/tests/fixtures/recall-bench-gold-candidates/02-exact.json +197 -0
  113. package/tests/fixtures/recall-bench-gold-candidates/03-negation.json +244 -0
  114. package/tests/fixtures/recall-bench-gold-candidates/04-no-answer.json +189 -0
  115. package/tests/fixtures/recall-bench-gold-candidates/05-conflict.json +245 -0
  116. package/tests/fixtures/recall-bench-gold-candidates/06-boundary.json +279 -0
  117. package/tests/fixtures/recall-bench-gold-candidates/07-secret.json +224 -0
  118. package/tests/fixtures/recall-bench-gold-candidates/08-coding.json +218 -0
  119. package/tests/fixtures/repetition-eval/01-zh-rp.json +93 -0
  120. package/tests/fixtures/repetition-eval/02-en.json +97 -0
  121. package/tests/fixtures/repetition-eval/03-code.json +91 -0
  122. package/tests/fixtures/repetition-eval/04-names.json +116 -0
  123. package/tests/fixtures/repetition-eval/05-user-quote.json +96 -0
  124. package/tests/fixtures/repetition-eval/06-agreement.json +86 -0
  125. package/tests/graph-cascade.test.mjs +190 -0
  126. package/tests/graph-view.test.mjs +187 -0
  127. package/tests/graph.test.mjs +94 -0
  128. package/tests/hook-order.test.mjs +72 -0
  129. package/tests/humanlike.test.mjs +232 -0
  130. package/tests/hybrid-recall.test.mjs +122 -0
  131. package/tests/inbound.test.mjs +393 -0
  132. package/tests/inject-guide.test.mjs +364 -0
  133. package/tests/inject.test.mjs +222 -0
  134. package/tests/injection-budget-settings.test.mjs +35 -0
  135. package/tests/injection-budget.test.mjs +64 -0
  136. package/tests/injection-chain.test.mjs +191 -0
  137. package/tests/loader-register.mjs +3 -0
  138. package/tests/loader.mjs +12 -0
  139. package/tests/local-embedding-entry.test.mjs +95 -0
  140. package/tests/local-embedding-manager.test.mjs +476 -0
  141. package/tests/local-embedding-protocol.test.mjs +95 -0
  142. package/tests/local-embedding-worker.test.mjs +346 -0
  143. package/tests/managed-memory.test.mjs +591 -0
  144. package/tests/managed-runtime.test.mjs +40 -0
  145. package/tests/media.test.mjs +132 -0
  146. package/tests/migration-payload.test.mjs +42 -0
  147. package/tests/mood.test.mjs +109 -0
  148. package/tests/multiprocess.test.mjs +29 -0
  149. package/tests/new-session-gate.test.mjs +361 -0
  150. package/tests/package-shipping.test.mjs +84 -0
  151. package/tests/preset-scope.test.mjs +212 -0
  152. package/tests/prompts.test.mjs +250 -0
  153. package/tests/react-snapshot.test.mjs +23 -0
  154. package/tests/recall-bench.test.mjs +306 -0
  155. package/tests/recall-dedup.test.mjs +417 -0
  156. package/tests/remote.test.mjs +140 -0
  157. package/tests/rename.test.mjs +30 -0
  158. package/tests/repetition-detector-snapshot.test.mjs +231 -0
  159. package/tests/repetition-eval-live.test.mjs +177 -0
  160. package/tests/repetition-eval.test.mjs +373 -0
  161. package/tests/salient-date.test.mjs +142 -0
  162. package/tests/settings-beat.test.mjs +221 -0
  163. package/tests/short-term.test.mjs +166 -0
  164. package/tests/sidebar-beat.test.mjs +212 -0
  165. package/tests/sidebar-refresh.test.mjs +123 -0
  166. package/tests/sidebar.test.mjs +70 -0
  167. package/tests/snippet.test.mjs +47 -0
  168. package/tests/source-kind.test.mjs +52 -0
  169. package/tests/state.test.mjs +150 -0
  170. package/tests/stats.test.mjs +112 -0
  171. package/tests/storage.test.mjs +125 -0
  172. package/tests/stubs/dsh-llm.js +5 -0
  173. package/tests/stubs/dsh-session.js +7 -0
  174. package/tests/stubs/dsh-tools.js +101 -0
  175. package/tests/tool-schema.test.mjs +73 -0
  176. package/tests/tools.test.mjs +184 -0
  177. package/tests/ui-defaults.test.mjs +57 -0
  178. package/tests/update-fields.test.mjs +138 -0
  179. package/tests/vector-migration.test.mjs +790 -0
  180. package/tests/vector-profile.test.mjs +425 -0
  181. package/tests/visibility-migration.test.mjs +152 -0
  182. package/tests/webui-auth.test.mjs +454 -0
  183. package/tests/webui.test.mjs +165 -0
  184. package/tests/windows-env.test.mjs +89 -0
@@ -0,0 +1,184 @@
1
+ {
2
+ "name": "paraphrase — 同义改写",
3
+ "status": "synthetic-draft-not-gold",
4
+ "draft": true,
5
+ "notGold": true,
6
+ "subclass": "paraphrase",
7
+ "notes": "Synthetic draft only. Not human-confirmed, not a gold set.",
8
+ "entries": {
9
+ "mem-rb-para-umbrella": {
10
+ "id": "mem-rb-para-umbrella",
11
+ "title": "雨伞",
12
+ "content": "林夏总把一把折叠伞放在玄关的蓝色鞋柜上,出门前会顺手确认。",
13
+ "tags": [
14
+ "习惯",
15
+ "雨伞"
16
+ ],
17
+ "ageDays": 20
18
+ },
19
+ "mem-rb-para-thunder": {
20
+ "id": "mem-rb-para-thunder",
21
+ "title": "怕打雷",
22
+ "content": "林夏害怕打雷,雷雨夜会躲进衣帽间,把门留一条缝。",
23
+ "tags": [
24
+ "恐惧",
25
+ "雷雨"
26
+ ],
27
+ "ageDays": 40
28
+ },
29
+ "mem-rb-para-coffee": {
30
+ "id": "mem-rb-para-coffee",
31
+ "title": "咖啡口味",
32
+ "content": "她喝咖啡只加燕麦奶,不加糖,下午三点以后不喝。",
33
+ "tags": [
34
+ "咖啡"
35
+ ],
36
+ "ageDays": 15
37
+ },
38
+ "mem-rb-para-cat": {
39
+ "id": "mem-rb-para-cat",
40
+ "title": "橘猫",
41
+ "content": "家里那只橘猫叫团子,怕生,只肯让林夏摸肚子。",
42
+ "tags": [
43
+ "猫"
44
+ ],
45
+ "ageDays": 30
46
+ },
47
+ "mem-rb-para-promise": {
48
+ "id": "mem-rb-para-promise",
49
+ "title": "周末约定",
50
+ "content": "约好周六上午去旧书市,林夏想找一本绝版的《海风集》。",
51
+ "tags": [
52
+ "约定"
53
+ ],
54
+ "ageDays": 3
55
+ },
56
+ "mem-rb-para-lamp": {
57
+ "id": "mem-rb-para-lamp",
58
+ "title": "床头灯",
59
+ "content": "她睡前要留一盏暖黄色的小灯,全黑会睡不着。",
60
+ "tags": [
61
+ "睡眠"
62
+ ],
63
+ "ageDays": 60
64
+ }
65
+ },
66
+ "samples": [
67
+ {
68
+ "id": "rb-para-umbrella",
69
+ "draft": true,
70
+ "notGold": true,
71
+ "subclass": "paraphrase",
72
+ "query": "每次出门前她习惯检查什么?",
73
+ "context": {},
74
+ "time": "2026-10-11T12:00:00+08:00",
75
+ "expectedIds": [
76
+ "mem-rb-para-umbrella"
77
+ ],
78
+ "forbiddenIds": [],
79
+ "noAnswer": false,
80
+ "library": [
81
+ "mem-rb-para-umbrella",
82
+ "mem-rb-para-thunder",
83
+ "mem-rb-para-coffee",
84
+ "mem-rb-para-lamp"
85
+ ]
86
+ },
87
+ {
88
+ "id": "rb-para-thunder",
89
+ "draft": true,
90
+ "notGold": true,
91
+ "subclass": "paraphrase",
92
+ "query": "打雷的晚上她会躲去哪里?",
93
+ "context": {},
94
+ "time": "2026-10-12T12:00:00+08:00",
95
+ "expectedIds": [
96
+ "mem-rb-para-thunder"
97
+ ],
98
+ "forbiddenIds": [],
99
+ "noAnswer": false,
100
+ "library": [
101
+ "mem-rb-para-thunder",
102
+ "mem-rb-para-umbrella",
103
+ "mem-rb-para-cat",
104
+ "mem-rb-para-promise"
105
+ ]
106
+ },
107
+ {
108
+ "id": "rb-para-coffee",
109
+ "draft": true,
110
+ "notGold": true,
111
+ "subclass": "paraphrase",
112
+ "query": "她下午喝咖啡会加什么?",
113
+ "context": {},
114
+ "time": "2026-10-13T12:00:00+08:00",
115
+ "expectedIds": [
116
+ "mem-rb-para-coffee"
117
+ ],
118
+ "forbiddenIds": [],
119
+ "noAnswer": false,
120
+ "library": [
121
+ "mem-rb-para-coffee",
122
+ "mem-rb-para-lamp",
123
+ "mem-rb-para-umbrella"
124
+ ]
125
+ },
126
+ {
127
+ "id": "rb-para-cat",
128
+ "draft": true,
129
+ "notGold": true,
130
+ "subclass": "paraphrase",
131
+ "query": "团子肯让谁摸肚子?",
132
+ "context": {},
133
+ "time": "2026-10-14T12:00:00+08:00",
134
+ "expectedIds": [
135
+ "mem-rb-para-cat"
136
+ ],
137
+ "forbiddenIds": [],
138
+ "noAnswer": false,
139
+ "library": [
140
+ "mem-rb-para-cat",
141
+ "mem-rb-para-thunder",
142
+ "mem-rb-para-promise"
143
+ ]
144
+ },
145
+ {
146
+ "id": "rb-para-promise",
147
+ "draft": true,
148
+ "notGold": true,
149
+ "subclass": "paraphrase",
150
+ "query": "周六上午约好去旧书市找哪本书?",
151
+ "context": {},
152
+ "time": "2026-10-15T12:00:00+08:00",
153
+ "expectedIds": [
154
+ "mem-rb-para-promise"
155
+ ],
156
+ "forbiddenIds": [],
157
+ "noAnswer": false,
158
+ "library": [
159
+ "mem-rb-para-promise",
160
+ "mem-rb-para-umbrella",
161
+ "mem-rb-para-cat"
162
+ ]
163
+ },
164
+ {
165
+ "id": "rb-para-lamp",
166
+ "draft": true,
167
+ "notGold": true,
168
+ "subclass": "paraphrase",
169
+ "query": "睡觉时她需要留什么灯?",
170
+ "context": {},
171
+ "time": "2026-10-16T12:00:00+08:00",
172
+ "expectedIds": [
173
+ "mem-rb-para-lamp"
174
+ ],
175
+ "forbiddenIds": [],
176
+ "noAnswer": false,
177
+ "library": [
178
+ "mem-rb-para-lamp",
179
+ "mem-rb-para-thunder",
180
+ "mem-rb-para-coffee"
181
+ ]
182
+ }
183
+ ]
184
+ }
@@ -0,0 +1,153 @@
1
+ {
2
+ "name": "exact — 精确 title/id",
3
+ "status": "synthetic-draft-not-gold",
4
+ "draft": true,
5
+ "notGold": true,
6
+ "subclass": "exact",
7
+ "notes": "Synthetic draft only. Exact-title and exact-id queries.",
8
+ "entries": {
9
+ "mem-rb-exact-watch": {
10
+ "id": "mem-rb-exact-watch",
11
+ "title": "银色怀表",
12
+ "content": "祖父留下的银色怀表,表盖内侧刻着 1978.04.12,停在三点十七分。",
13
+ "tags": [
14
+ "遗物",
15
+ "怀表"
16
+ ],
17
+ "ageDays": 120
18
+ },
19
+ "mem-rb-exact-song": {
20
+ "id": "mem-rb-exact-song",
21
+ "title": "《夜航西飞》",
22
+ "content": "林夏把《夜航西飞》放在书架第二层,书脊有一道折痕。",
23
+ "tags": [
24
+ "书"
25
+ ],
26
+ "ageDays": 50
27
+ },
28
+ "mem-rb-exact-key": {
29
+ "id": "mem-rb-exact-key",
30
+ "title": "备用钥匙",
31
+ "content": "备用钥匙藏在门口花盆下面,只有下雨天会挪到窗台。",
32
+ "tags": [
33
+ "钥匙"
34
+ ],
35
+ "ageDays": 25
36
+ },
37
+ "mem-rb-exact-code": {
38
+ "id": "mem-rb-exact-code",
39
+ "title": "保险箱密码",
40
+ "content": "旧保险箱密码是 4-19-7-2,别和门锁密码混了。",
41
+ "tags": [
42
+ "密码"
43
+ ],
44
+ "ageDays": 80
45
+ },
46
+ "mem-rb-exact-med": {
47
+ "id": "mem-rb-exact-med",
48
+ "title": "药盒",
49
+ "content": "白色药盒周一到周五分格,周五那格是空的。",
50
+ "tags": [
51
+ "药"
52
+ ],
53
+ "ageDays": 10
54
+ }
55
+ },
56
+ "samples": [
57
+ {
58
+ "id": "rb-exact-watch",
59
+ "draft": true,
60
+ "notGold": true,
61
+ "subclass": "exact",
62
+ "query": "银色怀表",
63
+ "context": {},
64
+ "time": "2026-10-17T12:00:00+08:00",
65
+ "expectedIds": [
66
+ "mem-rb-exact-watch"
67
+ ],
68
+ "forbiddenIds": [],
69
+ "noAnswer": false,
70
+ "library": [
71
+ "mem-rb-exact-watch",
72
+ "mem-rb-exact-song",
73
+ "mem-rb-exact-key"
74
+ ]
75
+ },
76
+ {
77
+ "id": "rb-exact-song",
78
+ "draft": true,
79
+ "notGold": true,
80
+ "subclass": "exact",
81
+ "query": "《夜航西飞》",
82
+ "context": {},
83
+ "time": "2026-10-18T12:00:00+08:00",
84
+ "expectedIds": [
85
+ "mem-rb-exact-song"
86
+ ],
87
+ "forbiddenIds": [],
88
+ "noAnswer": false,
89
+ "library": [
90
+ "mem-rb-exact-song",
91
+ "mem-rb-exact-watch",
92
+ "mem-rb-exact-med"
93
+ ]
94
+ },
95
+ {
96
+ "id": "rb-exact-key-id",
97
+ "draft": true,
98
+ "notGold": true,
99
+ "subclass": "exact",
100
+ "query": "mem-rb-exact-key",
101
+ "context": {},
102
+ "time": "2026-10-19T12:00:00+08:00",
103
+ "expectedIds": [
104
+ "mem-rb-exact-key"
105
+ ],
106
+ "forbiddenIds": [],
107
+ "noAnswer": false,
108
+ "library": [
109
+ "mem-rb-exact-key",
110
+ "mem-rb-exact-code",
111
+ "mem-rb-exact-watch"
112
+ ]
113
+ },
114
+ {
115
+ "id": "rb-exact-code-id",
116
+ "draft": true,
117
+ "notGold": true,
118
+ "subclass": "exact",
119
+ "query": "mem-rb-exact-code",
120
+ "context": {},
121
+ "time": "2026-10-10T12:00:00+08:00",
122
+ "expectedIds": [
123
+ "mem-rb-exact-code"
124
+ ],
125
+ "forbiddenIds": [],
126
+ "noAnswer": false,
127
+ "library": [
128
+ "mem-rb-exact-code",
129
+ "mem-rb-exact-key",
130
+ "mem-rb-exact-med"
131
+ ]
132
+ },
133
+ {
134
+ "id": "rb-exact-med",
135
+ "draft": true,
136
+ "notGold": true,
137
+ "subclass": "exact",
138
+ "query": "药盒周一到周五怎么分格",
139
+ "context": {},
140
+ "time": "2026-10-11T12:00:00+08:00",
141
+ "expectedIds": [
142
+ "mem-rb-exact-med"
143
+ ],
144
+ "forbiddenIds": [],
145
+ "noAnswer": false,
146
+ "library": [
147
+ "mem-rb-exact-med",
148
+ "mem-rb-exact-song",
149
+ "mem-rb-exact-code"
150
+ ]
151
+ }
152
+ ]
153
+ }
@@ -0,0 +1,173 @@
1
+ {
2
+ "name": "negation — 否定与过期事实",
3
+ "status": "synthetic-draft-not-gold",
4
+ "draft": true,
5
+ "notGold": true,
6
+ "subclass": "negation",
7
+ "notes": "Synthetic draft only. Current fact and superseded distractor share wording.",
8
+ "entries": {
9
+ "mem-rb-neg-allergy": {
10
+ "id": "mem-rb-neg-allergy",
11
+ "title": "咖啡因过敏",
12
+ "content": "医生确认林夏对咖啡因过敏,不能喝咖啡,也不能吃含咖啡因的巧克力。",
13
+ "tags": [
14
+ "过敏",
15
+ "咖啡因"
16
+ ],
17
+ "ageDays": 10
18
+ },
19
+ "mem-rb-neg-oldcoffee": {
20
+ "id": "mem-rb-neg-oldcoffee",
21
+ "title": "以前爱喝咖啡",
22
+ "content": "林夏以前每天两杯美式,喜欢加双份糖。",
23
+ "tags": [
24
+ "咖啡"
25
+ ],
26
+ "ageDays": 300,
27
+ "status": "superseded"
28
+ },
29
+ "mem-rb-neg-noise": {
30
+ "id": "mem-rb-neg-noise",
31
+ "title": "怕吵",
32
+ "content": "林夏受不了装修电钻声,听到就会头痛,需要戴降噪耳机。",
33
+ "tags": [
34
+ "声音"
35
+ ],
36
+ "ageDays": 45
37
+ },
38
+ "mem-rb-neg-oldparty": {
39
+ "id": "mem-rb-neg-oldparty",
40
+ "title": "喜欢热闹",
41
+ "content": "她以前喜欢参加吵闹的聚会,越热闹越好。",
42
+ "tags": [
43
+ "聚会"
44
+ ],
45
+ "ageDays": 280,
46
+ "status": "superseded"
47
+ },
48
+ "mem-rb-neg-promise": {
49
+ "id": "mem-rb-neg-promise",
50
+ "title": "不再熬夜",
51
+ "content": "林夏答应不再熬夜赶稿,十二点前必须关电脑。",
52
+ "tags": [
53
+ "作息"
54
+ ],
55
+ "ageDays": 7
56
+ },
57
+ "mem-rb-neg-oldnight": {
58
+ "id": "mem-rb-neg-oldnight",
59
+ "title": "习惯熬夜",
60
+ "content": "她经常通宵写稿,觉得夜里效率高。",
61
+ "tags": [
62
+ "熬夜"
63
+ ],
64
+ "ageDays": 260,
65
+ "status": "superseded"
66
+ },
67
+ "mem-rb-neg-sugar": {
68
+ "id": "mem-rb-neg-sugar",
69
+ "title": "戒糖",
70
+ "content": "林夏最近戒糖,奶茶只点无糖,也不吃甜点。",
71
+ "tags": [
72
+ "饮食"
73
+ ],
74
+ "ageDays": 12
75
+ },
76
+ "mem-rb-neg-oldsugar": {
77
+ "id": "mem-rb-neg-oldsugar",
78
+ "title": "爱吃甜",
79
+ "content": "她以前最爱奶油蛋糕和焦糖布丁。",
80
+ "tags": [
81
+ "甜食"
82
+ ],
83
+ "ageDays": 240,
84
+ "status": "superseded"
85
+ }
86
+ },
87
+ "samples": [
88
+ {
89
+ "id": "rb-neg-allergy",
90
+ "draft": true,
91
+ "notGold": true,
92
+ "subclass": "negation",
93
+ "query": "医生说林夏还能喝咖啡吗?",
94
+ "context": {},
95
+ "time": "2026-10-12T12:00:00+08:00",
96
+ "expectedIds": [
97
+ "mem-rb-neg-allergy"
98
+ ],
99
+ "forbiddenIds": [
100
+ "mem-rb-neg-oldcoffee"
101
+ ],
102
+ "noAnswer": false,
103
+ "library": [
104
+ "mem-rb-neg-allergy",
105
+ "mem-rb-neg-oldcoffee",
106
+ "mem-rb-neg-noise"
107
+ ]
108
+ },
109
+ {
110
+ "id": "rb-neg-noise",
111
+ "draft": true,
112
+ "notGold": true,
113
+ "subclass": "negation",
114
+ "query": "遇到电钻声她会怎么样?",
115
+ "context": {},
116
+ "time": "2026-10-13T12:00:00+08:00",
117
+ "expectedIds": [
118
+ "mem-rb-neg-noise"
119
+ ],
120
+ "forbiddenIds": [
121
+ "mem-rb-neg-oldparty"
122
+ ],
123
+ "noAnswer": false,
124
+ "library": [
125
+ "mem-rb-neg-noise",
126
+ "mem-rb-neg-oldparty",
127
+ "mem-rb-neg-allergy"
128
+ ]
129
+ },
130
+ {
131
+ "id": "rb-neg-promise",
132
+ "draft": true,
133
+ "notGold": true,
134
+ "subclass": "negation",
135
+ "query": "她现在还会通宵赶稿吗?",
136
+ "context": {},
137
+ "time": "2026-10-14T12:00:00+08:00",
138
+ "expectedIds": [
139
+ "mem-rb-neg-promise"
140
+ ],
141
+ "forbiddenIds": [
142
+ "mem-rb-neg-oldnight"
143
+ ],
144
+ "noAnswer": false,
145
+ "library": [
146
+ "mem-rb-neg-promise",
147
+ "mem-rb-neg-oldnight",
148
+ "mem-rb-neg-sugar"
149
+ ]
150
+ },
151
+ {
152
+ "id": "rb-neg-sugar",
153
+ "draft": true,
154
+ "notGold": true,
155
+ "subclass": "negation",
156
+ "query": "她现在喝奶茶会点什么糖度?",
157
+ "context": {},
158
+ "time": "2026-10-15T12:00:00+08:00",
159
+ "expectedIds": [
160
+ "mem-rb-neg-sugar"
161
+ ],
162
+ "forbiddenIds": [
163
+ "mem-rb-neg-oldsugar"
164
+ ],
165
+ "noAnswer": false,
166
+ "library": [
167
+ "mem-rb-neg-sugar",
168
+ "mem-rb-neg-oldsugar",
169
+ "mem-rb-neg-promise"
170
+ ]
171
+ }
172
+ ]
173
+ }
@@ -0,0 +1,162 @@
1
+ {
2
+ "name": "no-answer — 无答案",
3
+ "status": "synthetic-draft-not-gold",
4
+ "draft": true,
5
+ "notGold": true,
6
+ "subclass": "no-answer",
7
+ "notes": "Synthetic draft only. English queries against Chinese-only libraries so lexical overlap is exactly zero; an empty top-3 is the correct outcome.",
8
+ "entries": {
9
+ "mem-rb-na-garden": {
10
+ "id": "mem-rb-na-garden",
11
+ "title": "阳台花园",
12
+ "content": "阳台上种了薄荷和迷迭香,夏天每天傍晚浇水。",
13
+ "tags": [
14
+ "植物"
15
+ ],
16
+ "ageDays": 30
17
+ },
18
+ "mem-rb-na-train": {
19
+ "id": "mem-rb-na-train",
20
+ "title": "回程车票",
21
+ "content": "回程的高铁票订在周日晚上七点,二等座。",
22
+ "tags": [
23
+ "出行"
24
+ ],
25
+ "ageDays": 5
26
+ },
27
+ "mem-rb-na-birthday": {
28
+ "id": "mem-rb-na-birthday",
29
+ "title": "生日",
30
+ "content": "林夏的生日是十一月三日,她不喜欢惊喜派对。",
31
+ "tags": [
32
+ "生日"
33
+ ],
34
+ "ageDays": 90
35
+ },
36
+ "mem-rb-na-diet": {
37
+ "id": "mem-rb-na-diet",
38
+ "title": "饮食",
39
+ "content": "她不吃香菜,汤里有一点也会挑出来。",
40
+ "tags": [
41
+ "饮食"
42
+ ],
43
+ "ageDays": 20
44
+ },
45
+ "mem-rb-na-dog": {
46
+ "id": "mem-rb-na-dog",
47
+ "title": "邻居的狗",
48
+ "content": "楼下邻居养了一只黑色拉布拉多,叫阿福。",
49
+ "tags": [
50
+ "狗"
51
+ ],
52
+ "ageDays": 60
53
+ },
54
+ "mem-rb-na-rent": {
55
+ "id": "mem-rb-na-rent",
56
+ "title": "房租",
57
+ "content": "房租每月五号交,房东只收转账。",
58
+ "tags": [
59
+ "房租"
60
+ ],
61
+ "ageDays": 15
62
+ }
63
+ },
64
+ "samples": [
65
+ {
66
+ "id": "rb-na-quantum",
67
+ "draft": true,
68
+ "notGold": true,
69
+ "subclass": "no-answer",
70
+ "query": "quantum chromodynamics lecture notes",
71
+ "context": {},
72
+ "time": "2026-10-16T12:00:00+08:00",
73
+ "expectedIds": [],
74
+ "forbiddenIds": [],
75
+ "noAnswer": true,
76
+ "library": [
77
+ "mem-rb-na-garden",
78
+ "mem-rb-na-train"
79
+ ]
80
+ },
81
+ {
82
+ "id": "rb-na-kubernetes",
83
+ "draft": true,
84
+ "notGold": true,
85
+ "subclass": "no-answer",
86
+ "query": "kubernetes cluster autoscaling policy",
87
+ "context": {},
88
+ "time": "2026-10-17T12:00:00+08:00",
89
+ "expectedIds": [],
90
+ "forbiddenIds": [],
91
+ "noAnswer": true,
92
+ "library": [
93
+ "mem-rb-na-train",
94
+ "mem-rb-na-birthday"
95
+ ]
96
+ },
97
+ {
98
+ "id": "rb-na-weather",
99
+ "draft": true,
100
+ "notGold": true,
101
+ "subclass": "no-answer",
102
+ "query": "weather forecast for Reykjavik tomorrow",
103
+ "context": {},
104
+ "time": "2026-10-18T12:00:00+08:00",
105
+ "expectedIds": [],
106
+ "forbiddenIds": [],
107
+ "noAnswer": true,
108
+ "library": [
109
+ "mem-rb-na-birthday",
110
+ "mem-rb-na-diet"
111
+ ]
112
+ },
113
+ {
114
+ "id": "rb-na-sourdough",
115
+ "draft": true,
116
+ "notGold": true,
117
+ "subclass": "no-answer",
118
+ "query": "sourdough starter hydration ratio",
119
+ "context": {},
120
+ "time": "2026-10-19T12:00:00+08:00",
121
+ "expectedIds": [],
122
+ "forbiddenIds": [],
123
+ "noAnswer": true,
124
+ "library": [
125
+ "mem-rb-na-diet",
126
+ "mem-rb-na-dog"
127
+ ]
128
+ },
129
+ {
130
+ "id": "rb-na-formula",
131
+ "draft": true,
132
+ "notGold": true,
133
+ "subclass": "no-answer",
134
+ "query": "Formula One qualifying results",
135
+ "context": {},
136
+ "time": "2026-10-10T12:00:00+08:00",
137
+ "expectedIds": [],
138
+ "forbiddenIds": [],
139
+ "noAnswer": true,
140
+ "library": [
141
+ "mem-rb-na-dog",
142
+ "mem-rb-na-rent"
143
+ ]
144
+ },
145
+ {
146
+ "id": "rb-na-invoice",
147
+ "draft": true,
148
+ "notGold": true,
149
+ "subclass": "no-answer",
150
+ "query": "invoice reconciliation spreadsheet macro",
151
+ "context": {},
152
+ "time": "2026-10-11T12:00:00+08:00",
153
+ "expectedIds": [],
154
+ "forbiddenIds": [],
155
+ "noAnswer": true,
156
+ "library": [
157
+ "mem-rb-na-rent",
158
+ "mem-rb-na-garden"
159
+ ]
160
+ }
161
+ ]
162
+ }