






















@@ -76,6 +76,87 @@ describe("memory host event journal integration", () => {
7676expect(promotionEvent.applied).toBe(1);
7777});
787879+it("records skipped recall events for durable memory hits excluded from short-term promotion", async () => {
80+const workspaceDir = await createTempWorkspace("memory-core-skipped-recall-events-");
81+await fs.mkdir(path.join(workspaceDir, "memory", "decisoes"), { recursive: true });
82+await fs.mkdir(path.join(workspaceDir, "memory", "idiomas"), { recursive: true });
83+await fs.writeFile(
84+path.join(workspaceDir, "MEMORY.md"),
85+"# Memory\n\nAlpha durable note.\n",
86+"utf8",
87+);
88+await fs.writeFile(
89+path.join(workspaceDir, "memory", "decisoes", "2026-06.md"),
90+"# Decisoes\n\nAlpha monthly decision.\n",
91+"utf8",
92+);
93+await fs.writeFile(
94+path.join(workspaceDir, "memory", "idiomas", "PLANO.md"),
95+"# Plano\n\nAlpha language plan.\n",
96+"utf8",
97+);
98+99+await recordShortTermRecalls({
100+ workspaceDir,
101+query: "alpha durable memory",
102+results: [
103+{
104+path: "MEMORY.md",
105+startLine: 3,
106+endLine: 3,
107+score: 0.91,
108+snippet: "Alpha durable note.",
109+source: "memory",
110+},
111+{
112+path: "memory/decisoes/2026-06.md",
113+startLine: 3,
114+endLine: 3,
115+score: 0.88,
116+snippet: "Alpha monthly decision.",
117+source: "memory",
118+},
119+{
120+path: "memory/idiomas/PLANO.md",
121+startLine: 3,
122+endLine: 3,
123+score: 0.83,
124+snippet: "Alpha language plan.",
125+source: "memory",
126+},
127+],
128+nowMs: Date.UTC(2026, 5, 13, 9, 0, 0),
129+});
130+131+const candidates = await rankShortTermPromotionCandidates({
132+ workspaceDir,
133+minScore: 0,
134+minRecallCount: 0,
135+minUniqueQueries: 0,
136+nowMs: Date.UTC(2026, 5, 13, 9, 5, 0),
137+});
138+const events = await readMemoryHostEvents({ workspaceDir });
139+140+expect(candidates).toEqual([]);
141+expect(events.map((event) => event.type)).toEqual(["memory.recall.skipped"]);
142+const skippedEvent = events[0];
143+if (skippedEvent?.type !== "memory.recall.skipped") {
144+throw new Error("expected skipped recall event");
145+}
146+expect(skippedEvent.query).toBe("alpha durable memory");
147+expect(skippedEvent.reason).toBe("non-short-term-memory-path");
148+expect(skippedEvent.eligibleResultCount).toBe(0);
149+expect(skippedEvent.skippedResultCount).toBe(3);
150+expect(skippedEvent.results.map((result) => result.path)).toEqual([
151+"MEMORY.md",
152+"memory/decisoes/2026-06.md",
153+"memory/idiomas/PLANO.md",
154+]);
155+expect(
156+skippedEvent.results.every((result) => result.reason === "non-short-term-memory-path"),
157+).toBe(true);
158+});
159+79160it("records dreaming completion events when phase artifacts are written", async () => {
80161const workspaceDir = await createTempWorkspace("memory-core-dream-events-");
81162此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。