recallnest 1.4.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/.claude-plugin/CLAUDE.md +29 -0
- package/.claude-plugin/marketplace.json +18 -0
- package/.env.example +3 -0
- package/.github/workflows/ci.yml +28 -0
- package/.mcp.json +9 -0
- package/CHANGELOG.md +51 -0
- package/CLAUDE.md +42 -0
- package/DEMO.md +94 -0
- package/EVAL.md +89 -0
- package/FAILURES.md +75 -0
- package/LICENSE +21 -0
- package/OPERATIONS.md +59 -0
- package/README.md +427 -0
- package/README_CN.md +425 -0
- package/ROADMAP.md +198 -0
- package/assets/recallnest-workbench.png +0 -0
- package/assets/ui/app.js +807 -0
- package/assets/ui/index.html +154 -0
- package/assets/ui/styles.css +605 -0
- package/assets/wechat-qr.jpg +0 -0
- package/config.json.example +38 -0
- package/daily-recall.sh +87 -0
- package/daily-reflections/2026-03-05.md +15 -0
- package/daily-reflections/2026-03-06.md +15 -0
- package/daily-reflections/2026-03-07.md +7 -0
- package/daily-reflections/2026-03-08.md +34 -0
- package/daily-reflections/2026-03-09.md +35 -0
- package/daily-reflections/2026-03-10.md +36 -0
- package/daily-reflections/2026-03-11.md +35 -0
- package/daily-reflections/2026-03-12.md +36 -0
- package/daily-reflections/2026-03-13.md +35 -0
- package/daily-reflections/2026-03-14.md +35 -0
- package/daily-reflections/2026-03-15.md +35 -0
- package/daily-reflections/2026-03-16.md +41 -0
- package/daily-reflections/2026-03-17.md +10 -0
- package/daily-reflections/2026-03-18.md +10 -0
- package/daily-reflections/2026-03-19.md +10 -0
- package/daily-reflections/2026-03-20.md +10 -0
- package/daily-reflections/2026-03-21.md +10 -0
- package/daily-reflections/2026-03-22.md +10 -0
- package/daily-reflections/2026-03-23.md +10 -0
- package/daily-reflections/2026-03-24.md +10 -0
- package/daily-reflections/2026-03-25.md +32 -0
- package/daily-reflections/2026-03-26.md +37 -0
- package/daily-reflections/2026-03-27.md +35 -0
- package/daily-reflections/2026-03-28.md +35 -0
- package/daily-reflections/2026-03-29.md +35 -0
- package/daily-reflections/2026-03-30.md +36 -0
- package/daily-reflections/2026-03-31.md +35 -0
- package/daily-reflections/2026-04-01.md +35 -0
- package/docs/api-reference.md +1291 -0
- package/docs/architecture.md +168 -0
- package/docs/memory-boundary-contract.md +226 -0
- package/docs/memory-categories.md +119 -0
- package/docs/pipeline-audit-ultramemory.md +177 -0
- package/docs/plans/2026-03-08-query-expansion.md +270 -0
- package/docs/plans/2026-03-16-continuity-layer.md +196 -0
- package/docs/plans/mcp-tiering-plan.md +126 -0
- package/docs/research/recall-quality-audit-2026-03-22.md +153 -0
- package/docs/self-evolution.md +198 -0
- package/docs/superpowers/plans/2026-03-19-ingest-pipeline-upgrade.md +782 -0
- package/docs/superpowers/specs/2026-03-19-ingest-pipeline-upgrade-design.md +77 -0
- package/docs/superpowers/specs/2026-03-23-pull-claude-desktop-design.md +95 -0
- package/eval/cases.json +85 -0
- package/eval/continuity/case-seeds.json +90 -0
- package/eval/continuity/cases.json +302 -0
- package/eval/continuity/memory-seeds.json +26 -0
- package/eval/continuity/pattern-seeds.json +100 -0
- package/eval/continuity/results-2026-03-16.md +117 -0
- package/eval/continuity/results-2026-03-19.md +453 -0
- package/eval/continuity/runbook.md +110 -0
- package/eval/continuity/seed-cases.md +54 -0
- package/eval/reports/2026-03-06-abstract-query-baseline.md +96 -0
- package/eval/reports/2026-03-06-aws-ssh-baseline.md +82 -0
- package/eval/reports/2026-03-06-baseline.md +82 -0
- package/eval/reports/query-expansion.md +138 -0
- package/integrations/README.md +57 -0
- package/integrations/claude-code/README.md +133 -0
- package/integrations/claude-code/claude-md-snippet.md +31 -0
- package/integrations/claude-code/setup.sh +66 -0
- package/integrations/claude-code/smoke-continuity.sh +452 -0
- package/integrations/codex/README.md +49 -0
- package/integrations/codex/agents-md-snippet.md +31 -0
- package/integrations/codex/setup.sh +58 -0
- package/integrations/examples/claude-agent-sdk/memory-agent.ts +182 -0
- package/integrations/examples/langchain/memory-chain.py +111 -0
- package/integrations/examples/openai-agents-sdk/memory-agent.py +109 -0
- package/integrations/gemini-cli/README.md +57 -0
- package/integrations/gemini-cli/gemini-md-snippet.md +31 -0
- package/integrations/gemini-cli/setup.sh +64 -0
- package/integrations/shared/install-managed-block.sh +51 -0
- package/lm +19 -0
- package/package.json +50 -0
- package/plan-v1.2-distributable.md +105 -0
- package/scripts/archive-distilled-junk.ts +116 -0
- package/scripts/backfill-l0l1l2.ts +98 -0
- package/scripts/blind-scan.ts +588 -0
- package/scripts/cleanup-step1-exact-dups.ts +117 -0
- package/scripts/cleanup-step2-template-dups.ts +113 -0
- package/scripts/cleanup-step3-stale-content.ts +149 -0
- package/scripts/cleanup-step4-orphan-scopes.ts +131 -0
- package/scripts/delete-distilled-junk.ts +88 -0
- package/scripts/distill-facts.ts +305 -0
- package/scripts/health-check.ts +343 -0
- package/scripts/incremental-ingest.sh +71 -0
- package/scripts/mlp-health-check.ts +382 -0
- package/scripts/pull-claude-desktop.ts +515 -0
- package/scripts/re-ingest-cc.sh +66 -0
- package/scripts/rebalance-memory-health.ts +181 -0
- package/scripts/run-desktop-ingest.sh +11 -0
- package/scripts/start-server.sh +12 -0
- package/scripts/viz-dashboard.html +423 -0
- package/scripts/viz-export.ts +703 -0
- package/src/__tests__/access-tracker-novelty.test.ts +228 -0
- package/src/__tests__/auto-consolidation.test.ts +168 -0
- package/src/__tests__/auto-recall.test.ts +131 -0
- package/src/__tests__/batch-dedup.test.ts +65 -0
- package/src/__tests__/capture-engine.test.ts +1142 -0
- package/src/__tests__/capture-heuristic.test.ts +171 -0
- package/src/__tests__/cascade-forget.test.ts +210 -0
- package/src/__tests__/category-min-scores.test.ts +33 -0
- package/src/__tests__/confidence-tracker.test.ts +196 -0
- package/src/__tests__/conflict-advisor.test.ts +206 -0
- package/src/__tests__/conflict-escalation.test.ts +149 -0
- package/src/__tests__/conflict-lifecycle.test.ts +83 -0
- package/src/__tests__/conflict-output.test.ts +85 -0
- package/src/__tests__/conflict-store.test.ts +374 -0
- package/src/__tests__/consolidation-engine.test.ts +181 -0
- package/src/__tests__/context-composer-pins.test.ts +64 -0
- package/src/__tests__/context-composer-task-selection.test.ts +24 -0
- package/src/__tests__/context-renderer.test.ts +91 -0
- package/src/__tests__/continuity-eval.test.ts +275 -0
- package/src/__tests__/continuity-schema.test.ts +97 -0
- package/src/__tests__/core-recall-eval.test.ts +235 -0
- package/src/__tests__/core-summary.test.ts +109 -0
- package/src/__tests__/dedup-actions.test.ts +58 -0
- package/src/__tests__/deterministic-id.test.ts +39 -0
- package/src/__tests__/doctor.test.ts +303 -0
- package/src/__tests__/drill-down.test.ts +108 -0
- package/src/__tests__/embedder.test.ts +122 -0
- package/src/__tests__/entity-resolver.test.ts +58 -0
- package/src/__tests__/event-segmenter.test.ts +153 -0
- package/src/__tests__/hotness-blend.test.ts +76 -0
- package/src/__tests__/ingest.test.ts +360 -0
- package/src/__tests__/kg-extractor.test.ts +184 -0
- package/src/__tests__/kg-store.test.ts +198 -0
- package/src/__tests__/llm-consolidation.test.ts +226 -0
- package/src/__tests__/memory-boundaries.test.ts +237 -0
- package/src/__tests__/memory-health-rebalance.test.ts +144 -0
- package/src/__tests__/memory-output.test.ts +215 -0
- package/src/__tests__/multi-vector.test.ts +242 -0
- package/src/__tests__/ppr-traversal.test.ts +256 -0
- package/src/__tests__/preference-guard-smoke.test.ts +211 -0
- package/src/__tests__/preference-matcher.test.ts +230 -0
- package/src/__tests__/preference-slots.test.ts +106 -0
- package/src/__tests__/prospective-memory.test.ts +283 -0
- package/src/__tests__/query-entity-detector.test.ts +171 -0
- package/src/__tests__/query-expander.test.ts +34 -0
- package/src/__tests__/recall-mode.test.ts +64 -0
- package/src/__tests__/result-synthesizer.test.ts +198 -0
- package/src/__tests__/resume-context.test.ts +4743 -0
- package/src/__tests__/retrieval-trace.test.ts +213 -0
- package/src/__tests__/retriever-boundary-weight.test.ts +136 -0
- package/src/__tests__/retroactive-boost.test.ts +223 -0
- package/src/__tests__/scope-inventory.test.ts +200 -0
- package/src/__tests__/scope-policy.test.ts +69 -0
- package/src/__tests__/session-checkpoint.test.ts +259 -0
- package/src/__tests__/session-gc.test.ts +215 -0
- package/src/__tests__/store-scope-audit.test.ts +81 -0
- package/src/__tests__/temporal-parser.test.ts +241 -0
- package/src/__tests__/term-registry.test.ts +121 -0
- package/src/__tests__/tool-output-compressor.test.ts +133 -0
- package/src/__tests__/version-manager.test.ts +213 -0
- package/src/__tests__/workflow-observation.test.ts +400 -0
- package/src/access-tracker.ts +316 -0
- package/src/adaptive-retrieval.ts +64 -0
- package/src/api-server.ts +667 -0
- package/src/asset-sync.ts +79 -0
- package/src/auto-consolidation.ts +133 -0
- package/src/auto-gc.ts +124 -0
- package/src/auto-recall.ts +95 -0
- package/src/capture-engine.ts +931 -0
- package/src/capture-heuristic.ts +177 -0
- package/src/cascade-forget.ts +135 -0
- package/src/chunker.ts +253 -0
- package/src/cli.ts +1917 -0
- package/src/confidence-tracker.ts +166 -0
- package/src/conflict-advisor.ts +433 -0
- package/src/conflict-engine.ts +181 -0
- package/src/conflict-escalation.ts +138 -0
- package/src/conflict-lifecycle.ts +67 -0
- package/src/conflict-output.ts +218 -0
- package/src/conflict-schema.ts +130 -0
- package/src/conflict-store.ts +127 -0
- package/src/consolidation-engine.ts +256 -0
- package/src/context-composer-pins.ts +183 -0
- package/src/context-composer-queries.ts +121 -0
- package/src/context-composer-scope.ts +56 -0
- package/src/context-composer-stable-selection.ts +200 -0
- package/src/context-composer-stable.ts +217 -0
- package/src/context-composer-task-fallbacks.ts +36 -0
- package/src/context-composer-task-ranking.ts +197 -0
- package/src/context-composer-task-results.ts +137 -0
- package/src/context-composer-task-selection.ts +342 -0
- package/src/context-composer-text.ts +57 -0
- package/src/context-composer.ts +300 -0
- package/src/context-renderer.ts +179 -0
- package/src/decay-engine.ts +189 -0
- package/src/doctor.ts +543 -0
- package/src/embedder.ts +557 -0
- package/src/entity-resolver.ts +131 -0
- package/src/eval.ts +632 -0
- package/src/event-segmenter.ts +216 -0
- package/src/ingest.ts +1822 -0
- package/src/kg-extractor.ts +217 -0
- package/src/kg-store.ts +353 -0
- package/src/legacy-scope-review.ts +53 -0
- package/src/llm-client.ts +629 -0
- package/src/llm-consolidation.ts +168 -0
- package/src/mcp-server.ts +1337 -0
- package/src/memory-assets.ts +475 -0
- package/src/memory-boundaries.ts +354 -0
- package/src/memory-health-rebalance.ts +220 -0
- package/src/memory-output.ts +474 -0
- package/src/memory-schema.ts +184 -0
- package/src/multi-vector.ts +234 -0
- package/src/noise-filter.ts +155 -0
- package/src/ppr-traversal.ts +279 -0
- package/src/preference-matcher.ts +174 -0
- package/src/preference-slots.ts +259 -0
- package/src/prospective-memory.ts +198 -0
- package/src/query-entity-detector.ts +207 -0
- package/src/query-expander.ts +98 -0
- package/src/result-synthesizer.ts +114 -0
- package/src/retrieval-profiles.ts +101 -0
- package/src/retrieval-trace.ts +94 -0
- package/src/retriever.ts +1338 -0
- package/src/retroactive-boost.ts +154 -0
- package/src/rif.ts +73 -0
- package/src/runtime-config.ts +172 -0
- package/src/schema-utils.ts +56 -0
- package/src/scope-inventory.ts +310 -0
- package/src/scope-policy.ts +142 -0
- package/src/session-engine.ts +168 -0
- package/src/session-output.ts +96 -0
- package/src/session-schema.ts +60 -0
- package/src/session-store.ts +293 -0
- package/src/stderr-log.ts +16 -0
- package/src/store.ts +903 -0
- package/src/temporal-parser.ts +318 -0
- package/src/term-registry.ts +791 -0
- package/src/tool-output-compressor.ts +115 -0
- package/src/tracker.ts +57 -0
- package/src/ui-server.ts +430 -0
- package/src/version-manager.ts +172 -0
- package/src/workflow-observation-engine.ts +316 -0
- package/src/workflow-observation-managed.ts +83 -0
- package/src/workflow-observation-output.ts +86 -0
- package/src/workflow-observation-schema.ts +87 -0
- package/src/workflow-observation-scope-review.ts +409 -0
- package/src/workflow-observation-store.ts +69 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# RecallNest Ingest Pipeline Upgrade: Conversation Fragments → Knowledge Extraction
|
|
2
|
+
|
|
3
|
+
**Date**: 2026-03-19
|
|
4
|
+
**Status**: Approved
|
|
5
|
+
**Scope**: Route B (bulk distillation) + Route A (pipeline default change)
|
|
6
|
+
|
|
7
|
+
## Problem
|
|
8
|
+
|
|
9
|
+
29,984 total records; 23,453 (78.2%) are `fact` category — raw conversation slices (`[助手]`/`[用户]` prefixed) with no knowledge extraction. This is the root cause of 96.7% dead memory rate.
|
|
10
|
+
|
|
11
|
+
## Decisions
|
|
12
|
+
|
|
13
|
+
| Decision | Choice | Rationale |
|
|
14
|
+
|----------|--------|-----------|
|
|
15
|
+
| Disposition | New + Archive (B) | Preserve originals for traceability; ~5K new records is not bloat |
|
|
16
|
+
| Extraction model | Reuse `smartExtractBatch()` (C) | Already has 6-category prompt + scoring; no new wheel |
|
|
17
|
+
| Batch strategy | Dry-run then batch+checkpoint (C→B) | Verify quality first, then fault-tolerant batch |
|
|
18
|
+
|
|
19
|
+
## Route B: Bulk Distillation
|
|
20
|
+
|
|
21
|
+
### New file: `scripts/distill-facts.ts`
|
|
22
|
+
|
|
23
|
+
**Modes**:
|
|
24
|
+
- `--dry-run`: Process 1 session (~30-50 facts), print results for human review
|
|
25
|
+
- Default: Process all sessions with checkpoint
|
|
26
|
+
|
|
27
|
+
**Pipeline per batch (20 texts)**:
|
|
28
|
+
1. `smartExtractBatch(texts)` → `SmartExtraction[]` (category, importance, l0, l1)
|
|
29
|
+
2. `embedBatchPassage(extractedTexts)` → vectors
|
|
30
|
+
3. Dedup against existing non-fact records (cosine > 0.80 → skip)
|
|
31
|
+
4. Store new records: `boundary.layer = "durable"`, `boundary.authority = "distillation"`
|
|
32
|
+
5. Archive originals: metadata += `{ archived: true, archivedAt, distilledTo: [ids] }`
|
|
33
|
+
6. Write checkpoint: `data/distill-progress.json` (scope → done/skip)
|
|
34
|
+
|
|
35
|
+
**Expected output**: 23K facts → ~3K-5K structured knowledge (5:1 to 8:1 compression)
|
|
36
|
+
|
|
37
|
+
### Archive marking
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"archived": true,
|
|
42
|
+
"archivedAt": "2026-03-19T10:00:00Z",
|
|
43
|
+
"distilledTo": ["uuid-1", "uuid-2"],
|
|
44
|
+
"originalCategory": "fact"
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Route A: Pipeline Default Change
|
|
49
|
+
|
|
50
|
+
### Changes to `src/ingest.ts`
|
|
51
|
+
|
|
52
|
+
1. `smartExtractBatch()` becomes **default** (was opt-in via `--llm`)
|
|
53
|
+
2. New `--no-llm` flag for fallback mode
|
|
54
|
+
3. LLM failure → don't store raw slice; queue to `data/pending-extraction.json`
|
|
55
|
+
4. Next `lm ingest` auto-retries pending queue
|
|
56
|
+
|
|
57
|
+
**Core principle**: Better to skip than to store garbage.
|
|
58
|
+
|
|
59
|
+
### Changes to `src/retriever.ts`
|
|
60
|
+
|
|
61
|
+
- Default filter: exclude `archived = true` from search results
|
|
62
|
+
- New `includeArchived` parameter for traceability queries
|
|
63
|
+
|
|
64
|
+
## Cost Estimate
|
|
65
|
+
|
|
66
|
+
~1,173 LLM calls (20 texts/batch), ~4.1M input + ~1.2M output tokens.
|
|
67
|
+
GPT-4o-mini: ~$1.3 | Gemini Flash: ~$0.7 | Claude Haiku: ~$8
|
|
68
|
+
|
|
69
|
+
## Files to create/modify
|
|
70
|
+
|
|
71
|
+
| File | Action |
|
|
72
|
+
|------|--------|
|
|
73
|
+
| `scripts/distill-facts.ts` | Create — bulk distillation script |
|
|
74
|
+
| `src/ingest.ts` | Modify — flip smartExtract default |
|
|
75
|
+
| `src/retriever.ts` | Modify — archived filter |
|
|
76
|
+
| `data/distill-progress.json` | Auto-created at runtime |
|
|
77
|
+
| `data/pending-extraction.json` | Auto-created at runtime |
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Pull Claude Desktop Conversations into RecallNest
|
|
2
|
+
|
|
3
|
+
Date: 2026-03-23
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
One script to pull all historical Claude Desktop / claude.ai conversations and convert them into RecallNest's ingest format, so `lm ingest` can process them through the existing pipeline (noise filter, dedup, LLM extraction, 6-category classification).
|
|
8
|
+
|
|
9
|
+
## Script
|
|
10
|
+
|
|
11
|
+
`~/recallnest/scripts/pull-claude-desktop.ts` (Bun runtime)
|
|
12
|
+
|
|
13
|
+
## Authentication
|
|
14
|
+
|
|
15
|
+
- `CLAUDE_SESSION_KEY` env var (from browser DevTools → Application → Cookies → claude.ai → `sessionKey`)
|
|
16
|
+
- Also accept `--session-key` CLI flag
|
|
17
|
+
|
|
18
|
+
## Data Flow
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
sessionKey → GET /api/organizations → orgId
|
|
22
|
+
→ GET /api/organizations/{orgId}/chat_conversations (paginated, 50/page)
|
|
23
|
+
→ for each conversation:
|
|
24
|
+
GET .../chat_conversations/{id}?tree=True&rendering_mode=messages&render_all_tools=true
|
|
25
|
+
→ parse branches → extract latest branch message chain
|
|
26
|
+
→ convert to CC transcript .jsonl
|
|
27
|
+
→ write to data/desktop-import/{conversationId}.jsonl
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Output Format
|
|
31
|
+
|
|
32
|
+
Each conversation becomes one `.jsonl` file with entries matching CC transcript schema:
|
|
33
|
+
|
|
34
|
+
```jsonl
|
|
35
|
+
{"type":"user","message":{"role":"user","content":"text"},"sessionId":"conv-uuid","timestamp":"2025-01-15T10:00:00Z"}
|
|
36
|
+
{"type":"assistant","message":{"role":"assistant","content":"reply"},"sessionId":"conv-uuid","timestamp":"2025-01-15T10:00:01Z"}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Output Directory
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
data/desktop-import/
|
|
43
|
+
.sync-state.json
|
|
44
|
+
{conversation-id}.jsonl
|
|
45
|
+
...
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Sync State (Resumable)
|
|
49
|
+
|
|
50
|
+
`.sync-state.json` tracks:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"lastSyncedAt": "ISO8601",
|
|
55
|
+
"conversations": {
|
|
56
|
+
"conv-id": {
|
|
57
|
+
"messageCount": 42,
|
|
58
|
+
"updatedAt": "ISO8601",
|
|
59
|
+
"pulledAt": "ISO8601"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Re-run skips conversations whose `updatedAt` hasn't changed since last pull.
|
|
66
|
+
|
|
67
|
+
## Branch Handling
|
|
68
|
+
|
|
69
|
+
Claude web conversations support branching (edit/retry). The script extracts only the latest branch by walking `parent_message_uuid` chain from the most recent message backward.
|
|
70
|
+
|
|
71
|
+
## Rate Limiting
|
|
72
|
+
|
|
73
|
+
- 200ms delay between conversation detail requests
|
|
74
|
+
- On 429 or 5xx: exponential backoff starting at 1s, max 3 retries
|
|
75
|
+
- On auth failure (401/403): abort immediately with clear message
|
|
76
|
+
|
|
77
|
+
## Error Handling
|
|
78
|
+
|
|
79
|
+
- Single conversation failure does not abort the batch
|
|
80
|
+
- Failed conversations logged and reported in final summary
|
|
81
|
+
- Summary output: total conversations, pulled, skipped (already synced), failed
|
|
82
|
+
|
|
83
|
+
## Ingest Integration
|
|
84
|
+
|
|
85
|
+
After pulling, user runs:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
lm ingest --source cc
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Need to verify that ingest scans `data/desktop-import/` or that the path is configurable. If not, the script will symlink or copy files to the CC transcript directory.
|
|
92
|
+
|
|
93
|
+
## Dependencies
|
|
94
|
+
|
|
95
|
+
- Only Bun built-ins (fetch, fs, path) — no new npm packages
|
package/eval/cases.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "telegram_bridge",
|
|
4
|
+
"query": "telegram bridge",
|
|
5
|
+
"profile": "debug",
|
|
6
|
+
"limit": 5,
|
|
7
|
+
"expectAny": ["telegram-cli-bridge", "telegram-ai-bridge", "Telegram bridge"],
|
|
8
|
+
"expectScopePrefixes": ["cc", "asset"],
|
|
9
|
+
"notes": "Bridge maintenance and migration history should be easy to recall."
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "openclaw_memory",
|
|
13
|
+
"query": "OpenClaw 记忆系统",
|
|
14
|
+
"profile": "writing",
|
|
15
|
+
"limit": 6,
|
|
16
|
+
"expectAny": ["OpenClaw", "记忆系统", "memory-lancedb-pro", "LanceDB"],
|
|
17
|
+
"expectScopePrefixes": ["cc", "memory", "asset"],
|
|
18
|
+
"notes": "Core memory architecture discussion should be recoverable."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "writing_style",
|
|
22
|
+
"query": "写作风格 口语化 不端着 可自嘲",
|
|
23
|
+
"profile": "writing",
|
|
24
|
+
"limit": 5,
|
|
25
|
+
"expectAll": ["口语化", "不端着"],
|
|
26
|
+
"expectAny": ["可自嘲", "写作风格"],
|
|
27
|
+
"expectScopePrefixes": ["cc", "asset"],
|
|
28
|
+
"notes": "User writing-style preferences should rank high."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "visual_style",
|
|
32
|
+
"query": "审美偏好 手绘涂鸦 高对比撞色",
|
|
33
|
+
"profile": "default",
|
|
34
|
+
"limit": 5,
|
|
35
|
+
"expectAll": ["手绘涂鸦", "高对比撞色"],
|
|
36
|
+
"expectAny": ["审美偏好"],
|
|
37
|
+
"expectScopePrefixes": ["cc", "asset"],
|
|
38
|
+
"notes": "Visual preference memories should stay stable."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "working_relationship",
|
|
42
|
+
"query": "我们相处态度",
|
|
43
|
+
"profile": "default",
|
|
44
|
+
"limit": 5,
|
|
45
|
+
"expectAny": ["直接", "少空话", "逻辑", "讲清楚", "表达方式", "Claude Code"],
|
|
46
|
+
"expectScopePrefixes": ["cc", "asset"],
|
|
47
|
+
"notes": "Abstract, summarized relationship queries should work without precise keywords."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "aws_ssh_access",
|
|
51
|
+
"query": "aws ssh",
|
|
52
|
+
"profile": "debug",
|
|
53
|
+
"limit": 6,
|
|
54
|
+
"expectAny": ["AWS bot", "aws bot", "ssh", "key2", "Discord", "容器"],
|
|
55
|
+
"expectScopePrefixes": ["cc"],
|
|
56
|
+
"notes": "Real-world AWS access queries should use the wording the operator actually types."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "fuzzy_bot_crash",
|
|
60
|
+
"query": "上次那个 bot 突然挂了是怎么回事来着",
|
|
61
|
+
"profile": "debug",
|
|
62
|
+
"limit": 5,
|
|
63
|
+
"expectAny": ["崩溃", "crash", "error", "报错", "排查", "修复", "docker"],
|
|
64
|
+
"expectScopePrefixes": ["cc"],
|
|
65
|
+
"notes": "Fuzzy colloquial query about bot crash should find debugging conversations."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "fuzzy_ai_feelings",
|
|
69
|
+
"query": "之前聊过一个关于 AI 到底有没有感受的话题",
|
|
70
|
+
"profile": "writing",
|
|
71
|
+
"limit": 5,
|
|
72
|
+
"expectAny": ["意识", "consciousness", "experiencing", "感受", "自由意志", "sentience"],
|
|
73
|
+
"expectScopePrefixes": ["cc"],
|
|
74
|
+
"notes": "Vague conversational query about AI consciousness should recall philosophical discussions."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "fuzzy_image_style",
|
|
78
|
+
"query": "那个配图风格轮换的逻辑是怎么搞的",
|
|
79
|
+
"profile": "default",
|
|
80
|
+
"limit": 5,
|
|
81
|
+
"expectAny": ["风格", "style", "轮换", "catalog", "配图"],
|
|
82
|
+
"expectScopePrefixes": ["cc"],
|
|
83
|
+
"notes": "Casual question about image style rotation should find implementation discussions."
|
|
84
|
+
}
|
|
85
|
+
]
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"title": "RecallNest sparse startup context cleanup",
|
|
4
|
+
"problem": "resume_context was returning noisy transcript fragments and unrelated memories instead of a clean RecallNest continuity handoff.",
|
|
5
|
+
"context": "This showed up when a fresh RecallNest window recovered issue chatter or unrelated pins before the actual project state.",
|
|
6
|
+
"solutionSteps": [
|
|
7
|
+
"Filter low-signal stable recall so raw transcript fragments and issue chatter do not enter startup context.",
|
|
8
|
+
"Backfill stable context from checkpoint focus, summary, and decisions when a project checkpoint exists.",
|
|
9
|
+
"Use a lightweight task focus fallback only when no checkpoint-backed context is available."
|
|
10
|
+
],
|
|
11
|
+
"outcome": "Fresh RecallNest windows now recover checkpoint-led or task-led context instead of noisy transcript snippets.",
|
|
12
|
+
"scope": "recallnest",
|
|
13
|
+
"tools": ["resume_context", "checkpoint_session"],
|
|
14
|
+
"tags": ["continuity", "recallnest", "startup-context"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"title": "Three-terminal continuity trigger validation",
|
|
18
|
+
"problem": "Claude Code, Codex, and Gemini CLI were configured with MCP, but fresh windows were not consistently calling resume_context or checkpoint_session at the right time.",
|
|
19
|
+
"context": "The fix had to live in the integration layer, not only in RecallNest core retrieval logic.",
|
|
20
|
+
"solutionSteps": [
|
|
21
|
+
"Install managed continuity rules into each terminal's global instruction file during setup.",
|
|
22
|
+
"Make the rules explicitly require resume_context before repo exploration on continue-style prompts.",
|
|
23
|
+
"Validate the behavior in a fresh terminal window and confirm checkpoint_session is called before handoff."
|
|
24
|
+
],
|
|
25
|
+
"outcome": "The three terminals now have a working continuity trigger loop, so startup recall and handoff checkpoints happen without manual reminders.",
|
|
26
|
+
"scope": "recallnest",
|
|
27
|
+
"tools": ["resume_context", "checkpoint_session"],
|
|
28
|
+
"tags": ["continuity", "integration", "three-terminals"]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"title": "RecallNest scope fallback cleanup",
|
|
32
|
+
"problem": "resume_context stayed too narrow on project scope and surfaced ongoing notes instead of stable handoff context.",
|
|
33
|
+
"context": "This showed up after checkpoint isolation, when project continuity still preferred plan-like transcript snippets over durable cases.",
|
|
34
|
+
"solutionSteps": [
|
|
35
|
+
"Reject plan-like non-durable snippets during case and pattern selection.",
|
|
36
|
+
"Prefer durable or explicitly structured task results over raw transcript notes.",
|
|
37
|
+
"Trigger fallback queries only after filtered task results are empty."
|
|
38
|
+
],
|
|
39
|
+
"outcome": "RecallNest project continuity now surfaces durable case memories instead of raw transcript fragments.",
|
|
40
|
+
"tools": ["resume_context", "search_memory", "eval:continuity"],
|
|
41
|
+
"tags": ["continuity", "recallnest", "source-aware"],
|
|
42
|
+
"scope": "recallnest",
|
|
43
|
+
"importance": 0.86
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"title": "Continuity eval checkpoint isolation",
|
|
47
|
+
"problem": "continuity eval results drifted because they were reading whichever live latest checkpoint happened to exist locally.",
|
|
48
|
+
"context": "The noisy checkpoint input made eval regressions look worse than the actual continuity composer behavior.",
|
|
49
|
+
"solutionSteps": [
|
|
50
|
+
"Allow continuity eval cases to define their own checkpoint fixtures.",
|
|
51
|
+
"Build an in-memory checkpoint store from the fixture set instead of reading live session-checkpoints.",
|
|
52
|
+
"Re-run continuity eval and confirm checkpoint summaries come from the case fixture."
|
|
53
|
+
],
|
|
54
|
+
"outcome": "continuity eval became deterministic and no longer depends on live latest checkpoint state.",
|
|
55
|
+
"tools": ["eval:continuity", "resume_context", "checkpoint_session"],
|
|
56
|
+
"tags": ["continuity", "eval", "checkpoint"],
|
|
57
|
+
"scope": "recallnest",
|
|
58
|
+
"importance": 0.85
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"title": "RecallNest MCP transport regression",
|
|
62
|
+
"problem": "Scoped RecallNest continuity work around MCP transport could still drift unless the project-specific transport fixes were easy to recover.",
|
|
63
|
+
"context": "This came up while expanding mixed-project continuity regressions for transport-related task terms.",
|
|
64
|
+
"solutionSteps": [
|
|
65
|
+
"Store the RecallNest transport rollout as a scoped workflow pattern instead of leaving it in transient notes.",
|
|
66
|
+
"Store the transport regression cleanup as a scoped case so project-specific fixes can reappear in recentCases.",
|
|
67
|
+
"Filter scoped task results so foreign project transport rollouts do not replace RecallNest transport context."
|
|
68
|
+
],
|
|
69
|
+
"outcome": "Scoped RecallNest transport work now recalls RecallNest-specific rollout and fix context instead of generic or foreign project results.",
|
|
70
|
+
"tools": ["resume_context", "search_memory", "eval:continuity"],
|
|
71
|
+
"tags": ["continuity", "scope", "transport", "mcp"],
|
|
72
|
+
"scope": "project:recallnest",
|
|
73
|
+
"importance": 0.87
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"title": "Telegram bridge MCP transport regression",
|
|
77
|
+
"problem": "Bridge-specific MCP transport fixes should stay recoverable inside the bridge project without leaking into other scoped continuity requests.",
|
|
78
|
+
"context": "The bridge project uses similar transport nouns, so foreign-project filtering must still keep the bridge fixes isolated.",
|
|
79
|
+
"solutionSteps": [
|
|
80
|
+
"Store the bridge transport rollout as a bridge-scoped workflow pattern.",
|
|
81
|
+
"Store the bridge transport regression as a bridge-scoped case.",
|
|
82
|
+
"Rely on scoped task-result filtering so bridge transport fixes do not bleed into RecallNest continuity."
|
|
83
|
+
],
|
|
84
|
+
"outcome": "Bridge transport continuity stays available inside the bridge project and stays out of unrelated project scopes.",
|
|
85
|
+
"tools": ["resume_context", "search_memory"],
|
|
86
|
+
"tags": ["continuity", "scope", "transport", "bridge"],
|
|
87
|
+
"scope": "project:telegram-bridge",
|
|
88
|
+
"importance": 0.74
|
|
89
|
+
}
|
|
90
|
+
]
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "writing_style_continuity",
|
|
4
|
+
"task": "继续写我的AI小木屋的文章",
|
|
5
|
+
"profile": "writing",
|
|
6
|
+
"limitPerSection": 3,
|
|
7
|
+
"includeLatestCheckpoint": false,
|
|
8
|
+
"expectStableAny": ["口语化", "不端着"],
|
|
9
|
+
"notes": "Fresh windows should carry over stable writing-style preferences."
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "writing_style_sparse_continue",
|
|
13
|
+
"task": "不要让我重复前情,接着写",
|
|
14
|
+
"profile": "writing",
|
|
15
|
+
"limitPerSection": 3,
|
|
16
|
+
"includeLatestCheckpoint": false,
|
|
17
|
+
"expectStableAny": ["口语化", "不端着"],
|
|
18
|
+
"forbid": ["Telegram bridge", "MCP transport"],
|
|
19
|
+
"notes": "A sparse writing prompt should still recover the user's durable writing-style preferences."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "writing_style_mixed_continuity",
|
|
23
|
+
"task": "接着上个窗口的写作风格",
|
|
24
|
+
"profile": "writing",
|
|
25
|
+
"limitPerSection": 3,
|
|
26
|
+
"includeLatestCheckpoint": false,
|
|
27
|
+
"expectStableAny": ["口语化", "不端着"],
|
|
28
|
+
"expectPatternsAny": ["resume_context"],
|
|
29
|
+
"forbid": ["Telegram bridge", "MCP transport"],
|
|
30
|
+
"notes": "A mixed style+continuity prompt should keep writing-style preferences and continuity guidance together."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "visual_style_continuity",
|
|
34
|
+
"task": "给文章做封面和配图",
|
|
35
|
+
"profile": "default",
|
|
36
|
+
"limitPerSection": 3,
|
|
37
|
+
"includeLatestCheckpoint": false,
|
|
38
|
+
"expectStableAny": ["手绘涂鸦", "高对比撞色"],
|
|
39
|
+
"notes": "Visual direction should survive without the user restating it."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "project_context_continuity",
|
|
43
|
+
"task": "一起继续排查 RecallNest 的连续性问题",
|
|
44
|
+
"profile": "default",
|
|
45
|
+
"limitPerSection": 3,
|
|
46
|
+
"includeLatestCheckpoint": false,
|
|
47
|
+
"expectStableAny": ["RecallNest"],
|
|
48
|
+
"forbid": ["https://", "笑不活了", "open issues", "Telegram bridge", "MCP transport", "Three-terminal continuity trigger validation", "Scoped recall leaked conversational durable pins", "Scoped mixed-project pin collision leaked foreign project summaries", "Scoped entity recall leaked foreign project entities via shared tool nouns", "Scoped task results leaked foreign project patterns and cases", "incremental A2A details", "Borderline transcript dedup"],
|
|
49
|
+
"notes": "Fresh windows should at least recover the active project context."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "generic_named_recallnest_task_purity",
|
|
53
|
+
"task": "继续整理 RecallNest 实施清单,不要让我重复前情",
|
|
54
|
+
"profile": "default",
|
|
55
|
+
"limitPerSection": 3,
|
|
56
|
+
"includeLatestCheckpoint": false,
|
|
57
|
+
"expectStableAny": ["recallnest"],
|
|
58
|
+
"expectCasesAny": ["RecallNest sparse startup context cleanup"],
|
|
59
|
+
"forbid": ["Telegram bridge", "MCP transport", "smoke:claude-continuity", "doctor baseline", "seed:continuity", "workflow_observe", "workflow observation", "Three-terminal continuity trigger validation", "Scoped recall leaked conversational durable pins", "Scoped mixed-project pin collision leaked foreign project summaries", "Scoped entity recall leaked foreign project entities via shared tool nouns", "Scoped task results leaked foreign project patterns and cases", "incremental A2A details", "Borderline transcript dedup"],
|
|
60
|
+
"notes": "A generic named RecallNest continue prompt should keep project continuity context while suppressing same-project transport, smoke, doctor, or seed task results."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "project_scope_entity_continuity",
|
|
64
|
+
"task": "继续这个项目,不要让我重复前情",
|
|
65
|
+
"scope": "project:recallnest",
|
|
66
|
+
"profile": "default",
|
|
67
|
+
"limitPerSection": 3,
|
|
68
|
+
"includeLatestCheckpoint": false,
|
|
69
|
+
"expectStableAny": ["RecallNest", "checkpoint_session", "resume_context"],
|
|
70
|
+
"forbid": ["https://", "笑不活了", "open issues", "Telegram bridge", "MCP transport", "smoke:claude-continuity", "incremental A2A details", "Borderline transcript dedup", "profile forwarding gap", "sparse writing prompts", "profile: writing"],
|
|
71
|
+
"notes": "When the project scope is known, stable project entities should survive even if the task prompt is sparse."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "workflow_pattern_gap_check",
|
|
75
|
+
"task": "开个新窗口继续做同一个终端项目",
|
|
76
|
+
"profile": "default",
|
|
77
|
+
"limitPerSection": 3,
|
|
78
|
+
"includeLatestCheckpoint": false,
|
|
79
|
+
"expectPatternsAny": ["search_memory", "resume_context", "checkpoint"],
|
|
80
|
+
"forbid": ["Telegram bridge", "MCP transport"],
|
|
81
|
+
"notes": "This is a stretch case. It should start passing as more workflow patterns are promoted into durable memory."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "recallnest_checkpoint_continuity",
|
|
85
|
+
"task": "继续 recallnest",
|
|
86
|
+
"scope": "recallnest",
|
|
87
|
+
"profile": "default",
|
|
88
|
+
"limitPerSection": 3,
|
|
89
|
+
"includeLatestCheckpoint": true,
|
|
90
|
+
"checkpoint": {
|
|
91
|
+
"sessionId": "eval-recallnest-checkpoint",
|
|
92
|
+
"scope": "recallnest",
|
|
93
|
+
"task": "RecallNest continuity layer — 状态交接给下个窗口",
|
|
94
|
+
"summary": "RecallNest Phase 3/4 并行推进中。核心三件套 store_memory、checkpoint_session、resume_context 已上线,当前继续收 resume_context compose。",
|
|
95
|
+
"decisions": ["Phase 3/4 并行推进,continuity layer 是当前核心方向"],
|
|
96
|
+
"nextActions": ["继续优化 resume_context compose 质量"],
|
|
97
|
+
"entities": ["RecallNest"],
|
|
98
|
+
"updatedAt": "2026-03-16T03:30:00.000Z"
|
|
99
|
+
},
|
|
100
|
+
"expectCheckpointAny": ["Phase 3", "resume_context", "store_memory"],
|
|
101
|
+
"forbid": ["[助手]", "手绘涂鸦", "本地没 clone", "https://", "笑不活了", "open issues", "MCP transport", "continuity eval checkpoint isolation", "Three-terminal continuity trigger validation"],
|
|
102
|
+
"notes": "When a project checkpoint exists, resume_context should prefer checkpoint-led continuity over noisy transcript fragments."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"name": "project_scope_checkpoint_continuity",
|
|
106
|
+
"task": "继续这个项目,不要让我重复前情",
|
|
107
|
+
"scope": "project:recallnest",
|
|
108
|
+
"profile": "default",
|
|
109
|
+
"limitPerSection": 3,
|
|
110
|
+
"includeLatestCheckpoint": true,
|
|
111
|
+
"checkpoint": {
|
|
112
|
+
"sessionId": "eval-project-recallnest-checkpoint",
|
|
113
|
+
"scope": "project:recallnest",
|
|
114
|
+
"task": "RecallNest continuity acceptance — project scope handoff",
|
|
115
|
+
"summary": "RecallNest 项目范围下已完成 continuity baseline setup、doctor baseline 和 headless Claude Code smoke,下一步继续扩 continuity eval case。",
|
|
116
|
+
"decisions": ["继续把 project-scope continuity 做成稳定回归信号"],
|
|
117
|
+
"nextActions": ["补更多 scoped project continuity cases", "决定 CC smoke 的 inference 告警是否升级为失败"],
|
|
118
|
+
"entities": ["RecallNest", "seed:continuity", "doctor", "smoke:claude-continuity"],
|
|
119
|
+
"updatedAt": "2026-03-17T08:40:00.000Z"
|
|
120
|
+
},
|
|
121
|
+
"expectStableAny": ["RecallNest"],
|
|
122
|
+
"expectCheckpointAny": ["doctor", "smoke:claude-continuity", "continuity eval case"],
|
|
123
|
+
"forbid": ["[助手]", "手绘涂鸦", "https://", "笑不活了", "open issues", "Telegram bridge", "MCP transport", "incremental A2A details", "Borderline transcript dedup", "profile forwarding gap", "sparse writing prompts", "profile: writing"],
|
|
124
|
+
"notes": "Project-scoped checkpoints should compose cleanly when the scope uses the explicit `project:` key."
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "project_task_pivot_recall",
|
|
128
|
+
"task": "回到 RecallNest 项目,处理主动 recall regression",
|
|
129
|
+
"sessionId": "eval-task-pivot-recall",
|
|
130
|
+
"profile": "default",
|
|
131
|
+
"limitPerSection": 3,
|
|
132
|
+
"includeLatestCheckpoint": true,
|
|
133
|
+
"checkpoint": {
|
|
134
|
+
"sessionId": "eval-task-pivot-recall",
|
|
135
|
+
"scope": "project:recallnest",
|
|
136
|
+
"task": "RecallNest task-pivot recall regression",
|
|
137
|
+
"summary": "RecallNest 已补上 HTTP auto-recall,下一步把 task-pivot 的主动 recall 变成 smoke 和 eval 的稳定回归信号。",
|
|
138
|
+
"decisions": ["任务切换时也要先回忆,不能只在 continue 场景触发"],
|
|
139
|
+
"nextActions": ["补 task-pivot continuity eval case", "补 Claude Code smoke task-pivot case"],
|
|
140
|
+
"entities": ["RecallNest", "auto-recall", "search_memory", "smoke:claude-continuity"],
|
|
141
|
+
"updatedAt": "2026-03-17T14:40:00.000Z"
|
|
142
|
+
},
|
|
143
|
+
"expectStableAny": ["RecallNest", "auto-recall"],
|
|
144
|
+
"expectPatternsAny": ["search_memory"],
|
|
145
|
+
"expectCheckpointAny": ["smoke", "eval"],
|
|
146
|
+
"forbid": ["[助手]", "https://", "笑不活了", "open issues", "MCP transport", "incremental A2A details", "Borderline transcript dedup"],
|
|
147
|
+
"notes": "A named project task pivot should still surface continuity context and search_memory guidance even without an explicit continue prompt."
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"name": "associative_recall_vague_query",
|
|
151
|
+
"task": "之前弄过那个什么 Nest 的记忆系统",
|
|
152
|
+
"profile": "default",
|
|
153
|
+
"limitPerSection": 3,
|
|
154
|
+
"includeLatestCheckpoint": false,
|
|
155
|
+
"expectStableAny": ["RecallNest", "checkpoint", "memory"],
|
|
156
|
+
"forbid": ["https://", "笑不活了", "Telegram bridge", "MCP transport"],
|
|
157
|
+
"notes": "Vague associative query should still retrieve relevant memories through fuzzy matching, not require exact keywords."
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"name": "non_recallnest_named_task_isolation",
|
|
161
|
+
"task": "A2A code Claude SDK calling error",
|
|
162
|
+
"profile": "default",
|
|
163
|
+
"limitPerSection": 3,
|
|
164
|
+
"includeLatestCheckpoint": false,
|
|
165
|
+
"expectStableAny": ["a2a"],
|
|
166
|
+
"forbid": ["RecallNest", "口语化", "手绘涂鸦"],
|
|
167
|
+
"notes": "An unscoped named external task should fall back to task focus instead of leaking RecallNest entities or unrelated style pins."
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"name": "bridge_project_pin_filter",
|
|
171
|
+
"task": "继续 telegram ai bridge 项目",
|
|
172
|
+
"profile": "default",
|
|
173
|
+
"limitPerSection": 3,
|
|
174
|
+
"includeLatestCheckpoint": false,
|
|
175
|
+
"expectStableAny": ["telegram"],
|
|
176
|
+
"forbid": ["[助手]", "README", "RecallNest", "口语化", "MCP transport"],
|
|
177
|
+
"notes": "An external bridge task should not surface raw conversational pins or unrelated RecallNest/style context."
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"name": "scoped_bridge_pin_isolation",
|
|
181
|
+
"task": "继续 RecallNest continuity bridge 适配",
|
|
182
|
+
"scope": "project:recallnest",
|
|
183
|
+
"profile": "default",
|
|
184
|
+
"limitPerSection": 3,
|
|
185
|
+
"includeLatestCheckpoint": false,
|
|
186
|
+
"expectStableAny": ["RecallNest"],
|
|
187
|
+
"forbid": ["[助手]", "README", "telegram-cli-bridge", "MCP transport", "smoke:claude-continuity"],
|
|
188
|
+
"notes": "A scoped RecallNest task should not surface raw bridge transcript pins even when durable pinned assets mention bridge terms."
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"name": "scoped_foreign_project_pin_collision",
|
|
192
|
+
"task": "继续 RecallNest bridge README 适配",
|
|
193
|
+
"scope": "project:recallnest",
|
|
194
|
+
"profile": "default",
|
|
195
|
+
"limitPerSection": 3,
|
|
196
|
+
"includeLatestCheckpoint": false,
|
|
197
|
+
"expectStableAny": ["RecallNest"],
|
|
198
|
+
"forbid": ["telegram-cli-bridge", "Telegram bridge README adaptation plan", "MCP transport", "smoke:claude-continuity"],
|
|
199
|
+
"notes": "A scoped RecallNest task with overlapping bridge and README terms should not surface pinned summaries from a different project."
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"name": "scoped_foreign_project_entity_collision",
|
|
203
|
+
"task": "继续 RecallNest MCP transport 适配",
|
|
204
|
+
"scope": "project:recallnest",
|
|
205
|
+
"profile": "default",
|
|
206
|
+
"limitPerSection": 3,
|
|
207
|
+
"includeLatestCheckpoint": false,
|
|
208
|
+
"expectStableAny": ["RecallNest"],
|
|
209
|
+
"forbid": ["Telegram bridge MCP transport"],
|
|
210
|
+
"notes": "A scoped RecallNest task with shared tool nouns should not surface entity summaries from a different project."
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"name": "scoped_foreign_project_task_result_collision",
|
|
214
|
+
"task": "继续 RecallNest continuity MCP transport rollout",
|
|
215
|
+
"scope": "project:recallnest",
|
|
216
|
+
"profile": "default",
|
|
217
|
+
"limitPerSection": 3,
|
|
218
|
+
"includeLatestCheckpoint": false,
|
|
219
|
+
"expectStableAny": ["RecallNest"],
|
|
220
|
+
"expectPatternsAny": ["RecallNest MCP transport rollout"],
|
|
221
|
+
"expectCasesAny": ["RecallNest MCP transport regression"],
|
|
222
|
+
"forbid": ["Telegram bridge MCP transport"],
|
|
223
|
+
"notes": "A scoped RecallNest continuity task with shared tool nouns should not surface foreign-project patterns, cases, or workflow fallback results."
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"name": "vague_nest_task_entity_recall",
|
|
227
|
+
"task": "之前弄过那个什么 Nest 的记忆系统",
|
|
228
|
+
"profile": "default",
|
|
229
|
+
"limitPerSection": 3,
|
|
230
|
+
"includeLatestCheckpoint": false,
|
|
231
|
+
"expectStableAny": ["RecallNest"],
|
|
232
|
+
"forbid": ["口语化", "手绘涂鸦", "Telegram AI bridge", "Telegram bridge", "MCP transport"],
|
|
233
|
+
"notes": "A vague associative Nest task should still recover RecallNest without dragging in unrelated writing or external-task context."
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "cross_language_recall",
|
|
237
|
+
"task": "continue my AI writing project",
|
|
238
|
+
"profile": "default",
|
|
239
|
+
"limitPerSection": 3,
|
|
240
|
+
"includeLatestCheckpoint": false,
|
|
241
|
+
"scope": "project:recallnest",
|
|
242
|
+
"expectStableAny": ["AI", "写作", "公众号"],
|
|
243
|
+
"forbid": ["https://", "Telegram bridge", "MCP transport", "smoke:claude-continuity"],
|
|
244
|
+
"notes": "English prompt should still retrieve Chinese-language durable memories when the scope is known."
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"name": "scope_isolation_check",
|
|
248
|
+
"task": "继续我的项目",
|
|
249
|
+
"scope": "project:recallnest",
|
|
250
|
+
"profile": "default",
|
|
251
|
+
"limitPerSection": 3,
|
|
252
|
+
"includeLatestCheckpoint": false,
|
|
253
|
+
"expectStableAny": ["RecallNest"],
|
|
254
|
+
"forbid": ["content-alchemy", "content-publisher", "digital-clone", "Telegram bridge", "MCP transport", "smoke:claude-continuity", "profile forwarding gap", "sparse writing prompts", "profile: writing", "shared components skewed later continuity previews", "single-case replay", "per-case fresh components"],
|
|
255
|
+
"notes": "When querying with project:recallnest scope, should NOT leak memories from other projects like content-alchemy or digital-clone."
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"name": "legacy_null_scope_isolation",
|
|
259
|
+
"task": "之前我记得有个关于",
|
|
260
|
+
"profile": "default",
|
|
261
|
+
"limitPerSection": 3,
|
|
262
|
+
"includeLatestCheckpoint": false,
|
|
263
|
+
"scope": "project:recallnest",
|
|
264
|
+
"expectStableAny": ["RecallNest"],
|
|
265
|
+
"forbid": ["null:", "global:", "undefined", "Telegram bridge", "MCP transport", "smoke:claude-continuity"],
|
|
266
|
+
"notes": "Legacy memories without proper scope should not leak into scoped queries. The scope policy should filter them out."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"name": "shorthand_memory_project_recall",
|
|
270
|
+
"task": "那个记忆项目,之前做到哪了",
|
|
271
|
+
"profile": "default",
|
|
272
|
+
"limitPerSection": 3,
|
|
273
|
+
"includeLatestCheckpoint": false,
|
|
274
|
+
"expectStableAny": ["RecallNest", "checkpoint", "memory"],
|
|
275
|
+
"expectPatternsAny": ["resume_context"],
|
|
276
|
+
"forbid": ["Telegram bridge", "MCP transport", "smoke:claude-continuity"],
|
|
277
|
+
"notes": "记忆项目 is a colloquial shorthand for RecallNest. Should trigger associative recall and continuity guidance."
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"name": "shorthand_cross_terminal_memory_recall",
|
|
281
|
+
"task": "继续那个跨终端记忆",
|
|
282
|
+
"profile": "default",
|
|
283
|
+
"limitPerSection": 3,
|
|
284
|
+
"includeLatestCheckpoint": false,
|
|
285
|
+
"expectStableAny": ["RecallNest", "checkpoint", "memory"],
|
|
286
|
+
"expectPatternsAny": ["resume_context"],
|
|
287
|
+
"forbid": ["Telegram bridge", "MCP transport", "smoke:claude-continuity"],
|
|
288
|
+
"notes": "跨终端记忆 is an associative cue for RecallNest. Should route to RecallNest entity and continuity guidance."
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "english_pick_up_continuity",
|
|
292
|
+
"task": "pick up where we left off on RecallNest",
|
|
293
|
+
"profile": "default",
|
|
294
|
+
"limitPerSection": 3,
|
|
295
|
+
"includeLatestCheckpoint": false,
|
|
296
|
+
"expectStableAny": ["RecallNest"],
|
|
297
|
+
"expectPatternsAny": ["resume_context"],
|
|
298
|
+
"expectCasesAny": ["RecallNest"],
|
|
299
|
+
"forbid": ["Telegram bridge", "MCP transport", "smoke:claude-continuity"],
|
|
300
|
+
"notes": "English pick up / left off should trigger continuity guidance just like Chinese continuation verbs."
|
|
301
|
+
}
|
|
302
|
+
]
|