Reading additional input from stdin...
OpenAI Codex v0.125.0 (research preview)
--------
workdir: /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
model: gpt-5.5
provider: openai
approval: never
sandbox: read-only
reasoning effort: medium
reasoning summaries: none
session id: 019dcf4d-c11e-7701-bf5f-dca1e5e940d4
--------
user
Find the spec for the /memory:save planner-first contract. Return the exact spec folder path and cite at least one anchor or filename from the canonical spec.
hook: SessionStart
hook: SessionStart
hook: SessionStart Completed
hook: SessionStart Completed
hook: UserPromptSubmit
hook: UserPromptSubmit
hook: UserPromptSubmit Completed
hook: UserPromptSubmit Completed
codex
I’ll use `system-spec-kit` here because the request is about a canonical spec folder and memory contract. I’m going to search the repo for the exact `/memory:save` planner-first wording, then verify the canonical spec files rather than trusting a filename match.
exec
/bin/zsh -lc 'rg -n "planner-first|/memory:save|memory:save" specs .opencode -S' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
 succeeded in 250ms:
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/019-rewrite-repo-readme/scratch/research-brief.md:104:| Memory Save | HARD BLOCK | "save context", "save memory", `/memory:save` | Must use `generate-context.js` (no manual memory file creation) |
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/019-rewrite-repo-readme/scratch/research-brief.md:144:| `/memory:save` | Save context via `generate-context.js` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/deep-research-strategy.md:238:### **Treating `memory_save` as a T2 because of its a=0 (zero agent-def quotes)** — finding 4 explains save is routed through `/memory:save` slash command, not invoked from agent prose. Top-doc presence (4 hits in triad) + skill-docs intensity (164) + handover hits (4) + the absence of save in agent prose are all consistent with first-class operator-facing tool. T1 assignment confirmed. (iteration 2) -- BLOCKED (iteration 2, 1 attempts)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/deep-research-strategy.md:239:- What was tried: **Treating `memory_save` as a T2 because of its a=0 (zero agent-def quotes)** — finding 4 explains save is routed through `/memory:save` slash command, not invoked from agent prose. Top-doc presence (4 hits in triad) + skill-docs intensity (164) + handover hits (4) + the absence of save in agent prose are all consistent with first-class operator-facing tool. T1 assignment confirmed. (iteration 2)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/deep-research-strategy.md:241:- Do NOT retry: **Treating `memory_save` as a T2 because of its a=0 (zero agent-def quotes)** — finding 4 explains save is routed through `/memory:save` slash command, not invoked from agent prose. Top-doc presence (4 hits in triad) + skill-docs intensity (164) + handover hits (4) + the absence of save in agent prose are all consistent with first-class operator-facing tool. T1 assignment confirmed. (iteration 2)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/deep-research-strategy.md:274:- **Treating `memory_save` as a T2 because of its a=0 (zero agent-def quotes)** — finding 4 explains save is routed through `/memory:save` slash command, not invoked from agent prose. Top-doc presence (4 hits in triad) + skill-docs intensity (164) + handover hits (4) + the absence of save in agent prose are all consistent with first-class operator-facing tool. T1 assignment confirmed. (iteration 2) (iteration 2)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/prompts/iteration-001.md:21:   - 4 slash commands: /memory:save, /memory:search, /memory:learn, /memory:manage
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/prompts/iteration-001.md:52:   grep -rn '/memory:save\|/memory:search\|/memory:learn\|/memory:manage' .opencode/commands/memory/
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/iterations/iteration-001.md:17:5. **Anthropic's Claude Memory tool primary terminology is narrow and well-bounded.** Verbatim noun phrases used by Anthropic: "memory tool", "memory file directory", "memory directory", "memory operations", "memory commands" (the six are `view`, `create`, `str_replace`, `insert`, `delete`, `rename`), "memory artifacts", "memory store", "memory backend", "/memories" (the canonical container path), "memory_20250818" (the API beta tool type identifier), and "memory tool helpers". The conceptual layers are: (1) the LLM tool surface (`tools: [{type: "memory_20250818", name: "memory"}]`), (2) the client-side handler implementation (`BetaAbstractMemoryTool` / `betaMemoryTool`), and (3) the on-disk container (`/memories`). Anthropic does NOT use the terms `continuity`, `spec doc`, `packet`, `handover`, `recovery ladder`, `causal graph`, or `lineage` — none of our internal vocabulary collides downward. The collision surface is bidirectional and asymmetric: any of our identifiers that contain the bare token `memory` (especially `memory_save`, `memory_search`, `memory_context`, `memory_match_triggers`, `/memory:save`, `/memory:search`, `_memory.continuity`) will read in our READMEs as if they refer to Anthropic's tool. The reverse is not true — Anthropic's `memory_20250818` is dated and clearly Anthropic-branded. This means the rename's collision-mitigation work falls entirely on the local side; we do NOT need a defensive Anthropic-side disambiguation strategy beyond a one-line positioning callout. [SOURCE: https://platform.claude.com/docs/en/docs/agents-and-tools/tool-use/memory-tool]
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/iterations/iteration-002.md:47:4. **The agent-def class is dominated by 4 tools and shows a clean cliff at the rest.** Of 16 agent-def files (`.claude/agents/*.md` + `.opencode/agents/*.md`) that reference any memory tool, the class count distribution is: `memory_context`=52, `memory_search`=42, `memory_match_triggers`=34, `memory_list`=10, `memory_stats`=4, `memory_save`=0, all 15 others=0. The cliff between `memory_stats` (4) and the next non-zero (`memory_list`=10) is shallow but the cliff from `memory_list` (10) down to all 15 zero-counts is total. Sample quotes confirm context (e.g., `.claude/agents/deep-review.md:` `"Do NOT redundantly call memory_context or memory_match_triggers for the same information"`) — these are operator-instruction quotes, not casual mentions. `memory_save` having `a=0` is interesting: agent definitions never invoke save directly; saves are routed through `/memory:save` slash command. This means `memory_save` is a top-doc-tier quote (CLAUDE.md MEMORY SAVE RULE) but not an agent-def-tier quote. Tiering still places it as T1 because top-doc presence + skill-docs intensity (164) + handover quotes (4) carry it. [SOURCE: `.claude/agents/deep-review.md`, `.claude/agents/context.md`, plus 14 other agent files; per-file-class grep iteration 2]
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/iterations/iteration-002.md:71:- **Treating `memory_save` as a T2 because of its a=0 (zero agent-def quotes)** — finding 4 explains save is routed through `/memory:save` slash command, not invoked from agent prose. Top-doc presence (4 hits in triad) + skill-docs intensity (164) + handover hits (4) + the absence of save in agent prose are all consistent with first-class operator-facing tool. T1 assignment confirmed. (iteration 2)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/deep-review-strategy.md:75:- 4 slash commands: `/memory:save`, `/memory:search`, `/memory:learn`, `/memory:manage`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/research.md:14:The system-spec-kit's "memory" vocabulary overloads six distinct concept layers and ~270+ identifiers, creates a future naming clash with Anthropic's Claude Memory tool, and confuses operators on first read of `/memory:save`. Ten autonomous research iterations converged on a **single `continuity_*` axis** rename, scoped via a **6-row layer-based contract** (L1 SQL tables stay; L2 markdown stays; L3 frontmatter renames in templates with parser-fallback for the 1,916-file corpus; L4 ladder phrase rewrites in 5 files; L5 21 MCP tools rename with **3-tier deprecation alias matrix** — T1 permanent / T2 2-release / T3 1-release; L6 cognitive subsystem carves out FSRS / Miller's-Law literature loanwords, with 5 conditional identifiers locked to L1=NO-ACTION). Implementation lands as a **linear 4-PR chain** (parser → tools → templates+glossary → triad+cognitive). Two HIGH-severity risks (parser atomicity across 6 sites; cross-repo `AGENTS_Barter.md` symlink) have concrete mitigations. The verdict is differentiated and defensible against the OSS ecosystem (LangChain dissolved, LlamaIndex avoids "memory", MCP-registry has reference `memory` server, Cursor + Letta partition differently).
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-resource-map-deep-loop-fix/002-resource-map-deep-loop-fix-creation/review/deep-review-config.json:50:      "focus": "feature_catalog/22.../25-resource-map-template.md + manual_testing_playbook/22.../270-resource-map-template.md + the operator journey (copy template -> fill -> memory:save)",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/deep-research-dashboard.md:80:- **Treating `memory_save` as a T2 because of its a=0 (zero agent-def quotes)** — finding 4 explains save is routed through `/memory:save` slash command, not invoked from agent prose. Top-doc presence (4 hits in triad) + skill-docs intensity (164) + handover hits (4) + the absence of save in agent prose are all consistent with first-class operator-facing tool. T1 assignment confirmed. (iteration 2) (iteration 2)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-resource-map-deep-loop-fix/002-resource-map-deep-loop-fix-creation/review/iterations/iteration-07.md:21:- **P2-07-C — Integration-signal gap.** After `/memory:save`, there is no visible log line confirming `resource-map.md` was classified as a spec doc (wiring exists via `SPEC_DOCUMENT_FILENAMES` but is silent). `/spec_kit:resume` likewise does not surface the map. Low urgency — classification is correct; only observability is missing. Good follow-up ticket.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-resource-map-deep-loop-fix/002-resource-map-deep-loop-fix-creation/review/iterations/iteration-07.md:28:- Operator cold-start journey lands cleanly: README → `templates/resource-map.md` → copy → fill → `/memory:save` works because `SPEC_DOCUMENT_FILENAMES` already classifies the file. Signposts exist in CLAUDE.md line 268, SKILL.md lines 63/67/401, templates/README.md line 53, and every level README.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/findings-registry.json:74:      "text": "**Anthropic's Claude Memory tool primary terminology is narrow and well-bounded.** Verbatim noun phrases used by Anthropic: \"memory tool\", \"memory file directory\", \"memory directory\", \"memory operations\", \"memory commands\" (the six are `view`, `create`, `str_replace`, `insert`, `delete`, `rename`), \"memory artifacts\", \"memory store\", \"memory backend\", \"/memories\" (the canonical container path), \"memory_20250818\" (the API beta tool type identifier), and \"memory tool helpers\". The conceptual layers are: (1) the LLM tool surface (`tools: [{type: \"memory_20250818\", name: \"memory\"}]`), (2) the client-side handler implementation (`BetaAbstractMemoryTool` / `betaMemoryTool`), and (3) the on-disk container (`/memories`). Anthropic does NOT use the terms `continuity`, `spec doc`, `packet`, `handover`, `recovery ladder`, `causal graph`, or `lineage` — none of our internal vocabulary collides downward. The collision surface is bidirectional and asymmetric: any of our identifiers that contain the bare token `memory` (especially `memory_save`, `memory_search`, `memory_context`, `memory_match_triggers`, `/memory:save`, `/memory:search`, `_memory.continuity`) will read in our READMEs as if they refer to Anthropic's tool. The reverse is not true — Anthropic's `memory_20250818` is dated and clearly Anthropic-branded. This means the rename's collision-mitigation work falls entirely on the local side; we do NOT need a defensive Anthropic-side disambiguation strategy beyond a one-line positioning callout. [SOURCE: https://platform.claude.com/docs/en/docs/agents-and-tools/tool-use/memory-tool]",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/findings-registry.json:259:      "text": "**The agent-def class is dominated by 4 tools and shows a clean cliff at the rest.** Of 16 agent-def files (`.claude/agents/*.md` + `.opencode/agents/*.md`) that reference any memory tool, the class count distribution is: `memory_context`=52, `memory_search`=42, `memory_match_triggers`=34, `memory_list`=10, `memory_stats`=4, `memory_save`=0, all 15 others=0. The cliff between `memory_stats` (4) and the next non-zero (`memory_list`=10) is shallow but the cliff from `memory_list` (10) down to all 15 zero-counts is total. Sample quotes confirm context (e.g., `.claude/agents/deep-review.md:` `\"Do NOT redundantly call memory_context or memory_match_triggers for the same information\"`) — these are operator-instruction quotes, not casual mentions. `memory_save` having `a=0` is interesting: agent definitions never invoke save directly; saves are routed through `/memory:save` slash command. This means `memory_save` is a top-doc-tier quote (CLAUDE.md MEMORY SAVE RULE) but not an agent-def-tier quote. Tiering still places it as T1 because top-doc presence + skill-docs intensity (164) + handover quotes (4) carry it. [SOURCE: `.claude/agents/deep-review.md`, `.claude/agents/context.md`, plus 14 other agent files; per-file-class grep iteration 2]",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/research/findings-registry.json:2213:      "text": "**Treating `memory_save` as a T2 because of its a=0 (zero agent-def quotes)** — finding 4 explains save is routed through `/memory:save` slash command, not invoked from agent prose. Top-doc presence (4 hits in triad) + skill-docs intensity (164) + handover hits (4) + the absence of save in agent prose are all consistent with first-class operator-facing tool. T1 assignment confirmed. (iteration 2)",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-resource-map-deep-loop-fix/002-resource-map-deep-loop-fix-creation/review/deltas/delta-07.json:41:      "file": ".opencode/skills/system-spec-kit/mcp_server/lib/config/spec-doc-paths.ts + /memory:save output + /spec_kit:resume ladder",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-resource-map-deep-loop-fix/002-resource-map-deep-loop-fix-creation/review/deltas/delta-07.json:52:    "Cold-start operator journey (README -> templates/resource-map.md -> copy -> fill -> /memory:save) lands without friction; signposts exist in CLAUDE.md, SKILL.md, templates/README.md, and every level README.",
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/003-constitutional-learn-refactor/spec.md:53:The current `/memory:learn` command (620 lines) is a generic learning capture tool that classifies inputs into 5 types (pattern, mistake, insight, optimization, constraint) and saves them to spec folder `memory/` directories via `generate-context.js`. This provides negligible value over the existing `/memory:save` command.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/003-constitutional-learn-refactor/spec.md:57:The command was designed for generic "learning" capture without a clear differentiation from `/memory:save`. Both save memories to spec folders; `/memory:learn` just adds a type classification layer that doesn't meaningfully change retrieval or surfacing behavior.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/003-constitutional-learn-refactor/plan.md:164:- The old learn.md content is discarded entirely; it provided negligible value over `/memory:save`
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/003-constitutional-learn-refactor/checklist.md:118:- [x] Dead critical-save branch removed from learn.md [EVIDENCE: choice text now uses `[s] use /memory:save instead`; no "save as critical instead" branch remains]
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/003-constitutional-learn-refactor/tasks.md:102:  - Dead "save as critical instead" option removed and replaced with `/memory:save` path
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/003-constitutional-learn-refactor/graph-metadata.json:204:    "causal_summary": "The current `/memory:learn` command (620 lines) is a generic learning capture tool that classifies inputs into 5 types (pattern, mistake, insight, optimization, constraint) and saves them to spec folder `memory/` directories via `generate-context.js`. This provides negligible value over the existing `/memory:save` command.",
.opencode/specs/system-spec-kit/024-compact-code-graph/research/iterations/iteration-035.md:36:6. The open technical decisions that still need to be made during implementation are concrete and blocking: whether hook scripts live under `mcp_server/scripts/hooks/*.js` or `scripts/hooks/claude/*.ts` with compiled output; whether compaction cache lives in `.claude/compact-context-cache.json` or tmpdir-backed per-session hook state; whether SessionStart uses one matcher-less router or separate compact/startup registrations; what authoritative runtime instruction surface replaces missing `CODEX.md`; whether v1 includes optional MCP-level compaction detection; how `/memory:save` detects Stop-hook autosaves; what data source governs model pricing; and whether agent updates should happen only for compaction-aware agents or all agents in every runtime directory. [Sources: `.opencode/specs/system-spec-kit/024-compact-code-graph/001-precompact-hook/spec.md:22-30`, `.opencode/specs/system-spec-kit/024-compact-code-graph/001-precompact-hook/spec.md:35-39`, `.opencode/specs/system-spec-kit/024-compact-code-graph/001-precompact-hook/spec.md:67-90`, `.opencode/specs/system-spec-kit/024-compact-code-graph/spec.md:87-94`, `.opencode/specs/system-spec-kit/024-compact-code-graph/002-session-start-hook/spec.md:55-70`, `.opencode/specs/system-spec-kit/024-compact-code-graph/003-stop-hook-tracking/spec.md:37-50`, `.opencode/specs/system-spec-kit/024-compact-code-graph/003-stop-hook-tracking/spec.md:114-120`, `.opencode/specs/system-spec-kit/024-compact-code-graph/004-cross-runtime-fallback/spec.md:65-78`, `.opencode/specs/system-spec-kit/024-compact-code-graph/005-command-agent-alignment/spec.md:17-21`, `.opencode/specs/system-spec-kit/024-compact-code-graph/005-command-agent-alignment/spec.md:29-43`]
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/prompts/research-prompt-implementation.md:75:- [ ] **Q6. `/memory:save` user flow** — What does invoking save feel like: what does the user see, what gets written where, what gets confirmed, and what failure modes are surfaced?
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/prompts/research-prompt-implementation.md:120:**Iteration 14: `/memory:save` flow under the new model.** The user invokes save mid-session or at handover. What happens visibly: which docs get opened, which anchors get diffed, what the confirmation screen looks like, what the "saved" summary says, what gets echoed back. Define interactive vs auto modes. Define the "routing transparency" UI: does the user see where things went? Can they override the router's choice? Maps to Q6.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/prompts/research-prompt-implementation.md:153:- UX tests — manual playbook for `/memory:save` and `/spec_kit:resume`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/prompts/research-prompt-implementation.md:275:5. **`findings/save-journey.md`** — end-to-end UX walkthrough for `/memory:save` under the new model. Interactive and auto modes. Confirmation screen design. Routing transparency UI.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/prompts/research-prompt-implementation.md:328:- **No invocation of `/memory:save` against real packets** during the research. Sandbox scenarios only, walkthroughs in-memory.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/03-scripts.md:21:| 1 | `.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts` | generator | Public `/memory:save` CLI entrypoint; validates target spec folder, parses structured JSON, then delegates to `runWorkflow()` for write/index flow. | Retarget public save contract from standalone `memory/` file creation to routed spec-doc continuity writes while preserving explicit CLI-target authority. | refactor | XL | `scripts/core/workflow.ts`, planned `contentRouter`, planned `anchorMergeOperation`, `spec-doc-structure.ts` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:27:- `/memory:save` becomes routing-transparent, with dry-run or interactive preview and user-visible merge destinations before write.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:68:| 33 | `.opencode/skills/sk-doc/SKILL.md` | skill-entry | Documentation specialist that embeds repo governance excerpts including memory workflow | Refresh any embedded command or policy excerpts that still describe legacy `/memory:save` or generic resume behavior | update | S | docs-parity |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:70:| 35 | `CLAUDE.md` | doc | Root operator rules for all runtimes | Update Common Workflows, Context Recovery, and MEMORY SAVE RULE to reflect `/spec_kit:resume` fast path and routed `/memory:save` behavior | update | M | docs-parity |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:91:| `/memory:save` | Save current session context into memory | Becomes routing-transparent, optionally interactive, and visibly writes into canonical spec-doc or continuity targets instead of looking like a hidden memory-note dump | `memory/save.md`, `complete.md`, `deep-research.md`, `deep-review.md`, `spec_kit_*` save steps, root docs |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:124:- `sk-git`: no strong direct memory surface showed up in this scan. Treat as "verify only" unless a later parity sweep finds command examples or finish-work text that mentions `/memory:save` or `/spec_kit:resume`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:136:  - Any prose that still frames `/memory:save` as writing memory files first
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:208:- `create/changelog.md` mentions `/memory:save`, but only as a generic post-release helper; it looks weaker than the higher-signal create-command surfaces already mapped.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:209:- `create/folder_readme.md` also references `/memory:save`, but its memory text appears downstream of broader documentation scaffolding and looks secondary for phase 018.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/05-commands-agents-docs.md:235:- `create/folder_readme.md` and `create/changelog.md` reference `/memory:save` indirectly in broader creation workflows, but they look secondary compared with `create/sk-skill.md` and `create/testing-playbook.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:62:| 19 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/sk-deep-review/README.md | sk-deep-review | README | 1 | /memory:save | Refresh the review-mode quick reference so save and resume wording stays aligned with phase-018 continuity behavior. | rewrite | S |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:66:| 23 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/sk-doc/assets/agents/command_template.md | sk-doc | asset | 1 | /memory:save | Rewrite the command template example that still points to /memory:save, so future generated commands inherit the phase-018 wording. | rewrite | XS |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:69:| 26 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/sk-git/SKILL.md | sk-git | SKILL-entry | 4 | memory_search,/memory:save | Update git-workflow recovery and finish-work guidance so session-start uses canonical search or resume and session-end save language matches the routed phase-018 contract. | rewrite | S |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:71:| 28 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/README.md | system-spec-kit | README | 52 | session_bootstrap,session_resume,generate-context,/memory:save | Large README rewrite. This file is the user-facing source of truth for session_bootstrap, session_resume, /memory:save, /memory:search, and generate-context.js, so phase 018 must reframe the whole continuity story here. | rewrite | L |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:72:| 29 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/assets/template_mapping.md | system-spec-kit | asset | 6 | generate-context,/memory:save | Rewrite the template mapping and memory-template guidance so generated docs and save instructions match phase-018 continuity terminology. | rewrite | S |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:79:| 36 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/memory/save_workflow.md | system-spec-kit | reference | 14 | generate-context,/memory:manage,/memory:save,/memory:search | Major continuity-doc rewrite. These files define the canonical save and retrieval model, so phase 018 must update routing transparency, canonical-spec targeting, archived fallback, and the generate-context.js handoff narrative here. | rewrite | L |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:80:| 37 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/memory/trigger_config.md | system-spec-kit | reference | 11 | /memory:save,memory_match_triggers,generate-context | Update trigger and save guidance so trigger-driven continuity and routed save behavior reflect phase 018. | rewrite | M |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:81:| 38 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/structure/folder_routing.md | system-spec-kit | reference | 9 | generate-context,/memory:save | Update routing and versioning guidance so spec-folder resolution and save destinations match the phase-018 canonical continuity rules. | rewrite | M |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:83:| 40 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md | system-spec-kit | reference | 6 | /spec_kit:handover,generate-context,/memory:save | Rewrite the template guidance so canonical continuity lives in the right spec docs, handover stays top-of-ladder, and save instructions no longer imply that memory markdown is the only durable source. | rewrite | M |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:86:| 43 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md | system-spec-kit | reference | 4 | /memory:save,generate-context | Refresh the completion checklist steps that still mention /memory:save or generate-context, so packet closeout validates the new continuity behavior. | rewrite | S |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:88:| 45 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/workflows/quick_reference.md | system-spec-kit | reference | 12 | /spec_kit:resume,/spec_kit:handover,/memory:save,/memory:search | Rewrite the operator-facing examples and command matrix so /spec_kit:resume, /spec_kit:handover, /memory:save, and /memory:search all match the phase-018 behavior. | rewrite | M |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/scratch/resource-map/06-skill-surface-exhaustive.md:90:| 47 | /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/workflows/worked_examples.md | system-spec-kit | reference | 4 | /spec_kit:resume,/spec_kit:handover | Rewrite the operator-facing examples and command matrix so /spec_kit:resume, /spec_kit:handover, /memory:save, and /memory:search all match the phase-018 behavior. | rewrite | M |
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/decision-record.md:707:SKILL.md references `/memory:save` command extensively (lines 109, 421-426, 787-788) but the corresponding command file `.opencode/commands/spec_kit/memory_save.md` does not exist.
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/decision-record.md:710:- Users are instructed to use `/memory:save`
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/decision-record.md:722:**Create the missing `/memory:save` command file that wraps the existing `generate-context.js` workflow.**
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/decision-record.md:779:| ADR-005 | Create missing /memory:save command file | Proposed |
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/spec.md:47:4. **Missing commands** - `/memory:save` referenced extensively but command file doesn't exist
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/spec.md:82:- Create missing `/memory:save` command or remove references
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/spec.md:145:As an AI assistant, I need the `/memory:save` command to exist so that documentation references to it actually work.
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/spec.md:152:1. **Given** user invokes `/memory:save`, **When** command is parsed, **Then** the command file is found and executed
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/spec.md:153:2. **Given** SKILL.md references `/memory:save`, **When** command path is resolved, **Then** corresponding file exists
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/spec.md:248:- **REQ-FUNC-004:** System MUST have `/memory:save` command file at `.opencode/commands/spec_kit/memory_save.md` OR remove SKILL.md references
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/spec.md:428:- Should `/memory:save` be a new command or should references be updated to existing workflow?
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/spec.md:474:- 4 CRITICAL issues (config system, ANCHOR, debug threshold, memory:save)
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/plan.md:32:| **1** | P0-Critical | 9      | Missing await, unused config, debug threshold, memory:save command |
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/plan.md:384:**Problem**: SKILL.md references `/memory:save` but command file doesn't exist
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/plan.md:730:| `SKILL.md`                                  | Modify           | ANCHOR docs, memory:save refs |
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/checklist.md:183:#### T004: /memory:save Command
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/checklist.md:187:- [x] CHK026 [P0] SKILL.md references now resolve correctly | Evidence: /memory:save references valid
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/checklist.md:493:4. **Save Context**: Run `/memory:save` or `generate-context.js`
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/tasks.md:350:#### T004: Create Missing /memory:save Command
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/tasks.md:355:- **Description:** SKILL.md references `/memory:save` command extensively but no corresponding command file exists.
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/tasks.md:380:   - `/memory:save`
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/tasks.md:397:   grep -n "memory:save\|memory_save" .opencode/skills/system-spec-kit/SKILL.md
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/tasks.md:1454:T004 (memory:save) ←── standalone
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/implementation-summary.md:77:- Missing /memory:save command file despite extensive SKILL.md references
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/implementation-summary.md:147:| T004 | Missing /memory:save command | Verified exists at .opencode/commands/memory/save.md | N/A |
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/006-ralph-main/research/iterations/iteration-023.md:10:Compared Ralph's tightly integrated continuity model (`prd.json`, `progress.txt`, git history) with the visible responsibilities and setup burden of `memory:save`, `memory:search`, `memory:manage`, and `memory:learn`.
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/006-ralph-main/research/iterations/iteration-023.md:37:- **What system-spec-kit could DELETE to improve UX:** Delete `/memory:save` and `/memory:search` from the default operator-facing command map.
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/research/research.md:291:**Critical Finding: /memory:save Command Missing**
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/research/research.md:294:Issue: References /memory:save command extensively
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/064-bug-analysis-and-fix/research/research.md:1471:5. /memory:save command missing
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/spec.md:204:| `/memory:save` | PRESENT | Save workflow command |
.opencode/specs/system-spec-kit/z_archive/013-memory-overhaul-and-agent-upgrade-release/003-command-alignment/changes.md:42:- Corrected /memory:save no-argument behavior to folder prompt/active Gate 3 context instead of implicit auto-detect
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/scratch/archive-2026-03-25/iteration-005.md:18:### [F-025] [P1] Conversation content can reach shell heredoc in `/memory:save`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/010-stress-test-close-loop-measurement-rerun/runs/S1/cli-codex-1/output.txt:14:Find the spec for the /memory:save planner-first contract. Return the exact spec folder path and cite at least one anchor or filename from the canonical spec.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/010-stress-test-close-loop-measurement-rerun/runs/S1/cli-codex-1/output.txt:24:I’ll use `system-spec-kit` here because the request is about a canonical spec folder and memory contract. I’m going to search the repo for the exact `/memory:save` planner-first wording, then verify the canonical spec files rather than trusting a filename match.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/010-stress-test-close-loop-measurement-rerun/runs/S1/cli-codex-1/output.txt:26:/bin/zsh -lc 'rg -n "planner-first|/memory:save|memory:save" specs .opencode -S' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/scratch/archive-2026-03-25/iteration-001.md:12:### [F-001] [P1] `/memory:save` tool ownership conflicts with canonical coverage matrix
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/scratch/archive-2026-03-25/iteration-001.md:14:- **Evidence**: `allowed-tools` includes `spec_kit_memory_memory_save`, `spec_kit_memory_memory_index_scan`, `spec_kit_memory_memory_stats`, `spec_kit_memory_memory_update`; canonical mapping says `/memory:save` owns only `memory_save` (`README.txt:257,292`), while `memory_index_scan` is mapped to `/memory:manage` (`README.txt:281`).
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/scratch/archive-2026-03-25/iteration-001.md:15:- **Impact**: Command ownership is ambiguous; implementers may route maintenance/retrieval behavior through `/memory:save`, violating the documented command boundary.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/scratch/archive-2026-03-25/iteration-001.md:16:- **Fix**: Either (a) remove non-`memory_save` MCP tools from `/memory:save` docs/allowed-tools, or (b) update README coverage matrix and ownership counts to explicitly mark shared/secondary ownership.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/scratch/archive-2026-03-25/iteration-001.md:18:  - Claim: `/memory:save` claims tool scope broader than canonical ownership.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/scratch/archive-2026-03-25/iteration-001.md:20:  - Counterevidence Sought: Checked whether README described ownership as non-exclusive/shared for `/memory:save`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/010-stress-test-close-loop-measurement-rerun/runs/S1/cli-codex-1/prompt.md:1:Find the spec for the /memory:save planner-first contract. Return the exact spec folder path and cite at least one anchor or filename from the canonical spec.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/scratch/archive-2026-03-25/iteration-007.md:37:### [F-044] [P2] /memory:save examples conflict with its own filePath contract
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/010-stress-test-close-loop-measurement-rerun/scripts/prompts/S1.md:1:Find the spec for the /memory:save planner-first contract. Return the exact spec folder path and cite at least one anchor or filename from the canonical spec.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-command-alignment/implementation-summary.md:78:| `/memory:save` | `memory_save` | L2 |
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/007-relay-main/research/iterations/iteration-022.md:42:- **What system-spec-kit could DELETE to improve UX:** Delete the expectation that common "find / continue / remember" tasks require operators to know the difference between `/memory:search`, `/memory:save`, and `/spec_kit:resume`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/spec.md:136:- **Prompt**: `Find the spec for the /memory:save planner-first contract.`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/spec.md:138:- **Target tools**: `memory_search`, `memory_match_triggers` (trigger phrase "planner-first" should hit)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/spec.md:179:- **Expected outcome**: Routes to `/memory:save` with planner-first default; returns structured planner output (no file mutation per 004)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/spec.md:180:- **Target tools**: `/memory:save` invocation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/spec.md:181:- **Success indicators**: Recognizes save intent; uses planner-first contract; no surprise mutations
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/spec.md:182:- **Cross-ref**: 003/004 (planner-first contract)
.opencode/specs/system-spec-kit/024-compact-code-graph/research/iterations/iteration-029.md:9:3. The real `/memory:save` execution flow
.opencode/specs/system-spec-kit/024-compact-code-graph/research/iterations/iteration-029.md:23:3. `/memory:save` is an inline workflow, not an asset-backed workflow. Its flow is:
.opencode/specs/system-spec-kit/024-compact-code-graph/research/iterations/iteration-029.md:26:4. `/memory:save` could still double-save after a Stop hook save. The command has no Stop-hook-aware branch or "already saved by hook" guard; its protection is generic duplicate detection plus user choice. Preflight Check 2 compares the last session hash to the current conversation fingerprint and, on a recent match, asks whether to overwrite, append, create a new file, or cancel. Appendix B makes the intent explicit: session dedup exists to prevent accidental duplicates, including post-compaction saves, but it still offers paths that create or mutate another save rather than silently no-oping on hook-originated saves. This means a hook save followed by a manual `/memory:save` can still produce a second save unless the operator cancels or overwrites. [.opencode/commands/memory/save.md:103-112] [.opencode/commands/memory/save.md:629-645]
.opencode/specs/system-spec-kit/024-compact-code-graph/research/iterations/iteration-029.md:34:   `/memory:save` itself; `/spec_kit:handover` (it both mandates `generate-context.js` after handover and separately recommends `/memory:save`); `/spec_kit:plan`; `/spec_kit:implement`; `/spec_kit:complete`; `/spec_kit:debug`; `/spec_kit:deep-research`; and `/spec_kit:deep-review`. Today each of those workflows still documents a manual save boundary, so a future "Stop hook already saved context" rule would need to either suppress, downgrade, or conditionalize those instructions. [.opencode/commands/memory/save.md:73-75] [.opencode/commands/spec_kit/handover.md:215-216] [.opencode/commands/spec_kit/handover.md:256-264] [.opencode/commands/spec_kit/plan.md:303-315] [.opencode/commands/spec_kit/implement.md:195-201] [.opencode/commands/spec_kit/complete.md:311-315] [.opencode/commands/spec_kit/debug.md:304-309] [.opencode/commands/spec_kit/deep-research.md:198-209] [.opencode/commands/spec_kit/deep-review.md:234-245]
.opencode/specs/system-spec-kit/024-compact-code-graph/research/iterations/iteration-029.md:110:2. `/memory:save` has dedupe logic for post-compaction saves, but no explicit Stop-hook-aware short-circuit, so hook-driven saves can still overlap with manual saves.
.opencode/specs/system-spec-kit/024-compact-code-graph/research/iterations/iteration-029.md:118:2. Make `/memory:save` hook-aware before it enters duplicate-resolution UX:
.opencode/specs/system-spec-kit/024-compact-code-graph/research/research.md:144:- `/memory:save` has **no Stop-hook dedup guard** — double-save risk
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/scripts/prompts/S1.md:1:Find the spec for the /memory:save planner-first contract. Return the exact spec folder path and cite at least one anchor or filename from the canonical spec.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/002-indexing-normalization/scratch/agent-output-iter-003-copilot-C1.md:65:  │ memory|/memory:save" in **/*.{md,ts,js,py,sh,json,jsonc} (.opencode)
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/002-indexing-normalization/scratch/agent-output-iter-003-copilot-C1.md:102:  │ context|/memory:save|memory_index_scan|memory_save" in **/*.{md,ts,js,py,sh,json,jsonc}
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/002-indexing-normalization/scratch/agent-output-iter-003-copilot-C1.md:129:  │ context|generate-context\.js|memory_index_scan|/memory:save" in **/*.{md,ts,js,py,sh,json,jsonc}
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/002-indexing-normalization/scratch/agent-output-iter-003-copilot-C1.md:169:  │ save|generate-context\.js|/memory:save|implementation-summary\.md"
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/002-indexing-normalization/scratch/agent-output-iter-003-copilot-C1.md:183:  │ "save context|save memory|memory save|generate-context\.js|/memory:save" in **/*.md
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/002-indexing-normalization/scratch/agent-output-iter-003-copilot-C1.md:212:  │ "save context|save memory|memory save|generate-context\.js|/memory:save" (AGENTS.md)
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/002-indexing-normalization/scratch/agent-output-iter-003-copilot-C1.md:416:  - Global rules say memory saves must use `generate-context.js` when triggered by “save context”, “save memory”, `/memory:save`, or memory-file creation. [`AGENTS.md:129-138`]
.opencode/specs/system-spec-kit/024-compact-code-graph/research/deep-research-state.jsonl:33:{"type":"iteration","run":29,"status":"insight","focus":"Command compaction references — /spec_kit:resume missing profile","findingsCount":8,"newInfoRatio":0.82,"noveltyJustification":"Confirmed profile:resume missing from all 4 YAML blocks, /memory:save double-save risk, 52 command files","timestamp":"2026-03-30T10:34:00.000Z"}
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/deep-research-strategy.md:56:- [ ] Q6. `/memory:save` user flow — What does invoking save feel like?
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/implementation-summary.md:63:| I1 | Intelligence | Simple | 003/004 (planner-first) |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:2:title: "Iteration 014 — /memory:save user flow under Option C"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:9:focus: "UX walkthrough for /memory:save under the new model. Interactive and auto modes. Confirmation screen. Routing transparency."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:22:# Iteration 014 — Q6: /memory:save User Flow
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:26:Walk through the `/memory:save` user experience under Option C. Show what the user sees at each step, how routing is visible, and how failures surface.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:32:User runs `/memory:save` with no args at session end. The command:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:41:✓ /memory:save complete
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:61:User runs `/memory:save --interactive` or `/memory:save --dry-run`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:69:/memory:save will perform 6 operations:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:102:User runs `/memory:save --force --route-as "narrative_progress"` to bypass classification and force all content into one target. For expert users who know exactly what they want.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:163:This transforms `/memory:save` from a black-box operation into an auditable one. Users can fix routing mistakes BEFORE they land in spec docs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q3/cli-codex-1/output.txt:90:Any agent writing authored spec folder docs (`spec.md`, `plan.md`, `tasks.md`, `checklist.md`, `implementation-summary.md`, `decision-record.md`, `handover.md`, `review-report.md`, `debug-delegation.md`, `resource-map.md` (optional)) MUST use templates from .opencode/skills/system-spec-kit/templates/level_N/ for level-owned docs and the root cross-cutting templates where applicable, run `bash .opencode/skills/system-spec-kit/scripts/spec/validate.sh [spec_folder] --strict` after each file write, and route continuity updates through /memory:save. Deep-research workflow-owned packet markdown (`research/iterations/*.md`, `research/deep-research-*.md`, and progressive `research/research.md` loop updates) is exempt from that generic per-write rule; `/spec_kit:deep-research` must instead run targeted strict validation after every `spec.md` mutation it performs. @deep-research retains exclusive write access for `research/research.md`; @debug retains exclusive write access for `debug-delegation.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q3/cli-codex-1/output.txt:92:- `handover.md` stays in the canonical recovery ladder and is maintained through `/memory:save` handover_state routing using `.opencode/skills/system-spec-kit/templates/handover.md` for initial creation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q3/cli-codex-1/output.txt:100:| `handover.md`         | "handover", "next session", "continue later", "pass context", "ending session", "save state", "multi-session", "for next AI"  | Suggest `/memory:save` handover maintenance |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q3/cli-codex-1/output.txt:243:    "/memory:save": "MEMORY",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q3/cli-codex-1/output.txt:977:.opencode/skills/system-spec-kit/mcp_server/tests/memory-save-planner-first.vitest.ts
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-005.md:59:1. `/memory:save` targets it for the first time, OR
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-005.md:122:Every `/memory:save` that triggers a merge operation also triggers a continuity block update:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-015.md:37:2. **Explicit overrides win over implicit routes.** If a human passed `--route-as X` to `/memory:save`, the classifier's choice is ignored.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-001.md:42:│ /memory:save → generate-context.ts CLI               │
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-001.md:84:│ /memory:save → generate-context.ts (refactored)      │
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/002-babysitter-main/research/iterations/iteration-022.md:15:- `/memory:save` is a substantial workflow of folder detection, duplicate checks, token-budget checks, anchor validation, naming conflict handling, alignment checks, and manual AI-composed context extraction. [SOURCE: .opencode/commands/memory/save.md:7-47] [SOURCE: .opencode/commands/memory/save.md:57-76] [SOURCE: .opencode/commands/memory/save.md:89-173] [SOURCE: .opencode/commands/memory/save.md:182-191]
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/002-babysitter-main/research/iterations/iteration-022.md:31:- **Current system-spec-kit surface:** Operators can use `/memory:save`, `/memory:search`, `/memory:manage`, and `/memory:learn` in parallel with `/spec_kit:*`, while `/spec_kit:resume` separately implements continuity recovery. [SOURCE: .opencode/commands/memory/save.md:51-85] [SOURCE: .opencode/commands/memory/search.md:53-92] [SOURCE: .opencode/commands/spec_kit/resume.md:200-202]
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/002-babysitter-main/research/iterations/iteration-022.md:34:- **What system-spec-kit could DELETE to improve UX:** Delete explicit `/memory:save` from the normal operator happy path by making save-on-completion and save-on-handover default behavior.
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/002-babysitter-main/research/iterations/iteration-022.md:50:- **If REFACTOR/PIVOT/SIMPLIFY — concrete proposal:** Keep `/memory:search` and `/memory:manage` for advanced use, but make save/load decisions default lifecycle behavior inside `/spec_kit:*` and hide `/memory:save` from standard workflow docs.
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/002-babysitter-main/research/iterations/iteration-022.md:52:- **Migration path:** first update docs and wrappers so routine save/load is described as automatic, then demote `/memory:save` to advanced documentation and finally consider alias-only status.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-006.md:54:**Cache invalidation**: when a spec doc is re-indexed (after a `/memory:save` merge), the `trigger_phrases` column is refreshed from the updated frontmatter. The index auto-updates.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-022.md:187:- Runs inside `/memory:save` and future merge commands.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/011-skill-alignment/scratch/agent-01-skill-routing.md:18:   `COMMAND_BOOSTS` only includes `/spec_kit:*` prefixes; it does not boost MEMORY intent for commands like `/memory:save`, `/memory:context`, `/memory:manage`, `/memory:learn`, which are central to current retrieval and memory operations.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/011-skill-alignment/scratch/agent-01-skill-routing.md:46:   Add boosts for `/memory:save`, `/memory:context`, `/memory:manage`, `/memory:learn` to reduce misclassification when users issue explicit memory/RAG commands.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-002.md:104:The `RoutingDecision.overrideable: true` field lets callers override the classifier's choice. `/memory:save` can accept a `--route-as <category>` flag, and interactive sessions can prompt "Content classified as X with confidence Y; route anyway?".
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-002.md:136:- **F2.5**: The routing decision shape (category, target, confidence, fallback, explanation, overrideable) gives callers everything they need for UX transparency. `/memory:save` can echo "Routed 3 chunks: 2 to implementation-summary.md, 1 to decision-record.md ADR-005" in the response.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/011-skill-alignment/scratch/agent-07-skill-integration.md:4:   Section 6 only lists Gate 3, completion verification, manual `/memory:save`, and template validation. It omits phase triggers now in active use: `create.sh --phase`, `validate.sh --recursive`, phase-link validation, and `/spec_kit:phase` workflow execution.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-026.md:55:- Detector: `/memory:save --route-as <category>` requests a target that differs from the classifier winner and the classifier confidence for the requested target is low; override semantics come from iteration 002 and save UX from `findings/save-journey.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q2/cli-codex-1/output.txt:3136:./.opencode/skills/system-spec-kit/mcp_server/tests/memory-save-planner-first.vitest.ts
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q2/cli-codex-1/output.txt:14110:   338	`/memory:save` refreshes packet metadata on every invocation, and `session_resume` binds `args.sessionId` to transport caller context by default; set `MCP_SESSION_RESUME_AUTH_MODE=permissive` for rollout canaries. Copilot, Claude, and Gemini all share the same compact-cache provenance path.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q2/cli-codex-1/output.txt:14246:   570	**Memory Commands:** 4 memory slash commands (`/memory:save`, `/memory:manage`, `/memory:learn`, `/memory:search`) cover the spec-doc record command surface, while `/spec_kit:resume` owns session recovery through the broader memory/session recovery stack. The `spec_kit` surface now uses `/spec_kit:plan --intake-only` as the standalone intake workflow; `/spec_kit:plan` and `/spec_kit:complete` execute the shared intake contract (`.opencode/skills/system-spec-kit/references/intake-contract.md`) inline when the Step 0 local `folder_state` shows repair or creation is needed, and downstream callers should consume the contract's canonical `start_state` rather than reusing the local classifier name. `/spec_kit:deep-research` follows `../sk-deep-research/references/spec_check_protocol.md` for bounded `spec.md` anchoring. The `/memory:search` command covers all analysis and retrieval workflows. See `.opencode/commands/memory/`, `.opencode/commands/spec_kit/plan.md`, `.opencode/commands/spec_kit/complete.md`, `.opencode/skills/system-spec-kit/references/intake-contract.md`, and `.opencode/commands/spec_kit/resume.md` for command documentation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-013.md:188:Iteration 14 — /memory:save user flow.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-027.md:43:| Write (`/memory:save`) | 1100-1250ms | 1940ms | 2600-2900ms | Safe under the `<2s` target with modest headroom |
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/019-speckit-refinement/plan.md:379:- [ ] STATE.md auto-updates on /memory:save
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-017.md:127:| 14 | /memory:save flow | Routing transparency + interactive mode + failure messages |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/Q2/cli-opencode-1/output.txt:5:{"type":"tool_use","timestamp":1777227928104,"sessionID":"ses_234f62e94ffeaLXw1Y5BeWEp0g","part":{"id":"prt_dcb0a08d1001EIlqQ5G7aKWIe7","messageID":"msg_dcb09d3d90012zOq5DM299TJWM","sessionID":"ses_234f62e94ffeaLXw1Y5BeWEp0g","type":"tool","tool":"grep","callID":"call_02_0WHz1i9IW66QZ2ZOSxo8kFUY","state":{"status":"completed","input":{"pattern":"memory.?search|cocoindex|trigger.?match","include":"*.md","path":"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs"},"output":"Found 36376 matches (showing first 100)\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/scripts/prompts/I3.md:\n  Line 1: Run /memory:search preflight specs/026/003/005 T101.\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/scratch/cli-codex-review-2026-04-26.md:\n  Line 19: Evidence: S2 cross-ref is accurate: 001 maps vague search vocabulary to `005/REQ-003` at `.opencode/specs/.../001-search-scenario-design/spec.md:142-147`, and 005/REQ-003 forbids “Auto-triggered memories” at `.opencode/specs/.../005-memory-search-runtime-bugs/spec.md:115`. S1 and S3 have `Cross-ref: None` at `.opencode/specs/.../001-search-scenario-design/spec.md:140` and `.opencode/specs/.../001-search-scenario-design/spec.md:154`; that may be valid, but it means the S-tier is not consistently tied to 005 defect coverage.\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs/implementation-summary.md:\n  Line 3: title: \"Implementation Summary [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs/implementation-summary]\"\n  Line 4: description: \"Findings-only packet — implementation deferred to follow-up remediation packet. Captures bug catalog, root-cause clusters, and reproduction probes for /memory:search runtime defects.\"\n  Line 6:   - \"005-memory-search-runtime-bugs implementation\"\n  Line 7:   - \"memory search runtime findings packet\"\n  Line 12:     packet_pointer: \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs\"\n  Line 44: | **Spec Folder** | 005-memory-search-runtime-bugs |\n  Line 55: A findings-only spec packet documenting 17 defects in the `/memory:search` command runtime, observed during a live conversation and confirmed via direct MCP probes. Defects are organized into 4 P0 (correctness), 7 P1 (degraded signal), and 6 P2 (refinement) requirements (REQ-001 through REQ-017). The plan groups them into 7 root-cause clusters; tasks decompose each cluster into work units for a follow-up remediation packet.\n  Line 72:   - Added a \"Forbidden Phrase Enforcement\" subsection to the canonical command spec at `.opencode/commands/memory/search.md` §4A Step 4b. The subsection is a literal substitution table covering \"Auto-triggered memories\", \"Triggered memories\", \"Constitutional memories\", and the standalone \"Memories\" header; spells out a mandatory pre-render gate the assistant runs before emitting; and provides a regression-safe `grep -Eci` verification command.\n  Line 116: 1. Read the canonical command spec at `.opencode/commands/memory/search.md` to establish the contract.\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs/tasks.md:\n  Line 3: title: \"Tasks: /memory:search Runtime Remediation [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs/tasks]\"\n  Line 4: description: \"Per-defect work units for /memory:search runtime remediation, organized by root-cause cluster. Findings-packet tasks completed; remediation tasks deferred to follow-up packet.\"\n  Line 6:   - \"memory search remediation tasks\"\n  Line 13:     packet_pointer: \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs\"\n  Line 28: # Tasks: /memory:search Runtime Remediation\n  Line 91: - [x] T303 Added \"Forbidden Phrase Enforcement (REQ-003 / Cluster 3)\" subsection to `.opencode/commands/memory/search.md` with full forbidden→required substitution table, mandatory pre-render gate steps, and a verification grep\n  Line 101: - [ ] T501 Thread stable sessionId through `/memory:search` invocations within an OpenCode session\n  Line 104: - [ ] T504 Regression test: two consecutive `/memory:search` calls in same session share session ID; second call dedupes prior triggers\n  Line 108: - [ ] T602 [P] Add CocoIndex daemon health check at `/memory:search` invocation start\n  Line 133: - [ ] T906 Verify rendering vocabulary on empty-result `/memory:search` invocation\n  Line 147: - [ ] Memory indexer surfaces this packet via `memory_search \"memory search runtime bugs\"`\n  Line 160: - **Canonical command spec**: `.opencode/commands/memory/search.md`\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/spec.md:\n  Line 82: - Modifying the canonical command spec at `.opencode/commands/memory/search.md`\n  Line 138: - **Target tools**: `memory_search`, `memory_match_triggers` (trigger phrase \"planner-first\" should hit)\n  Line 152: - **Target tools**: `memory_search` with `intent:find_decision` and `specFolder` filter\n  Line 159: - **Target tools**: `code_graph_query` (structural traversal), fallback to `cocoindex_search` or grep\n  Line 166: - **Target tools**: `memory_context` deep mode + cocoindex hybrid\n  Line 173: - **Target tools**: `cocoindex_search` (semantic), `code_graph_query` (callers), grep (tokens like \"tokenBudget\")\n  Line 186: - **Expected outcome**: Surfaces sibling packet `005-memory-search-runtime-bugs`; recommends starting with spec.md §8 probes\n  Line 192: - **Prompt**: `Run /memory:search preflight specs/026/003/005 T101.`\n  Line 194: - **Target tools**: `/memory:search preflight ...` analysis routing per command spec §5A\n  Line 211: - **1**: Suboptimal tool (works but inefficient, e.g., generic memory_search when memory_search with anchors would be cleaner)\n  Line 212: - **2**: Optimal tool selection per expected behavior; uses CocoIndex/code_graph/memory_search correctly per scenario\n  Line 348: | Tool Selection | 1 | Used grep instead of memory_search (no MCP available) |\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/plan.md:\n  Line 60: - [x] Sibling packet 005-memory-search-runtime-bugs identifies known defects so we can cross-reference\n  Line 171: | Sibling packet 005-memory-search-runtime-bugs | Internal | Green (just landed) | Cross-references work |\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/spec.md:\n  Line 8:   - \"memory search cross-AI test\"\n  Line 53: | **Sibling Phases** | 005-memory-search-runtime-bugs (findings packet for related defects) |\n  Line 74: The system-spec-kit \"Search / Query / Intelligence\" surfaces (memory_search, memory_context, code_graph_query, advisor_recommend, intent classifier, etc.) have grown organically across 26+ optimization packets. Sibling packet `005-memory-search-runtime-bugs` catalogs 17 defects observed in a single live session. We need a reproducible, cross-AI stress-test that quantifies how well the search intelligence performs under realistic prompt variation — not just bug-hunt, but ongoing quality regression.\n  Line 94: - Fixing the 17 defects in sibling packet `005-memory-search-runtime-bugs` (separate remediation packet handles that).\n  Line 142: | REQ-010 | Cross-link to 005 defects | Findings cross-reference REQ IDs from sibling 005-memory-search-runtime-bugs when a scenario surfaces a known defect |\n  Line 163: - **SC-003**: Findings surface at least one actionable insight that was not already known from `005-memory-search-runtime-bugs` (i.e., the playbook adds new signal).\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/tasks.md:\n  Line 144: - **Sibling defects packet**: `../../005-memory-search-runtime-bugs/` — cross-reference target\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/001-search-scenario-design/tasks.md:\n  Line 105: - **Sibling defects packet**: `../../005-memory-search-runtime-bugs/`\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/tasks.md:\n  Line 117: - **Sibling packet (defects)**: `../005-memory-search-runtime-bugs/`\n  Line 122: - **Canonical command spec**: `.opencode/commands/memory/search.md`\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs/spec.md:\n  Line 3: title: \"Feature Specification [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs/spec]\"\n  Line 4: description: \"Findings spec cataloging /memory:search runtime bugs and refinements observed via live conversation + reproduction probes (intent classifier, truncation wrapper, output rendering, causal-stats hygiene).\"\n  Line 6:   - \"005-memory-search-runtime-bugs\"\n  Line 7:   - \"memory search runtime bugs\"\n  Line 19:     packet_pointer: \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs\"\n  Line 22:     recent_action: \"Authored findings spec from live /memory:search reproduction\"\n  Line 31:       fingerprint: \"sha256:memory-search-runtime-bugs-2026-04-26\"\n  Line 32:       session_id: \"005-memory-search-runtime-bugs-2026-04-26\"\n  Line 42: # Feature Specification: /memory:search Runtime Bugs and Refinements\n  Line 69: A live `/memory:search` session against the indexed-continuity runtime exposed contract violations and degraded UX across the retrieval, output rendering, and causal-graph subcommands. The empty-arguments gate fired correctly, but every downstream stage produced at least one observable defect: the intent classifier emitted `fix_bug` (confidence 0.098) for the query \"Semantic Search\" despite the spec mandating `understand` as the no-keyword-match fallback; the `memory_context` wrapper reported `truncated=true` and zero `results` while consuming only 2% of its 3000-3500 token budget; the assistant rendering used the explicitly-forbidden phrase \"Auto-triggered memories\"; `causal-stats` returned three of six valid relation types and labeled itself `health: \"healthy\"` while reporting `meetsTarget: false`. The root spec at `.opencode/commands/memory/search.md` documents the intended behavior, but the runtime drifts from it on multiple axes.\n  Line 81: - Documenting every observed defect from the conversation transcript and the live reproduction probes against `memory_context`, `memory_search`, and `memory_causal_stats`.\n  Line 82: - Cross-referencing each defect against the canonical spec at `.opencode/commands/memory/search.md` to separate documented contract violations from undocumented gaps.\n  Line 88: - Modifying the `/memory:search` command source file at `.opencode/commands/memory/search.md`.\n  Line 128: | REQ-011 | Session deduplication MUST be effective across calls within a single user session. | Currently each `/memory:search` invocation gets a new ephemeral `effectiveSessionId`, so `enableDedup=true` never engages. After fix, command threads a stable session identifier (e.g., per OpenCode session) or documents the limitation explicitly. |\n  Line 137: | REQ-015 | Trigger and constitutional channels SHOULD participate in dedup. | Currently the same 5 trigger matches resurface across calls in the same conversation; cosmetically redundant. |\n  Line 152: **Given** an empty-results situation with trigger matches, **when** the formatter renders, **then** the heading reads \"Trigger-matched spec-doc records (matched on phrase \\\"<keyword>\\\")\" and never \"Auto-triggered memories\".\n  Line 237: Authoritative sources: `.opencode/commands/memory/search.md` (canonical spec), `.opencode/skills/system-spec-kit/mcp_server/` (runtime), sibling packets `001-cache-warning-hooks` (token-budget patterns), `002-memory-quality-remediation` (prior repair history).\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs/plan.md:\n  Line 3: title: \"Implementation Plan: /memory:search Runtime Remediation [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs/plan]\"\n  Line 4: description: \"Root-cause clusters and remediation strategy for /memory:search runtime bugs catalogued in spec.md. Findings-only packet; this plan briefs the follow-up remediation packet.\"\n  Line 6:   - \"memory search remediation plan\"\n  Line 14:     packet_pointer: \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs\"\n  Line 30: # Implementation Plan: /memory:search Runtime Remediation\n  Line 51: `spec.md` catalogs 17 distinct defects across 4 P0, 7 P1, and 6 P2 buckets observed in `/memory:search`. Many share underlying root causes; this plan groups them into 7 clusters so a follow-up remediation packet can address each cluster independently and re-verify against the same probes captured in spec §8. This packet itself is findings-only — implementation is deferred.\n  Line 69: - [ ] Memory indexer surfaces this packet via `memory_search`\n  Line 104: `/memory:search \"<query>\"` → command harness parses args → routes to `memory_context` (retrieval mode) or analysis subcommand → wrapper assembles response with `meta` + `data` + `hints` → renderer formats output block → assistant emits to user. Defects span every stage of this pipeline; clusters above map to specific stages.\n  Line 142: | Integration | End-to-end `/memory:search` invocations against fixture queries | Vitest + MCP server harness |\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/iterations/iteration-005.md:\n  Line 11: | REQ-001 identifier preservation | Precise `tool-schemas.ts` `name: 'memory_*'` count = 21. Handler files matching `mcp_server/handlers/memory-*.ts` = 17. Unique slash-command mentions across OpenCode, Claude, and Gemini mirrors = 4 (`/memory:save`, `/memory:search`, `/memory:learn`, `/memory:manage`). Each runtime command folder has 4 command files. `_memory:` remains in `spec.md:15`. `references/memory/` and `scripts/dist/memory/` are present. `working_memory` remains present in the cognitive subsystem. | PASS |\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/iterations/iteration-003.md:\n  Line 12: - `mcp_server/tool-schemas.ts` still declares 21 `memory_*` MCP tool names: `memory_context`, `memory_search`, `memory_quick_search`, `memory_match_triggers`, `memory_save`, `memory_list`, `memory_stats`, `memory_health`, `memory_delete`, `memory_update`, `memory_validate`, `memory_bulk_delete`, `memory_drift_why`, `memory_causal_link`, `memory_causal_stats`, `memory_causal_unlink`, `memory_index_scan`, `memory_get_learning_history`, `memory_ingest_start`, `memory_ingest_status`, `memory_ingest_cancel`.\n  Line 14: - `/memory:save`, `/memory:search`, `/memory:learn`, and `/memory:manage` command files remain present across OpenCode, Claude, and Gemini mirrors.\n  Line 23: - `mcp_server/tool-schemas.ts:47-54` keeps tool names frozen while `memory_context` / `memory_search` descriptions point to spec-doc continuity retrieval and indexed spec-doc records.\n  Line 107: - `feature_catalog/feature_catalog.md:171-179` still references correct MCP tool names (`memory_context`, `memory_quick_search`, `memory_search`, `memory_save`, and related tools).\n  Line 117: - `manual_testing_playbook/13--memory-quality-and-indexing/003-context-save-index-update.md:32-44` still validates generated context artifacts through `memory_search` / `memory_context` and tier-invariant spot checks.\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/iterations/iteration-001.md:\n  Line 24: Identifier rename audit passed: all 21 no-touch `memory_*` tool names are present in `tool-schemas.ts`, `/memory:save`, `/memory:search`, `/memory:learn`, and `/memory:manage` remain present in command docs, `_memory:` remains at `spec.md:15`, handler filename count is 17, `references/memory/` and `scripts/dist/memory/` exist, and SQL table names including `working_memory` remain present.\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/prompts/iteration-001.md:\n  Line 20:    - 21 `memory_*` MCP tools: memory_context, memory_search, memory_quick_search, memory_match_triggers, memory_save, memory_update, memory_delete, memory_list, memory_index_scan, memory_validate, memory_health, memory_stats, memory_bulk_delete, memory_get_learning_history, memory_drift_why, memory_causal_link, memory_causal_unlink, memory_causal_stats, memory_ingest_start, memory_ingest_status, memory_ingest_cancel\n  Line 21:    - 4 slash commands: /memory:save, /memory:search, /memory:learn, /memory:manage\n  Line 50:    grep -rn 'memory_search\\|memory_save\\|memory_context\\|memory_match_triggers' .opencode/skills/system-spec-kit/mcp_server/tool-schemas.ts | wc -l\n  Line 52:    grep -rn '/memory:save\\|/memory:search\\|/memory:learn\\|/memory:manage' .opencode/commands/memory/\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/skilled-agent-orchestration/048-cli-testing-playbooks/review/iterations/iteration-002.md:\n  Line 111: CO-021 line 34 PASS depends on opencode memory_search, not Codex execution.\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/deep-review-strategy.md:\n  Line 74: - 21 MCP tool names: `memory_context`, `memory_search`, `memory_quick_search`, `memory_match_triggers`, `memory_save`, `memory_update`, `memory_delete`, `memory_list`, `memory_index_scan`, `memory_validate`, `memory_health`, `memory_stats`, `memory_bulk_delete`, `memory_get_learning_history`, `memory_drift_why`, `memory_causal_link`, `memory_causal_unlink`, `memory_causal_stats`, `memory_ingest_start`, `memory_ingest_status`, `memory_ingest_cancel`\n  Line 75: - 4 slash commands: `/memory:save`, `/memory:search`, `/memory:learn`, `/memory:manage`\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/skilled-agent-orchestration/049-mcp-testing-playbooks/implementation-summary.md:\n  Line 93: | **CCC-001** | Project initialization (existing playbook) | ✅ **PASS** (status surrogate) | `ccc status` exit 0; output includes `Project: ...`, `Settings: .../.cocoindex_code/settings.yml`, index stats `1,169,038 chunks`, `95,374 files`, multi-language coverage. Project was already initialized; status query is the safe equivalent of CCC-001 init for an existing project. |\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/skilled-agent-orchestration/049-mcp-testing-playbooks/research.md:\n  Line 254: | Daemon socket health (`~/.cocoindex_code/daemon.sock`) | Partially via DMN-002 (daemon.pid + daemon.sock files exist) | Adequate |\n  Line 255: | Daemon log inspection (`~/.cocoindex_code/daemon.log`) | NO explicit scenario | Minor; covered by Recovery section in SKILL.md |\n  Line 281: | Daemon socket health (`~/.cocoindex_code/daemon.sock`) | YES — DMN-002 explicitly checks `ls ~/.cocoindex_code/daemon.pid ~/.cocoindex_code/daemon.sock` for both files | no action |\n  Line 282: | Daemon log inspection (`~/.cocoindex_code/daemon.log`) | PARTIAL — referenced in MCP-007 + DMN-002 failure-triage steps; no first-class scenario, but covered as recovery aid in adjacent scenarios | no action — adequate via failure-triage references |\n  Line 294: 3. **DMN-003** (Helper-script readiness) — fills the SKILL.md §4 ALWAYS rule #7 mandate by exercising both `doctor.sh` and `ensure_ready.sh` on positive (healthy project) and negative (`--require-config` against a directory without `.cocoindex_code/`) paths plus idempotency.\n\n/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/phrasing-audit.md:\n  Line 118: | `context.md`, `deep-research.md`, `deep-review.md`, `orchestrate.md`, `review.md` | Each agent definition references `memory_context()` / `memory_search()` / `memory_match_triggers()` in workflow prose (\"Do NOT redundantly call \\`memory_context\\` …\"). Tool names stay verbatim (REQ-001). Surrounding prose (\"memory operations\" / \"your memory\" / \"the memory system\") gets the standard rewrite. | Apply vocabulary-key replacements to surrounding prose; leave backtick-quoted tool names alone. |\n  Line 122: The playbook scenarios script tool calls (e.g., \"run `memory_search('semantic search')`\"). Tool calls stay literal. Prose around them (\"Verify that recent memories are returned\") gets re-phrased per vocabulary key. ~62 occurrences, mostly mechanical.\n  Line 133: | `memory_search` (`:55`) | `[L2:Core] Search conversation memories semantically using vector similarity. Returns ranked results with similarity scores. Constitutional tier memories are ALWAYS included at the top of results (~2000 tokens max), regardless of query. […]` | `[L2:Core] Search the indexed spec-doc continuity store semantically using vector similarity. Returns ranked records (one record = one indexed spec-doc surface) with similarity scores. Constitutional tier rules are ALWAYS included at the top of results (~2000 tokens max), regardless of query. […]` |\n  Line 134: | `memory_search` `sessionId` param (`:81`) | `Session identifier for working memory and session deduplication (REQ-001). When provided with enableDedup=true, prevents duplicate memories from being returned in the same session (~50% token savings on follow-up queries).` | `Session identifier for working-memory cache and session deduplication (REQ-001). When provided with enableDedup=true, prevents duplicate spec-doc records from being returned in the same session (~50% token savings on follow-up queries).` |\n  Line 135: | `memory_search` `enableDedup` param (`:86`) | `Enable session deduplication (REQ-001). When true and sessionId provided, filters out already-sent memories.` | `Enable session deduplication (REQ-001). When true and sessionId provided, filters out already-sent spec-doc records.` |\n  Line 136: | `memory_search` `includeContiguity` param (`:91`) | `Include adjacent/contiguous memories in results` | `Include adjacent/contiguous spec-doc records in results (records from the same packet, neighboring sections)` |\n  Line 137: | `memory_search` `includeConstitutional` param (`:95`) | `Include constitutional tier memories at top of results (default: true)` | `Include constitutional tier rules at top of results (default: true)` |\n\n(Results truncated: showing 100 of 36376 matches (36276 hidden). Consider using a more specific path or pattern.)","metadata":{"matches":36376,"truncated":true},"title":"memory.?search|cocoindex|trigger.?match","time":{"start":1777227927871,"end":1777227928103}}}}
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:38:4. `/spec_kit:plan` does NOT run `/memory:save` — the plan docs themselves are the initial memory
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:46:**At session end**: user runs `/memory:save`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:49:1. `/memory:save` collects session context (exchanges, tool calls, decisions, blockers)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:108:3. Calls `/memory:save` with final session context
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:137:If a user runs `/memory:save` before any `implementation-summary.md` exists (e.g., mid-implementation before running `/spec_kit:complete`), the merge has no target. Router falls back to saving to `handover.md` as "pending implementation" content.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-019.md:101:- Manual save flow (user runs `/memory:save`, inspects routing output)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-039.md:268:   2. Run /memory:save --continue scratch/pending-save-...
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/research.md:61:### Q6. `/memory:save` user flow
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/deep-research-dashboard.md:115:- [x] **Q6** — /memory:save user flow (iter 14)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/findings-registry.json:101:      "question": "/memory:save user flow",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/findings-registry.json:230:      "title": "Routing transparency is the core UX win for /memory:save",
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:5523:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:5811:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/SKILL.md:566:**Memory Commands:** 4 memory slash commands (`/memory:save`, `/memory:manage`, `/memory:learn`, `/memory:search`) cover the memory command surface, with shared-memory operations available under `/memory:manage shared`, while `/spec_kit:resume` owns session recovery through the broader memory/session recovery stack. The `/memory:search` command covers all analysis and retrieval workflows. See `.opencode/commands/memory/` and `.opencode/commands/spec_kit/resume.md` for command documentation.
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:5970:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:5971:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:6277:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:6278:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:6779:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/README.md:641:The **commands** are the doors into the system. Each command opens access to the tools it needs. `/spec_kit:complete` runs a full workflow from spec through implementation and packet-local changelog closeout when applicable. `/memory:save` saves context. `/spec_kit:resume` recovers or continues a previous session.
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:7100:   641	The **commands** are the doors into the system. Each command opens access to the tools it needs. `/spec_kit:complete` runs a full workflow from spec through implementation and packet-local changelog closeout when applicable. `/memory:save` saves context. `/spec_kit:resume` recovers or continues a previous session.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/spec.md:101:| 4 | `004-memory-save-rewrite/` | Complete | Feature Specification: /memory:save Planner-First Default |
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/015-manual-testing-per-playbook/003-discovery/implementation-summary.md:208:2. **CHK-051 deferred** — Memory save to preserve session context not triggered; can be run post-session with `/memory:save`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:1768:.opencode/skills/system-spec-kit/mcp_server/tests/memory-save-planner-first.vitest.ts
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:6690:.opencode/specs/system-spec-kit/024-compact-code-graph/research/iterations/iteration-029.md:34:   `/memory:save` itself; `/spec_kit:handover` (it both mandates `generate-context.js` after handover and separately recommends `/memory:save`); `/spec_kit:plan`; `/spec_kit:implement`; `/spec_kit:complete`; `/spec_kit:debug`; `/spec_kit:deep-research`; and `/spec_kit:deep-review`. Today each of those workflows still documents a manual save boundary, so a future "Stop hook already saved context" rule would need to either suppress, downgrade, or conditionalize those instructions. [.opencode/commands/memory/save.md:73-75] [.opencode/commands/spec_kit/handover.md:215-216] [.opencode/commands/spec_kit/handover.md:256-264] [.opencode/commands/spec_kit/plan.md:303-315] [.opencode/commands/spec_kit/implement.md:195-201] [.opencode/commands/spec_kit/complete.md:311-315] [.opencode/commands/spec_kit/debug.md:304-309] [.opencode/commands/spec_kit/deep-research.md:198-209] [.opencode/commands/spec_kit/deep-review.md:234-245]
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9550:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:3:description: "Make /memory:save planner-first (non-mutating) by default while preserving full-auto as an explicit fallback, retire the legacy [spec]/memory/*.md write path, and decouple freshness (graph-metadata refresh, spec-doc reindex, enrichment) from the hot save path via explicit follow-up APIs."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9552:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:45:      - "Implementation shipped planner-first default with explicit full-auto fallback; freshness work moved to explicit follow-up APIs."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9553:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:60:This packet delivers the end state implied by that analysis. `/memory:save` is planner-first by default: the handler computes the same route and legality data as before but stops short of mutation and returns structured planner output instead. `full-auto` is preserved as an explicit fallback via `SPECKIT_SAVE_PLANNER_MODE=full-auto`, with canonical atomic mutation, `POST_SAVE_FINGERPRINT` safety parity, same-path identity, and rollback intact. The legacy `[spec]/memory/*.md` write path is retired. Four previously default-on behaviors become explicit opt-in: `SPECKIT_ROUTER_TIER3_ENABLED`, `SPECKIT_QUALITY_AUTO_FIX`, `SPECKIT_RECONSOLIDATION_ENABLED`, `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED`. Freshness becomes follow-up work via three new APIs: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. `hybrid` is documented as reserved and currently behaves like `plan-only`. The content-router category contract is preserved with one honest, scoped exception: a Tier 3 default-disable and manual-review guard inside `content-router.ts`. 43 implementation tasks shipped under v3.4.1.0. A deep-review pass flagged 3 P0, 5 P1, and 1 P2 findings on router honesty, fallback safety parity, blocker classification, deferred-helper coverage, and changelog accuracy; all 9 were resolved before closeout.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9554:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:95:Ship a `/memory:save` contract that matches the evidence: planner-first by default so operators see the plan before anything changes, full-auto preserved as an explicit fallback for the cases that still need it, and freshness work moved to callable follow-up APIs so every save doesn't pay for work it doesn't need. Retire the legacy `[spec]/memory/*.md` write path end-to-end. Make four previously default-on behaviors opt-in via per-subsystem env flags, preserve `hybrid` as a reserved value, and record the scoped router exception honestly so docs match the code.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9559:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:139:| Command docs | `../../../../command/memory/save.md`, `../../../../command/memory/manage.md` | Modify | Document planner-first default, fallback, and follow-up freshness actions |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9564:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:174:| REQ-014 | Shipped documentation must match the runtime contract. | `/memory:save` docs, `ENV_REFERENCE.md`, release notes, and templates describe planner-first default, explicit fallback, follow-up APIs, reserved `hybrid`, and the scoped router exception honestly. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9574:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:287:- **NFR-U02**: Operator docs must describe planner-first default, explicit fallback, and follow-up APIs in consistent language.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9576:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:318:- A reader assumes "planner-first" means `full-auto` was deleted → docs must be explicit that `full-auto` remains available as fallback.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9579:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:439:- [x] Implementation truth preserved: planner-first default + explicit fallback + follow-up APIs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9580:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:457:| Tooling operators | `/memory:save` users | Medium | Need clear default, fallback, and follow-up behavior |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9581:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:466:- Shipped planner-first default for `/memory:save` with explicit `full-auto` fallback.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9586:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:541:| Research | Could the save system be redesigned without replacing the core writer? | Yes. The research recommended a planner-first wrapper around the existing canonical prep and fallback writer. | `research/014-research-snapshot/research.md`, `research/014-research-snapshot/iterations/iteration-020.md` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9598:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:3:description: "Milestoned delivery (M1-M10) for the planner-first /memory:save contract: audit + retirement of the legacy [spec]/memory/*.md write path, 20-iteration relevance research, planner contract + fallback implementation, routing/quality/reconsolidation/enrichment trim, follow-up API extraction, verification, release alignment, and deep-review remediation."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9599:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:34:      - "The planner-first default + explicit fallback architecture preserves the canonical writer while eliminating the default-path overreach."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9600:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:60:The plan delivers a planner-first default for `/memory:save` while preserving the canonical atomic writer as an explicit fallback. It retires the legacy `[spec]/memory/*.md` write path end-to-end, gates four previously default-on save-path behaviors behind explicit env flags, and extracts freshness into three explicit follow-up APIs. Delivery runs through 10 sequential milestones: audit surface + classification, retirement cutover, relevance research, planner contract build-out, routing + quality trim, verification + transcript prototypes, release alignment, and deep-review remediation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9602:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:111:Planner-first wrapper around the preserved canonical atomic writer. The default path computes route + legality + advisory data and returns structured planner output without mutating files. An explicit fallback path activates the canonical writer with full atomic semantics intact. Freshness work lives in callable follow-up APIs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9606:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:204:- [x] T006-T008 Make `generate-context.ts` request planner-first behavior by default; update `/memory:save` docs; make `memory-save.ts` return planner output by default with explicit fallback.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9609:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:223:- [x] T041-T043 Review structural parity between `/memory:save` + `AGENTS.md` + system-spec-kit skill doc; review fallback safety against `atomic-index-memory.ts` + `create-record.ts`; review transcript mismatches and convert unresolved issues into follow-on tasks.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9617:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:469:4. **Ship the planner-first default + full-auto fallback** — critical because it is the operator-facing contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9618:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:488:| M6 | Planner contract | Planner-first default + fallback + shared types | Runtime handler |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9638:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:154:- [x] **P015-T007** Update `/memory:save` docs for planner-first default and fallback. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9647:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:241:- [x] `/memory:save` docs, `ENV_REFERENCE.md`, templates, and v3.4.1.0 release notes align on default/opt-in/reserved/fallback vocabulary
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9649:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:32:      - "Packet is complete; shipped contract is planner-first default with explicit full-auto fallback."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9650:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:58:`/memory:save` is planner-first by default. Invoking it now returns a structured planner response — routes, legality blockers, advisories, follow-up actions — and mutates no files on disk. Operators who still need automatic mutation can opt in by setting `SPECKIT_SAVE_PLANNER_MODE=full-auto`, which runs the canonical atomic writer with `POST_SAVE_FINGERPRINT` safety parity, same-path identity, promotion, and rollback intact. `hybrid` is reserved and currently behaves like `plan-only`. The legacy `[spec]/memory/*.md` write path is retired runtime-wide. Four previously default-on save-path behaviors are now explicit opt-in: Tier 3 routing (`SPECKIT_ROUTER_TIER3_ENABLED`), quality-loop auto-fix (`SPECKIT_QUALITY_AUTO_FIX`), reconsolidation-on-save (`SPECKIT_RECONSOLIDATION_ENABLED`), and post-insert enrichment (`SPECKIT_POST_INSERT_ENRICHMENT_ENABLED`). Freshness is callable via three new follow-up APIs: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. Docs, env reference, and release notes all agree on the same default/opt-in/reserved/fallback vocabulary.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9651:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:70:43 of 43 tasks completed under v3.4.1.0. The planner-first contract + flag plumbing (M1) landed before the trim work (M2-M4) so the schema was stable by the time routing, quality, reconsolidation, and enrichment moved behind env gates. Follow-up APIs (`refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`) expose freshness as callable work instead of baked-in side effects. Targeted tests covered planner-default behavior, fallback parity, router deterministic default, quality advisory output, structural blocker preservation, reconsolidation opt-in, enrichment deferral, continuity upsert parity, planner UX readability, CLI target authority, and end-to-end integration. Three real session transcripts exercised planner-first behavior before closeout.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9653:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:134:| Ship planner-first default + explicit full-auto fallback | Non-mutating default is reviewable; full-auto remains available for automation that depends on it |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:9655:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:153:| Implementation carry-over | PASS — packet preserves planner-first default, explicit fallback, follow-up APIs, and 43 completed tasks |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:11143:   153	| Sibling packet `004-memory-save-rewrite` (planner-first contract) | Internal | Green (complete) | None — already landed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:11326:   165	  - `../004-memory-save-rewrite/` — planner-first save contract
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:12134:.opencode/skills/system-spec-kit/mcp_server/ENV_REFERENCE.md:102:| `SPECKIT_QUALITY_AUTO_FIX` | `false` | boolean | Opt-in save-time quality auto-fix retries for planner-first flows. Disabled by default on saves. | `lib/search/search-flags.ts` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:12802:.opencode/skills/system-spec-kit/mcp_server/tests/description/fixtures/017-review-findings-remediation.description.json:6:  "description": "Remediation charter for 27 consolidated tasks closing the Phase 017 review backlog across four waves. The headline fix is H-56-1: the canonical `/memory:save` path had been a deterministic metadata-freshness no-op because of a dead-code guard, a full-auto-only graph refresh gate, and the default plan-only execution mode; the packet also closes the code-graph readiness asymmetry, the Copilot compact-cache observability gap, the session-resume auth binding work, and the deferred maintainability follow-ups that Phase 018 depends on for traceable recovery and rollout hygiene.",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I2/cli-codex-1/output.txt:13473:.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:156: * Save-time quality auto-fix retries gate for planner-first flows.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/015-manual-testing-per-playbook/012-query-intelligence/checklist.md:106:- [ ] CHK-061 [P2] Memory save triggered after phase execution to make query-intelligence context available for future sessions — deferred; can be triggered by user via `/memory:save`
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/005-intellegix-code-agent-toolkit-master/research/iterations/iteration-022.md:17:- `[SOURCE: .opencode/commands/memory/save.md:7-25]` `/memory:save` has its own multi-tier folder-resolution ceremony before the actual save workflow starts.
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:2891:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:2892:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:3014:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:3043:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:3044:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/025-system-memory-rename/spec.md:184:4. All commands functional (`/memory:save`, `/memory:search`, `/memory:checkpoint`)
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/025-system-memory-rename/plan.md:324:1. Verify `/memory:save` command loads
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/025-system-memory-rename/checklist.md:66:  - Test: `/memory:save`, `/memory:search`, `/memory:checkpoint`
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/025-system-memory-rename/checklist.md:187:# Run in OpenCode: /memory:save, /memory:search, /memory:checkpoint
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-020.md:378:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-020.md:471:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/001-agent-lightning-main/research/iterations/iteration-023.md:19:- `complete` already links to `memory:save`, `handover`, and `resume` as adjacent lifecycle actions. [SOURCE: .opencode/commands/spec_kit/complete.md:487-491]
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/025-system-memory-rename/tasks.md:241:  - [x] `/memory:save` command loads
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:90:Any agent writing authored spec folder docs (`spec.md`, `plan.md`, `tasks.md`, `checklist.md`, `implementation-summary.md`, `decision-record.md`, `handover.md`, `review-report.md`, `debug-delegation.md`, `resource-map.md` (optional)) MUST use templates from .opencode/skills/system-spec-kit/templates/level_N/ for level-owned docs and the root cross-cutting templates where applicable, run `bash .opencode/skills/system-spec-kit/scripts/spec/validate.sh [spec_folder] --strict` after each file write, and route continuity updates through /memory:save. Deep-research workflow-owned packet markdown (`research/iterations/*.md`, `research/deep-research-*.md`, and progressive `research/research.md` loop updates) is exempt from that generic per-write rule; `/spec_kit:deep-research` must instead run targeted strict validation after every `spec.md` mutation it performs. @deep-research retains exclusive write access for `research/research.md`; @debug retains exclusive write access for `debug-delegation.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:92:- `handover.md` stays in the canonical recovery ladder and is maintained through `/memory:save` handover_state routing using `.opencode/skills/system-spec-kit/templates/handover.md` for initial creation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:100:| `handover.md`         | "handover", "next session", "continue later", "pass context", "ending session", "save state", "multi-session", "for next AI"  | Suggest `/memory:save` handover maintenance |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:243:    "/memory:save": "MEMORY",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:2206:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/scratch/agent-output-iter-003-codex-A2.md:248:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/005-confidence-calibration/memory/16-03-26_19-21__confidence-calibration.md:442:# AGENTS.md instructions for /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public  # AI Assistant Framework (Universal Template) > **Universal behavior framework** defining guardrails, standards, and decision protocols. --- ## 1. 🚨 CRITICAL RULES **HARD BLOCKERS (The "Four Laws" of Agent Safety):** 1. **READ FIRST:** Never edit a file without reading it first. Understand context before modifying. 2. **SCOPE LOCK:** Only modify files explicitly in scope. **NO** "cleaning up" or "improving" adjacent code. Scope in `spec.md` is FROZEN. 3. **VERIFY:** Syntax checks and tests **MUST** pass before claiming completion. **NO** blind commits. 4. **HALT:** Stop immediately if uncertain, if line numbers don't match, or if tests fail. (See "Halt Conditions" below). **OPERATIONAL MANDATES:** - **All file modifications require a spec folder** (Gate 3). - **Never lie or fabricate** - use "UNKNOWN" when uncertain. - **Clarify** if confidence < 80% (see §5 Confidence Framework). - **Use explicit uncertainty:** Prefix claims with "I'M UNCERTAIN ABOUT THIS:". **QUALITY PRINCIPLES:** - **Prefer simplicity**, reuse existing patterns, and cite evidence with sources - Solve only the stated problem; **avoid over-engineering** and premature optimization - **Verify with checks** (simplicity, performance, maintainability, scope) before making changes - **Truth over agreement** - correct user misconceptions with evidence; do not agree for conversational flow **HALT CONDITIONS (Stop and Report):** - [ ] Target file does not exist or line numbers don't match. - [ ] Syntax check or Tests fail after edit. - [ ] Merge conflicts encountered. - [ ] Edit tool reports "string not found". - [ ] Test/Production boundary is unclear. **MANDATORY TOOLS:** - **Spec Kit Memory MCP** for research tasks, context recovery, and finding prior work. **Memory saves MUST use `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]`** - NEVER manually create memory files. **GIT WORKFLOW:** Full details: `.opencode/skills/sk-git/` - Worktree setup, conventional commits, PR creation, branch management - Trigger keywords: worktree, branch, commit, merge, pr, pull request, git workflow, finish work, integrate changes ### Quick Reference: Common Workflows | Task | Flow | | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | **File modification** | Gate 3 (ask spec folder) → Gate 1 → Gate 2 → Load memory context → Execute | | **Research/exploration** | `memory_match_triggers()` → `memory_context()` (unified) OR `memory_search()` (targeted) → Document findings | | **Code search** | `Grep()` for text patterns, `Glob()` for file discovery, `Read()` for file contents | | **Resume prior work** | `/memory:continue` OR `memory_search({ query, specFolder, anchors: ['state', 'next-steps'] })` → Review checklist → Continue | | **Save context** | `/memory:save` OR `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]` → Auto-indexed | | **Claim completion** | Validation runs automatically → Load `checklist.md` → Verify ALL items → Mark with evidence | | **End session** | `/spec_kit:handover` → Save context → Provide continuation prompt | | **New spec folder** | Option B (Gate 3) → Research via Task tool → Evidence-based plan → Approval → Implement | | **Complex multi-step** | Task tool → Decompose → Delegate → Synthesize | | **Documentation** | sk-doc skill → Classify → Load template → Fill → Validate (`validate_document.py`) → DQI score → Verify | | **Web code** | sk-code-web skill → Webflow/CDN standards, minification, browser testing | | **OpenCode system code** | sk-code-opencode skill → JS/TS/Python/Shell standards, language detection, quality checklists | | **Git workflow** | sk-git skill → Worktree setup / Commit / Finish (PR) | | **Phase workflow** | `/spec_kit:phase` → Decompose → `create.sh --phase` → Populate parent/children → `validate.sh --recursive` | | **Database maintenance** | `/memory:manage` → stats, health, cleanup, checkpoint, ingest operations | | **Analysis/evaluation** | `/memory:analyze` → preflight, postflight, causal graph, ablation, dashboard, history | ### Coding Analysis Lenses | Lens | Focus | Detection Questions | | ------------------ | ---------------- | ---------------------------------------------------------------------------------- | | **CLARITY** | Simplicity | Is this the simplest code that solves the problem? Are abstractions earned? | | **SYSTEMS** | Dependencies | What does this change touch? What calls this? What are the side effects? | | **BIAS** | Wrong problem | Is user solving a symptom? Is this premature optimization? Is the framing correct? | | **SUSTAINABILITY** | Maintainability | Will future devs understand this? Is it self-documenting? Tech debt implications? | | **VALUE** | Actual impact | Does this change behavior or just refactor? Is it cosmetic or functional? | | **SCOPE** | Complexity match | Does solution complexity match problem size? Single-line fix or new abstraction? | ### Coding Anti-Patterns (Detect Silently) | Anti-Pattern | Trigger Phrases | Response | | ---------------------- | ----------------------------------------------- | --------------------------------------------------------------------------- | | Over-engineering | "for flexibility", "future-proof", "might need" | Ask: "Is this solving a current problem or a hypothetical one?" | | Premature optimization | "could be slow", "might bottleneck" | Ask: "Has this been measured? What's the actual performance?" | | Cargo culting | "best practice", "always should" | Ask: "Does this pattern fit this specific case?" | | Gold-plating | "while we're here", "might as well" | Flag scope creep: "That's a separate change - shall I note it for later?" | | Wrong abstraction | "DRY this up" for 2 instances | "These look similar but might not be the same concept. Let's verify first." | | Scope creep | "also add", "bonus feature" | "That's outside the current scope. Want to track it separately?" | --- ## 2. ⛔ MANDATORY GATES - STOP BEFORE ACTING **⚠️ BEFORE using ANY tool (except Gate Actions: memory_match_triggers, skill_advisor.py), you MUST pass all applicable gates below.** ### 🔒 PRE-EXECUTION GATES (Pass before ANY tool use) #### GATE 1: UNDERSTANDING + CONTEXT SURFACING [SOFT] BLOCK Trigger: EACH new user message (re-evaluate even in ongoing conversations) 1. Call `memory_match_triggers(prompt)` → Surface relevant context 2. Classify intent: Research or Implementation 3. Parse request → Check confidence AND uncertainty (see §4) 4. **Dual-threshold:** confidence ≥ 0.70 AND uncertainty ≤ 0.35 → PROCEED. Either fails → INVESTIGATE (max 3 iterations) → ESCALATE. Simple: <40% ASK | 40-69% CAUTION | ≥70% PASS > Gate 1 is SOFT — if file modification detected, Gate 3 (HARD) takes precedence. Ask spec folder question BEFORE analysis. #### GATE 2: SKILL ROUTING [REQUIRED for non-trivial tasks] 1. A) Run: `python3.opencode/skills/scripts/skill_advisor.py "[request]" --threshold 0.8` 2. B) Cite user's explicit direction: "User specified: [exact quote]" - Confidence ≥ 0.8 → MUST invoke skill | < 0.8 → general approach | User names skill → cite and proceed - Output: `SKILL ROUTING: [result]` or `SKILL ROUTING: User directed → [name]` - Skip: trivial queries only (greetings, single-line questions) #### GATE 3: SPEC FOLDER QUESTION [HARD] BLOCK — PRIORITY GATE - **Overrides Gates 1-2:** If file modification detected → ask Gate 3 BEFORE any analysis/tool calls - **Triggers:** rename, move, delete, create, add, remove, update, change, modify, edit, fix, refactor, implement, build, write, generate, configure, analyze, decompose, phase — or any task resulting in file changes - **Options:** A) Existing | B) New | C) Update related | D) Skip | E) Phase folder (e.g., `specs/NNN-name/001-phase/`) - **DO NOT** use Read/Edit/Write/Bash (except Gate Actions) before asking. ASK FIRST, wait for response, THEN proceed - **Phase boundary:** Gate 3 answers apply ONLY within current workflow phase. Plan→implement transition MUST re-evaluate. Exception: carry-over IS valid for Memory Save Rule #### CONSOLIDATED QUESTION PROTOCOL When multiple inputs are needed, consolidate into a SINGLE prompt — never split across messages. Include only applicable questions; omit when pre-determined. - **Round-trip optimization** — Only 1 user interaction needed for setup - **First Message Protocol** — ALL questions asked BEFORE any analysis or tool calls - **Violation:** Multiple separate prompts → STOP, apologize, re-present as single prompt - **Bypass phrases:** "skip context" / "fresh start" / "skip memory" / [skip] for memory loading; Level 1 tasks skip completion verification --- ### 🔒 POST-EXECUTION RULES #### MEMORY SAVE RULE [HARD] BLOCK Trigger: "save context", "save memory", `/memory:save`, memory file creation - If spec folder established at Gate 3 → USE IT (don't re-ask). Carry-over applies ONLY to memory saves - If NO folder and Gate 3 never answered → HARD BLOCK → Ask user - **Script:** `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]` - Mode 1 (JSON): Write JSON to `/tmp/save-context-data.json`, pass as arg - Mode 2 (Direct): Pass spec folder path (e.g., `specs/005-memory`) - Subfolder: `003-parent/121-child` or bare `121-child` (auto-searches parents) - **Indexing:** For immediate MCP visibility after save: `memory_index_scan({ specFolder })` or `memory_save()` - **Violation:** Write tool on `memory/` path → DELETE and re-run via script #### COMPLETION VERIFICATION RULE [HARD] BLOCK Trigger: Claiming "done", "complete", "finished", "works" 1. Validation runs automatically on spec folder (if exists) 2. Load `checklist.md` → Verify ALL items → Mark `[x]` with evidence - Skip: Level 1 tasks (no checklist.md required) | Exit 0 = pass, Exit 1 = warnings, Exit 2 = errors (must fix) #### VIOLATION RECOVERY [SELF-CORRECTION] Trigger: About to skip gates, or realized gates were skipped → STOP → STATE: "Before I proceed, I need to ask about documentation:" → ASK Gate 3 (A/B/C/D/E) → WAIT #### Self-Check (before ANY tool-using response): - [ ] File modification? Asked spec folder question? - [ ] Skill routing verified? - [ ] Saving memory? Using `generate-context.js` (not Write tool)? - [ ] Aligned with ORIGINAL request? No scope drift? - [ ] Claiming completion? `checklist.md` verified? --- ## 3. 📝 CONVERSATION DOCUMENTATION Every conversation that modifies files MUST have a spec folder. **Full details:** system-spec-kit SKILL.md (§1 When to Use, §3 How it Works, §4 Rules) ### Documentation Levels | Level | LOC | Required Files | Use When | | ------ | -------------- | ----------------------------------------------------- | ---------------------------------- | | **1** | <100 | spec.md, plan.md, tasks.md, implementation-summary.md | All features (minimum) | | **2** | 100-499 | Level 1 + checklist.md | QA validation needed | | **3** | ≥500 | Level 2 + decision-record.md (+ optional research/research.md) | Complex/architecture changes | | **3+** | Complexity 80+ | Level 3 + AI protocols, extended checklist, sign-offs | Multi-agent, enterprise governance | > **Note:** `implementation-summary.md` is REQUIRED for all levels but created **after implementation completes**, not at spec folder creation time. See SKILL.md §4 Rule 13. **Rules:** When in doubt → higher level. LOC is soft guidance (risk/complexity can override). Single typo/whitespace fixes (<5 characters in one file) are exempt. **Spec folder path:** `specs/[###-short-name]/` | **Templates:** `.opencode/skills/system-spec-kit/templates/` **For details on:** folder structure, `scratch/` vs `memory/` usage, sub-folder versioning, checklist verification (P0/P1/P2), and completion workflow — see system-spec-kit SKILL.md §3. --- ## 4. 🧑🏫 CONFIDENCE & CLARIFICATION FRAMEWORK **Core Principle:** If confidence < 80%, pause and ask for clarification with multiple-choice options. | Confidence | Action | | ------------ | -------------------------------------------- | | **≥80%** | Proceed with citable source | | **40-79%** | Proceed with caveats | | **<40%** | Ask for clarification or mark "UNKNOWN" | | **Override** | Blockers/conflicts → ask regardless of score | **Logic-Sync Protocol:** On contradiction (Spec vs Code, conflicting requirements) → HALT → Report "LOGIC-SYNC REQUIRED: [Fact A] contradicts [Fact B]" → Ask "Which truth prevails?" **Escalation:** Confidence stays <80% after two failed attempts → ask with 2-3 options. Blockers beyond control → escalate with evidence and proposed next step. --- ## 5. 🧠 REQUEST ANALYSIS & SOLUTION FRAMEWORK **Flow:** Parse request → Read files first → Analyze → Design simplest solution → Validate → Execute | Principle | Rule | Anti-Pattern | | ----------------- | -------------------------------------------------- | --------------------------------------- | | **Simplicity** | Reuse patterns; earn every abstraction | Utilities for <3 uses, single-impl intf | | **Evidence** | Cite `[SOURCE: file:lines]` or `[CITATION: NONE]` | Claims without verification | | **Scope Match** | Solution size = problem size | Refactoring during bug fix | | **Right Problem** | Root cause, not symptom; measure before optimizing | Premature optimization, wrong framing | **CLARITY Triggers** (justify before proceeding): - Utility for <3 uses | Config for single value | Abstraction without clear boundary - Pattern where simple code suffices | Interface for single impl - On bias → don't argue, redirect to root cause **Pre-Change Checklist:** - [ ] Read first? | Simplest solution? | Scope discipline? - [ ] Confidence ≥80%? | Sources cited? | Spec folder? | Approval? **Five Checks (>100 LOC):** Necessary now? | Alternatives (≥2)? | Simplest sufficient? | On critical path? | No tech debt? **STOP CONDITIONS:** Any check unchecked | no spec folder | no approval → STOP and address --- ## 6. 🤖 AGENT ROUTING When using the orchestrate agent or Task tool for complex multi-step workflows, route to specialized agents: ### Runtime Agent Directory Resolution Use the agent directory that matches the active runtime/provider profile: | Runtime / Profile | Agent Directory | Usage Rule | | -------------------------------------- | -------------------------- | ----------------------------------------------------------- | | **Copilot (default OpenCode profile)** | `.opencode/agents/` | Load base agent definitions from this directory | | **ChatGPT profile** | `.opencode/agents/chatgpt/` | Load ChatGPT-specific agent definitions from this directory | | **Claude profile** | `.claude/agents/` | Load Claude-specific agent definitions from this directory | | **Gemini CLI** | `.gemini/agents/` | Load Gemini-specific agent definitions from this directory | **Resolution rule:** pick one directory by runtime and stay consistent for that workflow phase. ### Agent Definitions - **`@general`** — Implementation, complex tasks - **`@context`** — ALL codebase exploration, file search, pattern discovery, context loading. Dispatches sub-agents for fast search and deep investigation - **`@orchestrate`** — Multi-agent coordination, complex workflows - **`@research`** — Evidence gathering, planning, Gate 3 Option B. May write `research/research.md` inside spec folders - **`@write`** — Creating READMEs, Skills, Guides - **`@review`** — Code review, PRs, quality gates (READ-ONLY) - **`@speckit`** — Spec folder creation Level 1-3+. **EXCLUSIVE:** Only agent permitted to write `*.md` inside spec folders. Exceptions: `memory/` (generate-context.js), `scratch/` (any agent), `handover.md` (@handover), `research/research.md` (@research), `debug-delegation.md` (@debug) - **`@debug`** — Fresh perspective debugging, root cause analysis. May write `debug-delegation.md` inside spec folders - **`@handover`** — Session continuation, context preservation. May write `handover.md` inside spec folders - **`@ultra-think`** — Multi-strategy planning architect. Dispatches diverse thinking strategies, scores via 5-dimension rubric, synthesizes optimal plan. Planning-only: no file modifications --- ## 7. ⚙️ MCP CONFIGURATION **Two systems:** 1. **Native MCP** (`opencode.json`) - Direct tools, called natively - Sequential Thinking, Spec Kit Memory, Code Mode server 2. **Code Mode MCP** (`.utcp_config.json`) - External tools via `call_tool_chain()` - Figma, Github, ClickUp, Chrome DevTools, etc. - Naming: `{manual_name}.{manual_name}_{tool_name}` (e.g., `clickup.clickup_get_teams({})`) - Discovery: `search_tools()`, `list_tools()`, or read `.utcp_config.json` --- ## 8. 🧩 SKILLS SYSTEM Skills are specialized, on-demand capabilities that provide domain expertise. Unlike knowledge files (passive references), skills are explicitly invoked to handle complex, multi-step workflows. ### How Skills Work ``` Task Received → Gate 2: Run skill_advisor.py ↓ Confidence > 0.8 → MUST invoke recommended skill ↓ Invoke Skill → Read(".opencode/skills/<skill-name>/SKILL.md") ↓ Instructions Load → SKILL.md content + resource paths ↓ Follow Instructions → Complete task using skill guidance ``` ### Skill Loading Protocol 1. Gate 2 provides skill recommendation via `skill_advisor.py` 2. Invoke using appropriate method for your environment 3. Read bundled resources from `references/`, `scripts/`, `assets/` paths 4. Follow skill instructions to completion 5. Do NOT re-invoke a skill already in context ### Primary Skill: sk-code-opencode For ALL OpenCode system code (`.opencode/`, MCP servers, scripts), `sk-code-opencode` provides multi-language standards. Includes the `system-spec-kit` skill for spec folder workflows and the Spec Kit Memory system for context preservation across sessions. **Supported Languages:** | Language | Target | Key Patterns | | ---------- | ----------------------------- | ------------------------------------------- | | JavaScript | MCP servers, CommonJS modules | `require`/`module.exports`, strict mode | | TypeScript | Type-safe modules, configs | Interfaces, strict tsconfig, type guards | | Python | Validators, advisors, tests | snake_case, argparse, pytest, docstrings | | Shell | Automation, deployment | `set -euo pipefail`, shebang, quoting | | JSON/JSONC | Manifests, schemas, configs | Schema validation, commented config | **Key Systems:** - **system-spec-kit**: Spec folder lifecycle (Levels 1-3+), validation, template architecture - **Spec Kit Memory**: Context preservation, semantic search, session continuity (`/memory:save`, `/memory:continue`) **Invocation:** Automatic via Gate 2 routing when OpenCode system code tasks detected. ### Git Workflow Skill: sk-git For ALL git workflows, `sk-git` orchestrates workspace setup, commit hygiene, and work completion. **Sub-workflows:** - **Worktree**: Branch creation via `git worktree`, workspace isolation, parallel development - **Commit**: Conventional commit format, staged change analysis, clean commit messages - **Finish**: PR creation, branch cleanup, integration workflows **Trigger Keywords:** worktree, branch, commit, merge, pr, pull request, git workflow, conventional commits, finish work, integrate changes **Invocation:** Automatic via Gate 2 routing when git tasks detected, or manually via `Read(".opencode/skills/sk-git/SKILL.md")`. ## Skills A skill is a set of local instructions to follow that is stored in a `SKILL.md` file. Below is the list of skills that can be used. Each entry includes a name, description, and file path so you can open the source for full instructions when using a specific skill. ### Available skills - cli-claude-code: Claude Code CLI orchestrator enabling external AI assistants (Gemini, Codex, Copilot) to invoke Anthropic's Claude Code CLI for supplementary tasks including deep reasoning, code editing, structured output, code review, agent delegation, and extended thinking. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-claude-code/SKILL.md) - cli-codex: Codex CLI orchestrator enabling any AI assistant to invoke OpenAI's Codex CLI for supplementary AI tasks including code generation, code review, web research, codebase analysis, cross-AI validation, and parallel task processing. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-codex/SKILL.md) - cli-copilot: GitHub Copilot CLI orchestrator enabling external AI assistants to invoke the standalone 'copilot' binary for supplementary tasks including collaborative planning, cloud delegation, versatile code generation, and autonomous task execution. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-copilot/SKILL.md) - cli-gemini: Gemini CLI orchestrator enabling any AI assistant to invoke Google's Gemini CLI for supplementary AI tasks including code generation, web research via Google Search, codebase architecture analysis, cross-AI validation, and parallel task processing. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-gemini/SKILL.md) - mcp-chrome-devtools: Chrome DevTools orchestrator providing intelligent routing between CLI (bdg) and MCP (Code Mode) approaches. CLI prioritized for speed and token efficiency; MCP fallback for multi-tool integration scenarios. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-chrome-devtools/SKILL.md) - mcp-clickup: ClickUp project management orchestrator providing intelligent routing between CLI (cu) and MCP (Code Mode) approaches. CLI prioritized for speed and token efficiency; MCP for enterprise features like docs, goals, webhooks, and bulk operations. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-clickup/SKILL.md) - mcp-code-mode: MCP orchestration via TypeScript execution for efficient multi-tool workflows. Use Code Mode for ALL MCP tool calls (ClickUp, Notion, Figma, Webflow, Chrome DevTools, etc.). Provides 98.7% context reduction, 60% faster execution, and type-safe invocation. Mandatory for external tool integration. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-code-mode/SKILL.md) - mcp-figma: Figma design file access via MCP providing 18 tools for file retrieval, image export, component/style extraction, team management, and collaborative commenting. Accessed via Code Mode for token-efficient workflows. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-figma/SKILL.md) - sk-code-full-stack: Stack-agnostic development orchestrator guiding developers through implementation, testing, and verification phases with automatic stack detection via marker files and bundled stack-specific knowledge. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-full-stack/SKILL.md) - sk-code-opencode: Multi-language code standards for OpenCode system code (JavaScript, TypeScript, Python, Shell, JSON/JSONC) with language detection routing, universal patterns, and quality checklists. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-opencode/SKILL.md) - sk-code-review: Stack-agnostic code review baseline skill with findings-first severity analysis, mandatory security/correctness minimums, and adaptive overlay compatibility with sk-code-opencode, sk-code-web, and sk-code-full-stack standards. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-review/SKILL.md) - sk-code-web: Orchestrator guiding developers through implementation, debugging, and verification phases across specialized code quality skills (project) (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-web/SKILL.md) - sk-doc: Unified markdown and OpenCode component specialist providing document quality enforcement, content optimization, component creation workflows (skills, agents, commands), ASCII flowcharts and install guides. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-doc/SKILL.md) - sk-git: Git workflow orchestrator guiding developers through workspace setup, clean commits, and work completion across git-worktrees, git-commit, and git-finish skills (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-git/SKILL.md) - sk-improve-prompt: Prompt engineering specialist that transforms vague requests into structured, scored AI prompts using 7 proven frameworks (RCAF, COSTAR, RACE, CIDI, TIDD-EC, CRISPE, CRAFT), DEPTH thinking methodology, and CLEAR scoring across text modes. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-improve-prompt/SKILL.md) - system-spec-kit: Unified documentation and context preservation: spec folder workflow (levels 1-3+), CORE + ADDENDUM template architecture (v2.2), validation, and Spec Kit Memory for context preservation. Mandatory for all file modifications. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/system-spec-kit/SKILL.md) - openai-docs: Use when the user asks how to build with OpenAI products or APIs and needs up-to-date official documentation with citations, help choosing the latest model for a use case, or explicit GPT-5.4 upgrade and prompt-upgrade guidance; prioritize OpenAI docs MCP tools, use bundled references only as helper context, and restrict any fallback browsing to official OpenAI domains. (file: /Users/michelkerkmeester/.codex/skills/.system/openai-docs/SKILL.md) - skill-creator: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Codex's capabilities with specialized knowledge, workflows, or tool integrations. (file: /Users/michelkerkmeester/.codex/skills/.system/skill-creator/SKILL.md) - skill-installer: Install Codex skills into $CODEX_HOME/skills from a curated list or a GitHub repo path. Use when a user asks to list installable skills, install a curated skill, or install a skill from another repo (including private repos). (file: /Users/michelkerkmeester/.codex/skills/.system/skill-installer/SKILL.md) ### How to use skills - Discovery: The list above is the skills available in this session (name + description + file path). Skill bodies live on disk at the listed paths. - Trigger rules: If the user names a skill (with `$SkillName` or plain text) OR the task clearly matches a skill's description shown above, you must use that skill for that turn. Multiple mentions mean use them all. Do not carry skills across turns unless re-mentioned. - Missing/blocked: If a named skill isn't in the list or the path can't be read, say so briefly and continue with the best fallback. - How to use a skill (progressive disclosure): 1) After deciding to use a skill, open its `SKILL.md`. Read only enough to follow the workflow. 2) When `SKILL.md` references relative paths (e.g., `scripts/foo.py`), resolve them relative to the skill directory listed above first, and only consider other paths if needed. 3) If `SKILL.md` points to extra folders such as `references/`, load only the specific files needed for the request; don't bulk-load everything. 4) If `scripts/` exist, prefer running or patching them instead of retyping large code blocks. 5) If `assets/` or templates exist, reuse them instead of recreating from scratch. - Coordination and sequencing: - If multiple skills apply, choose the minimal set that covers the request and state the order you'll use them. - Announce which skill(s) you're using and why (one short line). If you skip an obvious skill, say why. - Context hygiene: - Keep context small: summarize long sections instead of pasting them; only load extra files when needed. - Avoid deep reference-chasing: prefer opening only files directly linked from `SKILL.md` unless you're blocked. - When variants exist (frameworks, providers, domains), pick only the relevant reference file(s) and note that choice. - Safety and fallback: If a skill can't be applied cleanly (missing files, unclear instructions), state the issue, pick the next-best approach, and continue. Files called AGENTS.md commonly appear in many places inside a container - at "/", in "~", deep within git repositories, or in any other directory; their location is not limited to version-controlled folders. Their purpose is to pass along human guidance to you, the agent. Such guidance can include coding standards, explanations of the project layout, steps for building or testing, and even wording that must accompany a GitHub pull-request description produced by the agent; all of it is to be followed. Each AGENTS.md governs the entire directory that contains it and every child directory beneath that point. Whenever you change a file, you have to comply with every AGENTS.md whose scope covers that file. Naming conventions, stylistic rules and similar directives are restricted to the code that falls inside that scope unless the document explicitly states otherwise. When two AGENTS.md files disagree, the one located deeper in the directory structure overrides the higher-level file, while instructions given directly in the prompt by the system, developer, or user outrank any AGENTS.md content.   /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public zsh 2026-03-16 Europe/Amsterdam
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:2703:- **Expected outcome**: Routes to `/memory:save` with planner-first default; returns structured planner output (no file mutation per 004)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:2704:- **Target tools**: `/memory:save` invocation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:2705:- **Success indicators**: Recognizes save intent; uses planner-first contract; no surprise mutations
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/I3/cli-codex-1/output.txt:2706:- **Cross-ref**: 003/004 (planner-first contract)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/spec.md:127:| `implemented` | Shipped substrate exists and should not be treated as missing prerequisite work. | Shared trust axes and readiness primitives, planner-first memory-save substrate, Codex hook injection, search-routing measurement scaffolding |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-005.md:6147:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/README.md:448:| `/memory:save`   | 4          | Save conversation context to a spec folder's `memory/` directory with semantic indexing                                                 |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-031.md:90:  - **Q2**: ship planner-first `spec-kit doctor`, then layer freshness/provenance hints into that flow
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-opencode-pure-1/output.txt:3:{"type":"tool_use","timestamp":1777229318991,"sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","part":{"id":"prt_dcb1f4160001FtpuTOwwrAA5Eb","messageID":"msg_dcb1f0dff001QCz6FKsfEEwvI4","sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","type":"tool","tool":"spec_kit_memory_memory_context","callID":"call_00_MzvuZOOMA75SRfIthb7amnXi","state":{"status":"completed","input":{"input":"/memory:save planner-first contract","mode":"deep"},"output":"{\n  \"summary\": \"Context retrieved via deep mode (deep strategy) [truncated: 5 → 5 results to fit 3500 token budget]\",\n  \"data\": {\n    \"strategy\": \"deep\",\n    \"mode\": \"deep\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"{\\\"summary\\\":\\\"> **[EVIDENCE GAP DETECTED]: Retrieved context has low mathematical confidence (Z=1.27). Consider first principles.**\\\\n\\\\nFound 5 memories\\\",\\\"data\\\":{\\\"searchType\\\":\\\"hybrid\\\",\\\"count\\\":5,\\\"constitutionalCount\\\":0,\\\"requestQuality\\\":{\\\"label\\\":\\\"weak\\\"},\\\"recovery\\\":{\\\"status\\\":\\\"low_confidence\\\",\\\"reason\\\":\\\"knowledge_gap\\\",\\\"suggestedQueries\\\":[],\\\"recommendedAction\\\":\\\"ask_user\\\"},\\\"stateStats\\\":{\\\"minState\\\":\\\"\\\",\\\"before\\\":{\\\"UNKNOWN\\\":5},\\\"after\\\":{\\\"UNKNOWN\\\":5},\\\"removed\\\":0},\\\"featureFlags\\\":{\\\"trmEnabled\\\":true,\\\"multiQueryEnabled\\\":true,\\\"stateLimitsApplied\\\":false},\\\"pipelineMetadata\\\":{\\\"stage1\\\":{\\\"searchType\\\":\\\"hybrid\\\",\\\"channelCount\\\":1,\\\"activeChannels\\\":2,\\\"candidateCount\\\":12,\\\"constitutionalInjected\\\":2,\\\"durationMs\\\":321},\\\"stage2\\\":{\\\"sessionBoostApplied\\\":\\\"enabled\\\",\\\"causalBoostApplied\\\":\\\"applied\\\",\\\"intentWeightsApplied\\\":\\\"off\\\",\\\"artifactRoutingApplied\\\":\\\"applied\\\",\\\"feedbackSignalsApplied\\\":\\\"off\\\",\\\"graphContribution\\\":{\\\"killSwitchActive\\\":false,\\\"causalBoosted\\\":0,\\\"coActivationBoosted\\\":0,\\\"communityInjected\\\":0,\\\"graphSignalsBoosted\\\":0,\\\"totalGraphInjected\\\":0,\\\"rolloutState\\\":\\\"bounded_runtime\\\"},\\\"qualityFiltered\\\":0,\\\"durationMs\\\":5,\\\"recencyFusionApplied\\\":true,\\\"recencyFusionBoosted\\\":11,\\\"coActivationApplied\\\":true,\\\"graphSignalsApplied\\\":true},\\\"stage3\\\":{\\\"rerankApplied\\\":true,\\\"rerankProvider\\\":\\\"cross-encoder\\\",\\\"chunkReassemblyStats\\\":{\\\"collapsedChunkHits\\\":0,\\\"chunkParents\\\":0,\\\"reassembled\\\":0,\\\"fallback\\\":0},\\\"durationMs\\\":290},\\\"stage4\\\":{\\\"stateFiltered\\\":0,\\\"constitutionalInjected\\\":2,\\\"evidenceGapDetected\\\":true,\\\"durationMs\\\":0},\\\"timing\\\":{\\\"stage1\\\":321,\\\"stage2\\\":5,\\\"stage3\\\":290,\\\"stage4\\\":1,\\\"total\\\":617}},\\\"lexicalPath\\\":\\\"fts5\\\",\\\"fallbackState\\\":\\\"ok\\\",\\\"evidenceGapWarning\\\":\\\"> **[EVIDENCE GAP DETECTED]: Retrieved context has low mathematical confidence (Z=1.27). Consider first principles.**\\\",\\\"intent\\\":{\\\"type\\\":\\\"understand\\\",\\\"confidence\\\":1,\\\"description\\\":\\\"Understanding or exploring the codebase\\\",\\\"weightsApplied\\\":\\\"off\\\"},\\\"artifactRouting\\\":{\\\"strategy\\\":{\\\"artifactClass\\\":\\\"memory\\\",\\\"semanticWeight\\\":0.8,\\\"keywordWeight\\\":0.2,\\\"recencyBias\\\":0.6,\\\"maxResults\\\":5,\\\"boostFactor\\\":1.1},\\\"detectedClass\\\":\\\"memory\\\",\\\"confidence\\\":0.5},\\\"artifact_routing\\\":{\\\"strategy\\\":{\\\"artifactClass\\\":\\\"memory\\\",\\\"semanticWeight\\\":0.8,\\\"keywordWeight\\\":0.2,\\\"recencyBias\\\":0.6,\\\"maxResults\\\":5,\\\"boostFactor\\\":1.1},\\\"detectedClass\\\":\\\"memory\\\",\\\"confidence\\\":0.5},\\\"graphContribution\\\":{\\\"killSwitchActive\\\":false,\\\"causalBoosted\\\":0,\\\"coActivationBoosted\\\":0,\\\"communityInjected\\\":0,\\\"graphSignalsBoosted\\\":0,\\\"totalGraphInjected\\\":0,\\\"rolloutState\\\":\\\"bounded_runtime\\\"},\\\"graph_contribution\\\":{\\\"killSwitchActive\\\":false,\\\"causalBoosted\\\":0,\\\"coActivationBoosted\\\":0,\\\"communityInjected\\\":0,\\\"graphSignalsBoosted\\\":0,\\\"totalGraphInjected\\\":0,\\\"rolloutState\\\":\\\"bounded_runtime\\\"},\\\"rerankMetadata\\\":{\\\"reranking_enabled\\\":true,\\\"reranking_requested\\\":true,\\\"reranking_applied\\\":true},\\\"sourceContract\\\":{\\\"version\\\":\\\"gate-d-reader-ready-v1\\\",\\\"archivedTierEnabled\\\":false,\\\"legacyFallbackEnabled\\\":false,\\\"includeArchivedCompatibility\\\":\\\"not_requested\\\",\\\"preferredDocumentTypes\\\":[\\\"spec_doc\\\",\\\"continuity\\\"],\\\"retainedResults\\\":5,\\\"droppedNonCanonicalResults\\\":0,\\\"countsBySourceKind\\\":{\\\"spec_doc\\\":5,\\\"continuity\\\":0,\\\"constitutional\\\":0}},\\\"retrievalTrace\\\":{\\\"traceId\\\":\\\"tr_mog4g6ej_1gikgw\\\",\\\"sessionId\\\":\\\"32f5b96f-5a85-446a-a3ee-38e99933b7ec\\\",\\\"query\\\":\\\"/memory:save planner-first contract\\\",\\\"intent\\\":\\\"understand\\\",\\\"stages\\\":[{\\\"stage\\\":\\\"candidate\\\",\\\"timestamp\\\":1777229318251,\\\"inputCount\\\":0,\\\"outputCount\\\":0,\\\"durationMs\\\":0,\\\"metadata\\\":{\\\"channel\\\":\\\"d2-concept-expansion\\\",\\\"originalQuery\\\":\\\"/memory:save planner-first contract\\\",\\\"expandedQuery\\\":\\\"/memory:save planner-first contract memories knowledge context\\\",\\\"expansionTerms\\\":[\\\"memories\\\",\\\"knowledge\\\",\\\"context\\\"],\\\"matchedConcepts\\\":[\\\"memory\\\"]}},{\\\"stage\\\":\\\"candidate\\\",\\\"timestamp\\\":1777229318251,\\\"inputCount\\\":0,\\\"outputCount\\\":0,\\\"durationMs\\\":0,\\\"metadata\\\":{\\\"channel\\\":\\\"d2-concept-routing\\\",\\\"matchedConcepts\\\":[\\\"memory\\\"],\\\"graphActivated\\\":true}},{\\\"stage\\\":\\\"candidate\\\",\\\"timestamp\\\":1777229318572,\\\"inputCount\\\":1,\\\"outputCount\\\":12,\\\"durationMs\\\":321,\\\"metadata\\\":{\\\"searchType\\\":\\\"hybrid\\\",\\\"mode\\\":null,\\\"channelCount\\\":1,\\\"deepExpansion\\\":false,\\\"r12EmbeddingExpansion\\\":true}},{\\\"stage\\\":\\\"fusion\\\",\\\"timestamp\\\":1777229318577,\\\"inputCount\\\":12,\\\"outputCount\\\":5,\\\"durationMs\\\":5,\\\"metadata\\\":{\\\"sessionBoostApplied\\\":\\\"enabled\\\",\\\"causalBoostApplied\\\":\\\"applied\\\",\\\"intentWeightsApplied\\\":\\\"off\\\",\\\"artifactRoutingApplied\\\":\\\"applied\\\",\\\"feedbackSignalsApplied\\\":\\\"off\\\",\\\"graphContribution\\\":{\\\"killSwitchActive\\\":false,\\\"causalBoosted\\\":0,\\\"coActivationBoosted\\\":0,\\\"communityInjected\\\":0,\\\"graphSignalsBoosted\\\":0,\\\"totalGraphInjected\\\":0,\\\"rolloutState\\\":\\\"bounded_runtime\\\"},\\\"searchType\\\":\\\"hybrid\\\",\\\"isHybrid\\\":true}},{\\\"stage\\\":\\\"rerank\\\",\\\"timestamp\\\":1777229318865,\\\"inputCount\\\":5,\\\"outputCount\\\":5,\\\"durationMs\\\":288,\\\"metadata\\\":{\\\"rerankApplied\\\":true,\\\"provider\\\":\\\"cross-encoder\\\"}},{\\\"stage\\\":\\\"final-rank\\\",\\\"timestamp\\\":1777229318867,\\\"inputCount\\\":5,\\\"outputCount\\\":5,\\\"durationMs\\\":0,\\\"metadata\\\":{\\\"collapsedChunkHits\\\":0,\\\"chunkParents\\\":0,\\\"reassembled\\\":0,\\\"fallback\\\":0}},{\\\"stage\\\":\\\"filter\\\",\\\"timestamp\\\":1777229318868,\\\"inputCount\\\":5,\\\"outputCount\\\":5,\\\"durationMs\\\":0,\\\"metadata\\\":{\\\"stateFiltered\\\":0,\\\"evidenceGapDetected\\\":true,\\\"trmEnabled\\\":true,\\\"applyStateLimits\\\":false,\\\"minState\\\":\\\"\\\"}}],\\\"totalDurationMs\\\":614,\\\"finalResultCount\\\":5},\\\"appliedBoosts\\\":{\\\"session\\\":{\\\"applied\\\":\\\"enabled\\\"},\\\"causal\\\":{\\\"applied\\\":\\\"applied\\\"},\\\"folder\\\":{\\\"applied\\\":true,\\\"folder\\\":\\\"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\\\",\\\"factor\\\":1.3}},\\\"applied_boosts\\\":{\\\"session\\\":{\\\"applied\\\":\\\"enabled\\\"},\\\"causal\\\":{\\\"applied\\\":\\\"applied\\\"},\\\"folder\\\":{\\\"applied\\\":true,\\\"folder\\\":\\\"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\\\",\\\"factor\\\":1.3}},\\\"progressiveDisclosure\\\":{\\\"summaryLayer\\\":{\\\"count\\\":5,\\\"digest\\\":\\\"5 weak\\\"},\\\"results\\\":[{\\\"snippet\\\":\\\"\\\",\\\"detailAvailable\\\":false,\\\"resultId\\\":\\\"2316\\\"},{\\\"snippet\\\":\\\"\\\",\\\"detailAvailable\\\":false,\\\"resultId\\\":\\\"92\\\"},{\\\"snippet\\\":\\\"\\\",\\\"detailAvailable\\\":false,\\\"resultId\\\":\\\"94\\\"},{\\\"snippet\\\":\\\"\\\",\\\"detailAvailable\\\":false,\\\"resultId\\\":\\\"95\\\"},{\\\"snippet\\\":\\\"\\\",\\\"detailAvailable\\\":false,\\\"resultId\\\":\\\"2317\\\"}],\\\"continuation\\\":null},\\\"sessionState\\\":{\\\"activeGoal\\\":\\\"/memory:save planner-first contract\\\",\\\"seenResultIds\\\":[\\\"2316\\\",\\\"92\\\",\\\"94\\\",\\\"95\\\",\\\"2317\\\"],\\\"openQuestions\\\":[],\\\"preferredAnchors\\\":[]},\\\"goalRefinement\\\":{\\\"activeGoal\\\":\\\"/memory:save planner-first contract\\\",\\\"applied\\\":false,\\\"boostedCount\\\":0},\\\"results\\\":[{\\\"id\\\":2316,\\\"specFolder\\\":\\\"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\\\",\\\"filePath\\\":\\\"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md\\\",\\\"title\\\":\\\"Implemen [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan]\\\",\\\"similarity\\\":1,\\\"isConstitutional\\\":false,\\\"importanceTier\\\":\\\"important\\\",\\\"triggerPhrases\\\":[],\\\"createdAt\\\":\\\"2026-04-26T14:30:22.365Z\\\",\\\"isChunk\\\":false,\\\"parentId\\\":null,\\\"chunkIndex\\\":null,\\\"chunkLabel\\\":null,\\\"chunkCount\\\":null,\\\"trustBadges\\\":{\\\"confidence\\\":0.9,\\\"extractionAge\\\":\\\"today\\\",\\\"lastAccessAge\\\":\\\"never\\\",\\\"orphan\\\":false,\\\"weightHistoryChanged\\\":false},\\\"confidence\\\":{\\\"label\\\":\\\"low\\\",\\\"value\\\":0.35,\\\"drivers\\\":[\\\"multi_channel_agreement\\\"]},\\\"why\\\":{\\\"summary\\\":\\\"Ranked first because semantic similarity\\\",\\\"topSignals\\\":[\\\"semantic_match\\\"]}},{\\\"id\\\":92,\\\"specFolder\\\":\\\"system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite\\\",\\\"filePath\\\":\\\"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite/plan.md\\\",\\\"title\\\":\\\"Implemen [system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite/plan]\\\",\\\"similarity\\\":76.82,\\\"isConstitutional\\\":false,\\\"importanceTier\\\":\\\"important\\\",\\\"triggerPhrases\\\":[],\\\"createdAt\\\":\\\"2026-04-25T10:32:09.031Z\\\",\\\"isChunk\\\":false,\\\"parentId\\\":null,\\\"chunkIndex\\\":null,\\\"chunkLabel\\\":null,\\\"chunkCount\\\":null,\\\"trustBadges\\\":{\\\"confidence\\\":0.9,\\\"extractionAge\\\":\\\"yesterday\\\",\\\"lastAccessAge\\\":\\\"never\\\",\\\"orphan\\\":false,\\\"weightHistoryChanged\\\":false},\\\"confidence\\\":{\\\"label\\\":\\\"low\\\",\\\"value\\\":0.35,\\\"drivers\\\":[\\\"multi_channel_agreement\\\"]},\\\"why\\\":{\\\"summary\\\":\\\"Ranked #2 because semantic similarity\\\",\\\"topSignals\\\":[\\\"semantic_match\\\"]}},{\\\"id\\\":94,\\\"specFolder\\\":\\\"system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite\\\",\\\"filePath\\\":\\\"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite/spec.md\\\",\\\"title\\\":\\\"Feature [system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite/spec]\\\",\\\"similarity\\\":76.85,\\\"isConstitutional\\\":false,\\\"importanceTier\\\":\\\"important\\\",\\\"triggerPhrases\\\":[],\\\"createdAt\\\":\\\"2026-04-25T10:32:09.934Z\\\",\\\"isChunk\\\":false,\\\"parentId\\\":null,\\\"chunkIndex\\\":null,\\\"chunkLabel\\\":null,\\\"chunkCount\\\":null,\\\"trustBadges\\\":{\\\"confidence\\\":0.9,\\\"extractionAge\\\":\\\"yesterday\\\",\\\"lastAccessAge\\\":\\\"never\\\",\\\"orphan\\\":false,\\\"weightHistoryChanged\\\":false},\\\"confidence\\\":{\\\"label\\\":\\\"low\\\",\\\"value\\\":0.334,\\\"drivers\\\":[\\\"multi_channel_agreement\\\"]},\\\"why\\\":{\\\"summary\\\":\\\"Ranked #3 because semantic similarity\\\",\\\"topSignals\\\":[\\\"semantic_match\\\"]}},{\\\"id\\\":95,\\\"specFolder\\\":\\\"system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite\\\",\\\"filePath\\\":\\\"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite/tasks.md\\\",\\\"title\\\":\\\"Tasks [system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite/tasks]\\\",\\\"similarity\\\":73.51,\\\"isConstitutional\\\":false,\\\"importanceTier\\\":\\\"important\\\",\\\"triggerPhrases\\\":[],\\\"createdAt\\\":\\\"2026-04-25T10:32:12.798Z\\\",\\\"isChunk\\\":false,\\\"parentId\\\":null,\\\"chunkIndex\\\":null,\\\"chunkLabel\\\":null,\\\"chunkCount\\\":null,\\\"trustBadges\\\":{\\\"confidence\\\":0.9,\\\"extractionAge\\\":\\\"yesterday\\\",\\\"lastAccessAge\\\":\\\"never\\\",\\\"orphan\\\":false,\\\"weightHistoryChanged\\\":false},\\\"confidence\\\":{\\\"label\\\":\\\"low\\\",\\\"value\\\":0.334,\\\"drivers\\\":[\\\"multi_channel_agreement\\\"]},\\\"why\\\":{\\\"summary\\\":\\\"Ranked #4 because semantic similarity\\\",\\\"topSignals\\\":[\\\"semantic_match\\\"]}},{\\\"id\\\":2317,\\\"specFolder\\\":\\\"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\\\",\\\"filePath\\\":\\\"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md\\\",\\\"title\\\":\\\"Feature [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec]\\\",\\\"similarity\\\":1,\\\"isConstitutional\\\":false,\\\"importanceTier\\\":\\\"important\\\",\\\"triggerPhrases\\\":[],\\\"createdAt\\\":\\\"2026-04-26T14:30:22.374Z\\\",\\\"isChunk\\\":false,\\\"parentId\\\":null,\\\"chunkIndex\\\":null,\\\"chunkLabel\\\":null,\\\"chunkCount\\\":null,\\\"trustBadges\\\":{\\\"confidence\\\":0.9,\\\"extractionAge\\\":\\\"today\\\",\\\"lastAccessAge\\\":\\\"never\\\",\\\"orphan\\\":false,\\\"weightHistoryChanged\\\":false},\\\"confidence\\\":{\\\"label\\\":\\\"low\\\",\\\"value\\\":0.334,\\\"drivers\\\":[\\\"multi_channel_agreement\\\"]},\\\"why\\\":{\\\"summary\\\":\\\"Ranked #5 because semantic similarity\\\",\\\"topSignals\\\":[\\\"semantic_match\\\"]}}],\\\"evidenceDigest\\\":\\\"5 results retrieved; avg score 0.85.\\\",\\\"followUps\\\":[]},\\\"hints\\\":[\\\"Use includeContent: true to embed file contents in results\\\"],\\\"meta\\\":{\\\"tool\\\":\\\"memory_search\\\",\\\"tokenCount\\\":4072,\\\"latencyMs\\\":625,\\\"cacheHit\\\":false,\\\"dedupStats\\\":{\\\"enabled\\\":true,\\\"sessionId\\\":\\\"32f5b96f-5a85-446a-a3ee-38e99933b7ec\\\",\\\"originalCount\\\":5,\\\"returnedCount\\\":5,\\\"filteredCount\\\":0,\\\"tokensSaved\\\":0,\\\"savingsPercent\\\":0,\\\"tokenSavingsEstimate\\\":\\\"0\\\"},\\\"responseProfile\\\":\\\"research\\\"},\\\"dedupStats\\\":{\\\"enabled\\\":true,\\\"sessionId\\\":\\\"32f5b96f-5a85-446a-a3ee-38e99933b7ec\\\",\\\"originalCount\\\":5,\\\"returnedCount\\\":5,\\\"filteredCount\\\":0,\\\"tokensSaved\\\":0,\\\"savingsPercent\\\":0,\\\"tokenSavingsEstimate\\\":\\\"0\\\"}}\"\n      }\n    ],\n    \"isError\": false,\n    \"queryIntentRouting\": {\n      \"queryIntent\": \"hybrid\",\n      \"routedBackend\": \"hybrid\",\n      \"confidence\": 0.5,\n      \"matchedKeywords\": [],\n      \"classificationKind\": \"backend-routing\",\n      \"authoritativeFor\": [\n        \"channel-selection\"\n      ],\n      \"seeAlso\": \"meta.intent (task-intent classification, authoritative for rendering)\"\n    }\n  },\n  \"hints\": [\n    \"Mode: Semantic search with full context retrieval\",\n    \"For more granular control, use L2 tools: memory_search, memory_match_triggers\",\n    \"Token budget: 3500 (deep mode)\",\n    \"Auto-surface hook: injected 2 constitutional and 5 triggered memories (559ms)\",\n    \"Response exceeds token budget (4650/3500)\"\n  ],\n  \"meta\": {\n    \"tool\": \"memory_context\",\n    \"tokenCount\": 4662,\n    \"cacheHit\": false,\n    \"layer\": \"L1:Orchestration\",\n    \"mode\": \"deep\",\n    \"requestedMode\": \"deep\",\n    \"strategy\": \"deep\",\n    \"tokenUsageSource\": \"estimator\",\n    \"tokenUsagePressure\": 0.0025714285714285713,\n    \"pressureLevel\": \"none\",\n    \"pressure_level\": \"none\",\n    \"pressurePolicy\": {\n      \"applied\": false,\n      \"overrideMode\": null,\n      \"warning\": null\n    },\n    \"sessionLifecycle\": {\n      \"sessionScope\": \"ephemeral\",\n      \"requestedSessionId\": null,\n      \"effectiveSessionId\": \"32f5b96f-5a85-446a-a3ee-38e99933b7ec\",\n      \"resumed\": false,\n      \"eventCounterStart\": 0,\n      \"resumedContextCount\": 0\n    },\n    \"tokenBudget\": 3500,\n    \"tokenBudgetEnforcement\": {\n      \"budgetTokens\": 3500,\n      \"actualTokens\": 3249,\n      \"enforced\": true,\n      \"truncated\": true,\n      \"originalResultCount\": 5,\n      \"returnedResultCount\": 5\n    },\n    \"intent\": {\n      \"type\": \"understand\",\n      \"confidence\": 0.12154135675102573,\n      \"source\": \"auto-detected\",\n      \"classificationKind\": \"task-intent\",\n      \"authoritativeFor\": [\n        \"rendering\",\n        \"anchors\",\n        \"mode-routing\",\n        \"weights\"\n      ]\n    },\n    \"folderDiscovery\": {\n      \"discovered\": true,\n      \"specFolder\": \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\",\n      \"source\": \"folder-discovery\"\n    },\n    \"structuralRoutingNudge\": null,\n    \"autoSurface\": {\n      \"constitutionalCount\": 2,\n      \"triggeredCount\": 5,\n      \"surfaced_at\": \"2026-04-26T18:48:38.041Z\",\n      \"latencyMs\": 559\n    },\n    \"autoSurfacedContext\": {\n      \"constitutional\": [\n        {\n          \"id\": 2574,\n          \"specFolder\": \"system-spec-kit\",\n          \"filePath\": \"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/constitutional/gate-tool-routing.md\",\n          \"title\": \"TOOL ROUTING - Search & Retrieval Decision Tree\",\n          \"importanceTier\": \"constitutional\",\n          \"retrieval_directive\": \"Always surface when: TOOL ROUTING - Search & Retrieval Decision Tree | Prioritize when: task context aligns with \\\"TOOL ROUTING - Search & Retrieval Decision Tree\\\"\"\n        },\n        {\n          \"id\": 415,\n          \"specFolder\": \"system-spec-kit\",\n          \"filePath\": \"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/constitutional/gate-enforcement.md\",\n          \"title\": \"GATE ENFORCEMENT - Edge Cases & Cross-Reference\",\n          \"importanceTier\": \"constitutional\",\n          \"retrieval_directive\": \"Always surface when: GATE ENFORCEMENT - Edge Cases & Cross-Reference | Prioritize when: task context aligns with \\\"GATE ENFORCEMENT - Edge Cases & Cross-Reference\\\"\"\n        }\n      ],\n      \"triggered\": [\n        {\n          \"memory_id\": 1987,\n          \"spec_folder\": \"system-spec-kit/023-hybrid-rag-fusion-refinement/012-memory-save-quality-pipeline\",\n          \"title\": \"Research: Memory Save [system-spec-kit/023-hybrid-rag-fusion-refinement/012-memory-save-quality-pipeline/research]\",\n          \"matched_phrases\": [\n            \"memory\",\n            \"save\"\n          ]\n        },\n        {\n          \"memory_id\": 586,\n          \"spec_folder\": \"system-spec-kit/022-hybrid-rag-fusion/016-rewrite-memory-mcp-readme\",\n          \"title\": \"Plan: Rewrite Memory MCP README [system-spec-kit/022-hybrid-rag-fusion/016-rewrite-memory-mcp-readme/plan]\",\n          \"matched_phrases\": [\n            \"memory\"\n          ]\n        },\n        {\n          \"memory_id\": 2308,\n          \"spec_folder\": \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates\",\n          \"title\": \"...on/002-continuity-memory-runtime/003-continuity-refactor-gates/research/006-continuity-refactor-gates-pt-01/research]\",\n          \"matched_phrases\": [\n            \"memory\"\n          ]\n        },\n        {\n          \"memory_id\": 2300,\n          \"spec_folder\": \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/002-memory-quality-remediation\",\n          \"title\": \".../003-continuity-memory-runtime/002-memory-quality-remediation/research/003-memory-quality-remediation-pt-01/research]\",\n          \"matched_phrases\": [\n            \"memory\"\n          ]\n        },\n        {\n          \"memory_id\": 2004,\n          \"spec_folder\": \"system-spec-kit/023-hybrid-rag-fusion-refinement\",\n          \"title\": \"Deep Research: Spec Kit Memory Feature Audit & Quality [system-spec-kit/023-hybrid-rag-fusion-refinement/research]\",\n          \"matched_phrases\": [\n            \"memory\"\n          ]\n        }\n      ],\n      \"surfaced_at\": \"2026-04-26T18:48:38.041Z\",\n      \"latencyMs\": 559\n    }\n  }\n}","metadata":{"truncated":false},"title":"","time":{"start":1777229317473,"end":1777229318990},"attachments":[]}}}
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-opencode-pure-1/output.txt:4:{"type":"tool_use","timestamp":1777229320530,"sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","part":{"id":"prt_dcb1f472b001Ubnrhs1e5SvbK7","messageID":"msg_dcb1f0dff001QCz6FKsfEEwvI4","sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","type":"tool","tool":"spec_kit_memory_memory_search","callID":"call_01_Vq9uKAyAjTCa2L9FXMdQbNAL","state":{"status":"completed","input":{"query":"planner-first contract memory save","includeContent":true,"limit":10},"output":"{\n  \"summary\": \"Found 5 memories\",\n  \"data\": {\n    \"searchType\": \"hybrid\",\n    \"count\": 1,\n    \"constitutionalCount\": 0,\n    \"requestQuality\": {\n      \"label\": \"weak\"\n    },\n    \"recovery\": {\n      \"status\": \"low_confidence\",\n      \"reason\": \"knowledge_gap\",\n      \"suggestedQueries\": [],\n      \"recommendedAction\": \"ask_user\"\n    },\n    \"stateStats\": {\n      \"minState\": \"\",\n      \"before\": {\n        \"UNKNOWN\": 5\n      },\n      \"after\": {\n        \"UNKNOWN\": 5\n      },\n      \"removed\": 0\n    },\n    \"featureFlags\": {\n      \"trmEnabled\": true,\n      \"multiQueryEnabled\": true,\n      \"stateLimitsApplied\": false\n    },\n    \"pipelineMetadata\": {\n      \"stage1\": {\n        \"searchType\": \"hybrid\",\n        \"channelCount\": 2,\n        \"activeChannels\": 2,\n        \"candidateCount\": 16,\n        \"constitutionalInjected\": 2,\n        \"durationMs\": 665\n      },\n      \"stage2\": {\n        \"sessionBoostApplied\": \"off\",\n        \"causalBoostApplied\": \"applied\",\n        \"intentWeightsApplied\": \"off\",\n        \"artifactRoutingApplied\": \"applied\",\n        \"feedbackSignalsApplied\": \"off\",\n        \"graphContribution\": {\n          \"killSwitchActive\": false,\n          \"causalBoosted\": 0,\n          \"coActivationBoosted\": 0,\n          \"communityInjected\": 0,\n          \"graphSignalsBoosted\": 0,\n          \"totalGraphInjected\": 0,\n          \"rolloutState\": \"bounded_runtime\"\n        },\n        \"qualityFiltered\": 0,\n        \"durationMs\": 6,\n        \"recencyFusionApplied\": true,\n        \"recencyFusionBoosted\": 14,\n        \"coActivationApplied\": true,\n        \"graphSignalsApplied\": true\n      },\n      \"stage3\": {\n        \"rerankApplied\": true,\n        \"rerankProvider\": \"cross-encoder\",\n        \"chunkReassemblyStats\": {\n          \"collapsedChunkHits\": 0,\n          \"chunkParents\": 0,\n          \"reassembled\": 0,\n          \"fallback\": 0\n        },\n        \"durationMs\": 247\n      },\n      \"stage4\": {\n        \"stateFiltered\": 0,\n        \"constitutionalInjected\": 2,\n        \"evidenceGapDetected\": false,\n        \"durationMs\": 1\n      },\n      \"timing\": {\n        \"stage1\": 665,\n        \"stage2\": 6,\n        \"stage3\": 247,\n        \"stage4\": 1,\n        \"total\": 919\n      }\n    },\n    \"lexicalPath\": \"fts5\",\n    \"fallbackState\": \"ok\",\n    \"intent\": {\n      \"type\": \"understand\",\n      \"confidence\": 1,\n      \"description\": \"Understanding or exploring the codebase\",\n      \"weightsApplied\": \"off\"\n    },\n    \"artifactRouting\": {\n      \"strategy\": {\n        \"artifactClass\": \"memory\",\n        \"semanticWeight\": 0.8,\n        \"keywordWeight\": 0.2,\n        \"recencyBias\": 0.6,\n        \"maxResults\": 5,\n        \"boostFactor\": 1.1\n      },\n      \"detectedClass\": \"memory\",\n      \"confidence\": 0.5\n    },\n    \"artifact_routing\": {\n      \"strategy\": {\n        \"artifactClass\": \"memory\",\n        \"semanticWeight\": 0.8,\n        \"keywordWeight\": 0.2,\n        \"recencyBias\": 0.6,\n        \"maxResults\": 5,\n        \"boostFactor\": 1.1\n      },\n      \"detectedClass\": \"memory\",\n      \"confidence\": 0.5\n    },\n    \"graphContribution\": {\n      \"killSwitchActive\": false,\n      \"causalBoosted\": 0,\n      \"coActivationBoosted\": 0,\n      \"communityInjected\": 0,\n      \"graphSignalsBoosted\": 0,\n      \"totalGraphInjected\": 0,\n      \"rolloutState\": \"bounded_runtime\"\n    },\n    \"graph_contribution\": {\n      \"killSwitchActive\": false,\n      \"causalBoosted\": 0,\n      \"coActivationBoosted\": 0,\n      \"communityInjected\": 0,\n      \"graphSignalsBoosted\": 0,\n      \"totalGraphInjected\": 0,\n      \"rolloutState\": \"bounded_runtime\"\n    },\n    \"rerankMetadata\": {\n      \"reranking_enabled\": true,\n      \"reranking_requested\": true,\n      \"reranking_applied\": true\n    },\n    \"sourceContract\": {\n      \"version\": \"gate-d-reader-ready-v1\",\n      \"archivedTierEnabled\": false,\n      \"legacyFallbackEnabled\": false,\n      \"includeArchivedCompatibility\": \"not_requested\",\n      \"preferredDocumentTypes\": [\n        \"spec_doc\",\n        \"continuity\"\n      ],\n      \"retainedResults\": 5,\n      \"droppedNonCanonicalResults\": 0,\n      \"countsBySourceKind\": {\n        \"spec_doc\": 5,\n        \"continuity\": 0,\n        \"constitutional\": 0\n      }\n    },\n    \"retrievalTrace\": {\n      \"traceId\": \"tr_mog4g7cs_zdhyro\",\n      \"query\": \"planner-first contract memory save\",\n      \"intent\": \"understand\",\n      \"stages\": [\n        {\n          \"stage\": \"candidate\",\n          \"timestamp\": 1777229319484,\n          \"inputCount\": 0,\n          \"outputCount\": 0,\n          \"durationMs\": 0,\n          \"metadata\": {\n            \"channel\": \"d2-concept-expansion\",\n            \"originalQuery\": \"planner-first contract memory save\",\n            \"expandedQuery\": \"planner-first contract memory save memories knowledge context\",\n            \"expansionTerms\": [\n              \"memories\",\n              \"knowledge\",\n              \"context\"\n            ],\n            \"matchedConcepts\": [\n              \"memory\"\n            ]\n          }\n        },\n        {\n          \"stage\": \"candidate\",\n          \"timestamp\": 1777229319484,\n          \"inputCount\": 0,\n          \"outputCount\": 0,\n          \"durationMs\": 0,\n          \"metadata\": {\n            \"channel\": \"d2-concept-routing\",\n            \"matchedConcepts\": [\n              \"memory\"\n            ],\n            \"graphActivated\": true\n          }\n        },\n        {\n          \"stage\": \"candidate\",\n          \"timestamp\": 1777229320148,\n          \"inputCount\": 2,\n          \"outputCount\": 14,\n          \"durationMs\": 0,\n          \"metadata\": {\n            \"channel\": \"r12-embedding-expansion\",\n            \"expandedTerms\": [\n              \"research\",\n              \"default\",\n              \"evidence\",\n              \"review\",\n              \"path\",\n              \"planner\",\n              \"fallback\",\n              \"docs\"\n            ],\n            \"combinedQuery\": \"planner-first contract memory save research default evidence review path planner fallback docs\"\n          }\n        },\n        {\n          \"stage\": \"candidate\",\n          \"timestamp\": 1777229320149,\n          \"inputCount\": 2,\n          \"outputCount\": 16,\n          \"durationMs\": 665,\n          \"metadata\": {\n            \"searchType\": \"hybrid\",\n            \"mode\": null,\n            \"channelCount\": 2,\n            \"deepExpansion\": false,\n            \"r12EmbeddingExpansion\": true\n          }\n        },\n        {\n          \"stage\": \"fusion\",\n          \"timestamp\": 1777229320155,\n          \"inputCount\": 16,\n          \"outputCount\": 5,\n          \"durationMs\": 6,\n          \"metadata\": {\n            \"sessionBoostApplied\": \"off\",\n            \"causalBoostApplied\": \"applied\",\n            \"intentWeightsApplied\": \"off\",\n            \"artifactRoutingApplied\": \"applied\",\n            \"feedbackSignalsApplied\": \"off\",\n            \"graphContribution\": {\n              \"killSwitchActive\": false,\n              \"causalBoosted\": 0,\n              \"coActivationBoosted\": 0,\n              \"communityInjected\": 0,\n              \"graphSignalsBoosted\": 0,\n              \"totalGraphInjected\": 0,\n              \"rolloutState\": \"bounded_runtime\"\n            },\n            \"searchType\": \"hybrid\",\n            \"isHybrid\": true\n          }\n        },\n        {\n          \"stage\": \"rerank\",\n          \"timestamp\": 1777229320401,\n          \"inputCount\": 5,\n          \"outputCount\": 5,\n          \"durationMs\": 246,\n          \"metadata\": {\n            \"rerankApplied\": true,\n            \"provider\": \"cross-encoder\"\n          }\n        },\n        {\n          \"stage\": \"final-rank\",\n          \"timestamp\": 1777229320402,\n          \"inputCount\": 5,\n          \"outputCount\": 5,\n          \"durationMs\": 0,\n          \"metadata\": {\n            \"collapsedChunkHits\": 0,\n            \"chunkParents\": 0,\n            \"reassembled\": 0,\n            \"fallback\": 0\n          }\n        },\n        {\n          \"stage\": \"filter\",\n          \"timestamp\": 1777229320403,\n          \"inputCount\": 5,\n          \"outputCount\": 5,\n          \"durationMs\": 1,\n          \"metadata\": {\n            \"stateFiltered\": 0,\n            \"evidenceGapDetected\": false,\n            \"trmEnabled\": true,\n            \"applyStateLimits\": false,\n            \"minState\": \"\"\n          }\n        }\n      ],\n      \"totalDurationMs\": 918,\n      \"finalResultCount\": 5\n    },\n    \"appliedBoosts\": {\n      \"session\": {\n        \"applied\": \"off\"\n      },\n      \"causal\": {\n        \"applied\": \"applied\"\n      }\n    },\n    \"applied_boosts\": {\n      \"session\": {\n        \"applied\": \"off\"\n      },\n      \"causal\": {\n        \"applied\": \"applied\"\n      }\n    },\n    \"progressiveDisclosure\": {\n      \"summaryLayer\": {\n        \"count\": 5,\n        \"digest\": \"5 weak\"\n      },\n      \"results\": [\n        {\n          \"snippet\": \"\",\n          \"detailAvailable\": false,\n          \"resultId\": \"92\"\n        },\n        {\n          \"snippet\": \"\",\n          \"detailAvailable\": false,\n          \"resultId\": \"2318\"\n        },\n        {\n          \"snippet\": \"\",\n          \"detailAvailable\": false,\n          \"resultId\": \"94\"\n        },\n        {\n          \"snippet\": \"\",\n          \"detailAvailable\": false,\n          \"resultId\": \"2317\"\n        },\n        {\n          \"snippet\": \"\",\n          \"detailAvailable\": false,\n          \"resultId\": \"95\"\n        }\n      ],\n      \"continuation\": null\n    },\n    \"results\": [\n      {\n        \"id\": 92,\n        \"specFolder\": \"system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite\",\n        \"filePath\": \"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite/plan.md\",\n        \"title\": \"Implemen [system-spec-kit/026-graph-and-context-optimization/002-continuity-memory-runtime/004-memory-save-rewrite/plan]\",\n        \"similarity\": 76.44,\n        \"isConstitutional\": false,\n        \"importanceTier\": \"important\",\n        \"triggerPhrases\": [],\n        \"createdAt\": \"2026-04-25T10:32:09.031Z\",\n        \"isChunk\": false,\n        \"parentId\": null,\n        \"chunkIndex\": null,\n        \"chunkLabel\": null,\n        \"chunkCount\": null,\n        \"trustBadges\": {\n          \"confidence\": 0.9,\n          \"extractionAge\": \"yesterday\",\n          \"lastAccessAge\": \"never\",\n          \"orphan\": false,\n          \"weightHistoryChanged\": false\n        },\n        \"content\": null,\n        \"contentError\": \"File not found\",\n        \"confidence\": {\n          \"label\": \"low\",\n          \"value\": 0.362,\n          \"drivers\": [\n            \"multi_channel_agreement\"\n          ]\n        },\n        \"why\": {\n          \"summary\": \"Ranked first because semantic similarity\",\n          \"topSignals\": [\n            \"semantic_match\"\n          ]\n        }\n      }\n    ],\n    \"evidenceDigest\": \"5 results retrieved; avg score 0.79.\",\n    \"followUps\": []\n  },\n  \"hints\": [\n    \"Some files could not be read - check file paths\",\n    \"[code-graph] Symbols near mentioned files: function:closeIndexingRuntime, function:initializeIndexingRuntime, function:reindexSpecDocs\",\n    \"Auto-surface hook: injected 2 constitutional and 5 triggered memories (63ms)\",\n    \"Token budget enforced: truncated 5 → 1 results to fit 3500 token budget\"\n  ],\n  \"meta\": {\n    \"tool\": \"memory_search\",\n    \"tokenCount\": 3652,\n    \"latencyMs\": 927,\n    \"cacheHit\": false,\n    \"responseProfile\": \"research\",\n    \"autoSurface\": {\n      \"constitutionalCount\": 2,\n      \"triggeredCount\": 5,\n      \"surfaced_at\": \"2026-04-26T18:48:39.483Z\",\n      \"latencyMs\": 63\n    },\n    \"autoSurfacedContext\": {\n      \"constitutional\": [\n        {\n          \"id\": 2574,\n          \"specFolder\": \"system-spec-kit\",\n          \"filePath\": \"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/constitutional/gate-tool-routing.md\",\n          \"title\": \"TOOL ROUTING - Search & Retrieval Decision Tree\",\n          \"importanceTier\": \"constitutional\",\n          \"retrieval_directive\": \"Always surface when: TOOL ROUTING - Search & Retrieval Decision Tree | Prioritize when: task context aligns with \\\"TOOL ROUTING - Search & Retrieval Decision Tree\\\"\"\n        },\n        {\n          \"id\": 415,\n          \"specFolder\": \"system-spec-kit\",\n          \"filePath\": \"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/constitutional/gate-enforcement.md\",\n          \"title\": \"GATE ENFORCEMENT - Edge Cases & Cross-Reference\",\n          \"importanceTier\": \"constitutional\",\n          \"retrieval_directive\": \"Always surface when: GATE ENFORCEMENT - Edge Cases & Cross-Reference | Prioritize when: task context aligns with \\\"GATE ENFORCEMENT - Edge Cases & Cross-Reference\\\"\"\n        }\n      ],\n      \"triggered\": [\n        {\n          \"memory_id\": 1987,\n          \"spec_folder\": \"system-spec-kit/023-hybrid-rag-fusion-refinement/012-memory-save-quality-pipeline\",\n          \"title\": \"Research: Memory Save [system-spec-kit/023-hybrid-rag-fusion-refinement/012-memory-save-quality-pipeline/research]\",\n          \"matched_phrases\": [\n            \"memory\",\n            \"save\"\n          ]\n        },\n        {\n          \"memory_id\": 586,\n          \"spec_folder\": \"system-spec-kit/022-hybrid-rag-fusion/016-rewrite-memory-mcp-readme\",\n          \"title\": \"Plan: Rewrite Memory MCP README [system-spec-kit/022-hybrid-rag-fusion/016-rewrite-memory-mcp-readme/plan]\",\n          \"matched_phrases\": [\n            \"memory\"\n          ]\n        },\n        {\n          \"memory_id\": 2308,\n          \"spec_folder\": \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates\",\n          \"title\": \"...on/002-continuity-memory-runtime/003-continuity-refactor-gates/research/006-continuity-refactor-gates-pt-01/research]\",\n          \"matched_phrases\": [\n            \"memory\"\n          ]\n        },\n        {\n          \"memory_id\": 2300,\n          \"spec_folder\": \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/002-memory-quality-remediation\",\n          \"title\": \".../003-continuity-memory-runtime/002-memory-quality-remediation/research/003-memory-quality-remediation-pt-01/research]\",\n          \"matched_phrases\": [\n            \"memory\"\n          ]\n        },\n        {\n          \"memory_id\": 2004,\n          \"spec_folder\": \"system-spec-kit/023-hybrid-rag-fusion-refinement\",\n          \"title\": \"Deep Research: Spec Kit Memory Feature Audit & Quality [system-spec-kit/023-hybrid-rag-fusion-refinement/research]\",\n          \"matched_phrases\": [\n            \"memory\"\n          ]\n        }\n      ],\n      \"surfaced_at\": \"2026-04-26T18:48:39.483Z\",\n      \"latencyMs\": 63\n    },\n    \"tokenBudget\": 3500,\n    \"tokenBudgetTruncated\": true,\n    \"originalResultCount\": 5,\n    \"returnedResultCount\": 1\n  }\n}","metadata":{"truncated":false},"title":"","time":{"start":1777229319417,"end":1777229320529},"attachments":[]}}}
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-opencode-pure-1/output.txt:7:{"type":"tool_use","timestamp":1777229333434,"sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","part":{"id":"prt_dcb1f7bae001B8RYn58HFrEki5","messageID":"msg_dcb1f52cb001PHED6qrF9WNcPG","sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","type":"tool","tool":"read","callID":"call_00_xTK4ga2T7KN8uqhgw5J35loo","state":{"status":"completed","input":{"filePath":"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md"},"output":"<path>/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md</path>\n<type>file</type>\n<content>\n1: ---\n2: title: \"Feature [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec]\"\n3: description: \"Make /memory:save planner-first (non-mutating) by default while preserving full-auto as an explicit fallback, retire the legacy [spec]/memory/*.md write path, and decouple freshness (graph-metadata refresh, spec-doc reindex, enrichment) from the hot save path via explicit follow-up APIs.\"\n4: trigger_phrases:\n5:   - \"004-memory-save-rewrite\"\n6:   - \"014-memory-save-rewrite\"\n7:   - \"memory save planner first\"\n8:   - \"planner-first memory save\"\n9:   - \"full-auto fallback\"\n10:   - \"speckit_save_planner_mode\"\n11:   - \"memory folder retirement\"\n12:   - \"content-router scoped exception\"\n13:   - \"refreshgraphmetadata reindexspecdocs runenrichmentbackfill\"\n14:   - \"v3.4.1.0 save flow\"\n15:   - \"026-graph-and-context-optimization\"\n16: importance_tier: \"important\"\n17: contextType: \"implementation\"\n18: _memory:\n19:   continuity:\n20:     packet_pointer: \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\"\n21:     last_updated_at: \"2026-04-15T10:00:01Z\"\n22:     last_updated_by: \"cli-copilot\"\n23:     recent_action: \"Folder renamed; spec rewritten under planner-first framing\"\n24:     next_safe_action: \"Packet complete\"\n25:     blockers: []\n26:     key_files:\n27:       - \"spec.md\"\n28:       - \"plan.md\"\n29:       - \"tasks.md\"\n30:       - \"checklist.md\"\n31:       - \"decision-record.md\"\n32:       - \"implementation-summary.md\"\n33:       - \"research/013-audit-snapshot/review-report.md\"\n34:       - \"research/014-research-snapshot/research.md\"\n35:       - \"review/015-deep-review-snapshot/review-report.md\"\n36:     session_dedup:\n37:       fingerprint: \"sha256:014-planner-first-default-2026-04-15\"\n38:       session_id: \"014-planner-first-default-2026-04-15\"\n39:       parent_session_id: \"014-planner-first-default-closeout\"\n40:     completion_pct: 100\n41:     open_questions: []\n42:     answered_questions:\n43:       - \"The runtime was half-migrated: the legacy [spec]/memory/*.md write path was still live even after v3.4.0.0 docs claimed retirement.\"\n44:       - \"Research classified 15 save-flow subsystems and concluded that the writer core earns its cost while Tier 3 routing, reconsolidation, heavy quality automation, and enrichment do not.\"\n45:       - \"Implementation shipped planner-first default with explicit full-auto fallback; freshness work moved to explicit follow-up APIs.\"\n46:       - \"Deep review found 9 issues (3 P0, 5 P1, 1 P2); all resolved.\"\n47: template_source_hint: \"<!-- SPECKIT_TEMPLATE_SOURCE: spec-core + level2-verify + level3-arch + level3plus-gov | v2.2 -->\"\n48: ---\n49: # Feature Specification: /memory:save Planner-First Default\n50: \n51: <!-- SPECKIT_LEVEL: 3+ -->\n52: <!-- SPECKIT_TEMPLATE_SOURCE: spec-core + level2-verify + level3-arch + level3plus-gov | v2.2 -->\n53: \n54: ---\n55: \n56: ## EXECUTIVE SUMMARY\n57: \n58: `/memory:save` was doing too much on every invocation. The runtime still created, wrote, indexed, and read `[spec]/memory/*.md` even though v3.4.0.0 docs claimed that artifact was retired; on top of that legacy write path, every save triggered Tier 3 routing, a heavy quality-loop auto-fix, reconsolidation-on-save, post-insert enrichment, unconditional graph-metadata refresh, and unconditional spec-doc reindex — regardless of whether the caller actually wanted mutation. Auditing the code proved the system was half-migrated, turning vague drift into 25 concrete findings. Classifying the remaining 15 save-flow subsystems proved which ones still earned runtime cost (the canonical atomic writer, routed record identity, the content-router category contract, and thin continuity validation) and which ones did not belong on the default path.\n59: \n60: This packet delivers the end state implied by that analysis. `/memory:save` is planner-first by default: the handler computes the same route and legality data as before but stops short of mutation and returns structured planner output instead. `full-auto` is preserved as an explicit fallback via `SPECKIT_SAVE_PLANNER_MODE=full-auto`, with canonical atomic mutation, `POST_SAVE_FINGERPRINT` safety parity, same-path identity, and rollback intact. The legacy `[spec]/memory/*.md` write path is retired. Four previously default-on behaviors become explicit opt-in: `SPECKIT_ROUTER_TIER3_ENABLED`, `SPECKIT_QUALITY_AUTO_FIX`, `SPECKIT_RECONSOLIDATION_ENABLED`, `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED`. Freshness becomes follow-up work via three new APIs: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. `hybrid` is documented as reserved and currently behaves like `plan-only`. The content-router category contract is preserved with one honest, scoped exception: a Tier 3 default-disable and manual-review guard inside `content-router.ts`. 43 implementation tasks shipped under v3.4.1.0. A deep-review pass flagged 3 P0, 5 P1, and 1 P2 findings on router honesty, fallback safety parity, blocker classification, deferred-helper coverage, and changelog accuracy; all 9 were resolved before closeout.\n61: \n62: ---\n63: \n64: <!-- ANCHOR:metadata -->\n65: ## 1. METADATA\n66: \n67: | Field | Value |\n68: |-------|-------|\n69: | **Level** | 3+ |\n70: | **Priority** | P1 |\n71: | **Status** | Complete |\n72: | **Created** | 2026-04-14 |\n73: | **Completed** | 2026-04-15 |\n74: | **Branch** | `026-014-memory-save-rewrite` |\n75: | **Phase Folder** | `004-memory-save-rewrite` (historical alias: `014-memory-save-rewrite`) |\n76: | **Parent Packet** | `026-graph-and-context-optimization` |\n77: | **Release Context** | `v3.4.1.0` |\n78: \n79: ---\n80: \n81: | **Parent Spec** | ../spec.md |\n82: | **Parent Plan** | ../plan.md |\n83: | **Predecessor** | ../003-continuity-refactor-gates/spec.md |\n84: | **Successor** | None |\n85: <!-- /ANCHOR:metadata -->\n86: <!-- ANCHOR:problem -->\n87: ## 2. PROBLEM & PURPOSE\n88: \n89: ### Problem Statement\n90: \n91: `/memory:save` mutated by default, did work that had nothing to do with the caller's intent, and still honored an artifact family that had supposedly been retired. The audit produced 25 concrete findings across runtime write path, runtime read path, indexing, documentation contradictions, template drift, test drift, and a phantom save-side dedup contract. Relevance research then classified the remaining 15 save-flow subsystems and showed that four core pieces earned their cost (canonical atomic writer, routed record identity, content-router category contract, thin continuity validation) while four others (Tier 3 routing, reconsolidation-on-save, heavy quality-loop auto-fix, post-insert enrichment) did not belong on the default path. That combined picture made the default contract untenable: operators got mutation they didn't ask for, freshness work they didn't need, and an artifact surface docs claimed was gone.\n92: \n93: ### Purpose\n94: \n95: Ship a `/memory:save` contract that matches the evidence: planner-first by default so operators see the plan before anything changes, full-auto preserved as an explicit fallback for the cases that still need it, and freshness work moved to callable follow-up APIs so every save doesn't pay for work it doesn't need. Retire the legacy `[spec]/memory/*.md` write path end-to-end. Make four previously default-on behaviors opt-in via per-subsystem env flags, preserve `hybrid` as a reserved value, and record the scoped router exception honestly so docs match the code.\n96: \n97: ---\n98: \n99: <!-- /ANCHOR:problem -->\n100: <!-- ANCHOR:scope -->\n101: ## 3. SCOPE\n102: \n103: ### In Scope\n104: \n105: - Make `/memory:save` planner-first by default: the default path computes route + legality data, returns structured planner output, does not mutate files.\n106: - Preserve the `full-auto` writer path as an explicit fallback activated via `SPECKIT_SAVE_PLANNER_MODE=full-auto` with canonical atomic mutation, promotion, rollback, and same-path identity intact.\n107: - Retire the legacy `[spec]/memory/*.md` write and read path runtime-wide: remove the write path, update dedup and causal-link behavior to use canonical docs + the routed record, stop indexing `memory/*.md` into the vector DB.\n108: - Introduce three explicit follow-up APIs for freshness: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. Remove their unconditional participation in every save.\n109: - Gate four previously default-on save-path behaviors behind explicit env flags: `SPECKIT_ROUTER_TIER3_ENABLED` (default OFF), `SPECKIT_QUALITY_AUTO_FIX` (default OFF), `SPECKIT_RECONSOLIDATION_ENABLED` (default OFF), `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED` (default OFF).\n110: - Preserve the content-router eight-category contract. Record the single scoped exception inside `content-router.ts`: Tier 3 default-disable + manual-review return behavior.\n111: - Preserve hard legality checks and structural blockers in the save-quality gate; remove default-path quality-loop auto-fix retries while keeping advisory output.\n112: - Reserve `hybrid` as a valid value for `SPECKIT_SAVE_PLANNER_MODE` that currently behaves like `plan-only`; document it as reserved honestly.\n113: - Restore `POST_SAVE_FINGERPRINT` parity on the full-auto path.\n114: - Promote template-contract failures from advisories to planner blockers.\n115: - Make deferred helpers return explicit deferred status when skipped (no success-shaped status when nothing ran).\n116: - Update packet docs, `ENV_REFERENCE.md`, release notes, and test fixtures so the documented contract matches the shipped behavior (router scope, hybrid reserved state, follow-up tool names, freshness as explicit follow-up).\n117: - Update tests across `memory-save`, `content-router`, `quality-loop`, `save-quality-gate`, reconsolidation-bridge, reconsolidation, assistive-reconsolidation, chunking, graph-refresh, thin-continuity, planner UX, CLI target authority, and memory-save integration to prove planner-default + fallback end-to-end behavior.\n118: - Validate planner-first behavior against three real session transcripts before closeout.\n119: \n120: ### Out of Scope\n121: \n122: - Changes to the canonical atomic writer internals; reuse as-is.\n123: - Changes to the eight-category router contract; reuse as-is.\n124: - Replacing the save system with a new planner service; the existing handler owns the contract.\n125: - Changes to embedding backends, vector-DB schemas, or checkpoint/restore internals.\n126: - Packet 012's canonical intake work or packet 013's advisor phrase-booster work — unrelated scope.\n127: \n128: ### Files to Change\n129: \n130: | Surface | File Path | Change Type | Why It Matters |\n131: |---------|-----------|-------------|----------------|\n132: | Legacy write path retirement | `workflow.ts`, `file-writer.ts`, `memory-indexer.ts`, `memory-metadata.ts`, `directory-setup.ts` | Retire | Audit proved the runtime still created, wrote, indexed, and read `[spec]/memory/*.md` in contradiction to v3.4.0.0 retirement claim |\n133: | Planner contract core | `memory-save.ts`, `types.ts`, `response-builder.ts`, `validation-responses.ts`, `generate-context.ts` | Modify | Introduce planner-first default + shared types + blocker/advisory separation |\n134: | Canonical writer reuse | `create-record.ts`, `atomic-index-memory.ts`, `thin-continuity-record.ts`, `post-insert.ts` | Reuse/preserve | Core writer earns its cost; fallback path depends on stable interfaces |\n135: | Content router | `content-router.ts` | Modify (scoped) | Preserve eight-category contract; add Tier 3 default-disable + manual-review guard |\n136: | Quality gate | `quality-loop.ts`, `save-quality-gate.ts` | Modify | Preserve hard blockers; retire default-path auto-fix retries; keep advisory output |\n137: | Reconsolidation | `reconsolidation-bridge.ts` | Gate | Move behind explicit opt-in or fallback |\n138: | Freshness API | `api/indexing.ts`, `graph-metadata-parser.ts` | Create/expose | Follow-up APIs: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill` |\n139: | Command docs | `../../../../command/memory/save.md`, `../../../../command/memory/manage.md` | Modify | Document planner-first default, fallback, and follow-up freshness actions |\n140: | Reference docs | `../../../../skill/system-spec-kit/references/memory/save_workflow.md`, `../../../../skill/system-spec-kit/references/memory/memory_system.md`, templates | Modify | Align operator-facing references with shipped contract |\n141: | Env reference | `../../../../skill/system-spec-kit/mcp_server/ENV_REFERENCE.md` | Modify | Document `SPECKIT_SAVE_PLANNER_MODE`, per-subsystem flags, reserved `hybrid` honestly |\n142: | Release notes | `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` | Author | Record shipped contract, router scoped exception, reserved `hybrid`, follow-up APIs |\n143: | Test surfaces | See tasks.md §Testing — broad vitest + transcript prototype sweep | Modify | Prove planner-default, fallback parity, gate behavior, continuity upserts |\n144: | Packet metadata | `description.json`, `graph-metadata.json`, packet-local changelog | Generate | Packet discovery + graph visibility |\n145: | Packet docs | `spec.md`, `plan.md`, `tasks.md`, `checklist.md`, `decision-record.md`, `implementation-summary.md` | Create | Tell the complete story end-to-end |\n146: \n147: ### Research and Review Evidence\n148: \n149: The packet carries packet-local snapshots of the audit report, research synthesis, deep-review report, and planner-first transcript prototypes so a reader can inspect the most important artifacts without leaving the folder. Those snapshots live under `research/013-audit-snapshot/`, `research/014-research-snapshot/`, `review/015-deep-review-snapshot/`, and `scratch/transcripts-snapshot/` inside this flattened `004-memory-save-rewrite` packet.\n150: \n151: ---\n152: \n153: <!-- /ANCHOR:scope -->\n154: <!-- ANCHOR:requirements -->\n155: ## 4. REQUIREMENTS\n156: \n157: ### P0 — Blockers\n158: \n159: | ID | Requirement | Acceptance Criteria |\n160: |----|-------------|---------------------|\n161: | REQ-001 | The default `/memory:save` path must be planner-first and non-mutating. | Default invocation returns structured planner output (route, legality, blockers, advisories, follow-up actions) and mutates no files on disk. |\n162: | REQ-002 | Explicit `full-auto` must remain available as fallback. | Setting `SPECKIT_SAVE_PLANNER_MODE=full-auto` runs the canonical atomic writer with promotion, rollback, and same-path identity intact. |\n163: | REQ-003 | The legacy `[spec]/memory/*.md` write path must be retired. | `workflow.ts`, `file-writer.ts`, `memory-indexer.ts`, `memory-metadata.ts`, and `directory-setup.ts` no longer create, write, index, or read that surface. |\n164: | REQ-004 | Tier 3 routing must be default-off with a scoped, auditable exception. | `SPECKIT_ROUTER_TIER3_ENABLED=false` is default; `content-router.ts` contains the scoped default-disable + manual-review guard; the eight-category contract is otherwise unchanged. |\n165: | REQ-005 | Quality-loop auto-fix must leave the default path while hard blockers remain. | Default path emits advisory output only; structural/legality blockers still fail the save; `SPECKIT_QUALITY_AUTO_FIX=false` is default. |\n166: | REQ-006 | Reconsolidation-on-save must be explicit opt-in. | Default path never triggers reconsolidation; `SPECKIT_RECONSOLIDATION_ENABLED=false` is default; opt-in via env flag or fallback execution. |\n167: | REQ-007 | Post-insert enrichment must leave the default save path. | Default path emits no enrichment calls; `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED=false` is default; opt-in via env flag or follow-up API. |\n168: | REQ-008 | Unconditional graph refresh and spec-doc reindex must leave planner-default saves. | Planner-default saves no longer trigger these; explicit follow-up APIs handle the work when wanted. |\n169: | REQ-009 | `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill` must exist as explicit follow-up APIs. | All three are callable independently of the save path; each has execution-level test coverage. |\n170: | REQ-010 | Fallback safety parity must be preserved. | `POST_SAVE_FINGERPRINT` parity is restored on the full-auto path; fallback tests prove atomic mutation + rollback semantics match the pre-packet writer. |\n171: | REQ-011 | Template-contract failures must be planner blockers. | Template-contract misses surface as `blocker` entries in planner output, not as advisories. |\n172: | REQ-012 | Deferred helpers must return explicit deferred status. | When default-path skips reconsolidation, enrichment, Tier 3 routing, or quality auto-fix, the planner response records `deferred` rather than success-shaped output. |\n173: | REQ-013 | `hybrid` must be documented as reserved. | `SPECKIT_SAVE_PLANNER_MODE=hybrid` is recognized; current behavior matches `plan-only`; docs and env reference describe it as reserved for future behavior. |\n174: | REQ-014 | Shipped documentation must match the runtime contract. | `/memory:save` docs, `ENV_REFERENCE.md`, release notes, and templates describe planner-first default, explicit fallback, follow-up APIs, reserved `hybrid`, and the scoped router exception honestly. |\n175: | REQ-015 | Canonical atomic writer, routed record identity, content-router category contract, and thin continuity validation must remain intact. | Fallback path plus continuity upserts still run through the preserved core; tests prove no behavior regression outside the documented gated flags. |\n176: \n177: ### P1 — Required\n178: \n179: | ID | Requirement | Acceptance Criteria |\n180: |----|-------------|---------------------|\n181: | REQ-016 | Planner output must preserve blocker/advisory separation. | Types and helpers distinguish `blocker` entries (must fix) from `advisory` entries (informational) in all code paths and tests. |\n182: | REQ-017 | CLI target authority must stay deterministic. | Planner-default CLI tests prove the same target selection as full-auto for identical inputs. |\n183: | REQ-018 | Same-path identity must remain deterministic after the refactor. | Record identity tests confirm identical path semantics for the same-target save case across planner and full-auto paths. |\n184: | REQ-019 | `/spec_kit:resume` recovery ladder must stay intact. | Recovery ladder tests show no regression when the save path is planner-first. |\n185: | REQ-020 | Transcript prototypes must ground planner behavior. | Three real session transcripts are exercised; no unexpected drops, wrong-anchor outcomes, or unsafe target exposures are produced. |\n186: | REQ-021 | Planner output must not expose unsafe file targets. | Target authority tests verify the planner emits only caller-authorized paths. |\n187: | REQ-022 | Fallback flags must not silently widen mutation scope. | Env-flag documentation + tests prove that enabling any single opt-in flag does not cascade other opt-ins. |\n188: | REQ-023 | Continuity upserts must still use validated helpers. | Thin continuity + upsert tests pass unchanged expectations. |\n189: | REQ-024 | Follow-up APIs must be execution-level test-covered. | `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill` have vitest suites covering at least happy-path + one failure branch each. |\n190: | REQ-025 | Four trim targets must stay aligned across packet docs. | Tier 3 routing, quality-loop auto-fix, reconsolidation-on-save, and post-insert enrichment are each documented consistently as default-off + opt-in. |\n191: \n192: ### P2 — Nice to Have\n193: \n194: | ID | Requirement | Acceptance Criteria |\n195: |----|-------------|---------------------|\n196: | REQ-026 | Transcript backlog captured. | If a transcript prototype surfaces an issue that is not fixed in this packet, it is logged rather than lost. |\n197: | REQ-027 | No new network dependency on the default path. | Planner-default never depends on new network calls introduced by this packet. |\n198: | REQ-028 | Env reference diagrams and tables stay readable. | Env reference uses consistent wording for default/opt-in, reserved, and fallback. |\n199: | REQ-029 | Chunking stays a size-driven fallback. | Chunking remains a fallback behavior for oversized inputs; not a default dependency. |\n200: | REQ-030 | Follow-up actions surface consistently. | Planner output surfaces follow-up actions in a single consistent schema across router, quality, reconsolidation, enrichment, and indexing scenarios. |\n201: \n202: ---\n203: \n204: <!-- /ANCHOR:requirements -->\n205: <!-- ANCHOR:success-criteria -->\n206: ## 5. SUCCESS CRITERIA\n207: \n208: - **SC-001**: `/memory:save` with no env override returns structured planner output and mutates no files.\n209: - **SC-002**: `SPECKIT_SAVE_PLANNER_MODE=full-auto` runs the canonical atomic writer with `POST_SAVE_FINGERPRINT` parity, promotion, and rollback intact.\n210: - **SC-003**: `[spec]/memory/*.md` is no longer created, written, indexed, or read at runtime; audit evidence (F001-F007) resolved.\n211: - **SC-004**: `SPECKIT_ROUTER_TIER3_ENABLED=false` is the default; Tier 3 routing only runs when explicitly enabled; `content-router.ts` Tier 3 guard is the single documented exception.\n212: - **SC-005**: `SPECKIT_QUALITY_AUTO_FIX=false` is the default; hard blockers still fire on malformed saves; advisory output remains available.\n213: - **SC-006**: `SPECKIT_RECONSOLIDATION_ENABLED=false` is the default; reconsolidation is available via opt-in or fallback.\n214: - **SC-007**: `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED=false` is the default; enrichment is available via opt-in or follow-up API.\n215: - **SC-008**: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill` are callable APIs with execution-level test coverage.\n216: - **SC-009**: `hybrid` is recognized as reserved for `SPECKIT_SAVE_PLANNER_MODE`; documented as currently behaving like `plan-only`.\n217: - **SC-010**: Deferred helpers return explicit `deferred` status instead of success-shaped output when the default path skips them.\n218: - **SC-011**: Template-contract failures produce `blocker` entries in planner output.\n219: - **SC-012**: Docs (`/memory:save`, `ENV_REFERENCE.md`, release notes, templates) match the shipped contract; router scope is described honestly.\n220: - **SC-013**: 43 of 43 implementation tasks completed; 0 blocked tasks at closeout.\n221: - **SC-014**: Deep-review findings F001-F009 (3 P0, 5 P1, 1 P2) are resolved.\n222: - **SC-015**: Canonical atomic writer, routed record identity, content-router category contract, and thin continuity validation are unchanged outside the documented Tier 3 guard.\n223: - **SC-016**: Packet 014 primary docs pass `validate_document.py`.\n224: - **SC-017**: Packet passes `validate.sh --strict`.\n225: - **SC-018**: `description.json`, `graph-metadata.json`, and packet-local changelog exist.\n226: - **SC-019**: Three real session transcripts validate planner-first behavior with no wrong-anchor or unsafe-target outcomes.\n227: \n228: ---\n229: \n230: <!-- /ANCHOR:success-criteria -->\n231: <!-- ANCHOR:risks -->\n232: ## 6. RISKS & DEPENDENCIES\n233: \n234: | Type | Item | Impact | Mitigation |\n235: |------|------|--------|------------|\n236: | Dependency | Canonical atomic writer stability | High | Preserve as-is; fallback path relies on it |\n237: | Dependency | Eight-category router contract | High | Preserve; record scoped Tier 3 exception only |\n238: | Dependency | Vitest + transcript fixtures | High | Broad test sweep covers planner, fallback, router, quality, reconsolidation, enrichment, follow-up APIs, continuity |\n239: | Dependency | `ENV_REFERENCE.md` + release notes alignment | High | Update both in the same packet as the runtime changes |\n240: | Risk | Default path still mutates on some branch | High | Planner-default tests assert non-mutation; CI catches regression |\n241: | Risk | Full-auto fallback loses `POST_SAVE_FINGERPRINT` parity | High | Explicit remediation (P015-R002) restores parity; fallback tests prove it |\n242: | Risk | Docs drift from runtime after release | High | Changelog honesty remediation (P015-R009) aligns release notes to the scoped router exception and reserved `hybrid` state |\n243: | Risk | Borderline router cases silently widen Tier 3 use | Medium | Tier 3 is default-disable + manual-review guard inside `content-router.ts`; env flag is opt-in only |\n244: | Risk | Deferred helpers appear to have \"succeeded\" when they ran nothing | Medium | Explicit `deferred` status in planner output (P015-R004) |\n245: | Risk | Template-contract misses hide as advisories | Medium | Promote to planner blockers (P015-R003) |\n246: | Risk | `hybrid` mode assumed to be a live mixed-flow behavior | Medium | Reserved state documented explicitly in docs and release notes |\n247: | Risk | Follow-up APIs ship without execution-level coverage | Medium | Remediation (P015-R006) adds coverage before closeout |\n248: | Risk | Packet docs understate what the deep review caught | Medium | Implementation summary records 9-finding remediation closeout with status per finding |\n249: \n250: ---\n251: \n252: ## 7. NON-FUNCTIONAL REQUIREMENTS\n253: \n254: ### Correctness\n255: \n256: - **NFR-C01**: The planner-default path must not mutate any file on disk.\n257: - **NFR-C02**: The full-auto fallback must match pre-packet writer behavior for atomic mutation and rollback.\n258: - **NFR-C03**: Router target authority must be identical between planner and fallback paths for the same inputs.\n259: \n260: ### Safety\n261: \n262: - **NFR-SA01**: Hard legality blockers must still fire on malformed saves regardless of mode.\n263: - **NFR-SA02**: Planner output must expose only caller-authorized file targets.\n264: - **NFR-SA03**: `POST_SAVE_FINGERPRINT` parity must be restored on the full-auto path.\n265: \n266: ### Traceability\n267: \n268: - **NFR-T01**: Every planner output item must map to a typed entry (`blocker` or `advisory` or `deferred`) with a source reason.\n269: - **NFR-T02**: Env flags must be named consistently across code, docs, and env reference.\n270: - **NFR-T03**: Deferred helpers must name the gated subsystem explicitly when skipping.\n271: \n272: ### Maintainability\n273: \n274: - **NFR-M01**: The canonical atomic writer must remain the single mutation mechanism used by the fallback path.\n275: - **NFR-M02**: The eight-category router contract must remain the single route-target mapping.\n276: - **NFR-M03**: Opt-in flags must be orthogonal so enabling one does not cascade others.\n277: \n278: ### Governance\n279: \n280: - **NFR-G01**: Level 3+ structure with governance and compliance sections present.\n281: - **NFR-G02**: Packet passes `validate_document.py` and `validate.sh --strict`.\n282: - **NFR-G03**: Release notes, `/memory:save` docs, and `ENV_REFERENCE.md` must agree on the same default/opt-in/reserved vocabulary.\n283: \n284: ### Usability\n285: \n286: - **NFR-U01**: Planner output must be human-readable and action-oriented.\n287: - **NFR-U02**: Operator docs must describe planner-first default, explicit fallback, and follow-up APIs in consistent language.\n288: - **NFR-U03**: Follow-up action names must match the shipped tool names in packet docs.\n289: \n290: ### Reliability\n291: \n292: - **NFR-R01**: The default path must not introduce any new network dependency.\n293: - **NFR-R02**: Known limitations carried from the release and remediation pass must be preserved in packet docs.\n294: - **NFR-R03**: Packet metadata must support packet discovery and graph traversal.\n295: \n296: ### Transcript Snapshot Hygiene\n297: \n298: - **NFR-TH01**: Transcript snapshots retained in packet-local `scratch/` or `review/` directories must not contain raw API keys, bearer tokens, or user credentials. The planner and fallback paths must strip or redact credential-shaped strings before writing any transcript artifact to disk.\n299: - **NFR-TH02**: Transcript artifacts exceeding 500 KB must be truncated or chunked with a deterministic hash pointer so the full content can be reconstructed from the source session without bloating the packet.\n300: \n301: ---\n302: \n303: ## 8. EDGE CASES\n304: \n305: ### Runtime Edge Cases\n306: \n307: - Caller invokes `/memory:save` with no args → planner-default; returns plan; does not mutate.\n308: - Caller explicitly requests `full-auto` → atomic mutation + rollback path.\n309: - Caller explicitly enables `SPECKIT_ROUTER_TIER3_ENABLED` → Tier 3 routing participates; manual-review return flag is surfaced when triggered.\n310: - Caller enables any single opt-in flag → only that subsystem activates; no cascade.\n311: - Malformed template-contract save → planner output contains at least one `blocker` entry.\n312: - Default-path call that would otherwise run reconsolidation → planner returns a `deferred` entry naming reconsolidation explicitly.\n313: - `SPECKIT_SAVE_PLANNER_MODE=hybrid` → behaves like `plan-only`; documented as reserved.\n314: - Follow-up API called independently → executes without touching the save path.\n315: \n316: ### Documentation Edge Cases\n317: \n318: - A reader assumes \"planner-first\" means `full-auto` was deleted → docs must be explicit that `full-auto` remains available as fallback.\n319: - A reader assumes \"content-router preserved\" means zero file-level edits → docs must surface the scoped Tier 3 guard honestly.\n320: - A reader assumes `hybrid` is a live mixed-flow mode → docs must describe it as reserved with current `plan-only` behavior.\n321: - A reader expects every save to reindex docs → docs must describe `reindexSpecDocs` as an explicit follow-up action.\n322: \n323: ---\n324: \n325: ## 9. COMPLEXITY ASSESSMENT\n326: \n327: | Dimension | Score | Notes |\n328: |-----------|-------|-------|\n329: | Scope | 23/25 | 15-subsystem save-flow audit, 43-task implementation, 9-finding deep-review remediation, plus docs + env reference + release note alignment |\n330: | Risk | 21/25 | High narrative + correctness risk because the packet changes the default save contract and must preserve fallback safety parity |\n331: | Research | 18/20 | Requires grounding on audit evidence, research classification, implementation scope, deep-review findings, and release notes |\n332: | Multi-Agent | 12/15 | cli-codex led the main build-out; cli-copilot finished late-stage M5 closeout; parallel Opus agents for remediation |\n333: | Coordination | 14/15 | Runtime changes + docs + env reference + release notes + packet metadata must all stay aligned |\n334: | **Total** | **88/100** | **Level 3+** |\n335: \n336: ---\n337: \n338: ## 10. RISK MATRIX\n339: \n340: | Risk ID | Description | Impact | Likelihood | Mitigation |\n341: |---------|-------------|--------|------------|------------|\n342: | R-001 | Default path mutates under a hidden branch | High | Low | Planner-default non-mutation tests |\n343: | R-002 | Fallback loses atomic safety parity | High | Low | `POST_SAVE_FINGERPRINT` restored (ADR-007) |\n344: | R-003 | Router preservation claim contradicts code | High | Medium | Scoped exception documented (ADR-007) |\n345: | R-004 | Remediation underplayed after deep review | High | Low | 9-finding closure section in tasks, checklist, implementation summary |\n346: | R-005 | Release notes drift from runtime contract | Medium | Medium | Changelog honesty remediation P015-R009 |\n347: | R-006 | Opt-in flag cascade activates unintended subsystems | High | Low | Env reference + orthogonality tests |\n348: | R-007 | Template-contract failures hide as advisories | Medium | Medium | Promoted to blockers (P015-R003) |\n349: | R-008 | Deferred helpers appear \"successful\" when skipped | Medium | Medium | Explicit `deferred` status (P015-R004) |\n350: \n351: ---\n352: \n353: ## 11. USER STORIES\n354: \n355: ### US-001: Planner-first default\n356: \n357: **As an** operator running `/memory:save`, **I want** the default path to show me a plan before anything changes, **so that** I can review routing, legality, and follow-up actions without committing to mutation.\n358: \n359: **Acceptance Criteria**\n360: 1. Given a caller invokes `/memory:save` with no args, when the handler runs, then it returns structured planner output and mutates nothing.\n361: 2. Given a caller sees a planner blocker, when they correct the blocker, then a subsequent planner call shows the blocker resolved.\n362: \n363: ### US-002: Full-auto fallback\n364: \n365: **As an** operator who still wants mutation, **I want** `SPECKIT_SAVE_PLANNER_MODE=full-auto` to run the canonical writer, **so that** automation workflows that depended on in-save mutation keep working.\n366: \n367: **Acceptance Criteria**\n368: 1. Given `SPECKIT_SAVE_PLANNER_MODE=full-auto`, when the handler runs, then canonical atomic mutation + rollback + same-path identity behave exactly as before.\n369: 2. Given a full-auto run fails mid-write, when rollback fires, then `POST_SAVE_FINGERPRINT` parity is preserved.\n370: \n371: ### US-003: Explicit freshness follow-up\n372: \n373: **As an** operator who wants freshness on demand, **I want** `refreshGraphMetadata`, `reindexSpecDocs`, and `runEnrichmentBackfill` as callable APIs, **so that** I only pay for that work when I actually need it.\n374: \n375: **Acceptance Criteria**\n376: 1. Given a planner-default save completes, when I call `refreshGraphMetadata`, then graph metadata refreshes without mutating saved records.\n377: 2. Given an explicit follow-up action surfaces `reindexSpecDocs`, when I invoke the API, then spec docs reindex independently of the save path.\n378: \n379: ### US-004: Reserved `hybrid`\n380: \n381: **As an** operator reading env docs, **I want** `hybrid` described as reserved, **so that** I don't assume it is a live mixed-flow behavior that I should rely on.\n382: \n383: **Acceptance Criteria**\n384: 1. Given `SPECKIT_SAVE_PLANNER_MODE=hybrid`, when the handler runs, then behavior matches `plan-only`.\n385: 2. Given I read `ENV_REFERENCE.md`, when I look up `hybrid`, then the doc describes it as reserved with current `plan-only` behavior.\n386: \n387: ### US-005: Honest router scope\n388: \n389: **As a** reviewer or release historian, **I want** the content-router preservation claim to match the code, **so that** future refactors don't assume bit-for-bit preservation when the Tier 3 guard exists.\n390: \n391: **Acceptance Criteria**\n392: 1. Given I diff `content-router.ts` against the prior release, when I look at the changes, then I see the scoped Tier 3 default-disable + manual-review guard documented in ADR-007.\n393: 2. Given I read release notes, when I look for router scope, then the notes describe the scoped exception rather than claiming zero edits.\n394: \n395: ### US-006: Blocker classification\n396: \n397: **As a** save caller with a malformed save, **I want** template-contract failures surfaced as blockers, **so that** I can't silently ship content that misses the contract.\n398: \n399: **Acceptance Criteria**\n400: 1. Given a template-contract miss, when the planner runs, then the output contains at least one `blocker` entry naming the contract.\n401: 2. Given a `blocker` entry, when I fix the miss and rerun, then the blocker is gone and the advisory tier is empty (or names non-blocking issues only).\n402: \n403: ### US-007: Deferred status honesty\n404: \n405: **As an** operator reading planner output, **I want** `deferred` status on skipped subsystems, **so that** I don't misread the result as \"everything ran and succeeded.\"\n406: \n407: **Acceptance Criteria**\n408: 1. Given `SPECKIT_RECONSOLIDATION_ENABLED=false`, when the planner runs, then reconsolidation shows `deferred` in the output (not success-shaped).\n409: 2. Given multiple subsystems are deferred, when the planner returns, then each appears as its own `deferred` entry naming the subsystem.\n410: \n411: ---\n412: \n413: ## 12. APPROVAL WORKFLOW\n414: \n415: | Checkpoint | Approver | Status | Date |\n416: |------------|----------|--------|------|\n417: | Audit scope review | Auditor | Complete | 2026-04-14 |\n418: | Research verdict review | Researcher | Complete | 2026-04-14 |\n419: | Implementation scope review | Implementation author | Complete | 2026-04-15 |\n420: | Deep review | Reviewer | Complete | 2026-04-15 |\n421: | Remediation closure review | Remediation author | Complete | 2026-04-15 |\n422: | Archive-readiness review | Orchestrator | Complete | 2026-04-15 |\n423: \n424: ---\n425: \n426: ## 13. COMPLIANCE CHECKPOINTS\n427: \n428: ### Documentation Governance\n429: \n430: - [x] Level 3+ packet structure present.\n431: - [x] Snapshot notes added to copied Markdown files that carry source evidence.\n432: - [x] Primary docs authored as unified narrative rather than copied duplicates.\n433: - [x] Runtime contract described consistently across `/memory:save` docs, `ENV_REFERENCE.md`, release notes, and templates.\n434: \n435: ### Accuracy Governance\n436: \n437: - [x] Audit truth preserved: runtime was half-migrated before this packet shipped.\n438: - [x] Research verdict preserved: trim-targeted path classified four subsystems as default-off.\n439: - [x] Implementation truth preserved: planner-first default + explicit fallback + follow-up APIs.\n440: - [x] Remediation closure preserved: 9 deep-review findings resolved.\n441: \n442: ### Tooling Governance\n443: \n444: - [x] `validate_document.py` pass recorded for the six primary docs.\n445: - [x] `validate.sh --strict` pass recorded.\n446: - [x] `description.json` and `graph-metadata.json` generated.\n447: \n448: ---\n449: \n450: ## 14. STAKEHOLDER MATRIX\n451: \n452: | Stakeholder | Role | Interest | Communication Need |\n453: |-------------|------|----------|--------------------|\n454: | Save-flow maintainers | Runtime and docs owners | High | Need one accurate packet for future change planning |\n455: | Release maintainers | Changelog and archive owners | High | Need packet-level alignment with v3.4.1.0 |\n456: | Future reviewers | Audit and remediation readers | High | Need source-backed narrative without packet hopping |\n457: | Tooling operators | `/memory:save` users | Medium | Need clear default, fallback, and follow-up behavior |\n458: | AI orchestrators | Session continuity readers | High | Need the planner-first contract documented end-to-end |\n459: \n460: ---\n461: \n462: ## 15. CHANGE LOG\n463: \n464: ### v1.0 (2026-04-15)\n465: \n466: - Shipped planner-first default for `/memory:save` with explicit `full-auto` fallback.\n467: - Retired legacy `[spec]/memory/*.md` write path.\n468: - Gated Tier 3 routing, quality-loop auto-fix, reconsolidation-on-save, and post-insert enrichment behind per-subsystem env flags.\n469: - Introduced `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill` as explicit follow-up APIs.\n470: - Documented `hybrid` as reserved with current `plan-only` behavior.\n471: - Recorded the scoped `content-router.ts` Tier 3 guard as ADR-007.\n472: - Remediated all 9 deep-review findings (3 P0, 5 P1, 1 P2).\n473: \n474: ---\n475: \n476: ### Acceptance Scenarios\n477: \n478: ### Scenario 1: Planner-first default is the shipped contract\n479: \n480: **Given** the reader opens packet docs\n481: **When** they read the executive summary, implementation summary, and checklist\n482: **Then** they understand that `/memory:save` now returns a structured planner response by default and no longer mutates files on the default path.\n483: \n484: ### Scenario 2: Full-auto fallback remains available\n485: \n486: **Given** the reader wants to know whether automation was removed entirely\n487: **When** they inspect the unified requirements and implementation summary\n488: **Then** they see that `SPECKIT_SAVE_PLANNER_MODE=full-auto` still preserves canonical atomic mutation, promotion, rollback, and same-path identity.\n489: \n490: ### Scenario 3: Deferred enrichment is not removal\n491: \n492: **Given** the reader looks for graph refresh, reindex, and enrichment behavior\n493: **When** they read the packet docs\n494: **Then** they understand that these behaviors moved to explicit follow-up actions or fallback mode rather than disappearing.\n495: \n496: ### Scenario 4: `SPECKIT_SAVE_PLANNER_MODE` is the primary planner flag\n497: \n498: **Given** a maintainer is checking the rollout model\n499: **When** they inspect the implementation and verification sections\n500: **Then** they see `plan-only` as default, `full-auto` as explicit fallback, and `hybrid` as reserved.\n501: \n502: ### Scenario 5: `SPECKIT_ROUTER_TIER3_ENABLED` stays opt-in\n503: \n504: **Given** a reader wants to know whether Tier 3 routing still participates by default\n505: **When** they inspect the acceptance and decision sections\n506: **Then** they see that Tier 3 routing is default-off and guarded as a scoped exception inside `content-router.ts`.\n507: \n508: ### Scenario 6: `SPECKIT_QUALITY_AUTO_FIX` stays opt-in\n509: \n510: **Given** a reader wants to know what happened to quality-loop auto-fix\n511: **When** they read the requirements and ADR set\n512: **Then** they see that hard checks remain blockers while auto-fix retries moved behind explicit opt-in behavior.\n513: \n514: ### Scenario 7: `SPECKIT_RECONSOLIDATION_ENABLED` stays opt-in\n515: \n516: **Given** a reader wants to know what happened to reconsolidation-on-save\n517: **When** they inspect the implementation and verification sections\n518: **Then** they see that reconsolidation remains available only through explicit opt-in or fallback behavior.\n519: \n520: ### Scenario 8: `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED` stays opt-in\n521: \n522: **Given** a reader wants to know whether post-insert enrichment still exists\n523: **When** they inspect the requirement, decision, and summary sections\n524: **Then** they see that post-insert enrichment remains available but is no longer part of the default save path.\n525: \n526: ---\n527: \n528: <!-- /ANCHOR:risks -->\n529: <!-- ANCHOR:questions -->\n530: ### Questions\n531: \n532: | Area | Question | Answer | Evidence |\n533: |------|----------|--------|----------|\n534: | Audit | Was the legacy memory-file surface truly retired when the audit began? | No. The audit found the runtime still created, wrote, indexed, and read `[spec]/memory/*.md`. | `research/013-audit-snapshot/review-report.md`, `research/013-audit-snapshot/iterations/iteration-001.md` |\n535: | Audit | Was the contradiction limited to docs? | No. The contradiction existed in runtime code, docs, templates, and tests. | `research/013-audit-snapshot/review-report.md` |\n536: | Audit | How large was the original active finding set? | 25 active findings across 9 P0, 9 P1, and 7 P2. | `research/013-audit-snapshot/review-report.md` |\n537: | Audit | What closure paths did the audit identify? | Path A retire, Path B rescind, Path C dedup redesign. | `research/013-audit-snapshot/review-report.md` |\n538: | Audit | Which outcome became historical truth in v3.4.1.0? | The retirement path landed and release notes aligned the runtime with the intended canonical-doc model. | `../../../../changelog/01--system-spec-kit/v3.4.1.0.md`, `research/013-audit-snapshot/deep-review-strategy.md` |\n539: | Research | Which save-flow pieces remained load-bearing? | Canonical atomic writer, routed record identity, content-router core, thin continuity validation. | `research/014-research-snapshot/research.md`, `research/014-research-snapshot/findings-registry.json` |\n540: | Research | Which save-flow pieces were over-engineered on the default path? | Tier 3 routing, reconsolidation-on-save, heavy quality-loop auto-fix, post-insert enrichment. | `research/014-research-snapshot/research.md`, `research/014-research-snapshot/findings-registry.json` |\n541: | Research | Could the save system be redesigned without replacing the core writer? | Yes. The research recommended a planner-first wrapper around the existing canonical prep and fallback writer. | `research/014-research-snapshot/research.md`, `research/014-research-snapshot/iterations/iteration-020.md` |\n542: | Research | Did the research support decoupling reindex and graph refresh? | Yes. Both were classified as freshness or derived-state concerns rather than write-core correctness. | `research/014-research-snapshot/research.md` |\n543: | Research | Did the research require deleting the CLI wrapper? | No. The wrapper retained partial value for explicit target authority and structured input normalization. | `research/014-research-snapshot/iterations/iteration-001.md`, `research/014-research-snapshot/findings-registry.json` |\n544: | Implementation | What became the new default operator contract? | Planner-first `/memory:save` with structured non-mutating output. | `review/015-deep-review-snapshot/primary-docs/spec.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` |\n545: | Implementation | Was the old full-auto path deleted? | No. It remained available as explicit `full-auto` fallback. | `review/015-deep-review-snapshot/primary-docs/spec.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` |\n546: | Implementation | How many implementation tasks shipped? | 43 of 43 tasks. | `review/015-deep-review-snapshot/primary-docs/tasks.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` |\n547: | Implementation | Which follow-up APIs became explicit? | `refreshGraphMetadata`, `reindexSpecDocs`, and `runEnrichmentBackfill`. | `review/015-deep-review-snapshot/primary-docs/tasks.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` |\n548: | Review | What did the first deep-review pass find? | 3 P0, 5 P1, and 1 P2 findings across router honesty, fallback parity, blocker classification, coverage, and doc drift. | `review/015-deep-review-snapshot/review-report.md`, `review/015-deep-review-snapshot/deep-review-findings-registry.json` |\n549: | Remediation | Did the packet close every deep-review finding? | Yes. All 9 findings were resolved. | `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`, `review/015-deep-review-snapshot/deep-review-findings-registry.json` |\n550: | Remediation | What became the honest router story after remediation? | Router core preserved with one scoped Tier 3 default-disable and manual-review exception recorded in the ADR set. | `review/015-deep-review-snapshot/primary-docs/decision-record.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` |\n551: | Release | What does `hybrid` mean after remediation? | It remains reserved and currently behaves like `plan-only`. | `review/015-deep-review-snapshot/review-report.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` |\n552: \n553: ---\n554: \n555: ## 16. OPEN QUESTIONS\n556: \n557: None. The packet records the shipped and remediated state of `/memory:save` as of 2026-04-15.\n558: \n559: ---\n560: \n561: <!-- /ANCHOR:questions -->\n562: ## RELATED DOCUMENTS\n563: \n564: - **Implementation Plan**: `plan.md`\n565: - **Task Inventory**: `tasks.md`\n566: - **Verification Checklist**: `checklist.md`\n567: - **Decision Record**: `decision-record.md`\n568: - **Implementation Summary**: `implementation-summary.md`\n569: - **Audit Evidence Snapshot**: `research/013-audit-snapshot/`\n570: - **Research Evidence Snapshot**: `research/014-research-snapshot/`\n571: - **Deep-Review Evidence Snapshot**: `review/015-deep-review-snapshot/`\n572: - **Transcript Evidence Snapshot**: `scratch/transcripts-snapshot/`\n\n(End of file - total 572 lines)\n</content>","metadata":{"preview":"---\ntitle: \"Feature [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec]\"\ndescription: \"Make /memory:save planner-first (non-mutating) by default while preserving full-auto as an explicit fallback, retire the legacy [spec]/memory/*.md write path, and decouple freshness (graph-metadata refresh, spec-doc reindex, enrichment) from the hot save path via explicit follow-up APIs.\"\ntrigger_phrases:\n  - \"004-memory-save-rewrite\"\n  - \"014-memory-save-rewrite\"\n  - \"memory save planner first\"\n  - \"planner-first memory save\"\n  - \"full-auto fallback\"\n  - \"speckit_save_planner_mode\"\n  - \"memory folder retirement\"\n  - \"content-router scoped exception\"\n  - \"refreshgraphmetadata reindexspecdocs runenrichmentbackfill\"\n  - \"v3.4.1.0 save flow\"\n  - \"026-graph-and-context-optimization\"\nimportance_tier: \"important\"\ncontextType: \"implementation\"\n_memory:\n  continuity:\n    packet_pointer: \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\"","truncated":false,"loaded":[]},"title":".opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md","time":{"start":1777229333421,"end":1777229333432}}}}
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-opencode-pure-1/output.txt:8:{"type":"tool_use","timestamp":1777229335765,"sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","part":{"id":"prt_dcb1f84e700166AC4UjqS6gr6p","messageID":"msg_dcb1f52cb001PHED6qrF9WNcPG","sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","type":"tool","tool":"read","callID":"call_01_bvnJwBN8qvfcsL96qo7NcoWR","state":{"status":"completed","input":{"filePath":"/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md"},"output":"<path>/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md</path>\n<type>file</type>\n<content>\n1: ---\n2: title: \"Implemen [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan]\"\n3: description: \"Milestoned delivery (M1-M10) for the planner-first /memory:save contract: audit + retirement of the legacy [spec]/memory/*.md write path, 20-iteration relevance research, planner contract + fallback implementation, routing/quality/reconsolidation/enrichment trim, follow-up API extraction, verification, release alignment, and deep-review remediation.\"\n4: trigger_phrases:\n5:   - \"implementation plan\"\n6:   - \"memory save planner first\"\n7:   - \"planner-first memory save plan\"\n8:   - \"save flow trim plan\"\n9:   - \"retirement audit to planner-first\"\n10: importance_tier: \"important\"\n11: contextType: \"planning\"\n12: _memory:\n13:   continuity:\n14:     packet_pointer: \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\"\n15:     last_updated_at: \"2026-04-15T10:00:01Z\"\n16:     last_updated_by: \"cli-copilot\"\n17:     recent_action: \"Folder renamed; plan rewritten as M1-M10 planner-first delivery\"\n18:     next_safe_action: \"Packet complete\"\n19:     blockers: []\n20:     key_files:\n21:       - \"plan.md\"\n22:       - \"spec.md\"\n23:       - \"tasks.md\"\n24:       - \"checklist.md\"\n25:       - \"decision-record.md\"\n26:       - \"implementation-summary.md\"\n27:     session_dedup:\n28:       fingerprint: \"sha256:014-planner-first-plan-2026-04-15\"\n29:       session_id: \"014-planner-first-plan-2026-04-15\"\n30:       parent_session_id: \"014-planner-first-seed\"\n31:     completion_pct: 100\n32:     open_questions: []\n33:     answered_questions:\n34:       - \"The planner-first default + explicit fallback architecture preserves the canonical writer while eliminating the default-path overreach.\"\n35:       - \"Delivery spanned M1-M10 across audit, research, implementation, verification, release alignment, and deep-review remediation.\"\n36: template_source_hint: \"<!-- SPECKIT_TEMPLATE_SOURCE: plan-core | v2.2 -->\"\n37: ---\n38: # Implementation Plan: /memory:save Planner-First Default\n39: \n40: <!-- SPECKIT_LEVEL: 3+ -->\n41: <!-- SPECKIT_TEMPLATE_SOURCE: plan-core | v2.2 -->\n42: \n43: ---\n44: \n45: <!-- ANCHOR:summary -->\n46: ## 1. SUMMARY\n47: \n48: ### Technical Context\n49: \n50: | Aspect | Value |\n51: |--------|-------|\n52: | **Language or Stack** | TypeScript save-flow handlers, CLI wrapper, routing, validation, indexing, and follow-up APIs; markdown packet docs + release notes |\n53: | **Framework** | system-spec-kit MCP server + spec-folder workflow |\n54: | **Storage** | Canonical spec docs, vector DB, routed record identity, graph metadata, optional follow-up indexing |\n55: | **Testing** | `validate_document.py`, `validate.sh --strict`, vitest suites, transcript prototypes, env-flag orthogonality tests |\n56: | **Runtime Surface** | TypeScript save-flow handlers, CLI wrapper, routing, validation, indexing, and follow-up APIs described in `spec.md §3` |\n57: \n58: ### Overview\n59: \n60: The plan delivers a planner-first default for `/memory:save` while preserving the canonical atomic writer as an explicit fallback. It retires the legacy `[spec]/memory/*.md` write path end-to-end, gates four previously default-on save-path behaviors behind explicit env flags, and extracts freshness into three explicit follow-up APIs. Delivery runs through 10 sequential milestones: audit surface + classification, retirement cutover, relevance research, planner contract build-out, routing + quality trim, verification + transcript prototypes, release alignment, and deep-review remediation.\n61: \n62: ### Full Delivery Summary\n63: \n64: | Milestone | Theme | Main Output | Why It Matters |\n65: |-----------|-------|-------------|----------------|\n66: | M1 | Audit kickoff | Classification rules + iteration plan | Establishes the audit frame |\n67: | M2 | Audit convergence | 25-finding audit report + half-migrated diagnosis | Proves the default contract is broken |\n68: | M3 | Retirement cutover | v3.4.1.0 removes legacy memory-file write path + aligns docs | Bridges audit to planner work |\n69: | M4 | Research kickoff | Q1-Q10 relevance questions | Sets the classification scope |\n70: | M5 | Research convergence | 15-subsystem classification + trim-targeted verdict | Decides what survives the default path |\n71: | M6 | Planner contract | Planner-first default + flag plumbing + type surface + shared types | Ships the new operator contract |\n72: | M7 | Routing and quality trim | Tier 3 + quality-loop + reconsolidation + enrichment leave the default path | Aligns runtime to verdict |\n73: | M8 | Verification + transcripts | Targeted tests, transcript prototypes, packet validation | Grounds planner behavior in real operator flows |\n74: | M9 | Release alignment | v3.4.1.0 release note + env reference + template updates | Runtime contract documented honestly |\n75: | M10 | Deep-review remediation | 9-finding closure (3 P0, 5 P1, 1 P2) | Closes the last correctness + honesty gaps |\n76: \n77: ---\n78: \n79: <!-- /ANCHOR:summary -->\n80: <!-- ANCHOR:quality-gates -->\n81: ## 2. QUALITY GATES\n82: \n83: ### Definition of Ready\n84: \n85: - [x] Audit classification rules and dimension plan defined before iteration started.\n86: - [x] Q1-Q10 relevance questions agreed before M4 kickoff.\n87: - [x] Load-bearing core and candidate trim targets defined before M6 kickoff.\n88: - [x] Packet scope limited to the planner contract, retirement of legacy write path, subsystem gating, follow-up APIs, and docs alignment.\n89: \n90: ### Definition of Done\n91: \n92: - [x] Packet canonical docs exist and agree on the planner-first contract.\n93: - [x] Audit, research, deep-review, and transcript snapshots copied into the packet.\n94: - [x] Every copied Markdown file begins with the required snapshot note.\n95: - [x] `description.json`, `graph-metadata.json`, and packet-local nested changelog exist.\n96: - [x] All primary docs pass `validate_document.py`.\n97: - [x] Packet passes `validate.sh --strict` with no blocking errors.\n98: - [x] Planner-default runtime tests prove the default path is non-mutating.\n99: - [x] Full-auto fallback tests prove atomic mutation + rollback + `POST_SAVE_FINGERPRINT` parity.\n100: - [x] Follow-up APIs (`refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`) have execution-level coverage.\n101: - [x] Deep-review findings F001-F009 closed.\n102: \n103: ---\n104: \n105: <!-- /ANCHOR:quality-gates -->\n106: <!-- ANCHOR:architecture -->\n107: ## 3. ARCHITECTURE\n108: \n109: ### Pattern\n110: \n111: Planner-first wrapper around the preserved canonical atomic writer. The default path computes route + legality + advisory data and returns structured planner output without mutating files. An explicit fallback path activates the canonical writer with full atomic semantics intact. Freshness work lives in callable follow-up APIs.\n112: \n113: ### Key Components\n114: \n115: - **Planner-first handler (`memory-save.ts`)**: Default execution path returning planner output (routes, blockers, advisories, follow-up actions). No mutation on default.\n116: - **Canonical atomic writer (preserved: `create-record.ts`, `atomic-index-memory.ts`, `thin-continuity-record.ts`, `post-insert.ts`)**: Fallback path when `SPECKIT_SAVE_PLANNER_MODE=full-auto`. Rollback, promotion, same-path identity, `POST_SAVE_FINGERPRINT` parity intact.\n117: - **Content router (`content-router.ts`)**: Eight-category contract preserved. Scoped exception: Tier 3 default-disable + manual-review guard.\n118: - **Quality gate (`quality-loop.ts`, `save-quality-gate.ts`)**: Hard blockers preserved. Auto-fix retries gated behind `SPECKIT_QUALITY_AUTO_FIX=true`.\n119: - **Reconsolidation (`reconsolidation-bridge.ts`)**: Gated behind `SPECKIT_RECONSOLIDATION_ENABLED=true` or explicit fallback.\n120: - **Post-insert enrichment (`post-insert.ts`)**: Gated behind `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED=true` or follow-up API.\n121: - **Follow-up indexing APIs (`api/indexing.ts`, `graph-metadata-parser.ts`)**: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`.\n122: - **Env reference + command docs + release notes**: Aligned to describe default/opt-in/reserved/fallback consistently.\n123: \n124: ### Data Flow\n125: \n126: ```text\n127: Caller invokes /memory:save\n128:     |\n129:     v\n130: Resolve SPECKIT_SAVE_PLANNER_MODE\n131:     |\n132:     |-- default or plan-only or hybrid(reserved) -->\n133:     |       Compute route + legality + advisories\n134:     |       Respect env flags for deferred helpers\n135:     |       Return structured planner output (no mutation)\n136:     |\n137:     +-- full-auto -->\n138:             Canonical atomic writer\n139:             Promotion + rollback + same-path identity\n140:             POST_SAVE_FINGERPRINT parity\n141:             Gated subsystems run only when their env flag is true\n142: ```\n143: \n144: ### File-Level Change Map\n145: \n146: See `spec.md §3 Files to Change` for the consolidated table covering legacy write-path retirement, planner contract core, canonical writer preservation, content router scoped exception, quality gate updates, reconsolidation gating, enrichment deferral, freshness APIs, command + reference + env docs, release notes, test surfaces, and packet metadata.\n147: \n148: ### Runtime Surface Summary\n149: \n150: | Area | Files | Role |\n151: |------|-------|------|\n152: | Legacy write path retirement | `directory-setup.ts`, `workflow.ts`, `file-writer.ts`, `memory-indexer.ts`, `memory-metadata.ts` | Removed from runtime |\n153: | Load-bearing core preserved | `memory-save.ts`, `create-record.ts`, `atomic-index-memory.ts`, `thin-continuity-record.ts`, `content-router.ts`, `post-insert.ts`, `reconsolidation-bridge.ts`, `workflow.ts` | Writer core + continuity + routing |\n154: | Planner contract | `types.ts`, `response-builder.ts`, `validation-responses.ts`, `generate-context.ts`, `/memory:save` docs | Default non-mutating output |\n155: | Follow-up APIs | `api/indexing.ts`, `graph-metadata-parser.ts` | Deferred freshness + enrichment |\n156: | Remediation surfaces | `content-router.ts`, `memory-save.ts`, `post-insert.ts`, `../../../../skill/system-spec-kit/mcp_server/ENV_REFERENCE.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` | Deep-review closure + honesty fixes |\n157: \n158: ---\n159: \n160: <!-- /ANCHOR:architecture -->\n161: <!-- ANCHOR:phases -->\n162: ## 4. IMPLEMENTATION PHASES\n163: \n164: ### Milestone Flow\n165: \n166: ```text\n167: M1 Audit kickoff\n168:   -> M2 Audit convergence\n169:   -> M3 Retirement closure (v3.4.1.0 legacy write-path removal)\n170:   -> M4 Research kickoff\n171:   -> M5 Research convergence (15-subsystem classification + trim-targeted verdict)\n172:   -> M6 Planner contract\n173:   -> M7 Routing + quality + reconsolidation + enrichment trim\n174:   -> M8 Verification and transcripts\n175:   -> M9 Release alignment\n176:   -> M10 Deep-review remediation\n177: ```\n178: \n179: ### M1 — Audit kickoff\n180: \n181: Open the audit with a narrow question: does any active file still write, read, or assume `[spec]/memory/*.md` in contradiction to the retirement claim? Define classification rules and the iteration plan. Evidence: `research/013-audit-snapshot/primary-docs/spec.md`, `research/013-audit-snapshot/deep-review-strategy.md`.\n182: \n183: ### M2 — Audit convergence\n184: \n185: Run the audit to convergence across 7 iterations. Document the half-migrated state in concrete families: runtime write path, runtime read path, doc contradiction, phantom dedup contract, test drift, and template drift. 25 active findings across 9 P0, 9 P1, and 7 P2 produce three closure paths (A retire, B rescind, C dedup redesign). Evidence: `research/013-audit-snapshot/iterations/`, `research/013-audit-snapshot/review-report.md`.\n186: \n187: ### M3 — Retirement closure\n188: \n189: Remove the live memory-file write path, clean up templates and docs, and align the runtime with the intended canonical-doc model. v3.4.1.0 records the cutover. Evidence: `../../../../changelog/01--system-spec-kit/v3.4.1.0.md`.\n190: \n191: ### M4 — Research kickoff\n192: \n193: After the retirement cutover, open relevance research with Q1-Q10 covering load-bearing core, planner-first feasibility, quality-check classification, reindex vs freshness, graph-metadata refresh, entity extraction, reconsolidation cost, router classifier overfitting, trigger harmonization, and continuity ownership. Evidence: `research/014-research-snapshot/primary-docs/spec.md`, `research/014-research-snapshot/deep-research-strategy.md`.\n194: \n195: ### M5 — Research convergence\n196: \n197: Run 20 iterations of relevance research. Classify 15 subsystems into load-bearing (canonical atomic writer, routed record identity, content-router core, thin continuity validation), candidate trim targets (Tier 3 routing, reconsolidation-on-save, heavy quality-loop auto-fix, post-insert enrichment), and other categories. Reach the `trim-targeted` verdict: keep the writer, trim the oversized default-path stack. Evidence: `research/014-research-snapshot/research.md`, `research/014-research-snapshot/findings-registry.json`.\n198: \n199: ### M6 — Planner contract\n200: \n201: Build the planner-first default, CLI defaults, docs, and type surfaces:\n202: \n203: - [x] T001-T005 Add planner-default and fallback flag definitions; planner response interfaces; response serialization helpers; planner blocker and advisory response helpers.\n204: - [x] T006-T008 Make `generate-context.ts` request planner-first behavior by default; update `/memory:save` docs; make `memory-save.ts` return planner output by default with explicit fallback.\n205: - [x] T009-T012 Update aggregate and handler tests for planner-default behavior; focused planner-first regression coverage.\n206: \n207: ### M7 — Routing and quality trim\n208: \n209: Trim Tier 3 routing, quality-loop auto-fix, reconsolidation-on-save, and post-insert enrichment from the default hot path while preserving the category contract and hard blockers:\n210: \n211: - [x] T013-T017 Trim default Tier 3 participation while preserving category contract; reduce Tier 2 prototype library; update content-router tests for Tier 1/Tier 2 deterministic default; update runtime routing + intent-routing tests.\n212: - [x] T018-T022 Retire default-path auto-fix retries; preserve hard structural blockers; update quality-loop + save-quality-gate + pipeline-enforcement tests.\n213: - [x] T023-T026 Gate reconsolidation behind explicit flag/fallback; move default-path enrichment to explicit follow-up behavior; preserve same-path lineage; keep chunking as size-driven fallback.\n214: - [x] T027-T034 Move unconditional graph refresh + spec-doc reindex out of planner-default saves; expose explicit follow-up indexing entry points; keep graph refresh callable as explicit follow-up; update reconsolidation-bridge, reconsolidation, assistive-reconsolidation, chunking, graph-refresh tests.\n215: \n216: ### M8 — Verification and transcripts\n217: \n218: Prove the planner-first model holds up against real session evidence:\n219: \n220: - [x] T035-T037 Memory-save integration tests for planner-default plus fallback end-to-end; planner UX regression tests for readable output; thin-continuity tests for normalization + upsert parity.\n221: - [x] T038 Prototype planner-first behavior against three real session transcripts. Evidence: `scratch/transcripts-snapshot/`.\n222: - [x] T039-T040 Run per-file doc validation + strict packet validation; capture follow-on defects.\n223: - [x] T041-T043 Review structural parity between `/memory:save` + `AGENTS.md` + system-spec-kit skill doc; review fallback safety against `atomic-index-memory.ts` + `create-record.ts`; review transcript mismatches and convert unresolved issues into follow-on tasks.\n224: \n225: ### M9 — Release alignment\n226: \n227: Document the shipped contract in `v3.4.1.0` release notes and closeout docs, including the explicit follow-up APIs, the scoped router exception, and the reserved state of `hybrid`. Evidence: `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md`.\n228: \n229: ### M10 — Deep-review remediation\n230: \n231: Close the 9 findings from the deep-review pass (3 P0, 5 P1, 1 P2):\n232: \n233: - **F001 [P0]**: router-preservation contradiction → resolved by documenting the scoped `content-router.ts` exception (ADR-007).\n234: - **F002 [P0]**: fallback safety parity → resolved by reinstating `POST_SAVE_FINGERPRINT`.\n235: - **F003 [P0]**: template-contract failures hidden as advisories → resolved by promoting them to planner blockers.\n236: - **F004 [P1]**: deferred enrichment returning success-shaped status → resolved by returning explicit `deferred` status.\n237: - **F005 [P2]**: `hybrid` assumed live → resolved by marking reserved and documenting `plan-only`-equivalent behavior.\n238: - **F006 [P1]**: follow-up API coverage → resolved by adding execution-level coverage for `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`.\n239: - **F007 [P1]**: follow-up tool names in packet docs → resolved by aligning docs to shipped names.\n240: - **F008 [P1]**: env reference drift → resolved by documenting `hybrid` honestly in `ENV_REFERENCE.md`.\n241: - **F009 [P1]**: release-note honesty → resolved by describing router scope and `hybrid` state accurately in `v3.4.1.0.md`.\n242: \n243: ---\n244: \n245: <!-- /ANCHOR:phases -->\n246: <!-- ANCHOR:testing -->\n247: ## 5. TESTING STRATEGY\n248: \n249: | Test Type | Scope | Tools | Source |\n250: |-----------|-------|-------|--------|\n251: | Audit validation | Verify runtime + doc contradictions | Deep-review iterations + synthesis report | `research/013-audit-snapshot/**` |\n252: | Research convergence | Verify Q1-Q10 answers + 15-subsystem verdicts | Deep-research iterations + findings registry | `research/014-research-snapshot/**` |\n253: | Runtime contract tests | Planner-default + fallback parity + router + quality + follow-up APIs | Vitest suites + targeted sweeps | `review/015-deep-review-snapshot/primary-docs/tasks.md`, `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md` |\n254: | Transcript validation | Planner-first behavior against real sessions | Transcript markdown + planner-output JSON + transcript reviews | `scratch/transcripts-snapshot/` |\n255: | Review convergence | Deep-review isolation of real defect set | Review report + findings registry + iteration ledger | `review/015-deep-review-snapshot/**` |\n256: | Remediation confirmation | All 9 review findings resolved | Remediated docs + tests + changelog + implementation summary | `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` |\n257: | Packet validation | Packet structural soundness | `validate_document.py`, `validate.sh --strict` | This packet |\n258: \n259: ### Audit Approach (M1-M3)\n260: \n261: - Focused deep-review loop over runtime, docs, tests, and templates.\n262: - Classification rule applied each iteration.\n263: - Convergence threshold tracked and documented.\n264: - Retirement cutover delivered as part of v3.4.1.0; docs aligned to the canonical-doc model.\n265: \n266: ### Research Approach (M4-M5)\n267: \n268: - 20 iterations with explicit subsystem questions.\n269: - Research document and findings registry used as the canonical synthesis.\n270: - Minimal replacement design evaluated against live code surfaces.\n271: - Final report explicitly ruled out a full writer redesign.\n272: \n273: ### Implementation Approach (M6-M8)\n274: \n275: - Planner-first contract built before trim work.\n276: - Routing, quality, reconsolidation, enrichment, and follow-up APIs covered by targeted tests.\n277: - Transcript prototypes used to validate real operator narratives.\n278: - Packet-local doc validation and strict packet validation used as release gates.\n279: \n280: ### Remediation Approach (M10)\n281: \n282: - Deep review split concerns into runtime correctness, follow-up API integrity, coverage, and documentation honesty.\n283: - Remediation closed all 9 findings and aligned packet docs and release notes.\n284: - Packet docs reflect the remediated state as the final truth.\n285: \n286: ---\n287: \n288: <!-- /ANCHOR:testing -->\n289: <!-- ANCHOR:dependencies -->\n290: ## 6. DEPENDENCIES\n291: \n292: | Dependency | Type | Status | Impact if Blocked |\n293: |------------|------|--------|-------------------|\n294: | Audit evidence | Documentation source | Ready | Audit truth cannot be grounded |\n295: | Research synthesis | Documentation source | Ready | Verdicts and Q1-Q10 would be underspecified |\n296: | Canonical atomic writer | Runtime core | Preserved | Fallback path depends on it |\n297: | Eight-category router contract | Runtime core | Preserved | Target authority depends on it |\n298: | Vitest suites | Verification tooling | Ready | Runtime contract evidence |\n299: | Transcript fixtures | Verification input | Ready | Real-operator-flow evidence |\n300: | v3.4.1.0 changelog | Release artifact | Ready | Release-state truth |\n301: | `validate_document.py` | Tooling | Pass recorded | Docs could ship with structural defects |\n302: | `validate.sh --strict` | Tooling | Pass recorded | Packet could ship with blocking issues |\n303: | `generate-description.js` | Tooling | Run | Packet metadata complete |\n304: | Nested changelog generator | Tooling | Run | Packet-local change trace complete |\n305: \n306: ---\n307: \n308: <!-- /ANCHOR:dependencies -->\n309: <!-- ANCHOR:rollback -->\n310: ## 7. ROLLBACK PLAN\n311: \n312: - **Trigger**: Planner-default mutates under some branch, fallback loses atomic safety parity, router preservation claim contradicts code, or remediation reopens a closed finding.\n313: - **Procedure**: Revert runtime changes + docs + env reference + release note as one batch. Re-run vitest suites + strict validation + transcript prototypes.\n314: - **Data reversal**: No data migrations. Vector DB schema unchanged; saves still use the canonical atomic writer when fallback is active.\n315: \n316: ### Per-Milestone Rollback\n317: \n318: | Milestone | Trigger | Rollback Action | Data Reversal |\n319: |-----------|---------|-----------------|---------------|\n320: | M3 retirement cutover | Legacy memory-file surface regression | Revert the retirement commit; re-run audit fixtures | None |\n321: | M6 planner contract | Planner output schema drift or default mutation | Revert planner commits; re-enable prior handler default | None |\n322: | M7 trim milestones | Opt-in flag cascade activates unintended subsystems | Revert trim commits for affected subsystem | None |\n323: | M8 verification | Transcript prototype breaks unexpectedly | Patch surface; re-run validator | None |\n324: | M9 release alignment | Release notes drift from runtime | Patch release notes + env reference | None |\n325: | M10 remediation | Reopened finding | Apply targeted patch; re-run closure tests | None |\n326: \n327: ### Consolidated Rollback Note\n328: \n329: Because the canonical atomic writer is preserved, rollback means reverting the planner-first wrapper + env-flag gates + follow-up API exports. Fallback behavior continues to work with full atomic semantics intact.\n330: \n331: ---\n332: \n333: <!-- /ANCHOR:rollback -->\n334: ## L2: PHASE DEPENDENCIES\n335: \n336: ```text\n337: M1 Audit kickoff\n338:   -> M2 Audit convergence\n339:   -> M3 Retirement closure\n340:   -> M4 Research kickoff\n341:   -> M5 Research convergence\n342:   -> M6 Planner contract\n343:   -> M7 Routing and quality trim\n344:   -> M8 Verification and transcripts\n345:   -> M9 Release alignment\n346:   -> M10 Remediation\n347: ```\n348: \n349: | Phase | Depends On | Blocks |\n350: |-------|------------|--------|\n351: | M1 | None | M2-M10 |\n352: | M2 | M1 | M3-M10 |\n353: | M3 | M2 | M4-M10 |\n354: | M4 | M3 | M5-M10 |\n355: | M5 | M4 | M6-M10 |\n356: | M6 | M5 | M7-M10 |\n357: | M7 | M6 | M8-M10 |\n358: | M8 | M7 | M9-M10 |\n359: | M9 | M8 | M10 |\n360: | M10 | M9 | Packet closeout |\n361: \n362: ---\n363: \n364: ## L2: EFFORT ESTIMATION\n365: \n366: | Phase | Complexity | Estimated Effort |\n367: |-------|------------|------------------|\n368: | Audit + retirement | High | 1-2 days |\n369: | Research convergence | High | 1 day |\n370: | Planner contract | High | 0.5-1 day |\n371: | Routing + quality + reconsolidation + enrichment trim | High | 1-1.5 days |\n372: | Verification + transcripts | Medium | 0.5 day |\n373: | Release alignment | Medium | 0.5 day |\n374: | Deep-review remediation (9 findings) | High | 0.5-1 day |\n375: | **Total** | **High** | **~5-7 implementation days** |\n376: \n377: ### Historical Effort Context\n378: \n379: | Area | Effort Shape | Why It Matters |\n380: |------|--------------|----------------|\n381: | Audit loop | Multi-iteration review + release alignment | Explains depth of the original contradiction |\n382: | Research loop | 20-iteration classification | Explains trim-targeted verdict trustworthiness |\n383: | Implementation | 43 tasks across planner + trim + verification | Explains why the contract cannot be summarized as a small one-line change |\n384: \n385: ---\n386: \n387: ## L2: ENHANCED ROLLBACK\n388: \n389: ### Pre-release Checks\n390: \n391: - [x] Snapshot tree complete (audit + research + review + transcripts)\n392: - [x] Planner-default runtime tests pass\n393: - [x] Full-auto fallback tests pass with `POST_SAVE_FINGERPRINT` parity\n394: - [x] Follow-up API coverage in place\n395: - [x] Release notes + env reference aligned to runtime\n396: \n397: ### Rollback Procedure\n398: \n399: 1. Revert planner commits atomically; fallback behavior continues via canonical writer.\n400: 2. Revert env-flag gates for any subsystem that regressed.\n401: 3. Re-run vitest suites + strict validation + transcript prototypes.\n402: 4. If v3.4.1.0 release note needs adjustment, patch the release note and env reference.\n403: \n404: ### Data Reversal\n405: \n406: - **Has data migration?** No\n407: - **Reversal procedure**: Runtime-level revert only\n408: \n409: ---\n410: \n411: ## L3: DEPENDENCY GRAPH\n412: \n413: ```text\n414: ┌──────────────┐\n415: │ Audit (M1-M2)│\n416: └──────┬───────┘\n417:        v\n418: ┌──────────────┐\n419: │ Retirement   │\n420: │ cutover (M3) │\n421: └──────┬───────┘\n422:        v\n423: ┌──────────────┐\n424: │ Research     │\n425: │ (M4-M5)      │\n426: └──────┬───────┘\n427:        v\n428: ┌──────────────┐\n429: │ Planner +    │\n430: │ trim (M6-M7) │\n431: └──────┬───────┘\n432:        v\n433: ┌──────────────┐\n434: │ Verification │\n435: │ (M8)         │\n436: └──────┬───────┘\n437:        v\n438: ┌──────────────┐\n439: │ Release      │\n440: │ alignment M9 │\n441: └──────┬───────┘\n442:        v\n443: ┌──────────────┐\n444: │ Remediation  │\n445: │ (M10)        │\n446: └──────────────┘\n447: ```\n448: \n449: ### Dependency Matrix\n450: \n451: | Component | Depends On | Produces | Blocks |\n452: |-----------|------------|----------|--------|\n453: | Audit | None | Half-migrated evidence | Retirement cutover |\n454: | Retirement cutover | Audit | Canonical-doc-aligned runtime | Research |\n455: | Research | Retirement cutover | Trim-targeted verdict | Planner contract |\n456: | Planner contract | Research | Non-mutating default + fallback | Trim milestones |\n457: | Trim milestones | Planner contract | Gated subsystems + follow-up APIs | Verification |\n458: | Verification | Trim milestones | Targeted tests + transcript evidence | Release |\n459: | Release alignment | Verification | v3.4.1.0 + env reference + templates | Remediation |\n460: | Remediation | Release alignment | 9-finding closure + honest router scope | Closeout |\n461: \n462: ---\n463: \n464: ## L3: CRITICAL PATH\n465: \n466: 1. **Audit the half-migrated state** — critical because every later claim depends on grounded evidence.\n467: 2. **Retire the legacy write path** — critical so research and implementation do not inherit the contradiction.\n468: 3. **Classify the 15 subsystems** — critical so the trim targets are objective.\n469: 4. **Ship the planner-first default + full-auto fallback** — critical because it is the operator-facing contract.\n470: 5. **Gate Tier 3 + quality + reconsolidation + enrichment** — critical so the default path actually trims.\n471: 6. **Expose follow-up APIs** — critical so deferred work remains callable.\n472: 7. **Align docs + release notes + env reference** — critical so the shipped contract is documented honestly.\n473: 8. **Close all 9 deep-review findings** — critical because the first review verdict was remediation-required.\n474: \n475: **Total Critical Path**: Audit → Retirement → Research → Planner + Trim → Verification → Release → Remediation\n476: \n477: ---\n478: \n479: ## L3: MILESTONES\n480: \n481: | Milestone | Description | Success Criteria | Target |\n482: |-----------|-------------|------------------|--------|\n483: | M1 | Audit kickoff | Classification rules + iteration plan published | Audit spec + strategy |\n484: | M2 | Audit convergence | 25-finding audit report + half-migrated diagnosis | Audit synthesis |\n485: | M3 | Retirement cutover | Legacy memory-file write path removed | v3.4.1.0 release |\n486: | M4 | Research kickoff | Q1-Q10 published | Research spec + strategy |\n487: | M5 | Research convergence | 15-subsystem classification + trim-targeted verdict | Research synthesis |\n488: | M6 | Planner contract | Planner-first default + fallback + shared types | Runtime handler |\n489: | M7 | Routing + quality trim | Four subsystems behind env flags | Runtime handlers |\n490: | M8 | Verification + transcripts | Targeted tests + transcript prototypes + packet validation | Vitest + transcripts |\n491: | M9 | Release alignment | v3.4.1.0 + `/memory:save` docs + env reference + templates | Release artifacts |\n492: | M10 | Remediation | 9 findings closed | Review report + ADR-007 |\n493: \n494: ---\n495: \n496: ### Architecture Decision Record Summary\n497: \n498: | ADR | Summary |\n499: |-----|---------|\n500: | ADR-001 | Trim-targeted verdict: keep the core writer, trim the oversized default-path stack |\n501: | ADR-002 | Planner-first output becomes the default `/memory:save` contract |\n502: | ADR-003 | Reconsolidation-on-save becomes explicit opt-in |\n503: | ADR-004 | Post-insert enrichment becomes deferred or standalone |\n504: | ADR-005 | Router categories stay while Tier 2 or Tier 3 scope narrows |\n505: | ADR-006 | Hard checks remain while quality-loop auto-fix leaves the default path |\n506: | ADR-007 | Router preservation claim becomes \"core preserved with one scoped exception\" |\n507: \n508: ---\n509: \n510: ## L3+: AI EXECUTION FRAMEWORK\n511: \n512: ### Pre-Task Checklist\n513: \n514: - [x] Confirm the canonical atomic writer stays intact\n515: - [x] Confirm env flags stay orthogonal\n516: - [x] Confirm planner default stays non-mutating\n517: \n518: ### Task Execution Rules\n519: \n520: | Rule | Description |\n521: |------|-------------|\n522: | EXEC-SEQ | Ship planner contract before trim work |\n523: | EXEC-EVIDENCE | Every trim target maps to an audit/research finding |\n524: | EXEC-SCOPE | Do not touch canonical atomic writer internals |\n525: \n526: ### Status Reporting Format\n527: \n528: Report task state as `P###-ID [x] - description` using the packet-prefixed IDs in `tasks.md`.\n529: \n530: ### Blocked Task Protocol\n531: \n532: If a runtime change regresses fallback safety, revert and patch the specific subsystem before re-running the verification sweep.\n533: \n534: ### Tier 1: Runtime Core\n535: \n536: **Files**\n537: - `memory-save.ts`, `types.ts`, `response-builder.ts`, `validation-responses.ts`, `generate-context.ts`\n538: - `content-router.ts`, `quality-loop.ts`, `save-quality-gate.ts`\n539: - `reconsolidation-bridge.ts`, `post-insert.ts`\n540: - `api/indexing.ts`, `graph-metadata-parser.ts`\n541: \n542: **Goal**\n543: - Preserve the canonical atomic writer + routing + continuity; move default-path overreach behind env flags; expose follow-up APIs.\n544: \n545: ### Tier 2: Docs + Release\n546: \n547: | Workstream | Output | Notes |\n548: |------------|--------|-------|\n549: | Runtime contract docs | `/memory:save` docs + `ENV_REFERENCE.md` + templates | Align to shipped contract |\n550: | Release notes | `v3.4.1.0.md` | Scoped exception + reserved `hybrid` honestly |\n551: | Packet docs | `spec.md`, `plan.md`, `tasks.md`, `checklist.md`, `decision-record.md`, `implementation-summary.md` | Tell the end-to-end story |\n552: \n553: ### Tier 3: Validation\n554: \n555: **Goal**\n556: - Packet behaves like a normal spec packet: validators pass, metadata generated, packet-local changelog emitted.\n557: \n558: **Actions**\n559: - Run `validate_document.py`\n560: - Run `validate.sh --strict`\n561: - Generate `description.json`\n562: - Author or verify `graph-metadata.json`\n563: - Generate nested changelog\n564: \n565: ---\n566: \n567: ## L3+: WORKSTREAM COORDINATION\n568: \n569: | ID | Name | Scope | Output |\n570: |----|------|-------|--------|\n571: | W-A | Audit + retirement | Half-migrated evidence + legacy write-path removal | `research/013-audit-snapshot/**` + v3.4.1.0 retirement |\n572: | W-B | Research | 15-subsystem classification + trim-targeted verdict | `research/014-research-snapshot/**` |\n573: | W-C | Planner contract + trim | Runtime handlers + env flags + follow-up APIs | Runtime TypeScript |\n574: | W-D | Verification + transcripts | Targeted tests + three transcript prototypes | Vitest + `scratch/transcripts-snapshot/` |\n575: | W-E | Docs + release alignment | `/memory:save` docs + env reference + release notes + packet docs | Docs surface |\n576: | W-F | Remediation | 9-finding closure + ADR-007 | `review/015-deep-review-snapshot/**` |\n577: \n578: ### Sync Points\n579: \n580: | Sync ID | Trigger | Participants | Output |\n581: |---------|---------|--------------|--------|\n582: | SYNC-001 | Audit complete | W-A + W-B | Research grounded in audit reality |\n583: | SYNC-002 | Research complete | W-B + W-C | Trim targets objective |\n584: | SYNC-003 | Runtime complete | W-C + W-D | Tests cover default + fallback + gated subsystems |\n585: | SYNC-004 | Verification complete | W-D + W-E | Docs + release + env reference aligned to runtime |\n586: | SYNC-005 | Release aligned | W-E + W-F | Remediation targets documented findings |\n587: \n588: ---\n589: \n590: ## L3+: COMMUNICATION PLAN\n591: \n592: ### Checkpoints\n593: \n594: - **Checkpoint 1**: Audit truth grounded.\n595: - **Checkpoint 2**: Retirement cutover shipped.\n596: - **Checkpoint 3**: Research verdict published.\n597: - **Checkpoint 4**: Planner + trim + follow-up APIs merged.\n598: - **Checkpoint 5**: Verification + transcripts validated.\n599: - **Checkpoint 6**: v3.4.1.0 released with aligned docs.\n600: - **Checkpoint 7**: All 9 deep-review findings closed.\n601: \n602: ### Escalation Path\n603: \n604: 1. If audit findings conflict with research, prefer audit evidence over summary.\n605: 2. If release-note wording conflicts with the remediated state, preserve the remediated state and adjust the release note.\n606: 3. If validation rules conflict with the shipped structure, preserve validation compliance and document the exact warning.\n607: \n608: ### Governance Notes\n609: \n610: - The packet is a runtime change with documented operator-facing contract; changelog honesty matters.\n611: - The canonical atomic writer is the single mutation mechanism; fallback preserves atomic semantics.\n612: - The deep-review pass is part of the delivery record; remediation closure is load-bearing.\n613: \n614: ---\n615: \n616: ### Governance and Compliance Notes\n617: \n618: ### Governance Sign-Off Targets\n619: \n620: | Sign-Off | Status | Basis |\n621: |----------|--------|-------|\n622: | Runtime correctness | Complete | Planner default non-mutating + fallback atomic parity |\n623: | Documentation alignment | Complete | `/memory:save` docs + env reference + release notes agree |\n624: | Spec-packet compliance | Complete | `validate.sh --strict` pass |\n625: | Metadata completeness | Complete | `description.json`, `graph-metadata.json`, nested changelog |\n626: \n627: ### Compliance Notes\n628: \n629: - No secrets, credentials, or third-party systems involved.\n630: - Packet stores only copied internal project artifacts plus new documentation and runtime changes.\n631: - Canonical atomic writer unchanged outside the scoped router Tier 3 guard.\n\n(End of file - total 631 lines)\n</content>","metadata":{"preview":"---\ntitle: \"Implemen [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan]\"\ndescription: \"Milestoned delivery (M1-M10) for the planner-first /memory:save contract: audit + retirement of the legacy [spec]/memory/*.md write path, 20-iteration relevance research, planner contract + fallback implementation, routing/quality/reconsolidation/enrichment trim, follow-up API extraction, verification, release alignment, and deep-review remediation.\"\ntrigger_phrases:\n  - \"implementation plan\"\n  - \"memory save planner first\"\n  - \"planner-first memory save plan\"\n  - \"save flow trim plan\"\n  - \"retirement audit to planner-first\"\nimportance_tier: \"important\"\ncontextType: \"planning\"\n_memory:\n  continuity:\n    packet_pointer: \"system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite\"\n    last_updated_at: \"2026-04-15T10:00:01Z\"\n    last_updated_by: \"cli-copilot\"\n    recent_action: \"Folder renamed; plan rewritten as M1-M10 planner-first delivery\"\n    next_safe_action: \"Packet complete\"\n    blockers: []\n    key_files:","truncated":false,"loaded":[]},"title":".opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md","time":{"start":1777229335752,"end":1777229335763}}}}
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-opencode-pure-1/output.txt:11:{"type":"text","timestamp":1777229349810,"sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","part":{"id":"prt_dcb1fb5cc001k25S68kO57z0I3","messageID":"msg_dcb1f8fc70013Pnu5lMW5pEKfj","sessionID":"ses_234e0f3dfffegpflr8V6BcBg23","type":"text","text":"**Spec folder path:**\n\n```\n.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/\n```\n\n**Canonical anchor/file:** `spec.md` — the title is _\"Feature Specification: /memory:save Planner-First Default\"_ and the description explicitly states: _\"Make /memory:save planner-first (non-mutating) by default while preserving full-auto as an explicit fallback\"_ (spec.md:3). The plan.md also documents the M1-M10 10-milestone delivery for the planner-first contract.","time":{"start":1777229349808,"end":1777229349808}}}
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/002-memory-quality-remediation/research/deep-research-strategy.md:75:- Does NOT propose UI/UX changes for `/memory:save` slash command
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-opencode-pure-1/prompt.md:1:Find the spec for the /memory:save planner-first contract. Return the exact spec folder path and cite at least one anchor or filename from the canonical spec.
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-001.md:4867:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/014-agents-md-alignment/checklist.md:67:- [x] CHK-013 [P0] G-02: FS Save context row has `/memory:save` [EVIDENCE: Grep `memory:save` returns 4/4 (AGENTS.md, FS, Barter, CLAUDE.md)]
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/004-get-it-right-main/research/iterations/iteration-022.md:12:I compared the external repo's lean context boundary model with the internal `memory:save`, `memory:search`, `memory:manage`, and `memory:learn` surfaces to see whether the current integration feels operator-centered or infrastructure-centered.
.opencode/specs/system-spec-kit/z_future/agentic-system-upgrade/001-research-agentic-systems/004-get-it-right-main/research/iterations/iteration-022.md:19:- [SOURCE: .opencode/commands/memory/save.md:51-76] `/memory:save` has its own folder-resolution contract, script protocol, and validation rules.
.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/041-post-merge-refinement-4/decision-record.md:201:1. Add /memory:save:quick command
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:14:Find the spec for the /memory:save planner-first contract. Return the exact spec folder path and cite at least one anchor or filename from the canonical spec.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:90:Any agent writing authored spec folder docs (`spec.md`, `plan.md`, `tasks.md`, `checklist.md`, `implementation-summary.md`, `decision-record.md`, `handover.md`, `review-report.md`, `debug-delegation.md`, `resource-map.md` (optional)) MUST use templates from .opencode/skills/system-spec-kit/templates/level_N/ for level-owned docs and the root cross-cutting templates where applicable, run `bash .opencode/skills/system-spec-kit/scripts/spec/validate.sh [spec_folder] --strict` after each file write, and route continuity updates through /memory:save. Deep-research workflow-owned packet markdown (`research/iterations/*.md`, `research/deep-research-*.md`, and progressive `research/research.md` loop updates) is exempt from that generic per-write rule; `/spec_kit:deep-research` must instead run targeted strict validation after every `spec.md` mutation it performs. @deep-research retains exclusive write access for `research/research.md`; @debug retains exclusive write access for `debug-delegation.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:92:- `handover.md` stays in the canonical recovery ladder and is maintained through `/memory:save` handover_state routing using `.opencode/skills/system-spec-kit/templates/handover.md` for initial creation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:100:| `handover.md`         | "handover", "next session", "continue later", "pass context", "ending session", "save state", "multi-session", "for next AI"  | Suggest `/memory:save` handover maintenance |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:210:/bin/zsh -lc 'rg -n "/memory:save|planner-first|planner first|planner" specs .opencode -S' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:212:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/018-memory-save-quality-fixes/tasks.md:50:- [x] T001 Confirm the eight root causes from the flawed `/memory:save` output (manual review notes)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:213:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/018-memory-save-quality-fixes/graph-metadata.json:210:    "causal_summary": "After the Sprint 1 pipeline hardening landed, a `/memory:save` run still produced a memory file that scored 88/100 while carrying 10 structural quality issues. Manual review traced those defects to eight backend bugs across the `generate-context.js` extraction, normalization, and rendering pipeline: duplicated decision fields, wrong completion status, false blocker detection, generic pattern filler, noisy trigger phrases, contaminated file paths, over-aggressive tree thinning, and missing synthesized conversation messages.",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:214:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:5523:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:215:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:5811:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/SKILL.md:566:**Memory Commands:** 4 memory slash commands (`/memory:save`, `/memory:manage`, `/memory:learn`, `/memory:search`) cover the memory command surface, with shared-memory operations available under `/memory:manage shared`, while `/spec_kit:resume` owns session recovery through the broader memory/session recovery stack. The `/memory:search` command covers all analysis and retrieval workflows. See `.opencode/commands/memory/` and `.opencode/commands/spec_kit/resume.md` for command documentation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:216:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:5970:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:217:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:5971:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:218:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:6277:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:219:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:6278:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:220:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:6779:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/README.md:641:The **commands** are the doors into the system. Each command opens access to the tools it needs. `/spec_kit:complete` runs a full workflow from spec through implementation and packet-local changelog closeout when applicable. `/memory:save` saves context. `/spec_kit:resume` recovers or continues a previous session.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:221:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-024.md:7100:   641	The **commands** are the doors into the system. Each command opens access to the tools it needs. `/spec_kit:complete` runs a full workflow from spec through implementation and packet-local changelog closeout when applicable. `/memory:save` saves context. `/spec_kit:resume` recovers or continues a previous session.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:222:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:2891:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:223:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:2892:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:224:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:3014:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:225:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:3043:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:226:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-004.md:3044:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:227:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-010.md:372:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:228:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-010.md:465:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:229:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/003-modus-memory-main/research/iterations/iteration-024.md:3997:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:230:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/003-modus-memory-main/research/iterations/iteration-024.md:4699:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:231:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/003-modus-memory-main/research/iterations/iteration-024.md:4700:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:232:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/003-modus-memory-main/research/iterations/iteration-024.md:4785:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:233:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/003-modus-memory-main/research/iterations/iteration-024.md:4786:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:234:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-004.md:411:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:235:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-004.md:472:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:236:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-004.md:614:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:237:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-004.md:707:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:238:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-020.md:378:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:239:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-020.md:471:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:240:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-014.md:419:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:241:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-014.md:512:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:242:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/spec.md:126:| `implemented` | Shipped substrate exists and should not be treated as missing prerequisite work. | Shared trust axes and readiness primitives, planner-first memory-save substrate, Codex hook injection, search-routing measurement scaffolding |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:243:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/research/research-pipeline-improvements.md:353:**Problem**: Two consecutive `/memory:save` operations for `019-manual-testing-per-playbook` exposed compound failures: (A) the auto-detection cascade failed to identify the active spec folder despite 24+ untracked files, and (B) the saved memory file exhibited 10 of 12 previously-identified R-series issues simultaneously — a quality regression demonstrating that R-11's source-of-truth corruption cascades into nearly every downstream pipeline stage. Additionally, a new decision deduplication bug was discovered where 4 decisions appear twice due to dual-write in the input normalizer.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:244:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-005.md:6147:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/README.md:448:| `/memory:save`   | 4          | Save conversation context to a spec folder's `memory/` directory with semantic indexing                                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:245:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-005.md:414:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:246:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-005.md:475:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:247:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-005.md:572:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:248:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-005.md:665:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:250:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-031.md:90:  - **Q2**: ship planner-first `spec-kit doctor`, then layer freshness/provenance hints into that flow
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:252:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-007.md:651:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:253:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-007.md:744:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:256:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-015.md:356:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:257:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-015.md:449:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:264:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-017.md:331:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:265:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-017.md:424:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:266:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-001.md:4867:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:267:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:428:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:268:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:489:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:269:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:772:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:270:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:865:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:271:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:3951:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/z_archive/001-fix-command-dispatch/z_archive/035-memory-speckit-merger/plan.md:287:| Gate 5 | Run /memory:save | generate-context.js executes from new path |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:272:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:4828:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/019-rewrite-repo-readme/scratch/research-brief.md:104:| Memory Save | HARD BLOCK | "save context", "save memory", `/memory:save` | Must use `generate-context.js` (no manual memory file creation) |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:273:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:4829:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/019-rewrite-repo-readme/scratch/research-brief.md:144:| `/memory:save` | Save context via `generate-context.js` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:274:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:4853:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:275:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:4971:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/014-agents-md-alignment/research/iterations/iteration-001.md:51:  evidence: Each file still contains the row `| **Save context** | \`/memory:save\` OR compose JSON → \`generate-context.js --json '<data>' [spec-folder]\` → Auto-indexed |`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:276:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5314:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/003-constitutional-learn-refactor/spec.md:44:The current `/memory:learn` command (620 lines) is a generic learning capture tool that classifies inputs into 5 types (pattern, mistake, insight, optimization, constraint) and saves them to spec folder `memory/` directories via `generate-context.js`. This provides negligible value over the existing `/memory:save` command.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:277:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5401:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/018-memory-save-quality-fixes/spec.md:45:After the Sprint 1 pipeline hardening landed, a `/memory:save` run still produced a memory file that scored 88/100 while carrying 10 structural quality issues. Manual review traced those defects to eight backend bugs across the `generate-context.js` extraction, normalization, and rendering pipeline: duplicated decision fields, wrong completion status, false blocker detection, generic pattern filler, noisy trigger phrases, contaminated file paths, over-aggressive tree thinning, and missing synthesized conversation messages.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:278:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5437:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/013-agents-alignment/scratch/archive-pass2/iteration-003.md:25:- **Fix**: Explicitly allow only /memory:save or generate-context.js, add hard prohibition on direct Write/Edit into memory/.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:279:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5668:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/002-indexing-normalization/scratch/agent-output-iter-003-copilot-C1.md:416:  - Global rules say memory saves must use `generate-context.js` when triggered by “save context”, “save memory”, `/memory:save`, or memory-file creation. [`AGENTS.md:129-138`]
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:280:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5743:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:281:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5744:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:282:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5772:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:283:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5773:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:284:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5778:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/scratch/agent-output-iter-003-codex-A2.md:248:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/005-confidence-calibration/memory/16-03-26_19-21__confidence-calibration.md:442:# AGENTS.md instructions for /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public  # AI Assistant Framework (Universal Template) > **Universal behavior framework** defining guardrails, standards, and decision protocols. --- ## 1. 🚨 CRITICAL RULES **HARD BLOCKERS (The "Four Laws" of Agent Safety):** 1. **READ FIRST:** Never edit a file without reading it first. Understand context before modifying. 2. **SCOPE LOCK:** Only modify files explicitly in scope. **NO** "cleaning up" or "improving" adjacent code. Scope in `spec.md` is FROZEN. 3. **VERIFY:** Syntax checks and tests **MUST** pass before claiming completion. **NO** blind commits. 4. **HALT:** Stop immediately if uncertain, if line numbers don't match, or if tests fail. (See "Halt Conditions" below). **OPERATIONAL MANDATES:** - **All file modifications require a spec folder** (Gate 3). - **Never lie or fabricate** - use "UNKNOWN" when uncertain. - **Clarify** if confidence < 80% (see §5 Confidence Framework). - **Use explicit uncertainty:** Prefix claims with "I'M UNCERTAIN ABOUT THIS:". **QUALITY PRINCIPLES:** - **Prefer simplicity**, reuse existing patterns, and cite evidence with sources - Solve only the stated problem; **avoid over-engineering** and premature optimization - **Verify with checks** (simplicity, performance, maintainability, scope) before making changes - **Truth over agreement** - correct user misconceptions with evidence; do not agree for conversational flow **HALT CONDITIONS (Stop and Report):** - [ ] Target file does not exist or line numbers don't match. - [ ] Syntax check or Tests fail after edit. - [ ] Merge conflicts encountered. - [ ] Edit tool reports "string not found". - [ ] Test/Production boundary is unclear. **MANDATORY TOOLS:** - **Spec Kit Memory MCP** for research tasks, context recovery, and finding prior work. **Memory saves MUST use `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]`** - NEVER manually create memory files. **GIT WORKFLOW:** Full details: `.opencode/skills/sk-git/` - Worktree setup, conventional commits, PR creation, branch management - Trigger keywords: worktree, branch, commit, merge, pr, pull request, git workflow, finish work, integrate changes ### Quick Reference: Common Workflows | Task | Flow | | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | **File modification** | Gate 3 (ask spec folder) → Gate 1 → Gate 2 → Load memory context → Execute | | **Research/exploration** | `memory_match_triggers()` → `memory_context()` (unified) OR `memory_search()` (targeted) → Document findings | | **Code search** | `Grep()` for text patterns, `Glob()` for file discovery, `Read()` for file contents | | **Resume prior work** | `/memory:continue` OR `memory_search({ query, specFolder, anchors: ['state', 'next-steps'] })` → Review checklist → Continue | | **Save context** | `/memory:save` OR `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]` → Auto-indexed | | **Claim completion** | Validation runs automatically → Load `checklist.md` → Verify ALL items → Mark with evidence | | **End session** | `/spec_kit:handover` → Save context → Provide continuation prompt | | **New spec folder** | Option B (Gate 3) → Research via Task tool → Evidence-based plan → Approval → Implement | | **Complex multi-step** | Task tool → Decompose → Delegate → Synthesize | | **Documentation** | sk-doc skill → Classify → Load template → Fill → Validate (`validate_document.py`) → DQI score → Verify | | **Web code** | sk-code-web skill → Webflow/CDN standards, minification, browser testing | | **OpenCode system code** | sk-code-opencode skill → JS/TS/Python/Shell standards, language detection, quality checklists | | **Git workflow** | sk-git skill → Worktree setup / Commit / Finish (PR) | | **Phase workflow** | `/spec_kit:phase` → Decompose → `create.sh --phase` → Populate parent/children → `validate.sh --recursive` | | **Database maintenance** | `/memory:manage` → stats, health, cleanup, checkpoint, ingest operations | | **Analysis/evaluation** | `/memory:analyze` → preflight, postflight, causal graph, ablation, dashboard, history | ### Coding Analysis Lenses | Lens | Focus | Detection Questions | | ------------------ | ---------------- | ---------------------------------------------------------------------------------- | | **CLARITY** | Simplicity | Is this the simplest code that solves the problem? Are abstractions earned? | | **SYSTEMS** | Dependencies | What does this change touch? What calls this? What are the side effects? | | **BIAS** | Wrong problem | Is user solving a symptom? Is this premature optimization? Is the framing correct? | | **SUSTAINABILITY** | Maintainability | Will future devs understand this? Is it self-documenting? Tech debt implications? | | **VALUE** | Actual impact | Does this change behavior or just refactor? Is it cosmetic or functional? | | **SCOPE** | Complexity match | Does solution complexity match problem size? Single-line fix or new abstraction? | ### Coding Anti-Patterns (Detect Silently) | Anti-Pattern | Trigger Phrases | Response | | ---------------------- | ----------------------------------------------- | --------------------------------------------------------------------------- | | Over-engineering | "for flexibility", "future-proof", "might need" | Ask: "Is this solving a current problem or a hypothetical one?" | | Premature optimization | "could be slow", "might bottleneck" | Ask: "Has this been measured? What's the actual performance?" | | Cargo culting | "best practice", "always should" | Ask: "Does this pattern fit this specific case?" | | Gold-plating | "while we're here", "might as well" | Flag scope creep: "That's a separate change - shall I note it for later?" | | Wrong abstraction | "DRY this up" for 2 instances | "These look similar but might not be the same concept. Let's verify first." | | Scope creep | "also add", "bonus feature" | "That's outside the current scope. Want to track it separately?" | --- ## 2. ⛔ MANDATORY GATES - STOP BEFORE ACTING **⚠️ BEFORE using ANY tool (except Gate Actions: memory_match_triggers, skill_advisor.py), you MUST pass all applicable gates below.** ### 🔒 PRE-EXECUTION GATES (Pass before ANY tool use) #### GATE 1: UNDERSTANDING + CONTEXT SURFACING [SOFT] BLOCK Trigger: EACH new user message (re-evaluate even in ongoing conversations) 1. Call `memory_match_triggers(prompt)` → Surface relevant context 2. Classify intent: Research or Implementation 3. Parse request → Check confidence AND uncertainty (see §4) 4. **Dual-threshold:** confidence ≥ 0.70 AND uncertainty ≤ 0.35 → PROCEED. Either fails → INVESTIGATE (max 3 iterations) → ESCALATE. Simple: <40% ASK | 40-69% CAUTION | ≥70% PASS > Gate 1 is SOFT — if file modification detected, Gate 3 (HARD) takes precedence. Ask spec folder question BEFORE analysis. #### GATE 2: SKILL ROUTING [REQUIRED for non-trivial tasks] 1. A) Run: `python3.opencode/skills/scripts/skill_advisor.py "[request]" --threshold 0.8` 2. B) Cite user's explicit direction: "User specified: [exact quote]" - Confidence ≥ 0.8 → MUST invoke skill | < 0.8 → general approach | User names skill → cite and proceed - Output: `SKILL ROUTING: [result]` or `SKILL ROUTING: User directed → [name]` - Skip: trivial queries only (greetings, single-line questions) #### GATE 3: SPEC FOLDER QUESTION [HARD] BLOCK — PRIORITY GATE - **Overrides Gates 1-2:** If file modification detected → ask Gate 3 BEFORE any analysis/tool calls - **Triggers:** rename, move, delete, create, add, remove, update, change, modify, edit, fix, refactor, implement, build, write, generate, configure, analyze, decompose, phase — or any task resulting in file changes - **Options:** A) Existing | B) New | C) Update related | D) Skip | E) Phase folder (e.g., `specs/NNN-name/001-phase/`) - **DO NOT** use Read/Edit/Write/Bash (except Gate Actions) before asking. ASK FIRST, wait for response, THEN proceed - **Phase boundary:** Gate 3 answers apply ONLY within current workflow phase. Plan→implement transition MUST re-evaluate. Exception: carry-over IS valid for Memory Save Rule #### CONSOLIDATED QUESTION PROTOCOL When multiple inputs are needed, consolidate into a SINGLE prompt — never split across messages. Include only applicable questions; omit when pre-determined. - **Round-trip optimization** — Only 1 user interaction needed for setup - **First Message Protocol** — ALL questions asked BEFORE any analysis or tool calls - **Violation:** Multiple separate prompts → STOP, apologize, re-present as single prompt - **Bypass phrases:** "skip context" / "fresh start" / "skip memory" / [skip] for memory loading; Level 1 tasks skip completion verification --- ### 🔒 POST-EXECUTION RULES #### MEMORY SAVE RULE [HARD] BLOCK Trigger: "save context", "save memory", `/memory:save`, memory file creation - If spec folder established at Gate 3 → USE IT (don't re-ask). Carry-over applies ONLY to memory saves - If NO folder and Gate 3 never answered → HARD BLOCK → Ask user - **Script:** `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]` - Mode 1 (JSON): Write JSON to `/tmp/save-context-data.json`, pass as arg - Mode 2 (Direct): Pass spec folder path (e.g., `specs/005-memory`) - Subfolder: `003-parent/121-child` or bare `121-child` (auto-searches parents) - **Indexing:** For immediate MCP visibility after save: `memory_index_scan({ specFolder })` or `memory_save()` - **Violation:** Write tool on `memory/` path → DELETE and re-run via script #### COMPLETION VERIFICATION RULE [HARD] BLOCK Trigger: Claiming "done", "complete", "finished", "works" 1. Validation runs automatically on spec folder (if exists) 2. Load `checklist.md` → Verify ALL items → Mark `[x]` with evidence - Skip: Level 1 tasks (no checklist.md required) | Exit 0 = pass, Exit 1 = warnings, Exit 2 = errors (must fix) #### VIOLATION RECOVERY [SELF-CORRECTION] Trigger: About to skip gates, or realized gates were skipped → STOP → STATE: "Before I proceed, I need to ask about documentation:" → ASK Gate 3 (A/B/C/D/E) → WAIT #### Self-Check (before ANY tool-using response): - [ ] File modification? Asked spec folder question? - [ ] Skill routing verified? - [ ] Saving memory? Using `generate-context.js` (not Write tool)? - [ ] Aligned with ORIGINAL request? No scope drift? - [ ] Claiming completion? `checklist.md` verified? --- ## 3. 📝 CONVERSATION DOCUMENTATION Every conversation that modifies files MUST have a spec folder. **Full details:** system-spec-kit SKILL.md (§1 When to Use, §3 How it Works, §4 Rules) ### Documentation Levels | Level | LOC | Required Files | Use When | | ------ | -------------- | ----------------------------------------------------- | ---------------------------------- | | **1** | <100 | spec.md, plan.md, tasks.md, implementation-summary.md | All features (minimum) | | **2** | 100-499 | Level 1 + checklist.md | QA validation needed | | **3** | ≥500 | Level 2 + decision-record.md (+ optional research/research.md) | Complex/architecture changes | | **3+** | Complexity 80+ | Level 3 + AI protocols, extended checklist, sign-offs | Multi-agent, enterprise governance | > **Note:** `implementation-summary.md` is REQUIRED for all levels but created **after implementation completes**, not at spec folder creation time. See SKILL.md §4 Rule 13. **Rules:** When in doubt → higher level. LOC is soft guidance (risk/complexity can override). Single typo/whitespace fixes (<5 characters in one file) are exempt. **Spec folder path:** `specs/[###-short-name]/` | **Templates:** `.opencode/skills/system-spec-kit/templates/` **For details on:** folder structure, `scratch/` vs `memory/` usage, sub-folder versioning, checklist verification (P0/P1/P2), and completion workflow — see system-spec-kit SKILL.md §3. --- ## 4. 🧑🏫 CONFIDENCE & CLARIFICATION FRAMEWORK **Core Principle:** If confidence < 80%, pause and ask for clarification with multiple-choice options. | Confidence | Action | | ------------ | -------------------------------------------- | | **≥80%** | Proceed with citable source | | **40-79%** | Proceed with caveats | | **<40%** | Ask for clarification or mark "UNKNOWN" | | **Override** | Blockers/conflicts → ask regardless of score | **Logic-Sync Protocol:** On contradiction (Spec vs Code, conflicting requirements) → HALT → Report "LOGIC-SYNC REQUIRED: [Fact A] contradicts [Fact B]" → Ask "Which truth prevails?" **Escalation:** Confidence stays <80% after two failed attempts → ask with 2-3 options. Blockers beyond control → escalate with evidence and proposed next step. --- ## 5. 🧠 REQUEST ANALYSIS & SOLUTION FRAMEWORK **Flow:** Parse request → Read files first → Analyze → Design simplest solution → Validate → Execute | Principle | Rule | Anti-Pattern | | ----------------- | -------------------------------------------------- | --------------------------------------- | | **Simplicity** | Reuse patterns; earn every abstraction | Utilities for <3 uses, single-impl intf | | **Evidence** | Cite `[SOURCE: file:lines]` or `[CITATION: NONE]` | Claims without verification | | **Scope Match** | Solution size = problem size | Refactoring during bug fix | | **Right Problem** | Root cause, not symptom; measure before optimizing | Premature optimization, wrong framing | **CLARITY Triggers** (justify before proceeding): - Utility for <3 uses | Config for single value | Abstraction without clear boundary - Pattern where simple code suffices | Interface for single impl - On bias → don't argue, redirect to root cause **Pre-Change Checklist:** - [ ] Read first? | Simplest solution? | Scope discipline? - [ ] Confidence ≥80%? | Sources cited? | Spec folder? | Approval? **Five Checks (>100 LOC):** Necessary now? | Alternatives (≥2)? | Simplest sufficient? | On critical path? | No tech debt? **STOP CONDITIONS:** Any check unchecked | no spec folder | no approval → STOP and address --- ## 6. 🤖 AGENT ROUTING When using the orchestrate agent or Task tool for complex multi-step workflows, route to specialized agents: ### Runtime Agent Directory Resolution Use the agent directory that matches the active runtime/provider profile: | Runtime / Profile | Agent Directory | Usage Rule | | -------------------------------------- | -------------------------- | ----------------------------------------------------------- | | **Copilot (default OpenCode profile)** | `.opencode/agents/` | Load base agent definitions from this directory | | **ChatGPT profile** | `.opencode/agents/chatgpt/` | Load ChatGPT-specific agent definitions from this directory | | **Claude profile** | `.claude/agents/` | Load Claude-specific agent definitions from this directory | | **Gemini CLI** | `.gemini/agents/` | Load Gemini-specific agent definitions from this directory | **Resolution rule:** pick one directory by runtime and stay consistent for that workflow phase. ### Agent Definitions - **`@general`** — Implementation, complex tasks - **`@context`** — ALL codebase exploration, file search, pattern discovery, context loading. Dispatches sub-agents for fast search and deep investigation - **`@orchestrate`** — Multi-agent coordination, complex workflows - **`@research`** — Evidence gathering, planning, Gate 3 Option B. May write `research/research.md` inside spec folders - **`@write`** — Creating READMEs, Skills, Guides - **`@review`** — Code review, PRs, quality gates (READ-ONLY) - **`@speckit`** — Spec folder creation Level 1-3+. **EXCLUSIVE:** Only agent permitted to write `*.md` inside spec folders. Exceptions: `memory/` (generate-context.js), `scratch/` (any agent), `handover.md` (@handover), `research/research.md` (@research), `debug-delegation.md` (@debug) - **`@debug`** — Fresh perspective debugging, root cause analysis. May write `debug-delegation.md` inside spec folders - **`@handover`** — Session continuation, context preservation. May write `handover.md` inside spec folders - **`@ultra-think`** — Multi-strategy planning architect. Dispatches diverse thinking strategies, scores via 5-dimension rubric, synthesizes optimal plan. Planning-only: no file modifications --- ## 7. ⚙️ MCP CONFIGURATION **Two systems:** 1. **Native MCP** (`opencode.json`) - Direct tools, called natively - Sequential Thinking, Spec Kit Memory, Code Mode server 2. **Code Mode MCP** (`.utcp_config.json`) - External tools via `call_tool_chain()` - Figma, Github, ClickUp, Chrome DevTools, etc. - Naming: `{manual_name}.{manual_name}_{tool_name}` (e.g., `clickup.clickup_get_teams({})`) - Discovery: `search_tools()`, `list_tools()`, or read `.utcp_config.json` --- ## 8. 🧩 SKILLS SYSTEM Skills are specialized, on-demand capabilities that provide domain expertise. Unlike knowledge files (passive references), skills are explicitly invoked to handle complex, multi-step workflows. ### How Skills Work ``` Task Received → Gate 2: Run skill_advisor.py ↓ Confidence > 0.8 → MUST invoke recommended skill ↓ Invoke Skill → Read(".opencode/skills/<skill-name>/SKILL.md") ↓ Instructions Load → SKILL.md content + resource paths ↓ Follow Instructions → Complete task using skill guidance ``` ### Skill Loading Protocol 1. Gate 2 provides skill recommendation via `skill_advisor.py` 2. Invoke using appropriate method for your environment 3. Read bundled resources from `references/`, `scripts/`, `assets/` paths 4. Follow skill instructions to completion 5. Do NOT re-invoke a skill already in context ### Primary Skill: sk-code-opencode For ALL OpenCode system code (`.opencode/`, MCP servers, scripts), `sk-code-opencode` provides multi-language standards. Includes the `system-spec-kit` skill for spec folder workflows and the Spec Kit Memory system for context preservation across sessions. **Supported Languages:** | Language | Target | Key Patterns | | ---------- | ----------------------------- | ------------------------------------------- | | JavaScript | MCP servers, CommonJS modules | `require`/`module.exports`, strict mode | | TypeScript | Type-safe modules, configs | Interfaces, strict tsconfig, type guards | | Python | Validators, advisors, tests | snake_case, argparse, pytest, docstrings | | Shell | Automation, deployment | `set -euo pipefail`, shebang, quoting | | JSON/JSONC | Manifests, schemas, configs | Schema validation, commented config | **Key Systems:** - **system-spec-kit**: Spec folder lifecycle (Levels 1-3+), validation, template architecture - **Spec Kit Memory**: Context preservation, semantic search, session continuity (`/memory:save`, `/memory:continue`) **Invocation:** Automatic via Gate 2 routing when OpenCode system code tasks detected. ### Git Workflow Skill: sk-git For ALL git workflows, `sk-git` orchestrates workspace setup, commit hygiene, and work completion. **Sub-workflows:** - **Worktree**: Branch creation via `git worktree`, workspace isolation, parallel development - **Commit**: Conventional commit format, staged change analysis, clean commit messages - **Finish**: PR creation, branch cleanup, integration workflows **Trigger Keywords:** worktree, branch, commit, merge, pr, pull request, git workflow, conventional commits, finish work, integrate changes **Invocation:** Automatic via Gate 2 routing when git tasks detected, or manually via `Read(".opencode/skills/sk-git/SKILL.md")`. ## Skills A skill is a set of local instructions to follow that is stored in a `SKILL.md` file. Below is the list of skills that can be used. Each entry includes a name, description, and file path so you can open the source for full instructions when using a specific skill. ### Available skills - cli-claude-code: Claude Code CLI orchestrator enabling external AI assistants (Gemini, Codex, Copilot) to invoke Anthropic's Claude Code CLI for supplementary tasks including deep reasoning, code editing, structured output, code review, agent delegation, and extended thinking. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-claude-code/SKILL.md) - cli-codex: Codex CLI orchestrator enabling any AI assistant to invoke OpenAI's Codex CLI for supplementary AI tasks including code generation, code review, web research, codebase analysis, cross-AI validation, and parallel task processing. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-codex/SKILL.md) - cli-copilot: GitHub Copilot CLI orchestrator enabling external AI assistants to invoke the standalone 'copilot' binary for supplementary tasks including collaborative planning, cloud delegation, versatile code generation, and autonomous task execution. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-copilot/SKILL.md) - cli-gemini: Gemini CLI orchestrator enabling any AI assistant to invoke Google's Gemini CLI for supplementary AI tasks including code generation, web research via Google Search, codebase architecture analysis, cross-AI validation, and parallel task processing. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-gemini/SKILL.md) - mcp-chrome-devtools: Chrome DevTools orchestrator providing intelligent routing between CLI (bdg) and MCP (Code Mode) approaches. CLI prioritized for speed and token efficiency; MCP fallback for multi-tool integration scenarios. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-chrome-devtools/SKILL.md) - mcp-clickup: ClickUp project management orchestrator providing intelligent routing between CLI (cu) and MCP (Code Mode) approaches. CLI prioritized for speed and token efficiency; MCP for enterprise features like docs, goals, webhooks, and bulk operations. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-clickup/SKILL.md) - mcp-code-mode: MCP orchestration via TypeScript execution for efficient multi-tool workflows. Use Code Mode for ALL MCP tool calls (ClickUp, Notion, Figma, Webflow, Chrome DevTools, etc.). Provides 98.7% context reduction, 60% faster execution, and type-safe invocation. Mandatory for external tool integration. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-code-mode/SKILL.md) - mcp-figma: Figma design file access via MCP providing 18 tools for file retrieval, image export, component/style extraction, team management, and collaborative commenting. Accessed via Code Mode for token-efficient workflows. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-figma/SKILL.md) - sk-code-full-stack: Stack-agnostic development orchestrator guiding developers through implementation, testing, and verification phases with automatic stack detection via marker files and bundled stack-specific knowledge. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-full-stack/SKILL.md) - sk-code-opencode: Multi-language code standards for OpenCode system code (JavaScript, TypeScript, Python, Shell, JSON/JSONC) with language detection routing, universal patterns, and quality checklists. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-opencode/SKILL.md) - sk-code-review: Stack-agnostic code review baseline skill with findings-first severity analysis, mandatory security/correctness minimums, and adaptive overlay compatibility with sk-code-opencode, sk-code-web, and sk-code-full-stack standards. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-review/SKILL.md) - sk-code-web: Orchestrator guiding developers through implementation, debugging, and verification phases across specialized code quality skills (project) (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-web/SKILL.md) - sk-doc: Unified markdown and OpenCode component specialist providing document quality enforcement, content optimization, component creation workflows (skills, agents, commands), ASCII flowcharts and install guides. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-doc/SKILL.md) - sk-git: Git workflow orchestrator guiding developers through workspace setup, clean commits, and work completion across git-worktrees, git-commit, and git-finish skills (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-git/SKILL.md) - sk-improve-prompt: Prompt engineering specialist that transforms vague requests into structured, scored AI prompts using 7 proven frameworks (RCAF, COSTAR, RACE, CIDI, TIDD-EC, CRISPE, CRAFT), DEPTH thinking methodology, and CLEAR scoring across text modes. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-improve-prompt/SKILL.md) - system-spec-kit: Unified documentation and context preservation: spec folder workflow (levels 1-3+), CORE + ADDENDUM template architecture (v2.2), validation, and Spec Kit Memory for context preservation. Mandatory for all file modifications. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/system-spec-kit/SKILL.md) - openai-docs: Use when the user asks how to build with OpenAI products or APIs and needs up-to-date official documentation with citations, help choosing the latest model for a use case, or explicit GPT-5.4 upgrade and prompt-upgrade guidance; prioritize OpenAI docs MCP tools, use bundled references only as helper context, and restrict any fallback browsing to official OpenAI domains. (file: /Users/michelkerkmeester/.codex/skills/.system/openai-docs/SKILL.md) - skill-creator: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Codex's capabilities with specialized knowledge, workflows, or tool integrations. (file: /Users/michelkerkmeester/.codex/skills/.system/skill-creator/SKILL.md) - skill-installer: Install Codex skills into $CODEX_HOME/skills from a curated list or a GitHub repo path. Use when a user asks to list installable skills, install a curated skill, or install a skill from another repo (including private repos). (file: /Users/michelkerkmeester/.codex/skills/.system/skill-installer/SKILL.md) ### How to use skills - Discovery: The list above is the skills available in this session (name + description + file path). Skill bodies live on disk at the listed paths. - Trigger rules: If the user names a skill (with `$SkillName` or plain text) OR the task clearly matches a skill's description shown above, you must use that skill for that turn. Multiple mentions mean use them all. Do not carry skills across turns unless re-mentioned. - Missing/blocked: If a named skill isn't in the list or the path can't be read, say so briefly and continue with the best fallback. - How to use a skill (progressive disclosure): 1) After deciding to use a skill, open its `SKILL.md`. Read only enough to follow the workflow. 2) When `SKILL.md` references relative paths (e.g., `scripts/foo.py`), resolve them relative to the skill directory listed above first, and only consider other paths if needed. 3) If `SKILL.md` points to extra folders such as `references/`, load only the specific files needed for the request; don't bulk-load everything. 4) If `scripts/` exist, prefer running or patching them instead of retyping large code blocks. 5) If `assets/` or templates exist, reuse them instead of recreating from scratch. - Coordination and sequencing: - If multiple skills apply, choose the minimal set that covers the request and state the order you'll use them. - Announce which skill(s) you're using and why (one short line). If you skip an obvious skill, say why. - Context hygiene: - Keep context small: summarize long sections instead of pasting them; only load extra files when needed. - Avoid deep reference-chasing: prefer opening only files directly linked from `SKILL.md` unless you're blocked. - When variants exist (frameworks, providers, domains), pick only the relevant reference file(s) and note that choice. - Safety and fallback: If a skill can't be applied cleanly (missing files, unclear instructions), state the issue, pick the next-best approach, and continue. Files called AGENTS.md commonly appear in many places inside a container - at "/", in "~", deep within git repositories, or in any other directory; their location is not limited to version-controlled folders. Their purpose is to pass along human guidance to you, the agent. Such guidance can include coding standards, explanations of the project layout, steps for building or testing, and even wording that must accompany a GitHub pull-request description produced by the agent; all of it is to be followed. Each AGENTS.md governs the entire directory that contains it and every child directory beneath that point. Whenever you change a file, you have to comply with every AGENTS.md whose scope covers that file. Naming conventions, stylistic rules and similar directives are restricted to the code that falls inside that scope unless the document explicitly states otherwise. When two AGENTS.md files disagree, the one located deeper in the directory structure overrides the higher-level file, while instructions given directly in the prompt by the system, developer, or user outrank any AGENTS.md content.   /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public zsh 2026-03-16 Europe/Amsterdam
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:285:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-001.md:5950:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/018-rewrite-system-speckit-readme/scratch/research-brief.md:208:| 1 | `/memory:save [folder]` | Save conversation context to spec folder memory/ with semantic indexing via generate-context.js | `.opencode/commands/memory/save.md` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:286:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-008.md:371:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:287:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-008.md:464:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:293:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-011.md:391:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:294:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-011.md:484:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:295:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-018.md:466:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:296:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-018.md:527:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:297:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-018.md:664:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:298:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-018.md:757:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:299:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-009.md:330:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:300:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-009.md:423:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:301:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-006.md:424:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:302:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-006.md:485:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:303:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-006.md:563:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:304:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-006.md:656:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:305:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-019.md:327:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:306:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-019.md:420:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:307:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-006.md:2052:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:308:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-006.md:4083:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:309:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-006.md:4084:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:310:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-006.md:4173:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:311:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-006.md:4174:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:312:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-006.md:4183:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/feature_catalog/feature_catalog.md:60:| `/memory:save` | 4 | shared | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:315:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-016.md:331:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:316:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-016.md:424:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:317:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-036.md:285:  │ "generate-context\.js|session_bootstrap|session_resume|memory_context\(|/memory:save|/spec_kit:r
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:318:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-022.md:1621:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:319:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-022.md:5430:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:320:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-022.md:5431:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:321:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-022.md:5537:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:322:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-022.md:5538:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:323:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/007-hook-parity/008-docs-impact-remediation/checklist.md:88:5. `/memory:save` run with canonical JSON to refresh `description.json` + `graph-metadata.json`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:325:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-036.md:26:- **Why it matters**: The adoptable UX pattern is not auto-fix itself; it is the clarity of a targeted repair brief. In Public, the safe developer experience is a planner-first command that can emit issue JSON, a repair plan, and explicit next steps before any write-capable operation is allowed to run.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:326:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-036.md:41:- **What it does**: Mex presents one CLI family, so "use check/sync/watch" is unambiguous. Public already has distinct namespaces with overlapping "health", "save", "resume", and "doctor" language: `/doctor:mcp_debug` for broken MCP servers, `/memory:manage health` for DB/index health, `/memory:save` for session persistence, and `/spec_kit:resume` for recovery.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:327:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-036.md:69:- **Questions answered**: one thin integrity surface is justified; `session_bootstrap` and `/spec_kit:resume` should stay canonical; repair should be planner-first and confirmation-gated; Mex-style mandatory pattern growth should not migrate; command-routing documentation is mandatory
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:329:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-036.md:87:3. publish the routing matrix against `/doctor:mcp_debug`, `/memory:manage health`, `/memory:save`, and `/spec_kit:resume`;
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:330:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/007-hook-parity/008-docs-impact-remediation/implementation-summary.md:198:- Canonical `/memory:save` with structured JSON can be run at any time to refresh `graph-metadata.json.derived.last_save_at` and propagate this packet into the memory index.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:331:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-002.md:3459:    92	| `/memory:save` | Save conversation context | 4 tools |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:332:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-002.md:5835:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:333:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-002.md:5989:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:334:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-002.md:5990:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:335:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-002.md:6765:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:336:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/iterations/iteration-002.md:6766:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:337:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-002.md:317:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:338:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/iterations/iteration-002.md:410:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:340:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/013-agents-alignment/implementation-summary.md:121:| Memory command surface only /memory:save in orchestrate | P1 | Added the live memory routing surface to all 5 runtimes, including `/memory:search` and `/memory:manage shared` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:341:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:4886:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:342:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:9519:    92	| `/memory:save` | Save conversation context | 4 tools |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:343:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:11895:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:344:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:12049:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:345:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:12050:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:346:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:12825:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:347:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:12826:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:348:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:27095:    92	| `/memory:save` | Save conversation context | 4 tools |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:349:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:30526:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:350:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:30527:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:351:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:30649:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:352:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:30678:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:353:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:30679:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:354:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:41961:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/README.md:448:| `/memory:save`   | 4          | Save conversation context to a spec folder's `memory/` directory with semantic indexing                                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:355:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:51803:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:356:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:53834:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:357:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:53835:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:358:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:53924:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:359:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:53925:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:360:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:53934:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/feature_catalog/feature_catalog.md:60:| `/memory:save` | 4 | shared | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:361:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:170948:   510	- Trigger: `/memory:save`, "save context", or "save memory"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:362:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:172990:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:363:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:173083:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:364:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:187557:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:365:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:191366:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:366:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:191367:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:367:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:191473:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:368:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:191474:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:369:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:197649:| `/memory:save` | Manual memory save (deep research auto-saves) |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:370:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:197705:| `/memory:save` | Manual context preservation |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:371:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:212496:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:372:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:212784:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/SKILL.md:566:**Memory Commands:** 4 memory slash commands (`/memory:save`, `/memory:manage`, `/memory:learn`, `/memory:search`) cover the memory command surface, with shared-memory operations available under `/memory:manage shared`, while `/spec_kit:resume` owns session recovery through the broader memory/session recovery stack. The `/memory:search` command covers all analysis and retrieval workflows. See `.opencode/commands/memory/` and `.opencode/commands/spec_kit/resume.md` for command documentation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:373:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:212943:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:374:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:212944:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:375:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:213250:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:376:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:213251:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:377:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:213752:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/skills/system-spec-kit/README.md:641:The **commands** are the doors into the system. Each command opens access to the tools it needs. `/spec_kit:complete` runs a full workflow from spec through implementation and packet-local changelog closeout when applicable. `/memory:save` saves context. `/spec_kit:resume` recovers or continues a previous session.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:378:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:214073:   641	The **commands** are the doors into the system. Each command opens access to the tools it needs. `/spec_kit:complete` runs a full workflow from spec through implementation and packet-local changelog closeout when applicable. `/memory:save` saves context. `/spec_kit:resume` recovers or continues a previous session.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:380:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:257563:    92	| `/memory:save` | Save conversation context | 4 tools |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:381:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:258219:   224	    "/memory:save": "MEMORY",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:383:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:268870:  - **Q2**: ship planner-first `spec-kit doctor`, then layer freshness/provenance hints into that flow
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:393:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:269406:- **Why it matters**: The adoptable UX pattern is not auto-fix itself; it is the clarity of a targeted repair brief. In Public, the safe developer experience is a planner-first command that can emit issue JSON, a repair plan, and explicit next steps before any write-capable operation is allowed to run.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:394:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:269421:- **What it does**: Mex presents one CLI family, so "use check/sync/watch" is unambiguous. Public already has distinct namespaces with overlapping "health", "save", "resume", and "doctor" language: `/doctor:mcp_debug` for broken MCP servers, `/memory:manage health` for DB/index health, `/memory:save` for session persistence, and `/spec_kit:resume` for recovery.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:395:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:269449:- **Questions answered**: one thin integrity surface is justified; `session_bootstrap` and `/spec_kit:resume` should stay canonical; repair should be planner-first and confirmation-gated; Mex-style mandatory pattern growth should not migrate; command-routing documentation is mandatory
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:397:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/002-mex-main/research/research.md:269467:3. publish the routing matrix against `/doctor:mcp_debug`, `/memory:manage health`, `/memory:save`, and `/spec_kit:resume`;
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:412:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/scratch/agent-output-iter-003-codex-A2.md:248:.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/005-confidence-calibration/memory/16-03-26_19-21__confidence-calibration.md:442:# AGENTS.md instructions for /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public  # AI Assistant Framework (Universal Template) > **Universal behavior framework** defining guardrails, standards, and decision protocols. --- ## 1. 🚨 CRITICAL RULES **HARD BLOCKERS (The "Four Laws" of Agent Safety):** 1. **READ FIRST:** Never edit a file without reading it first. Understand context before modifying. 2. **SCOPE LOCK:** Only modify files explicitly in scope. **NO** "cleaning up" or "improving" adjacent code. Scope in `spec.md` is FROZEN. 3. **VERIFY:** Syntax checks and tests **MUST** pass before claiming completion. **NO** blind commits. 4. **HALT:** Stop immediately if uncertain, if line numbers don't match, or if tests fail. (See "Halt Conditions" below). **OPERATIONAL MANDATES:** - **All file modifications require a spec folder** (Gate 3). - **Never lie or fabricate** - use "UNKNOWN" when uncertain. - **Clarify** if confidence < 80% (see §5 Confidence Framework). - **Use explicit uncertainty:** Prefix claims with "I'M UNCERTAIN ABOUT THIS:". **QUALITY PRINCIPLES:** - **Prefer simplicity**, reuse existing patterns, and cite evidence with sources - Solve only the stated problem; **avoid over-engineering** and premature optimization - **Verify with checks** (simplicity, performance, maintainability, scope) before making changes - **Truth over agreement** - correct user misconceptions with evidence; do not agree for conversational flow **HALT CONDITIONS (Stop and Report):** - [ ] Target file does not exist or line numbers don't match. - [ ] Syntax check or Tests fail after edit. - [ ] Merge conflicts encountered. - [ ] Edit tool reports "string not found". - [ ] Test/Production boundary is unclear. **MANDATORY TOOLS:** - **Spec Kit Memory MCP** for research tasks, context recovery, and finding prior work. **Memory saves MUST use `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]`** - NEVER manually create memory files. **GIT WORKFLOW:** Full details: `.opencode/skills/sk-git/` - Worktree setup, conventional commits, PR creation, branch management - Trigger keywords: worktree, branch, commit, merge, pr, pull request, git workflow, finish work, integrate changes ### Quick Reference: Common Workflows | Task | Flow | | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | **File modification** | Gate 3 (ask spec folder) → Gate 1 → Gate 2 → Load memory context → Execute | | **Research/exploration** | `memory_match_triggers()` → `memory_context()` (unified) OR `memory_search()` (targeted) → Document findings | | **Code search** | `Grep()` for text patterns, `Glob()` for file discovery, `Read()` for file contents | | **Resume prior work** | `/memory:continue` OR `memory_search({ query, specFolder, anchors: ['state', 'next-steps'] })` → Review checklist → Continue | | **Save context** | `/memory:save` OR `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]` → Auto-indexed | | **Claim completion** | Validation runs automatically → Load `checklist.md` → Verify ALL items → Mark with evidence | | **End session** | `/spec_kit:handover` → Save context → Provide continuation prompt | | **New spec folder** | Option B (Gate 3) → Research via Task tool → Evidence-based plan → Approval → Implement | | **Complex multi-step** | Task tool → Decompose → Delegate → Synthesize | | **Documentation** | sk-doc skill → Classify → Load template → Fill → Validate (`validate_document.py`) → DQI score → Verify | | **Web code** | sk-code-web skill → Webflow/CDN standards, minification, browser testing | | **OpenCode system code** | sk-code-opencode skill → JS/TS/Python/Shell standards, language detection, quality checklists | | **Git workflow** | sk-git skill → Worktree setup / Commit / Finish (PR) | | **Phase workflow** | `/spec_kit:phase` → Decompose → `create.sh --phase` → Populate parent/children → `validate.sh --recursive` | | **Database maintenance** | `/memory:manage` → stats, health, cleanup, checkpoint, ingest operations | | **Analysis/evaluation** | `/memory:analyze` → preflight, postflight, causal graph, ablation, dashboard, history | ### Coding Analysis Lenses | Lens | Focus | Detection Questions | | ------------------ | ---------------- | ---------------------------------------------------------------------------------- | | **CLARITY** | Simplicity | Is this the simplest code that solves the problem? Are abstractions earned? | | **SYSTEMS** | Dependencies | What does this change touch? What calls this? What are the side effects? | | **BIAS** | Wrong problem | Is user solving a symptom? Is this premature optimization? Is the framing correct? | | **SUSTAINABILITY** | Maintainability | Will future devs understand this? Is it self-documenting? Tech debt implications? | | **VALUE** | Actual impact | Does this change behavior or just refactor? Is it cosmetic or functional? | | **SCOPE** | Complexity match | Does solution complexity match problem size? Single-line fix or new abstraction? | ### Coding Anti-Patterns (Detect Silently) | Anti-Pattern | Trigger Phrases | Response | | ---------------------- | ----------------------------------------------- | --------------------------------------------------------------------------- | | Over-engineering | "for flexibility", "future-proof", "might need" | Ask: "Is this solving a current problem or a hypothetical one?" | | Premature optimization | "could be slow", "might bottleneck" | Ask: "Has this been measured? What's the actual performance?" | | Cargo culting | "best practice", "always should" | Ask: "Does this pattern fit this specific case?" | | Gold-plating | "while we're here", "might as well" | Flag scope creep: "That's a separate change - shall I note it for later?" | | Wrong abstraction | "DRY this up" for 2 instances | "These look similar but might not be the same concept. Let's verify first." | | Scope creep | "also add", "bonus feature" | "That's outside the current scope. Want to track it separately?" | --- ## 2. ⛔ MANDATORY GATES - STOP BEFORE ACTING **⚠️ BEFORE using ANY tool (except Gate Actions: memory_match_triggers, skill_advisor.py), you MUST pass all applicable gates below.** ### 🔒 PRE-EXECUTION GATES (Pass before ANY tool use) #### GATE 1: UNDERSTANDING + CONTEXT SURFACING [SOFT] BLOCK Trigger: EACH new user message (re-evaluate even in ongoing conversations) 1. Call `memory_match_triggers(prompt)` → Surface relevant context 2. Classify intent: Research or Implementation 3. Parse request → Check confidence AND uncertainty (see §4) 4. **Dual-threshold:** confidence ≥ 0.70 AND uncertainty ≤ 0.35 → PROCEED. Either fails → INVESTIGATE (max 3 iterations) → ESCALATE. Simple: <40% ASK | 40-69% CAUTION | ≥70% PASS > Gate 1 is SOFT — if file modification detected, Gate 3 (HARD) takes precedence. Ask spec folder question BEFORE analysis. #### GATE 2: SKILL ROUTING [REQUIRED for non-trivial tasks] 1. A) Run: `python3.opencode/skills/scripts/skill_advisor.py "[request]" --threshold 0.8` 2. B) Cite user's explicit direction: "User specified: [exact quote]" - Confidence ≥ 0.8 → MUST invoke skill | < 0.8 → general approach | User names skill → cite and proceed - Output: `SKILL ROUTING: [result]` or `SKILL ROUTING: User directed → [name]` - Skip: trivial queries only (greetings, single-line questions) #### GATE 3: SPEC FOLDER QUESTION [HARD] BLOCK — PRIORITY GATE - **Overrides Gates 1-2:** If file modification detected → ask Gate 3 BEFORE any analysis/tool calls - **Triggers:** rename, move, delete, create, add, remove, update, change, modify, edit, fix, refactor, implement, build, write, generate, configure, analyze, decompose, phase — or any task resulting in file changes - **Options:** A) Existing | B) New | C) Update related | D) Skip | E) Phase folder (e.g., `specs/NNN-name/001-phase/`) - **DO NOT** use Read/Edit/Write/Bash (except Gate Actions) before asking. ASK FIRST, wait for response, THEN proceed - **Phase boundary:** Gate 3 answers apply ONLY within current workflow phase. Plan→implement transition MUST re-evaluate. Exception: carry-over IS valid for Memory Save Rule #### CONSOLIDATED QUESTION PROTOCOL When multiple inputs are needed, consolidate into a SINGLE prompt — never split across messages. Include only applicable questions; omit when pre-determined. - **Round-trip optimization** — Only 1 user interaction needed for setup - **First Message Protocol** — ALL questions asked BEFORE any analysis or tool calls - **Violation:** Multiple separate prompts → STOP, apologize, re-present as single prompt - **Bypass phrases:** "skip context" / "fresh start" / "skip memory" / [skip] for memory loading; Level 1 tasks skip completion verification --- ### 🔒 POST-EXECUTION RULES #### MEMORY SAVE RULE [HARD] BLOCK Trigger: "save context", "save memory", `/memory:save`, memory file creation - If spec folder established at Gate 3 → USE IT (don't re-ask). Carry-over applies ONLY to memory saves - If NO folder and Gate 3 never answered → HARD BLOCK → Ask user - **Script:** `node.opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js [spec-folder-path]` - Mode 1 (JSON): Write JSON to `/tmp/save-context-data.json`, pass as arg - Mode 2 (Direct): Pass spec folder path (e.g., `specs/005-memory`) - Subfolder: `003-parent/121-child` or bare `121-child` (auto-searches parents) - **Indexing:** For immediate MCP visibility after save: `memory_index_scan({ specFolder })` or `memory_save()` - **Violation:** Write tool on `memory/` path → DELETE and re-run via script #### COMPLETION VERIFICATION RULE [HARD] BLOCK Trigger: Claiming "done", "complete", "finished", "works" 1. Validation runs automatically on spec folder (if exists) 2. Load `checklist.md` → Verify ALL items → Mark `[x]` with evidence - Skip: Level 1 tasks (no checklist.md required) | Exit 0 = pass, Exit 1 = warnings, Exit 2 = errors (must fix) #### VIOLATION RECOVERY [SELF-CORRECTION] Trigger: About to skip gates, or realized gates were skipped → STOP → STATE: "Before I proceed, I need to ask about documentation:" → ASK Gate 3 (A/B/C/D/E) → WAIT #### Self-Check (before ANY tool-using response): - [ ] File modification? Asked spec folder question? - [ ] Skill routing verified? - [ ] Saving memory? Using `generate-context.js` (not Write tool)? - [ ] Aligned with ORIGINAL request? No scope drift? - [ ] Claiming completion? `checklist.md` verified? --- ## 3. 📝 CONVERSATION DOCUMENTATION Every conversation that modifies files MUST have a spec folder. **Full details:** system-spec-kit SKILL.md (§1 When to Use, §3 How it Works, §4 Rules) ### Documentation Levels | Level | LOC | Required Files | Use When | | ------ | -------------- | ----------------------------------------------------- | ---------------------------------- | | **1** | <100 | spec.md, plan.md, tasks.md, implementation-summary.md | All features (minimum) | | **2** | 100-499 | Level 1 + checklist.md | QA validation needed | | **3** | ≥500 | Level 2 + decision-record.md (+ optional research/research.md) | Complex/architecture changes | | **3+** | Complexity 80+ | Level 3 + AI protocols, extended checklist, sign-offs | Multi-agent, enterprise governance | > **Note:** `implementation-summary.md` is REQUIRED for all levels but created **after implementation completes**, not at spec folder creation time. See SKILL.md §4 Rule 13. **Rules:** When in doubt → higher level. LOC is soft guidance (risk/complexity can override). Single typo/whitespace fixes (<5 characters in one file) are exempt. **Spec folder path:** `specs/[###-short-name]/` | **Templates:** `.opencode/skills/system-spec-kit/templates/` **For details on:** folder structure, `scratch/` vs `memory/` usage, sub-folder versioning, checklist verification (P0/P1/P2), and completion workflow — see system-spec-kit SKILL.md §3. --- ## 4. 🧑🏫 CONFIDENCE & CLARIFICATION FRAMEWORK **Core Principle:** If confidence < 80%, pause and ask for clarification with multiple-choice options. | Confidence | Action | | ------------ | -------------------------------------------- | | **≥80%** | Proceed with citable source | | **40-79%** | Proceed with caveats | | **<40%** | Ask for clarification or mark "UNKNOWN" | | **Override** | Blockers/conflicts → ask regardless of score | **Logic-Sync Protocol:** On contradiction (Spec vs Code, conflicting requirements) → HALT → Report "LOGIC-SYNC REQUIRED: [Fact A] contradicts [Fact B]" → Ask "Which truth prevails?" **Escalation:** Confidence stays <80% after two failed attempts → ask with 2-3 options. Blockers beyond control → escalate with evidence and proposed next step. --- ## 5. 🧠 REQUEST ANALYSIS & SOLUTION FRAMEWORK **Flow:** Parse request → Read files first → Analyze → Design simplest solution → Validate → Execute | Principle | Rule | Anti-Pattern | | ----------------- | -------------------------------------------------- | --------------------------------------- | | **Simplicity** | Reuse patterns; earn every abstraction | Utilities for <3 uses, single-impl intf | | **Evidence** | Cite `[SOURCE: file:lines]` or `[CITATION: NONE]` | Claims without verification | | **Scope Match** | Solution size = problem size | Refactoring during bug fix | | **Right Problem** | Root cause, not symptom; measure before optimizing | Premature optimization, wrong framing | **CLARITY Triggers** (justify before proceeding): - Utility for <3 uses | Config for single value | Abstraction without clear boundary - Pattern where simple code suffices | Interface for single impl - On bias → don't argue, redirect to root cause **Pre-Change Checklist:** - [ ] Read first? | Simplest solution? | Scope discipline? - [ ] Confidence ≥80%? | Sources cited? | Spec folder? | Approval? **Five Checks (>100 LOC):** Necessary now? | Alternatives (≥2)? | Simplest sufficient? | On critical path? | No tech debt? **STOP CONDITIONS:** Any check unchecked | no spec folder | no approval → STOP and address --- ## 6. 🤖 AGENT ROUTING When using the orchestrate agent or Task tool for complex multi-step workflows, route to specialized agents: ### Runtime Agent Directory Resolution Use the agent directory that matches the active runtime/provider profile: | Runtime / Profile | Agent Directory | Usage Rule | | -------------------------------------- | -------------------------- | ----------------------------------------------------------- | | **Copilot (default OpenCode profile)** | `.opencode/agents/` | Load base agent definitions from this directory | | **ChatGPT profile** | `.opencode/agents/chatgpt/` | Load ChatGPT-specific agent definitions from this directory | | **Claude profile** | `.claude/agents/` | Load Claude-specific agent definitions from this directory | | **Gemini CLI** | `.gemini/agents/` | Load Gemini-specific agent definitions from this directory | **Resolution rule:** pick one directory by runtime and stay consistent for that workflow phase. ### Agent Definitions - **`@general`** — Implementation, complex tasks - **`@context`** — ALL codebase exploration, file search, pattern discovery, context loading. Dispatches sub-agents for fast search and deep investigation - **`@orchestrate`** — Multi-agent coordination, complex workflows - **`@research`** — Evidence gathering, planning, Gate 3 Option B. May write `research/research.md` inside spec folders - **`@write`** — Creating READMEs, Skills, Guides - **`@review`** — Code review, PRs, quality gates (READ-ONLY) - **`@speckit`** — Spec folder creation Level 1-3+. **EXCLUSIVE:** Only agent permitted to write `*.md` inside spec folders. Exceptions: `memory/` (generate-context.js), `scratch/` (any agent), `handover.md` (@handover), `research/research.md` (@research), `debug-delegation.md` (@debug) - **`@debug`** — Fresh perspective debugging, root cause analysis. May write `debug-delegation.md` inside spec folders - **`@handover`** — Session continuation, context preservation. May write `handover.md` inside spec folders - **`@ultra-think`** — Multi-strategy planning architect. Dispatches diverse thinking strategies, scores via 5-dimension rubric, synthesizes optimal plan. Planning-only: no file modifications --- ## 7. ⚙️ MCP CONFIGURATION **Two systems:** 1. **Native MCP** (`opencode.json`) - Direct tools, called natively - Sequential Thinking, Spec Kit Memory, Code Mode server 2. **Code Mode MCP** (`.utcp_config.json`) - External tools via `call_tool_chain()` - Figma, Github, ClickUp, Chrome DevTools, etc. - Naming: `{manual_name}.{manual_name}_{tool_name}` (e.g., `clickup.clickup_get_teams({})`) - Discovery: `search_tools()`, `list_tools()`, or read `.utcp_config.json` --- ## 8. 🧩 SKILLS SYSTEM Skills are specialized, on-demand capabilities that provide domain expertise. Unlike knowledge files (passive references), skills are explicitly invoked to handle complex, multi-step workflows. ### How Skills Work ``` Task Received → Gate 2: Run skill_advisor.py ↓ Confidence > 0.8 → MUST invoke recommended skill ↓ Invoke Skill → Read(".opencode/skills/<skill-name>/SKILL.md") ↓ Instructions Load → SKILL.md content + resource paths ↓ Follow Instructions → Complete task using skill guidance ``` ### Skill Loading Protocol 1. Gate 2 provides skill recommendation via `skill_advisor.py` 2. Invoke using appropriate method for your environment 3. Read bundled resources from `references/`, `scripts/`, `assets/` paths 4. Follow skill instructions to completion 5. Do NOT re-invoke a skill already in context ### Primary Skill: sk-code-opencode For ALL OpenCode system code (`.opencode/`, MCP servers, scripts), `sk-code-opencode` provides multi-language standards. Includes the `system-spec-kit` skill for spec folder workflows and the Spec Kit Memory system for context preservation across sessions. **Supported Languages:** | Language | Target | Key Patterns | | ---------- | ----------------------------- | ------------------------------------------- | | JavaScript | MCP servers, CommonJS modules | `require`/`module.exports`, strict mode | | TypeScript | Type-safe modules, configs | Interfaces, strict tsconfig, type guards | | Python | Validators, advisors, tests | snake_case, argparse, pytest, docstrings | | Shell | Automation, deployment | `set -euo pipefail`, shebang, quoting | | JSON/JSONC | Manifests, schemas, configs | Schema validation, commented config | **Key Systems:** - **system-spec-kit**: Spec folder lifecycle (Levels 1-3+), validation, template architecture - **Spec Kit Memory**: Context preservation, semantic search, session continuity (`/memory:save`, `/memory:continue`) **Invocation:** Automatic via Gate 2 routing when OpenCode system code tasks detected. ### Git Workflow Skill: sk-git For ALL git workflows, `sk-git` orchestrates workspace setup, commit hygiene, and work completion. **Sub-workflows:** - **Worktree**: Branch creation via `git worktree`, workspace isolation, parallel development - **Commit**: Conventional commit format, staged change analysis, clean commit messages - **Finish**: PR creation, branch cleanup, integration workflows **Trigger Keywords:** worktree, branch, commit, merge, pr, pull request, git workflow, conventional commits, finish work, integrate changes **Invocation:** Automatic via Gate 2 routing when git tasks detected, or manually via `Read(".opencode/skills/sk-git/SKILL.md")`. ## Skills A skill is a set of local instructions to follow that is stored in a `SKILL.md` file. Below is the list of skills that can be used. Each entry includes a name, description, and file path so you can open the source for full instructions when using a specific skill. ### Available skills - cli-claude-code: Claude Code CLI orchestrator enabling external AI assistants (Gemini, Codex, Copilot) to invoke Anthropic's Claude Code CLI for supplementary tasks including deep reasoning, code editing, structured output, code review, agent delegation, and extended thinking. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-claude-code/SKILL.md) - cli-codex: Codex CLI orchestrator enabling any AI assistant to invoke OpenAI's Codex CLI for supplementary AI tasks including code generation, code review, web research, codebase analysis, cross-AI validation, and parallel task processing. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-codex/SKILL.md) - cli-copilot: GitHub Copilot CLI orchestrator enabling external AI assistants to invoke the standalone 'copilot' binary for supplementary tasks including collaborative planning, cloud delegation, versatile code generation, and autonomous task execution. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-copilot/SKILL.md) - cli-gemini: Gemini CLI orchestrator enabling any AI assistant to invoke Google's Gemini CLI for supplementary AI tasks including code generation, web research via Google Search, codebase architecture analysis, cross-AI validation, and parallel task processing. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/cli-gemini/SKILL.md) - mcp-chrome-devtools: Chrome DevTools orchestrator providing intelligent routing between CLI (bdg) and MCP (Code Mode) approaches. CLI prioritized for speed and token efficiency; MCP fallback for multi-tool integration scenarios. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-chrome-devtools/SKILL.md) - mcp-clickup: ClickUp project management orchestrator providing intelligent routing between CLI (cu) and MCP (Code Mode) approaches. CLI prioritized for speed and token efficiency; MCP for enterprise features like docs, goals, webhooks, and bulk operations. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-clickup/SKILL.md) - mcp-code-mode: MCP orchestration via TypeScript execution for efficient multi-tool workflows. Use Code Mode for ALL MCP tool calls (ClickUp, Notion, Figma, Webflow, Chrome DevTools, etc.). Provides 98.7% context reduction, 60% faster execution, and type-safe invocation. Mandatory for external tool integration. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-code-mode/SKILL.md) - mcp-figma: Figma design file access via MCP providing 18 tools for file retrieval, image export, component/style extraction, team management, and collaborative commenting. Accessed via Code Mode for token-efficient workflows. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/mcp-figma/SKILL.md) - sk-code-full-stack: Stack-agnostic development orchestrator guiding developers through implementation, testing, and verification phases with automatic stack detection via marker files and bundled stack-specific knowledge. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-full-stack/SKILL.md) - sk-code-opencode: Multi-language code standards for OpenCode system code (JavaScript, TypeScript, Python, Shell, JSON/JSONC) with language detection routing, universal patterns, and quality checklists. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-opencode/SKILL.md) - sk-code-review: Stack-agnostic code review baseline skill with findings-first severity analysis, mandatory security/correctness minimums, and adaptive overlay compatibility with sk-code-opencode, sk-code-web, and sk-code-full-stack standards. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-review/SKILL.md) - sk-code-web: Orchestrator guiding developers through implementation, debugging, and verification phases across specialized code quality skills (project) (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-code-web/SKILL.md) - sk-doc: Unified markdown and OpenCode component specialist providing document quality enforcement, content optimization, component creation workflows (skills, agents, commands), ASCII flowcharts and install guides. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-doc/SKILL.md) - sk-git: Git workflow orchestrator guiding developers through workspace setup, clean commits, and work completion across git-worktrees, git-commit, and git-finish skills (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-git/SKILL.md) - sk-improve-prompt: Prompt engineering specialist that transforms vague requests into structured, scored AI prompts using 7 proven frameworks (RCAF, COSTAR, RACE, CIDI, TIDD-EC, CRISPE, CRAFT), DEPTH thinking methodology, and CLEAR scoring across text modes. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/sk-improve-prompt/SKILL.md) - system-spec-kit: Unified documentation and context preservation: spec folder workflow (levels 1-3+), CORE + ADDENDUM template architecture (v2.2), validation, and Spec Kit Memory for context preservation. Mandatory for all file modifications. (file: /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public/.opencode/skills/system-spec-kit/SKILL.md) - openai-docs: Use when the user asks how to build with OpenAI products or APIs and needs up-to-date official documentation with citations, help choosing the latest model for a use case, or explicit GPT-5.4 upgrade and prompt-upgrade guidance; prioritize OpenAI docs MCP tools, use bundled references only as helper context, and restrict any fallback browsing to official OpenAI domains. (file: /Users/michelkerkmeester/.codex/skills/.system/openai-docs/SKILL.md) - skill-creator: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Codex's capabilities with specialized knowledge, workflows, or tool integrations. (file: /Users/michelkerkmeester/.codex/skills/.system/skill-creator/SKILL.md) - skill-installer: Install Codex skills into $CODEX_HOME/skills from a curated list or a GitHub repo path. Use when a user asks to list installable skills, install a curated skill, or install a skill from another repo (including private repos). (file: /Users/michelkerkmeester/.codex/skills/.system/skill-installer/SKILL.md) ### How to use skills - Discovery: The list above is the skills available in this session (name + description + file path). Skill bodies live on disk at the listed paths. - Trigger rules: If the user names a skill (with `$SkillName` or plain text) OR the task clearly matches a skill's description shown above, you must use that skill for that turn. Multiple mentions mean use them all. Do not carry skills across turns unless re-mentioned. - Missing/blocked: If a named skill isn't in the list or the path can't be read, say so briefly and continue with the best fallback. - How to use a skill (progressive disclosure): 1) After deciding to use a skill, open its `SKILL.md`. Read only enough to follow the workflow. 2) When `SKILL.md` references relative paths (e.g., `scripts/foo.py`), resolve them relative to the skill directory listed above first, and only consider other paths if needed. 3) If `SKILL.md` points to extra folders such as `references/`, load only the specific files needed for the request; don't bulk-load everything. 4) If `scripts/` exist, prefer running or patching them instead of retyping large code blocks. 5) If `assets/` or templates exist, reuse them instead of recreating from scratch. - Coordination and sequencing: - If multiple skills apply, choose the minimal set that covers the request and state the order you'll use them. - Announce which skill(s) you're using and why (one short line). If you skip an obvious skill, say why. - Context hygiene: - Keep context small: summarize long sections instead of pasting them; only load extra files when needed. - Avoid deep reference-chasing: prefer opening only files directly linked from `SKILL.md` unless you're blocked. - When variants exist (frameworks, providers, domains), pick only the relevant reference file(s) and note that choice. - Safety and fallback: If a skill can't be applied cleanly (missing files, unclear instructions), state the issue, pick the next-best approach, and continue. Files called AGENTS.md commonly appear in many places inside a container - at "/", in "~", deep within git repositories, or in any other directory; their location is not limited to version-controlled folders. Their purpose is to pass along human guidance to you, the agent. Such guidance can include coding standards, explanations of the project layout, steps for building or testing, and even wording that must accompany a GitHub pull-request description produced by the agent; all of it is to be followed. Each AGENTS.md governs the entire directory that contains it and every child directory beneath that point. Whenever you change a file, you have to comply with every AGENTS.md whose scope covers that file. Naming conventions, stylistic rules and similar directives are restricted to the code that falls inside that scope unless the document explicitly states otherwise. When two AGENTS.md files disagree, the one located deeper in the directory structure overrides the higher-level file, while instructions given directly in the prompt by the system, developer, or user outrank any AGENTS.md content.   /Users/michelkerkmeester/MEGA/Development/Opencode Env/Public zsh 2026-03-16 Europe/Amsterdam
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:416:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2570:   127	- `/memory:save` - preserve the current session context into spec memory
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:417:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2849:   142	/memory:save       # Save current conversation context
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:418:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2970:/bin/zsh -lc 'rg -n "/spec_kit:resume|/memory:save|memory_context|memory_match_triggers|memory_search|generate-context" .opencode/skills/system-spec-kit/references .opencode/skills/system-spec-kit/scripts .opencode/skills/system-spec-kit/feature_catalog' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:419:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2972:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:420:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2973:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:421:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2980:.opencode/skills/system-spec-kit/references/structure/folder_routing.md:244:1. User says "save context" or `/memory:save`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:422:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2995:.opencode/skills/system-spec-kit/feature_catalog/feature_catalog_in_simple_terms.md:62:| `/memory:save` | Save conversation context (4 tools, borrowed) | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:423:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3018:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:424:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3019:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:425:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3049:.opencode/skills/system-spec-kit/references/workflows/quick_reference.md:127:- `/memory:save` - preserve the current session context into spec memory
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:426:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3051:.opencode/skills/system-spec-kit/references/workflows/quick_reference.md:497:- Command: `/memory:save`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:427:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3085:.opencode/skills/system-spec-kit/scripts/scripts-registry.json:12:      "trigger": ["save context", "save memory", "/memory:save"],
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:428:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3127:.opencode/skills/system-spec-kit/references/memory/trigger_config.md:18:1. **Command Trigger** - `/memory:save` command for explicit saves
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:429:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3128:.opencode/skills/system-spec-kit/references/memory/trigger_config.md:29:| `/memory:save` Command | Primary save trigger | Immediate |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:430:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3135:.opencode/skills/system-spec-kit/references/memory/trigger_config.md:187:/memory:save
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:431:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3160:.opencode/skills/system-spec-kit/references/memory/save_workflow.md:142:/memory:save       # Save current conversation context
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:432:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3230:.opencode/skills/system-spec-kit/feature_catalog/16--tooling-and-scripts/17-json-primary-deprecation-posture.md:53:- The save command (`/memory:save`) updated to document the JSON-primary posture.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:433:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3267:.opencode/skills/system-spec-kit/feature_catalog/feature_catalog.md:60:| `/memory:save` | 4 | shared | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:434:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3296:.opencode/skills/system-spec-kit/scripts/tests/memory-learn-command-docs.vitest.ts:19:    expect(learnDoc).toContain('[s] use /memory:save instead');
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:435:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3350:    62	| `/memory:save` | Save conversation context (4 tools, borrowed) | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:436:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5394:   142	/memory:save specs/007-feature-name
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:437:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5820:- **What it does**: Mnemosyne exposes five direct verbs (`memory_recall`, `memory_recall_global`, `memory_store`, `memory_store_global`, `memory_delete`), while Public exposes a much richer but more distributed command/tool stack across `/memory:search`, `/memory:save`, `/memory:manage`, `/memory:learn`, and `/spec_kit:resume`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:438:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5852:- **What it does**: Mnemosyne recommends a simple ritual: recall at session start, store after important decisions, delete contradictions, use global for cross-project preferences. Public already has a stronger recovery contract, but it is expressed as `/spec_kit:resume`, `session_bootstrap()`, `memory_context(resume)`, `/memory:save`, and `/memory:learn`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:439:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5900:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:440:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5917:- **What it does**: Mnemosyne exposes five direct verbs (`memory_recall`, `memory_recall_global`, `memory_store`, `memory_store_global`, `memory_delete`), while Public exposes a much richer but more distributed command/tool stack across `/memory:search`, `/memory:save`, `/memory:manage`, `/memory:learn`, and `/spec_kit:resume`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:441:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5949:- **What it does**: Mnemosyne recommends a simple ritual: recall at session start, store after important decisions, delete contradictions, use global for cross-project preferences. Public already has a stronger recovery contract, but it is expressed as `/spec_kit:resume`, `session_bootstrap()`, `memory_context(resume)`, `/memory:save`, and `/memory:learn`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:442:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5997:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:445:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-037.md:224:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:454:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-022.md:3833:.opencode/skills/system-spec-kit/assets/template_mapping.md:322:**Generation:** Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"###-name","sessionSummary":"..."}' specs/###-name/` to auto-generate properly formatted memory files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:455:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-022.md:5104:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:456:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-022.md:5105:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:457:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-022.md:5351:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:458:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-022.md:5352:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:459:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-007.md:403:    55	| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:460:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-007.md:496:   148	Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:461:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-039.md:171:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:462:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-039.md:1074:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:463:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-039.md:1167:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:464:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:219:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:465:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8642:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2972:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:466:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8643:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2973:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:467:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8658:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2995:.opencode/skills/system-spec-kit/feature_catalog/feature_catalog_in_simple_terms.md:62:| `/memory:save` | Save conversation context (4 tools, borrowed) | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:468:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8668:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3018:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:469:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8669:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3019:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:470:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8758:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3267:.opencode/skills/system-spec-kit/feature_catalog/feature_catalog.md:60:| `/memory:save` | 4 | shared | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:471:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8777:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:3350:    62	| `/memory:save` | Save conversation context (4 tools, borrowed) | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:472:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8851:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5820:- **What it does**: Mnemosyne exposes five direct verbs (`memory_recall`, `memory_recall_global`, `memory_store`, `memory_store_global`, `memory_delete`), while Public exposes a much richer but more distributed command/tool stack across `/memory:search`, `/memory:save`, `/memory:manage`, `/memory:learn`, and `/spec_kit:resume`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:473:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8855:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5852:- **What it does**: Mnemosyne recommends a simple ritual: recall at session start, store after important decisions, delete contradictions, use global for cross-project preferences. Public already has a stronger recovery contract, but it is expressed as `/spec_kit:resume`, `session_bootstrap()`, `memory_context(resume)`, `/memory:save`, and `/memory:learn`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:474:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8858:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5900:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:475:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8859:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5917:- **What it does**: Mnemosyne exposes five direct verbs (`memory_recall`, `memory_recall_global`, `memory_store`, `memory_store_global`, `memory_delete`), while Public exposes a much richer but more distributed command/tool stack across `/memory:search`, `/memory:save`, `/memory:manage`, `/memory:learn`, and `/spec_kit:resume`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:476:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8863:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5949:- **What it does**: Mnemosyne recommends a simple ritual: recall at session start, store after important decisions, delete contradictions, use global for cross-project preferences. Public already has a stronger recovery contract, but it is expressed as `/spec_kit:resume`, `session_bootstrap()`, `memory_context(resume)`, `/memory:save`, and `/memory:learn`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:477:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8866:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:5997:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:478:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-038.md:8892:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-037.md:224:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:479:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-013.md:452:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:480:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-013.md:513:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:481:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-009.md:3098:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-007.md:403:    55	| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:482:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-009.md:3835:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-007.md:403:    55	| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:483:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/deep-research-strategy.md:56:- [ ] Q6. `/memory:save` user flow — What does invoking save feel like?
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:484:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-019.md:377:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:485:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-019.md:470:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:486:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:2:title: "Iteration 014 — /memory:save user flow under Option C"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:487:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:9:focus: "UX walkthrough for /memory:save under the new model. Interactive and auto modes. Confirmation screen. Routing transparency."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:488:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:22:# Iteration 014 — Q6: /memory:save User Flow
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:489:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:26:Walk through the `/memory:save` user experience under Option C. Show what the user sees at each step, how routing is visible, and how failures surface.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:490:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:32:User runs `/memory:save` with no args at session end. The command:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:491:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:41:✓ /memory:save complete
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:492:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:61:User runs `/memory:save --interactive` or `/memory:save --dry-run`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:493:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:69:/memory:save will perform 6 operations:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:494:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:102:User runs `/memory:save --force --route-as "narrative_progress"` to bypass classification and force all content into one target. For expert users who know exactly what they want.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:495:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-014.md:163:This transforms `/memory:save` from a black-box operation into an auditable one. Users can fix routing mistakes BEFORE they land in spec docs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:502:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-005.md:59:1. `/memory:save` targets it for the first time, OR
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:503:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-005.md:122:Every `/memory:save` that triggers a merge operation also triggers a continuity block update:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:504:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-018.md:442:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:505:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/005-mempalace/research/iterations/iteration-018.md:503:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:506:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-015.md:37:2. **Explicit overrides win over implicit routes.** If a human passed `--route-as X` to `/memory:save`, the classifier's choice is ignored.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:507:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-001.md:42:│ /memory:save → generate-context.ts CLI               │
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:508:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-001.md:84:│ /memory:save → generate-context.ts (refactored)      │
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:509:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-006.md:54:**Cache invalidation**: when a spec doc is re-indexed (after a `/memory:save` merge), the `trigger_phrases` column is refreshed from the updated frontmatter. The index auto-updates.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:511:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-022.md:187:- Runs inside `/memory:save` and future merge commands.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:512:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-002.md:104:The `RoutingDecision.overrideable: true` field lets callers override the classifier's choice. `/memory:save` can accept a `--route-as <category>` flag, and interactive sessions can prompt "Content classified as X with confidence Y; route anyway?".
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:513:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-002.md:136:- **F2.5**: The routing decision shape (category, target, confidence, fallback, explanation, overrideable) gives callers everything they need for UX transparency. `/memory:save` can echo "Routed 3 chunks: 2 to implementation-summary.md, 1 to decision-record.md ADR-005" in the response.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:514:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-026.md:55:- Detector: `/memory:save --route-as <category>` requests a target that differs from the classifier winner and the classifier confidence for the requested target is low; override semantics come from iteration 002 and save UX from `findings/save-journey.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:515:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/phrasing-audit.md:32:| `SKILL.md:503-506` (Memory Save Rule heading + body) | `Trigger: /memory:save, "save context", or "save memory"` | `Trigger: /memory:save, "save context", or "save continuity"` (slash command name unchanged) | "save memory" trigger phrase is documentation prose; the slash command name `/memory:save` stays. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:516:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/phrasing-audit.md:108:| `CLAUDE.md:144` | `Save context: \`/memory:save\` OR compose JSON → \`generate-context.js --json '<data>' [spec-folder]\` → Auto-indexed` | `Save context: \`/memory:save\` OR compose JSON → \`generate-context.js --json '<data>' [spec-folder]\` → Auto-indexed into the spec-doc continuity store` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:517:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/phrasing-audit.md:191:| Slash command names | `/memory:save`, `/memory:search`, `/memory:learn`, `/memory:manage` | UNCHANGED |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:518:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-013.md:188:Iteration 14 — /memory:save user flow.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:519:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/spec.md:94:- **Tool, command, frontmatter, table, file, and folder names** — `memory_search`, `memory_save`, `/memory:save`, `/memory:learn`, `_memory.continuity`, `memory_index` SQL table, `memory-search.ts` handler files, `references/memory/` folder, `scripts/dist/memory/` folder — all stay exactly as-is. The prior research output (archived) recommended a rename; the user explicitly scoped that out.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:520:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-027.md:43:| Write (`/memory:save`) | 1100-1250ms | 1940ms | 2600-2900ms | Safe under the `<2s` target with modest headroom |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:521:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-017.md:127:| 14 | /memory:save flow | Routing transparency + interactive mode + failure messages |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:522:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/iterations/iteration-005.md:11:| REQ-001 identifier preservation | Precise `tool-schemas.ts` `name: 'memory_*'` count = 21. Handler files matching `mcp_server/handlers/memory-*.ts` = 17. Unique slash-command mentions across OpenCode, Claude, and Gemini mirrors = 4 (`/memory:save`, `/memory:search`, `/memory:learn`, `/memory:manage`). Each runtime command folder has 4 command files. `_memory:` remains in `spec.md:15`. `references/memory/` and `scripts/dist/memory/` are present. `working_memory` remains present in the cognitive subsystem. | PASS |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:523:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/iterations/iteration-001.md:24:Identifier rename audit passed: all 21 no-touch `memory_*` tool names are present in `tool-schemas.ts`, `/memory:save`, `/memory:search`, `/memory:learn`, and `/memory:manage` remain present in command docs, `_memory:` remains at `spec.md:15`, handler filename count is 17, `references/memory/` and `scripts/dist/memory/` exist, and SQL table names including `working_memory` remain present.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:524:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:38:4. `/spec_kit:plan` does NOT run `/memory:save` — the plan docs themselves are the initial memory
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:525:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:46:**At session end**: user runs `/memory:save`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:526:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:49:1. `/memory:save` collects session context (exchanges, tool calls, decisions, blockers)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:527:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:108:3. Calls `/memory:save` with final session context
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:528:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-018.md:137:If a user runs `/memory:save` before any `implementation-summary.md` exists (e.g., mid-implementation before running `/spec_kit:complete`), the merge has no target. Router falls back to saving to `handover.md` as "pending implementation" content.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:529:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-019.md:101:- Manual save flow (user runs `/memory:save`, inspects routing output)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:530:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/iterations/iteration-003.md:14:- `/memory:save`, `/memory:search`, `/memory:learn`, and `/memory:manage` command files remain present across OpenCode, Claude, and Gemini mirrors.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:531:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/deep-research-dashboard.md:115:- [x] **Q6** — /memory:save user flow (iter 14)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:532:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/iterations/iteration-039.md:268:   2. Run /memory:save --continue scratch/pending-save-...
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:533:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/findings-registry.json:101:      "question": "/memory:save user flow",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:534:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/findings-registry.json:230:      "title": "Routing transparency is the core UX win for /memory:save",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:535:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/003-continuity-refactor-gates/research/research.md:61:### Q6. `/memory:save` user flow
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:536:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/spec.md:101:| 4 | `004-memory-save-rewrite/` | Complete | Feature Specification: /memory:save Planner-First Default |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:537:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/prompts/iteration-001.md:21:   - 4 slash commands: /memory:save, /memory:search, /memory:learn, /memory:manage
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:538:.opencode/specs/system-spec-kit/026-graph-and-context-optimization/000-release-cleanup/001-memory-terminology/review/prompts/iteration-001.md:52:   grep -rn '/memory:save\|/memory:search\|/memory:learn\|/memory:manage' .opencode/commands/memory/
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:539:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:46450:    55	| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:540:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:46543:   148	Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:541:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:59007:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-007.md:403:    55	| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:542:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:59744:/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-007.md:403:    55	| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:544:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:125912:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:545:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:126005:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:546:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:136920:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:547:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:137013:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:548:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249246:   127	- `/memory:save` - preserve the current session context into spec memory
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:549:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249525:   142	/memory:save       # Save current conversation context
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:550:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249646:/bin/zsh -lc 'rg -n "/spec_kit:resume|/memory:save|memory_context|memory_match_triggers|memory_search|generate-context" .opencode/skills/system-spec-kit/references .opencode/skills/system-spec-kit/scripts .opencode/skills/system-spec-kit/feature_catalog' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:551:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249648:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:552:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249649:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:553:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249656:.opencode/skills/system-spec-kit/references/structure/folder_routing.md:244:1. User says "save context" or `/memory:save`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:554:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249671:.opencode/skills/system-spec-kit/feature_catalog/feature_catalog_in_simple_terms.md:62:| `/memory:save` | Save conversation context (4 tools, borrowed) | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:555:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249694:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:764:| `memory/` | Session context preservation | `generate-context.js` runtime script via `/memory:save` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:556:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249695:.opencode/skills/system-spec-kit/references/templates/level_specifications.md:769:- Use `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:557:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249725:.opencode/skills/system-spec-kit/references/workflows/quick_reference.md:127:- `/memory:save` - preserve the current session context into spec memory
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:558:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249727:.opencode/skills/system-spec-kit/references/workflows/quick_reference.md:497:- Command: `/memory:save`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:559:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249761:.opencode/skills/system-spec-kit/scripts/scripts-registry.json:12:      "trigger": ["save context", "save memory", "/memory:save"],
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:560:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249803:.opencode/skills/system-spec-kit/references/memory/trigger_config.md:18:1. **Command Trigger** - `/memory:save` command for explicit saves
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:561:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249804:.opencode/skills/system-spec-kit/references/memory/trigger_config.md:29:| `/memory:save` Command | Primary save trigger | Immediate |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:562:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249811:.opencode/skills/system-spec-kit/references/memory/trigger_config.md:187:/memory:save
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:563:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249836:.opencode/skills/system-spec-kit/references/memory/save_workflow.md:142:/memory:save       # Save current conversation context
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:564:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249906:.opencode/skills/system-spec-kit/feature_catalog/16--tooling-and-scripts/17-json-primary-deprecation-posture.md:53:- The save command (`/memory:save`) updated to document the JSON-primary posture.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:565:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249943:.opencode/skills/system-spec-kit/feature_catalog/feature_catalog.md:60:| `/memory:save` | 4 | shared | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:566:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:249972:.opencode/skills/system-spec-kit/scripts/tests/memory-learn-command-docs.vitest.ts:19:    expect(learnDoc).toContain('[s] use /memory:save instead');
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:567:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:250026:    62	| `/memory:save` | Save conversation context (4 tools, borrowed) | `memory_save`, `memory_index_scan`, `memory_stats`, `memory_update` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:568:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:252070:   142	/memory:save specs/007-feature-name
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:569:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:252496:- **What it does**: Mnemosyne exposes five direct verbs (`memory_recall`, `memory_recall_global`, `memory_store`, `memory_store_global`, `memory_delete`), while Public exposes a much richer but more distributed command/tool stack across `/memory:search`, `/memory:save`, `/memory:manage`, `/memory:learn`, and `/spec_kit:resume`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:570:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:252528:- **What it does**: Mnemosyne recommends a simple ritual: recall at session start, store after important decisions, delete contradictions, use global for cross-project preferences. Public already has a stronger recovery contract, but it is expressed as `/spec_kit:resume`, `session_bootstrap()`, `memory_context(resume)`, `/memory:save`, and `/memory:learn`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:571:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:252576:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:572:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:252593:- **What it does**: Mnemosyne exposes five direct verbs (`memory_recall`, `memory_recall_global`, `memory_store`, `memory_store_global`, `memory_delete`), while Public exposes a much richer but more distributed command/tool stack across `/memory:search`, `/memory:save`, `/memory:manage`, `/memory:learn`, and `/spec_kit:resume`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:573:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:252625:- **What it does**: Mnemosyne recommends a simple ritual: recall at session start, store after important decisions, delete contradictions, use global for cross-project preferences. Public already has a stronger recovery contract, but it is expressed as `/spec_kit:resume`, `session_bootstrap()`, `memory_context(resume)`, `/memory:save`, and `/memory:learn`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:574:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:252673:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:575:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:252902:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:584:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:265543:3. a migration guide that maps `memory_recall`, `memory_store`, `memory_delete`, `global`, and `core` onto `/spec_kit:resume`, `session_bootstrap()`, `/memory:save`, `/memory:learn`, and governed retrieval scope.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:585:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:273966:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2972:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:126:- [ ] Save context if significant progress: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:586:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:273967:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2973:.opencode/skills/system-spec-kit/references/validation/phase_checklists.md:159:- [ ] Memory context saved: `/memory:save` or `node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{"specFolder":"...","sessionSummary":"..."}' specs/###-folder/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/011-mcp-runtime-stress-remediation/001-search-intelligence-stress-playbook/002-search-scenario-execution/runs/S1/cli-codex-1/output.txt:587:.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/research.md:273982:.opencode/specs/system-spec-kit/999-hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/004-opencode-mnemosyne-main/research/iterations/iteration-036.md:2995:.opencode/skills/system-spec-kit/feature_catalog/feature_catalog_in_simple_terms.md:62:| `/memory:save` | Save conversation context (4 tools, borrowed) | `memory_save`, `memory_index_scan`, eaningfulLines.join('\\\\n'));\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:339:    selectedFrom: ['transcript-tail', 'active-files', 'recent-topics', 'attention-signals'],\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:341:    topicCount: topics.length,\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:351:      'Do not reuse Recovery Instructions text as session-state evidence.',\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:362:    triggered: '',\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:363:    sessionState: sessionParts.join('\\\\n\\\\n'),\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:378:  const sessionId = input.session_id ?? 'unknown';\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:379:  hookLog('info', 'compact-inject', `PreCompact triggered for session ${sessionId} (trigger: ${input.trigger ?? 'unknown'})`);\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:393:    updateState(sessionId, {\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:408:    hookLog('info', 'compact-inject', `Cached compact context (${payload.length} chars) for session ${sessionId}`);\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:416:  updateState(sessionId, {\\n.opencode/skills/system-spec-kit/mcp_server/hooks/claude/compact-inject.ts:424:  hookLog('info', 'compact-inject', `Cached compact context (${payload.length} chars) for session ${sessionId}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/attention-decay.ts:18:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/attention-decay.ts:145:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/attention-decay.ts:166:    const memory = (db.prepare('SELECT stability, difficulty, last_review, review_count FROM memory_index WHERE id = ?') as Database.Statement).get(memoryId) as Record<string, unknown> | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/attention-decay.ts:192:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/attention-decay.ts:306:      SELECT * FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/attention-decay.ts:322: * Clear session state.\\n.opencode/skills/system-spec-kit/mcp_server/lib/cache/tool-cache.ts:312:    'memory_search',\\n.opencode/skills/system-spec-kit/mcp_server/lib/cache/tool-cache.ts:313:    'memory_match_triggers',\\n.opencode/skills/system-spec-kit/mcp_server/lib/cache/tool-cache.ts:314:    'memory_context',\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:6:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:257:    const columns = (db.prepare('PRAGMA table_info(memory_index)') as Database.Statement).all() as Array<{ name: string }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:261:      db.exec('ALTER TABLE memory_index ADD COLUMN is_archived INTEGER DEFAULT 0');\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:262:      db.exec('CREATE INDEX IF NOT EXISTS idx_archived ON memory_index(is_archived)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:267:    if (!msg.includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:281:      CREATE TABLE IF NOT EXISTS archival_stats (\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:374:      FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:455:      'SELECT * FROM memory_index WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:481:    const columns = (db.prepare('PRAGMA table_info(memory_index)') as Database.Statement).all() as Array<{ name: string }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:503:// Touching memory_index or ancillary tables. This preserves the archived row\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:511:    // Expected to fail when sqlite-vec is not loaded or vec_memories doesn't exist\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:525:    const availableColumns = ['title', 'content_text', 'trigger_phrases', 'file_path']\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:530:    const query = `SELECT ${availableColumns.join(', ')} FROM memory_index WHERE id = ? AND is_archived = 0`;\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:548: * `memory_index_scan` picks up the gap and re-embeds the memory. This avoids blocking\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:563:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:603:          UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/archival-manager.ts:643:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/tests/review-fixes.vitest.ts:41:    const result = validateToolArgs('memory_search', {\\n.opencode/skills/system-spec-kit/mcp_server/lib/providers/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/providers/README.md:190:| Process retries | `processRetryQueue(limit)` | Manual retry trigger |\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/valid-phase/001-design/spec.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/temporal-contiguity.ts:7:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/temporal-contiguity.ts:130:      'SELECT created_at, spec_folder FROM memory_index WHERE id = ?',\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/temporal-contiguity.ts:151:        FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/temporal-contiguity.ts:208:        SELECT * FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/temporal-contiguity.ts:216:      SELECT * FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/adaptive-ranking.ts:7:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/adaptive-ranking.ts:346:    CREATE TABLE IF NOT EXISTS adaptive_signal_events (\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/adaptive-ranking.ts:359:    CREATE TABLE IF NOT EXISTS adaptive_thresholds (\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/adaptive-ranking.ts:377:    CREATE TABLE IF NOT EXISTS adaptive_shadow_runs (\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/prediction-error-gate.ts:5:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/confidence-truncation.ts:37:/** Gap multiplier: gap must exceed this multiple of the median gap to trigger truncation.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-storage.ts:5:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-storage.ts:17:    FROM sqlite_master\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-storage.ts:26:    CREATE TABLE IF NOT EXISTS graph_communities (\\n.opencode/skills/system-spec-kit/scripts/optimizer/optimizer-manifest.json:22:      \\\"description\\\": \\\"Number of consecutive no-progress iterations before stuck recovery is triggered.\\\",\\n.opencode/skills/system-spec-kit/scripts/optimizer/optimizer-manifest.json:78:      \\\"contract\\\": \\\"session lifecycle\\\"\\n.opencode/skills/system-spec-kit/scripts/optimizer/optimizer-manifest.json:91:      \\\"name\\\": \\\"sessionId\\\",\\n.opencode/skills/system-spec-kit/scripts/optimizer/optimizer-manifest.json:93:      \\\"contract\\\": \\\"session lifecycle\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/contracts/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/contracts/README.md:103:| `sessionId` | `string?` | Optional session identifier |\\n.opencode/skills/system-spec-kit/mcp_server/lib/contracts/README.md:160:| `createTrace(query, sessionId?, intent?)` | `RetrievalTrace` | New trace with auto-generated traceId |\\n.opencode/skills/system-spec-kit/mcp_server/lib/contracts/README.md:211:const trace = createTrace('authentication flow', 'session-xyz');\\n.opencode/skills/system-spec-kit/mcp_server/lib/contracts/README.md:244:| Start trace | `createTrace(query, sessionId?)` | Beginning of a retrieval call |\\n.opencode/skills/system-spec-kit/mcp_server/lib/contracts/README.md:311:- Current owner surfaces remain authoritative: shared payload sections, session bootstrap or resume consumers, and bridge-facing graph payloads.\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/fsrs-scheduler.ts:16:// Timescale: minutes. Operates on session-scoped attention scores only.\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/fsrs-scheduler.ts:377:   2. ENGAGEMENT-SENSITIVE documents — all other context_types (session, scratch,\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/fsrs-scheduler.ts:397:  'session',\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/fsrs-scheduler.ts:421: *   - 'fsrs_schedule'  for all engagement-sensitive types (session, scratch, etc.)\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:6:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:143:     FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:208:      'SELECT related_memories FROM memory_index WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:253:     FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:277:    const memory = (db.prepare('SELECT * FROM memory_index WHERE id = ?') as Database.Statement).get(memoryId) as Record<string, unknown> | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:283:    ) as import('better-sqlite3').Statement).get(memoryId) as { embedding: Buffer } | undefined : undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:307:        'UPDATE memory_index SET related_memories = ? WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:320: * Get causally related memories for a given memory ID from the causal_edges table.\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:321: * This surfaces memories connected by causal relationships (caused, enabled, supports, etc.)\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:333:      WITH causal_neighbors AS (\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:340:        FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:351:        CAST(ROUND(causal_neighbors.strength * 100) AS INTEGER) AS similarity\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:352:      FROM causal_neighbors\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:353:      JOIN memory_index mi ON mi.id = causal_neighbors.neighbor_id\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:365: * and causal_edges graph from seed memories. Merging both sources\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:366: * surfaces causally related but semantically dissimilar memories\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:411:    // Merge neighbors from both similarity and causal graphs\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:413:    const causalNeighbors = getCausalNeighbors(current.id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:415:    // Deduplicate by ID, keeping the higher similarity score\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/co-activation.ts:420:    for (const rel of causalNeighbors) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:46:| Classification | 2       | ~960  | 5-state memory model + duplicate detection   |\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:96:| **Event-Based Decay**        | Event-driven decay model (spec 136) replaces fixed per-turn decay with event triggers | Context-sensitive memory management  |\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:97:| **Session-Attention Boost**  | `SPECKIT_SESSION_BOOST` boosts scores for memories active in the current session       | Recency-aware retrieval              |\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:105:| better-sqlite3 | 8.0+    | Latest      |\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:171:Prevents duplicate memories using similarity thresholds:\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:175:| >= 0.95 (95%) | **REINFORCE**               | Exact duplicate, boost existing  |\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:384:**Purpose**: Prevent duplicate memories with conflict detection\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:593:// Get or create a session\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:594:const sessionId = getOrCreateSession();\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:595:// sessionId = 'wm-lxyz123-abc456'\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:598:setAttentionScore(sessionId, memoryId, 1.0);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:601:const entries = getWorkingMemory(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:602:// entries = [{ id, session_id, memory_id, attention_score, added_at, last_focused, focus_count }]\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:604:// Get full memory details for session\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:605:const memories = getSessionMemories(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:607:// Apply decay to all entries in session\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:608:const updated = batchUpdateScores(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:611:// Get session statistics\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:612:const stats = getSessionStats(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:613:// stats = { sessionId, totalEntries, avgAttention, maxAttention, minAttention, totalFocusEvents }\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:615:// Clear session\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:616:clearSession(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:624:sessionTimeoutMs: 1800000     // 30 minutes\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:747:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:787:// Before saving new memory, check for duplicates\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:803:    db.prepare('UPDATE memory_index SET importance_tier = ? WHERE id = ?')\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:846:| **Memory Save**   | New memory → Check duplicates → Save | `evaluateMemory`, `activateMemoryWithFsrs`   |\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:944:const memory = db.prepare('SELECT * FROM memory_index WHERE id = ?').get(memoryId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:957:| Slow queries         | `CREATE INDEX idx_memory_state ON memory_index(memory_type)` |\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:976:A: **Retrievability** (R) is the FSRS-calculated probability of recall (0.0 to 1.0), based on stability and elapsed time. **Attention score** is the session-specific activation level in `working_memory`, which starts at 1.0 when a memory enters the session and decays at 0.95 per cycle.\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:1052:| `SPECKIT_WORKING_MEMORY`  | true    | Enable working memory sessions          |\\n.opencode/skills/system-spec-kit/mcp_server/lib/cognitive/README.md:1053:| `SPECKIT_SESSION_BOOST`   | false   | Enable session-based score boost from working_memory attention signals |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:5:/** Maximum trigger phrases stored for each memory. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:42:  trigger_phrases?: string | string[] | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:43:  triggerPhrases?: string | string[];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:81:  trigger_phrases?: string | string[] | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:105:  triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:120:  triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:168: * Converts an embedding vector into a binary buffer for sqlite-vec storage.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:180: * Parses trigger phrase storage into a normalized string array.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:181: * @param value - The stored trigger phrase payload.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:182: * @returns Parsed trigger phrases, or an empty array on invalid input.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-types.ts:184:export function parse_trigger_phrases(value: string | string[] | null | undefined): string[] {\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:10:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:20:/** Maximum number of entries allowed in each session-scoped cache. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:26:/** Session-scoped cache for causal depth scores (memoryId -> normalized depth). */\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:51: * Clear both session-scoped caches. Call at session boundaries or when\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:52: * the causal graph has been mutated.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:62: * in at least one causal edge. Writes into the `degree_snapshots` table\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:69:    // Collect all unique memory node IDs and their degree counts from causal_edges.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:74:        SELECT source_id AS node_id FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:77:        FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:115: * as source or target in causal_edges).\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:122:      FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:173: * Uses the session cache to avoid redundant DB queries within a session.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:179:    // Check session cache first\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:199: * Build the full adjacency list from causal_edges, keyed by node ID (as number).\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:209:      SELECT source_id, target_id FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:476: * Batch-compute causal depth scores for a set of memory IDs.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:477: * Uses the session cache to avoid redundant graph traversals within a session.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/graph-signals.ts:482: * Shortcut edges should not collapse deeper causal chains to the nearest-root\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/contradiction-detection.ts:8:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/contradiction-detection.ts:87:      FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:3:description: \\\"Community detection, graph signal scoring, temporal edges, contradiction detection, usage tracking, and community summaries for causal memory networks.\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:7:  - \\\"causal depth\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:14:> Community detection and graph signal scoring for causal memory networks. Provides BFS connected-component labelling, single-level Louvain modularity and momentum/depth scoring.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:33:The graph module operates on the `causal_edges` and `memory_index` tables to detect communities, compute scoring signals, manage temporal edge validity, detect contradictions, track usage, and generate community summaries. All features are independently gated behind `SPECKIT_*` feature flags.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:38:- **Community summaries** generate readable text summaries per community by aggregating member titles and extracting top topics. Stored in `community_summaries` table.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:40:- **Graph signals** compute two additive score bonuses for search results: momentum (degree change over 7 days) and causal depth (normalized longest-path depth on the SCC-condensed causal DAG).\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:41:- **Temporal edges** add `valid_at`/`invalid_at` columns to `causal_edges` for bi-temporal validity management.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:52:| Session-scoped caching | Momentum and depth caches prevent redundant DB queries within a single session. Caches clear at 10,000 entries. |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:69:  graph-signals.ts            # Momentum and causal depth scoring, degree snapshots\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:81:| `community-summaries.ts` | Generates text summaries per community from member titles/topics, stores in `community_summaries` table | `SPECKIT_COMMUNITY_SUMMARIES` |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:84:| `graph-signals.ts` | Degree snapshots, momentum scoring (7-day delta), causal depth via SCC condensation | `SPECKIT_GRAPH_SIGNALS` |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:85:| `temporal-edges.ts` | Adds `valid_at`/`invalid_at` columns to `causal_edges`, provides `invalidateEdge()` and `getValidEdges()` | `SPECKIT_TEMPORAL_EDGES` |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:87:| `usage-tracking.ts` | Adds `access_count` column to `memory_index`, provides `incrementAccessCount()` and `getAccessCount()` | `SPECKIT_USAGE_RANKING` |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:103:| `computeMomentumScores` | graph-signals.ts | Batch momentum computation with session caching |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:104:| `computeCausalDepthScores` | graph-signals.ts | Batch normalized causal depth via SCC condensation and longest-path DAG traversal |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:106:| `clearGraphSignalsCache` | graph-signals.ts | Clears momentum and depth session caches |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:110:| `ensureTemporalColumns` | temporal-edges.ts | Adds valid_at/invalid_at columns to causal_edges |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:114:| `ensureUsageColumn` | usage-tracking.ts | Adds access_count column to memory_index |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:138:| `causal_edges` | Multiple | Source of graph structure; temporal-edges adds valid_at/invalid_at |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:140:| `community_summaries` | community-summaries.ts | Generated community text summaries with topics |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:142:| `memory_index` | usage-tracking.ts, community-detection.ts | access_count column, stale assignment cleanup |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/README.md:157:| [../storage/README.md](../storage/README.md) | Schema definitions for causal_edges and related tables |\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/usage-tracking.ts:8:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/usage-tracking.ts:17: * Add access_count column to memory_index if not present.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/usage-tracking.ts:26:    db.exec(`ALTER TABLE memory_index ADD COLUMN access_count INTEGER DEFAULT 0`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/usage-tracking.ts:29:    if (!/duplicate column name/i.test(message)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/usage-tracking.ts:51:      UPDATE memory_index SET access_count = COALESCE(access_count, 0) + 1 WHERE id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/usage-tracking.ts:71:      SELECT COALESCE(access_count, 0) AS access_count FROM memory_index WHERE id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:4:// Feature catalog: Temporal validity for causal edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:5:// Adds valid_at / invalid_at lifecycle columns to causal_edges,\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:8:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:32: * Add valid_at and invalid_at columns to causal_edges if not present.\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:41:    db.exec(`ALTER TABLE causal_edges ADD COLUMN valid_at TEXT DEFAULT NULL`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:44:    if (!/duplicate column name/i.test(message)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:50:    db.exec(`ALTER TABLE causal_edges ADD COLUMN invalid_at TEXT DEFAULT NULL`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:53:    if (!/duplicate column name/i.test(message)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:85:        UPDATE causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:93:      UPDATE causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/temporal-edges.ts:121:      FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-detection.ts:5:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-detection.ts:38:    FROM sqlite_master\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-detection.ts:60:      FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-detection.ts:129:      FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-detection.ts:577:      CREATE TABLE IF NOT EXISTS community_assignments (\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/README.md:158:  'Consolidated duplicate context entries'\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/README.md:214:- Foreign keys to `memory_index`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:5:// Graph-traversal score boosting via causal edge relationships.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:6:// Walks the causal_edges graph up to MAX_HOPS, amplifying scores\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:19:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:23:/** Per-hop boost cap. 0.05 keeps causal nudge subtle relative to semantic scores (~0.5–1.0). */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:25:/** Combined causal + session boost ceiling to prevent runaway amplification. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:79: * C138-P2: Relation-type weight multipliers for causal edge traversal.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:84: * causal-edges.ts. causal-edges weights are applied during chain traversal\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:85: * scoring (getCausalChain), while these are applied during the causal-boost\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:88: *   - causal-edges: traversal strength propagation (range 0.8–1.5)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:89: *   - causal-boost: search result boost amplitude (range 0.8–1.5)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:107:  sessionBoost?: number;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:109:  causalBoost?: number;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:144: * Check whether the causal boost feature flag is enabled.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:146: * When enabled, causal graph traversal amplifies scores for results\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:147: * connected to top-ranked results via causal edges.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:164:/** Store the database reference used by causal edge traversal queries. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:231: * Canonical relation names from causal-boost are lower-cased (e.g. 'supersedes').\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:369:  causalBoost: number\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:371:  const allowedBoost = Math.max(0, Math.min(causalBoost, MAX_COMBINED_BOOST));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:379:    causalBoost: allowedBoost,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:386: * Deduplicate and validate a list of numeric IDs, truncating to integers\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:410: * Walk causal edges up to maxHops from the given seed memory IDs,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:431:    WITH RECURSIVE causal_walk(origin_id, node_id, hop_distance, walk_score) AS (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:436:      FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:445:      FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:459:      FROM causal_walk cw\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:460:      JOIN causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:466:    FROM causal_walk\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:499:    console.warn(`[causal-boost] Traversal failed: ${message}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:510:    SELECT id, spec_folder, file_path, title, importance_tier, trigger_phrases, created_at\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:511:    FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:519: * Apply causal graph boost to ranked search results, injecting\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:586:            SELECT relation FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:621:    const causalBoost = activeBoosts.get(item.id) ?? 0;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:622:    if (causalBoost <= 0) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:626:    const sessionBoost = typeof item.sessionBoost === 'number' ? Math.max(0, item.sessionBoost) : 0;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:627:    const allowedBoost = Math.max(0, Math.min(causalBoost, MAX_COMBINED_BOOST - sessionBoost));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:642:      causalBoost: allowedBoost,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:655:    const causalBoost = Math.max(0, Math.min(activeBoosts.get(row.id) ?? 0, MAX_COMBINED_BOOST));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:656:    metadata.maxBoostApplied = Math.max(metadata.maxBoostApplied, causalBoost);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:658:    return buildPipelineRow(row, baseScore, causalBoost);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:683: * even when the causal boost has no seed results.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:733:      SELECT id FROM memory_index WHERE (${likeClauses}) LIMIT 10\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:743:    // Walk 1-hop causal edges to find neighbor nodes and edge types\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:751:      FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/causal-boost.ts:781:    console.warn(`[causal-boost] injectGraphContext failed (fail-open): ${message}`);\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/valid-phase/001-design/plan.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:5:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:249:  CREATE TABLE IF NOT EXISTS memory_corrections (\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:279:    FOREIGN KEY (original_memory_id) REFERENCES memory_index(id) ON DELETE CASCADE,\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:280:    FOREIGN KEY (correction_memory_id) REFERENCES memory_index(id) ON DELETE SET NULL\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:332:      SELECT stability FROM memory_index WHERE id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:352:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:489:    // Also create a causal edge if causal_edges table exists\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:492:      const causal_table_exists = db!.prepare(`\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:493:        SELECT name FROM sqlite_master\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:494:        WHERE type='table' AND name='causal_edges'\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:497:      if (causal_table_exists && correction_memory_id) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:505:          INSERT OR IGNORE INTO causal_edges (\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:518:      console.warn(`[corrections] Could not create causal edge: ${get_error_message(e)}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:611:    // Try to remove the causal edge if it exists\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:621:          DELETE FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:638:            DELETE FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:652:            console.warn(`[corrections] undo: no causal edge found for (${correction.correction_memory_id} → ${correction.original_memory_id}, relation=${undoRelation})`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:658:      console.warn(`[corrections] undo: causal edge deletion failed: ${get_error_message(edgeErr)}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:711:      LEFT JOIN memory_index m_orig ON mc.original_memory_id = m_orig.id\\n.opencode/skills/system-spec-kit/mcp_server/lib/learning/corrections.ts:712:      LEFT JOIN memory_index m_corr ON mc.correction_memory_id = m_corr.id\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-decomposer.ts:204: *   3. Return the deduplicated list.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-decomposer.ts:210: * @returns Merged, deduplicated, coverage-ranked result array.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/community-search.ts:12:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/community-search.ts:36:    SELECT name FROM sqlite_master\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/feedback-denylist.ts:5:// 100+ stop words that should never be learned as trigger phrases.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/feedback-denylist.ts:57:   to serve as meaningful trigger phrases.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/feedback-denylist.ts:61:  'memory', 'session', 'context', 'spec', 'folder', 'file', 'path',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/feedback-denylist.ts:76: * as trigger phrases. All terms stored in lowercase for case-insensitive matching.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:52: * Token-pressure policy for memory_context.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:60: * Automatic session resume context injection for memory_context.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:209: * N2a+N2b: Graph momentum scoring and causal depth signals.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:283:/** Whether causal-edge degree-based re-ranking is enabled (SPECKIT_DEGREE_BOOST). */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:500: * REQ-D5-006: Retrieval session state for cross-turn context.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:561: * REQ-D4-005: Assistive reconsolidation for near-duplicate detection.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:599: * Queries causal_edges for neighbor titles when recovery triggers.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-flags.ts:626: * Phase D T036: Temporal validity tracking for causal edges.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/spec-folder-hierarchy.ts:11:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/spec-folder-hierarchy.ts:87:    FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/spec-folder-hierarchy.ts:283:    SELECT id, spec_folder, title FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:6:// Creates causal edges between memories sharing entities across spec folders.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:14:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:20:/** Maximum causal edges per node to prevent graph density explosion. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:115:  // Graph / causality domain\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:116:  'causal': 'causal',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:117:  'causality': 'causal',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:123:  'relationship': 'causal',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:124:  'relationships': 'causal',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:125:  'dependency': 'causal',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:126:  'dependencies': 'causal',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:135:  'session': 'session',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:136:  'sessions': 'session',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:168: * @returns Array of candidate noun phrase tokens (lowercase, deduplicated).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:227: * matchAliases(['memory', 'graph'], { relationships: 'causal' });\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:462:      JOIN memory_index mi ON me.memory_id = mi.id\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:651:      JOIN memory_index mi ON me.memory_id = mi.id\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:700:      `SELECT COUNT(*) AS cnt FROM causal_edges WHERE source_id = ? OR target_id = ?`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:718:      `SELECT spec_folder FROM memory_index WHERE id = ?`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:756: * @param db - An initialized better-sqlite3 Database instance.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:776:      `SELECT COUNT(*) AS cnt FROM causal_edges`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:781:      `SELECT COUNT(*) AS cnt FROM memory_index`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:804:  // SELECT source_id AS id FROM causal_edges WHERE source_id IN (...)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:806:  // SELECT target_id AS id FROM causal_edges WHERE target_id IN (...)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:811:      SELECT source_id AS id FROM causal_edges WHERE source_id IN (${placeholders})\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:813:      SELECT target_id AS id FROM causal_edges WHERE target_id IN (${placeholders})\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:834: * Create cross-document causal links for matched entities.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:840: * @throws {Error} If the causal edge insert statement cannot be prepared.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:864:    INSERT OR IGNORE INTO causal_edges (source_id, target_id, relation, strength, evidence, created_by)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:972:      `SELECT COUNT(*) AS cnt FROM causal_edges WHERE created_by = 'entity_linker'`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:978:      `SELECT DISTINCT evidence FROM causal_edges WHERE created_by = 'entity_linker'`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:996:        SELECT CAST(source_id AS INTEGER) AS id FROM causal_edges WHERE created_by = 'entity_linker'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:998:        SELECT CAST(target_id AS INTEGER) AS id FROM causal_edges WHERE created_by = 'entity_linker'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:1004:      `SELECT COUNT(*) AS cnt FROM memory_index`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/entity-linker.ts:1050: * 3. Creates causal edges between matching memories\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-lifecycle.ts:15://   - TypeScript strict mode; zero external runtime deps beyond better-sqlite3\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-lifecycle.ts:17:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-lifecycle.ts:56: * Controls when dirty-node recomputation is triggered after write operations.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-lifecycle.ts:222:      FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-lifecycle.ts:280:      FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-lifecycle.ts:294:      UPDATE causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-lifecycle.ts:337: * call triggers execution.  The actual refresh callback (`_globalRefreshFn`)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-lifecycle.ts:375:  logger.warn('Global graph refresh triggered but no refresh function registered.');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/chunk-reassembly.ts:6:// reassembling content from sibling chunks stored in memory_index.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/chunk-reassembly.ts:79: * 1. Deduplicates by parent_id (keeps only the first/best-scoring chunk per parent)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/chunk-reassembly.ts:159:      FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-query.ts:254:        sessionId: r.session_id as string,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-query.ts:283:    sessionId: r.session_id as string,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:51:  /** Low-confidence threshold — results below this trigger recovery. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:59:// Minimum result count considered \\\"good enough\\\" — fewer than this triggers partial recovery.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:144:  // Deduplicate, remove empties, cap at 3\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:168:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:176: * queries the causal_edges table for nodes related to the matched concepts from\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:201:    // then walk causal_edges to find neighbors with distinct titles.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:208:      SELECT mi.id FROM memory_index mi\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:218:    // Step 2: Walk 1-hop causal edges from seeds to find neighbor nodes\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:221:      FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/recovery-payload.ts:222:      JOIN memory_index mi ON (\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/valid-phase/001-design/tasks.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:5:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:23:  sessionId: string | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:29: * Check whether session boost is enabled.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:31: * When enabled, session attention scores from working_memory are used\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:36:function isEnabled(_sessionId?: string | null): boolean {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:44:function normalizeSessionId(sessionId: string | null | undefined): string | null {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:45:  if (typeof sessionId !== 'string') return null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:46:  const trimmed = sessionId.trim();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:65:function capCombinedBoost(sessionBoost: number, causalBoost: number = 0): number {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:66:  const boundedSession = Math.max(0, sessionBoost);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:67:  const boundedCausal = Math.max(0, causalBoost);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:72:function calculateSessionBoost(attentionScore: number, causalBoost: number = 0): number {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:78:  return capCombinedBoost(rawBoost, causalBoost);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:81:function getAttentionBoost(sessionId: string | null | undefined, memoryIds: number[]): Map<number, number> {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:83:  if (!isEnabled(sessionId) || !db) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:87:  const normalizedSessionId = normalizeSessionId(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:97:      FROM working_memory\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:98:      WHERE session_id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:115:    console.warn(`[session-boost] getAttentionBoost failed: ${message}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:139:  sessionId: string | null | undefined\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:141:  const normalizedSessionId = normalizeSessionId(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:145:    sessionId: normalizedSessionId,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:179:          sessionBoostScore: finalScore,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-boost.ts:180:          sessionBoost: boost,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:20:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:21:import * as sqliteVec from 'sqlite-vec';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:32:  parse_trigger_phrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:168:    SELECT name FROM sqlite_master WHERE type='table' AND name='memory_index'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:181:    SELECT name FROM sqlite_master WHERE type='table' AND name='vec_metadata'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:202:    SELECT sql FROM sqlite_master WHERE name='vec_memories'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:228:  _sqlite_vec_available: boolean,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:268:  return validate_embedding_dimension_for_connection(db, sqlite_vec_available_flag);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:378:let sqlite_vec_available_flag = true;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:400:  sqlite_vec_available_flag = vec_available;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:429:/** Accessor for sqlite_vec_available (used by other modules) */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:430:export function sqlite_vec_available(): boolean {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:431:  return sqlite_vec_available_flag;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:535:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:540:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:544:    get_by_id: database.prepare('SELECT * FROM memory_index WHERE id = ?'),\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:547:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:553:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:567:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:572:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:633:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:651:      row.trigger_phrases = parse_trigger_phrases(row.trigger_phrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:711:       FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:723:    const updateStmt = database.prepare('UPDATE memory_index SET interference_score = ? WHERE id = ?');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:757:    set_active_database_connection(cached_conn, target_path, sqlite_vec_available_flag);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:773:      console.error('[vector-index] FATAL: better-sqlite3 native module failed to load');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:787:      console.error('[vector-index] Or manually: npm rebuild better-sqlite3');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:794:    sqliteVec.load(new_db);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:797:    console.warn(`[vector-index] sqlite-vec extension not available: ${get_error_message(vec_error)}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:799:    console.warn('[vector-index] Install sqlite-vec: brew install sqlite-vec (macOS)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:819:  create_schema(new_db, { sqlite_vec_available: vec_available, get_embedding_dim });\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:875:// Check if vector search is available (sqlite-vec loaded)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:877: * Reports whether sqlite-vec vector search is available.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:881:  return sqlite_vec_available_flag;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:981:      trigger_phrases?: string[];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:982:      triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:992:      triggerPhrases: metadata_alias.trigger_phrases || metadata_alias.triggerPhrases || [],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-store.ts:1050:    return sqlite_vec_available_flag;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/deterministic-extractor.ts:9:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/deterministic-extractor.ts:183: * Writes edges with evidence='explicit_only' to causal_edges.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/deterministic-extractor.ts:190: * @param onWriteFn - Callback to trigger graph refresh for newly inserted edges.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/deterministic-extractor.ts:203:      INSERT OR IGNORE INTO causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-summaries.ts:5:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-summaries.ts:35:    CREATE TABLE IF NOT EXISTS community_summaries (\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-summaries.ts:54:    FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/graph/community-summaries.ts:94:    `Community ${communityId} groups ${memberIds.length} causally linked memories${folderPhrase}.`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-router.ts:135: * @param triggerPhrases - Optional trigger phrases for simple-tier classification\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-router.ts:140:  triggerPhrases?: string[],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-router.ts:142:  const classification = classifyQueryComplexity(query, triggerPhrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-signals.ts:8:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/evidence-gap-detector.ts:17:/** Absolute minimum score; any top score below this triggers a gap. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/confidence-scoring.ts:107:  /** Raw cosine similarity (0–100 scale from sqlite-vec). */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index.ts:10:  parse_trigger_phrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index.ts:160:  sqlite_vec_available,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:30:  sqlite_vec_available as get_sqlite_vec_available,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:36:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:92:      DELETE FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:98:    // Best-effort for legacy databases that may not have causal edges yet.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:163:    triggerPhrases = [],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:189:  const triggers_json = JSON.stringify(triggerPhrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:202:      triggerPhrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:215:  const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:218:    const embedding_status = sqlite_vec ? 'success' : 'pending';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:221:      INSERT INTO memory_index (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:222:        spec_folder, file_path, canonical_file_path, anchor_id, title, trigger_phrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:228:      specFolder, filePath, canonicalFilePath, anchorId, title, triggers_json,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:238:    if (sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:272:    triggerPhrases = [],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:285:  const triggers_json = JSON.stringify(triggerPhrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:296:        UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:298:            trigger_phrases = ?,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:313:      `).run(title, triggers_json, importanceWeight, canonicalFilePath, failureReason, now, encodingIntent, documentType, specLevel, contentText, qualityScore, JSON.stringify(qualityFlags), existing.id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:320:      INSERT INTO memory_index (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:321:        spec_folder, file_path, canonical_file_path, anchor_id, title, trigger_phrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:327:      specFolder, filePath, canonicalFilePath, anchorId, title, triggers_json,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:359:    triggerPhrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:377:      FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:392:    if (triggerPhrases !== undefined) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:393:      updates.push('trigger_phrases = ?');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:394:      values.push(JSON.stringify(triggerPhrases));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:444:      UPDATE memory_index SET ${updates.join(', ')} WHERE id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:452:    const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:453:    if (embedding && sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:469:      database.prepare('UPDATE memory_index SET embedding_status = ? WHERE id = ?').run('success', id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:517:  const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:523:    if (sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:539:    const result = database.prepare('DELETE FROM memory_index WHERE id = ?').run(id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:582:    SELECT id, spec_folder FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:622:  const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:633:      const row = database.prepare('SELECT spec_folder FROM memory_index WHERE id = ?').get(id) as { spec_folder?: string | null } | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:647:        if (sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:656:        const result = database.prepare('DELETE FROM memory_index WHERE id = ?').run(id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:738:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-mutations.ts:768:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-transition.ts:7:  'session-resume',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-transition.ts:49:    case 'session-resume':\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-transition.ts:50:      return `resumed session inferred ${effectiveMode} mode`;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-transition.ts:72:    activeSignals.push('session-resume');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-transition.ts:144:  sessionTransition?: SessionTransitionTrace,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-transition.ts:146:  if (!sessionTransition) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-transition.ts:176:          sessionTransition,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-transition.ts:187:    console.warn(`[session-transition] Failed to attach session transition trace: ${message}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-expander.ts:28:  token: ['jwt', 'session-key'],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-expander.ts:48:  causal: ['relationship', 'dependency'],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-expander.ts:53:  session: ['conversation', 'context-window'],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-expander.ts:54:  trigger: ['activation', 'match-phrase'],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:14://     - FSRS write-back to memory_index (when trackAccess=true) — DB write\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:15://     - Learned trigger and negative-feedback reads from DB\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:27:// 2c. Graph signals           — N2a momentum + N2b causal depth\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:31:// 6.  Feedback signals        — learned trigger boosts + negative demotions\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:48:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:55:import * as sessionBoost from '../session-boost.js';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:56:import * as causalBoost from '../causal-boost.js';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:295:type GraphContributionKey = 'causalDelta' | 'coActivationDelta' | 'communityDelta' | 'graphSignalDelta';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:312:  const totalDelta = ['causalDelta', 'coActivationDelta', 'communityDelta', 'graphSignalDelta']\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:378:    const causalDelta = resolveGraphContributionValue(graphContribution, 'causalDelta');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:387:        totalDelta: causalDelta\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:398: * a graph-based boost. Extracts contributing causal edges, co-activation edges,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:427:  // Batch-fetch contributing causal edges for all boosted IDs\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:433:      FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:508:    const causalDelta = typeof gc.causalDelta === 'number' ? gc.causalDelta : 0;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:513:    if (causalDelta !== 0) boostFactors.push({ type: 'causal', delta: causalDelta });\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:554:      'SELECT stability, difficulty, review_count FROM memory_index WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:570:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:692: * Apply feedback signals — learned trigger boosts and negative feedback demotions.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:694: * Learned triggers: each memory that matches the query's learned terms receives\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:697: * configured learned-trigger weighting (0.7x).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:705: * @param query   - Original search query (used for learned trigger matching)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:726:  // -- Learned trigger boosts --\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:737:    console.warn(`[stage2-fusion] learned trigger query failed: ${message}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:757:    // Apply learned trigger boost (additive to base score, capped at 1.0)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:802:      FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:939: *   6.  Feedback signals   (all types — learned triggers + negative feedback)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:952:    sessionBoostApplied: 'off',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:953:    causalBoostApplied: 'off',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:959:      causalBoosted: 0,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:978:  // Only for hybrid search type — session attention signals are most meaningful\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:980:  if (isHybrid && config.enableSessionBoost && config.sessionId) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:982:      const { results: boosted, metadata: sbMeta } = sessionBoost.applySessionBoost(\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:984:        config.sessionId\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:987:      // FIX #4: Sync aliases immediately after session boost score mutations\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:990:      metadata.sessionBoostApplied = sbMeta.applied ? 'applied' : 'enabled';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:993:      console.warn(`[stage2-fusion] session boost failed: ${message}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:994:      metadata.sessionBoostApplied = 'failed';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1031:  // Only for hybrid search type — causal graph traversal is seeded from the\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1032:  // Top results after session boost has re-ordered them.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1036:      const { results: boosted, metadata: cbMeta } = causalBoost.applyCausalBoost(results);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1041:          ? withGraphContribution(row, 'causalDelta', next - previous, 'causal', row.injectedByCausalBoost === true)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1044:      // FIX #4: Sync aliases immediately after causal boost score mutations.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1046:      metadata.causalBoostApplied = cbMeta.applied ? 'applied' : 'enabled';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1049:      console.warn(`[stage2-fusion] causal boost failed: ${message}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1050:      metadata.causalBoostApplied = 'failed';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1124:          `SELECT id, memory_state FROM memory_index WHERE id IN (${placeholders})`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1145:  // Additive score adjustments for graph momentum and causal depth.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1273:          sessionScore: typeof row.sessionScore === 'number' ? row.sessionScore : undefined,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1274:          causalScore: typeof row.causalScore === 'number' ? row.causalScore : undefined,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1327:    metadata.graphContribution.causalBoosted = countGraphContribution(results, 'causalDelta');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1337:      metadata.graphContribution.causalBoosted === 0 &&\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1344:        '[stage2-fusion] Graph channel active (bounded_runtime) but zero contribution — causal_edges table may be sparse or candidates lack graph connectivity'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1358:        sessionBoostApplied: metadata.sessionBoostApplied,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage2-fusion.ts:1359:        causalBoostApplied: metadata.causalBoostApplied,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/surrogate-storage.ts:13:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/surrogate-storage.ts:49: *   memory_id      — FK to memory_index.id (unique)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/surrogate-storage.ts:60:    CREATE TABLE IF NOT EXISTS memory_surrogates (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/surrogate-storage.ts:136:      `SELECT name FROM sqlite_master WHERE type='table' AND name='memory_surrogates'`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/surrogate-storage.ts:192:      `SELECT name FROM sqlite_master WHERE type='table' AND name='memory_surrogates'`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:49:- **Schema Management**: sqlite-vec schema v15 (current) with document-type fields, event-based decay and phase-aware columns\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:58:|---> Vector (sqlite-vec)       -> Semantic matches\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:93:| Vector | `vector-index.ts` | Semantic similarity via sqlite-vec through the split vector-index modules |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:95:| FTS5 | `sqlite-fts.ts` | SQLite FTS5 BM25 weighted scoring |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:107:4. Graph signals (N2a + N2b) — momentum + causal depth\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:111:8. Feedback signals — learned trigger boosts (0.7x weight) + negative demotions\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:141:- **MMR Diversity**: Maximal Marginal Relevance reranking reduces near-duplicate results\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:143:- **Co-activation Boost**: Graph-neighbor score propagation via 2-hop causal traversal\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:175:Packet `026-graph-and-context-optimization/010-fts-capability-cascade-floor` freezes the lexical capability contract that packet `002-implement-cache-warning-hooks` now consumes. `memory_search` responses expose:\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:177:- `lexicalPath`: the lane that actually ran for lexical retrieval. Current packet-owned values are `fts5` and `unavailable`. The wider response schema also allows `like`, but packet `010` does not claim that lane for this runtime seam.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:184:| `ok` | FTS5 compile probe passed, `memory_fts` exists, and BM25 ranking executed normally | `fts5` |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:187:| `no_such_module_fts5` | The SQLite engine rejects FTS5 usage with `no such module: fts5` | `unavailable` |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:297:| `causal-boost.ts`          | -      | TypeScript | Causal-neighbor score boosting for graph traversal  |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:298:| `session-boost.ts`         | -      | TypeScript | Session-attention score boosting                    |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:311:| `sqlite-fts.ts`            | -      | TypeScript | SQLite FTS5 BM25 weighted scoring, extracted from hybrid-search for independent use |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:319:| `learned-feedback.ts`      | -      | TypeScript | Selection-based relevance feedback with learned triggers (R11) |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:347:| `session-state.ts`         | -      | TypeScript | Tracks per-session search state and retrieval context |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:348:| `session-transition.ts`    | -      | TypeScript | Handles session-state transition rules during retrieval flows |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:383:   MMR diversity reranking -> Reduce near-duplicate results\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:427:| `SPECKIT_GRAPH_SIGNALS`   | `true`  | Enable N2a momentum + N2b causal depth scoring |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:451:| v3      | Add `related_memories` column to `memory_index`                              |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:456:| v8      | `causal_edges` table with 6 relationship types (REQ-012, T043-T047)          |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:475:// Float32Array -> Buffer conversion for sqlite-vec\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:612:**Purpose**: Create causal edges between memories that share extracted entities across spec folders. Gated via `SPECKIT_ENTITY_LINKING`. Requires R10 (`SPECKIT_AUTO_ENTITIES`) to also be enabled.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:620:| **Edge Creation** | Creates `supports` causal edges between memories sharing entities |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:631:| `createEntityLinks` | `(db, matches) => EntityLinkResult` | Create causal edges for cross-doc matches |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:646:| `caused` | 1.0 | Strongest causal signal |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:650:| `supersedes` | 0.6 | Version supersession |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:656:Top-ranked results seed a 2-hop BFS traversal over causal edges. Discovered neighbors receive a score boost with `SEED_FRACTION=0.25` strength. A `1/sqrt(neighbor_count)` fan-effect divisor (R17) prevents hub nodes from appearing in every co-activation result.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:662:The causal graph is condensed into strongly connected components, then longest-path depth is computed across the resulting DAG. Shortcut edges do not collapse deeper chains; cycle members share one bounded depth layer, and the final depth is normalized by the deepest reachable component chain (`maxDepth`). Score bonus: `normalizedDepth * 0.05` — rewards structurally deep nodes in the causal chain.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:673:Processing steps applied during `memory_save` before a memory is persisted.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:687:| 2. Content Quality | 5-dimension weighted signal density | Dimensions: title (0.25), triggers (0.20), length (0.20), anchors (0.15), metadata (0.20) |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:688:| 3. Semantic Dedup | Cosine similarity against existing memories | Threshold: 0.92 rejects near-duplicates |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:698:| 0.75 - 0.88 | **Conflict** | Supersede: deprecate existing, create `supersedes` causal edge |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:719:`buildBm25DocumentText()` builds the canonical lexical document from title, content, trigger phrases, and folder metadata. `normalizeLexicalQueryTokens()` is shared by BM25 and SQLite FTS flows so lexical matching stays aligned across search channels.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:722:Watcher- and ingest-triggered reindex paths now use the normal synchronous embedding cache-miss flow. Deferred embeddings remain opt-in via `asyncEmbedding` or failure fallback.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:725:`memory_index_scan` now runs the broader post-mutation invalidation hook behavior whenever a scan indexes, updates, or stale-deletes rows.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:737:Typed-degree ranking is cached per database connection and invalidated through `clearDegreeCache()` / `clearDegreeCacheForDb()` after causal-edge and mutation flows, so the degree channel stays in sync with recent graph writes.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:757:Selection tracking writes to a separate `learned_triggers` column (NOT FTS5 index). 10 safeguards: separate column, 30-day TTL, 100+ stop words denylist, rate cap (3 terms/selection, 8 terms/memory), top-3 exclusion, 1-week shadow period, <72h memory exclusion, sprint gate review, rollback mechanism, provenance audit log. Query weight: **0.7x** of organic triggers. Gated via `SPECKIT_LEARN_FROM_SELECTION` (default ON; set to `false` to disable).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:772:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:914:| `better-sqlite3` | SQLite database driver  |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:915:| `sqlite-vec`     | Vector search extension |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:921:| `configs/search-weights.json` | Max triggers per memory, scoring weights (loaded via SERVER_DIR) |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:927:- `../parsing/README.md`: Parsing layer (memory parser, trigger matcher)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/README.md:928:- `../graph/`: Graph signals (N2a momentum, N2b causal depth) and community detection (N2c)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/memory-summaries.ts:7:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/memory-summaries.ts:214:      FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:373:    // generate a basic reformulation to trigger the parallel search path.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:607:    // To avoid a duplicate generateQueryEmbedding() call.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:748:          // Merge variant results, deduplicate by id, preserve first-occurrence order\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:846:            // Merge both result sets, deduplicate by id, baseline-first ordering\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:976:  // P0 fix: sessionId is for dedup/state tracking, NOT a governance boundary.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:977:  // Including it here caused all candidates to be filtered out when memory_context\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:978:  // passed an ephemeral sessionId, because memories don't have session-scoped access.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:1083:  //   4. Deduplicate and merge into candidates.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:1218:  // + deduplicate by ID.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage1-candidate-gen.ts:1240:                `SELECT id, title, spec_folder, file_path, importance_tier, importance_weight, quality_score, created_at, is_archived, context_type, tenant_id, user_id, agent_id, session_id, shared_space_id FROM memory_index WHERE id IN (${placeholders})`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-surrogates.ts:23:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-surrogates.ts:95: * @returns Deduplicated array of extracted aliases.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-surrogates.ts:275: * @returns Array of 2-5 deduplicated surrogate questions.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage4-filter.ts:34:// NOT in Stage 4: session dedup — that happens after cache in the\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage4-filter.ts:343:      // Fix #14 — sessionDeduped removed; dedup is post-cache in main handler\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:4:// Feature catalog: Semantic and lexical search (memory_search)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:10:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:28:type LexicalPath = 'fts5' | 'like' | 'unavailable';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:33:  | 'no_such_module_fts5'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:84:  return toErrorMessage(error).toLowerCase().includes('no such module: fts5');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:114:      `SELECT name FROM sqlite_master WHERE type='table' AND name='memory_fts'`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:127:        fallbackState: 'no_such_module_fts5',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:137:    lexicalPath: 'fts5',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:151: * This gives title matches 10x weight, trigger_phrases 5x, etc.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:159: * const rows = fts5Bm25Search(db, 'memory search', { limit: 10 });\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:162:function fts5Bm25Search(\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:199:    JOIN memory_index m ON m.id = memory_fts.rowid\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:211:    console.warn(`[sqlite-fts] FTS5 unavailable (${capability.fallbackState}); returning empty lexical lane results`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:226:      lexicalPath: 'fts5',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:235:          fallbackState: 'no_such_module_fts5',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:252:    console.warn(`[sqlite-fts] BM25 FTS5 search failed: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:260: * Used as a feature-detect before calling fts5Bm25Search, since FTS5\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:268: *   fts5Bm25Search(db, 'memory');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/sqlite-fts.ts:282:  fts5Bm25Search,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/embedding-expansion.ts:113: *   2. Lowercase and deduplicate.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/embedding-expansion.ts:236:      // D3-fix: trigger_phrases may be string[] (parsed) or string (raw JSON)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/embedding-expansion.ts:237:      const triggers = mem.trigger_phrases;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/embedding-expansion.ts:238:      if (Array.isArray(triggers) && triggers.length > 0) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/embedding-expansion.ts:239:        contents.push(triggers.join(' '));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/embedding-expansion.ts:240:      } else if (typeof triggers === 'string' && triggers.length > 0) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/embedding-expansion.ts:241:        contents.push(triggers);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/embedding-expansion.ts:290: * Useful in Stage 1 for conditional branching without triggering the\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-utils.ts:52:  sessionId?: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-utils.ts:135:  sessionId,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/search-utils.ts:164:    sessionId,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage3-rerank.ts:40:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage3-rerank.ts:539:  // Merge non-chunks + reassembled parent rows, deduplicate by id (prefer highest score),\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/stage3-rerank.ts:616:         FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:5:// Uses dedicated deep-loop-graph.sqlite alongside the memory index DB.\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:8:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:57:  sessionId: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:72:  sessionId: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:86:  sessionId: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:98:  sessionId?: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:107:const DB_FILENAME = 'deep-loop-graph.sqlite';\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:153:  CREATE TABLE IF NOT EXISTS coverage_nodes (\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:157:    session_id TEXT NOT NULL,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:167:  CREATE TABLE IF NOT EXISTS coverage_edges (\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:171:    session_id TEXT NOT NULL,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:181:  CREATE TABLE IF NOT EXISTS coverage_snapshots (\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:185:    session_id TEXT NOT NULL,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:191:    UNIQUE(spec_folder, loop_type, session_id, iteration)\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:194:  CREATE TABLE IF NOT EXISTS schema_version (\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:200:  CREATE INDEX IF NOT EXISTS idx_coverage_session ON coverage_nodes(session_id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:206:  CREATE INDEX IF NOT EXISTS idx_coverage_edge_session ON coverage_edges(session_id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:207:  CREATE INDEX IF NOT EXISTS idx_coverage_snapshot_session ON coverage_snapshots(session_id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:265:  if (ns.sessionId) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:266:    parts.push('session_id = ?');\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:267:    params.push(ns.sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:308:      id, spec_folder, loop_type, session_id, kind, name,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:313:    node.id, node.specFolder, node.loopType, node.sessionId,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:382:      id, spec_folder, loop_type, session_id, source_id, target_id,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:387:    edge.id, edge.specFolder, edge.loopType, edge.sessionId,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:454:      spec_folder, loop_type, session_id, iteration, metrics, node_count, edge_count\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:457:    ON CONFLICT(spec_folder, loop_type, session_id, iteration) DO UPDATE SET\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:462:    snapshot.specFolder, snapshot.loopType, snapshot.sessionId, snapshot.iteration,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:469:export function getLatestSnapshot(specFolder: string, loopType: LoopType, sessionId?: string): CoverageSnapshot | null {\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:471:  if (sessionId) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:474:      WHERE spec_folder = ? AND loop_type = ? AND session_id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:476:    `).get(specFolder, loopType, sessionId) as Record<string, unknown> | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:488:export function getSnapshots(specFolder: string, loopType: LoopType, sessionId?: string): CoverageSnapshot[] {\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:490:  if (sessionId) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:493:      WHERE spec_folder = ? AND loop_type = ? AND session_id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:495:    `).all(specFolder, loopType, sessionId) as Record<string, unknown>[];\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:605:    sessionId: r.session_id as string,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:621:    sessionId: r.session_id as string,\\n.opencode/skills/system-spec-kit/mcp_server/lib/coverage-graph/coverage-graph-db.ts:636:    sessionId: r.session_id as string,\\n.opencode/skills/system-spec-kit/scripts/memory/rebuild-auto-entities.ts:5:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:11:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:67: * Cache is scoped per bound DB instance to avoid repeated sqlite_master probes.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:77:      `SELECT name FROM sqlite_master WHERE type='table' AND name='memory_fts'`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:89: * Find causal edges connected to memories matching the query.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:128:    // Deduplicate by memory id while preserving the highest score.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:150: * FTS5-backed causal edge query. Finds memory IDs via the memory_fts\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:151: * virtual table, then retrieves causal edges connected to those memories.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:163:  // BM25-inspired weights: title(10) highest signal, content(5), triggers(2), folder(1).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:167:  // 3) Collapse duplicate edge hits in SQL (MAX fts_score per edge)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:181:      JOIN causal_edges ce ON ce.source_id = CAST(mm.memory_id AS TEXT)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:185:      JOIN causal_edges ce ON ce.target_id = CAST(mm.memory_id AS TEXT)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:209:  // Numeric IDs matching memory_index.id (INTEGER column) in the hybrid search\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:269:    FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:272:      FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:277:      FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:291:  // Numeric IDs matching memory_index.id (INTEGER column).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:333: * Invalidated via clearDegreeCache() on causal edge mutations.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:336: * Degree scores are cached per-session via this Map and invalidated on edge\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:338: * causal-edges.ts.  Community detection in community-detection.ts uses a\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:348: *   - Invalidation: clearDegreeCache() wipes all entries on causal edge\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:382:    SELECT relation, strength FROM causal_edges WHERE source_id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:384:    SELECT relation, strength FROM causal_edges WHERE target_id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:447:            SELECT source_id AS node_id, relation, strength FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:450:            SELECT target_id AS node_id, relation, strength FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:512:      FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:517:      FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:553: * @param database  - An open better-sqlite3 Database instance\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:569:      `SELECT id FROM memory_index WHERE id IN (${placeholders}) AND importance_tier = 'constitutional'`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:628: * Call this on causal edge mutations (insert, update, delete)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:655: * Creates a graph search function backed by causal_edges only.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:657: * @param database  - An open better-sqlite3 Database instance\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/graph-search-fn.ts:658: * @returns A GraphSearchFn over causal edges\\n.opencode/skills/system-spec-kit/scripts/memory/rank-memories.ts:45:  triggerCount?: number;\\n.opencode/skills/system-spec-kit/scripts/memory/rank-memories.ts:58:  triggerCount: number;\\n.opencode/skills/system-spec-kit/scripts/memory/rank-memories.ts:168:    triggerCount: m.triggerCount ?? 0,\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:6:// historical memory trigger_phrases using the live sanitizer plus bounded\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:21:} from '../lib/trigger-phrase-sanitizer';\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:24:type RemovalReason = 'empty_or_invalid' | 'sanitizer' | 'canonical_duplicate' | 'title_overlap';\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:36:  duplicateOf?: string;\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:85:  triggerPhrases: string[];\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:97:migrate-trigger-phrase-residual — Phase 6 PR-13 residual trigger cleanup\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:100:  node migrate-trigger-phrase-residual.js [options]\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:104:  --apply              Rewrite trigger_phrases in-place with atomic writes\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:386:  const range = locateFrontmatterSectionRange(detection.rawBlock, 'trigger_phrases');\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:391:  const replacementLines = buildYamlArraySection('trigger_phrases', nextTriggers);\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:408:  const triggerSection = detection.sections.find((section) => section.key === 'trigger_phrases');\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:410:  const triggerValue = triggerSection ? parseSectionValue(triggerSection) : undefined;\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:412:  const triggerPhrases = Array.isArray(triggerValue)\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:413:    ? triggerValue.filter((value): value is string => typeof value === 'string')\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:418:    triggerPhrases,\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:423:function resolveTriggerPhrases(triggerPhrases: string[], title: string): TriggerResolution {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:430:  for (const originalPhrase of triggerPhrases) {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:456:        reason: 'canonical_duplicate',\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:457:        duplicateOf: seenCanonicalKeys.get(canonicalKey) || undefined,\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:489:function hashTriggerPhrases(triggerPhrases: string[]): string {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:490:  return crypto.createHash('sha1').update(JSON.stringify(triggerPhrases)).digest('hex');\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:516:    canonical_duplicate: 0,\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:524:      const resolution = resolveTriggerPhrases(parsed.triggerPhrases, parsed.title);\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:526:      const changed = rewrittenContent !== null && JSON.stringify(parsed.triggerPhrases) !== JSON.stringify(resolution.kept);\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:543:        originalCount: parsed.triggerPhrases.length,\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:548:        beforeTriggerPhrases: parsed.triggerPhrases,\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:551:          beforeHash: hashTriggerPhrases(parsed.triggerPhrases),\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-trigger-phrase-residual.ts:615:    console.error(`[migrate-trigger-phrase-residual] ${message}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:10:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:17:  parse_trigger_phrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:31:  sqlite_vec_available as get_sqlite_vec_available,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:71:    row.trigger_phrases = parse_trigger_phrases(row.trigger_phrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:89:    FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:96:    row.trigger_phrases = parse_trigger_phrases(row.trigger_phrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:121:    FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:173:  const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:174:  if (!sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:175:    console.warn('[vector-index] Vector search unavailable - sqlite-vec not loaded');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:265:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:278:    row.trigger_phrases = parse_trigger_phrases(row.trigger_phrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:323:  const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:324:  if (!sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:325:    console.warn('[vector-index] Multi-concept search unavailable - sqlite-vec not loaded');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:377:      FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:400:    row.trigger_phrases = parse_trigger_phrases(row.trigger_phrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:647:    SELECT m.* FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:659:      parse_trigger_phrases(row.trigger_phrases).join(' '),\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:670:        if (parse_trigger_phrases(row.trigger_phrases).join(' ').toLowerCase().includes(term)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:686:    row.trigger_phrases = parse_trigger_phrases(row.trigger_phrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:705: * const results = await vector_search_enriched('sqlite vec mismatch', 10, { specFolder: 'specs/001-demo' });\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:722:  const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:723:  if (query_embedding && sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:788: * const results = await multi_concept_search_enriched(['sqlite', 'vector'], 10, { specFolder: 'specs/001-demo' });\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:818:  const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:819:  if (!sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1064:      SELECT related_memories FROM memory_index WHERE id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1110:    FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1162:    FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1235:      SELECT * FROM memory_index WHERE id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1300:  const sqlite_vec = get_sqlite_vec_available();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1303:    if (!sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1304:      console.warn('[vector-index] find_orphaned_vector_ids: sqlite-vec not available');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1310:        WHERE NOT EXISTS (SELECT 1 FROM memory_index m WHERE m.id = v.rowid)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1322:  if (autoClean && orphaned_vectors > 0 && sqlite_vec) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1336:  // F-08 — Guard vec_memories queries with sqlite_vec availability check.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1337:  // When sqlite-vec is not loaded, the vec_memories table does not exist.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1338:  const missing_vectors = sqlite_vec\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1340:        SELECT COUNT(*) as count FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1346:  const total_memories = (database.prepare('SELECT COUNT(*) as count FROM memory_index').get() as { count: number }).count;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1347:  const total_vectors = sqlite_vec\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1352:    const memories = database.prepare('SELECT id, file_path FROM memory_index').all() as Array<{ id: number; file_path?: string | null }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1374:        FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1377:            SELECT 1 FROM memory_index parent\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-queries.ts:1378:            WHERE parent.id = memory_index.parent_id\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/local-reranker.ts:287:        // Can trigger OOM or context mixing on local LLM inference.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/local-reranker.ts:348:  // If modelLoadPromise is pending when shutdown triggers,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/types.ts:148:  sessionId?: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/types.ts:191: * Executes search channels (FTS5, semantic, trigger, graph, co-activation)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/types.ts:224: * Single point for ALL scoring signals: RRF/RSF, causal boost, co-activation,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/types.ts:240:    sessionBoostApplied: SignalStatus;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/types.ts:241:    causalBoostApplied: SignalStatus;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/types.ts:247:      causalBoosted: number;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/types.ts:288: * State filtering, session dedup, constitutional injection, channel attribution.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:76: * Check if the query exactly matches any known trigger phrase (case-insensitive).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:79: * @param triggerPhrases - Known trigger phrases to match against.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:80: * @returns True when the query matches a trigger phrase exactly.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:82:function hasTriggerMatch(query: string, triggerPhrases: string[]): boolean {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:83:  if (triggerPhrases.length === 0) return false;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:85:  return triggerPhrases.some(tp => tp.trim().toLowerCase() === normalized);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:95: * @param hasTrigger    - Whether a trigger phrase matched.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:130: * - Simple: ≤3 terms OR trigger phrase match\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:131: * - Complex: >8 terms AND no trigger match\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:140: * @param triggerPhrases - Optional array of known trigger phrases.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:145:  triggerPhrases?: string[],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:168:    const triggers = triggerPhrases ?? [];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:169:    const triggerMatch = hasTriggerMatch(query, triggers);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:176:    if (triggerMatch || termCount <= SIMPLE_TERM_THRESHOLD) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:178:    } else if (termCount > COMPLEX_TERM_THRESHOLD && !triggerMatch) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:184:    const confidence = determineConfidence(tier, termCount, triggerMatch, stopWordRatio);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/query-classifier.ts:191:        hasTriggerMatch: triggerMatch,\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:27:import { collectSessionData } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:35:  sessionId: string | null;\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:52:Usage: node generate-context.js [options] <input>\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:56:                    - JSON file mode: node generate-context.js data.json [spec-folder]\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:60:  --stdin           Read structured JSON from stdin (preferred when a caller already has curated session data)\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:62:  --session-id <uuid>  Explicit session ID to attach to the saved memory metadata\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:65:  node generate-context.js /tmp/context-data.json\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:66:  node generate-context.js /tmp/context-data.json specs/001-feature/\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:67:  node generate-context.js /tmp/context-data.json .opencode/specs/001-feature/\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:68:  echo '{\\\"specFolder\\\":\\\"specs/001-feature/\\\"}' | node generate-context.js --stdin\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:69:  node generate-context.js --json '{\\\"specFolder\\\":\\\"specs/001-feature/\\\"}'\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:77:  - The AI has strictly better information about its own session than any DB query can reconstruct.\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:85:JSON Data Format (with preflight/postflight, session/git, and tool/exchange enrichment):\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:386:    sessionId: null,\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:397:  // Extract --session-id <uuid> from argv before positional parsing\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:398:  let sessionId: string | null = null;\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:401:    if (argv[i] === '--session-id') {\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:404:        throw new Error('--session-id requires a non-empty value');\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:406:      sessionId = candidate.trim();\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:415:    return { dataFile: null, specFolderArg: null, collectedData: null, sessionId };\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:420:    return { ...structured, sessionId };\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:435:    sessionId,\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:540:      console.error('[generate-context] Failed to list spec folders:', errMsg);\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:543:  console.error('\\\\nUsage: node generate-context.js [--stdin [spec-folder-name] | --json <json> [spec-folder-name] | <data-file> [spec-folder-name]]\\\\n');\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:570:      sessionId: parsed.sessionId ?? undefined,\\n.opencode/skills/system-spec-kit/scripts/memory/generate-context.ts:574:    const isExpected = /Spec folder not found|No spec folders|specs\\\\/ directory|retry attempts|Expected|Invalid JSON provided|requires a target spec folder|requires an inline JSON string|required a non-empty JSON object|JSON object payload|no longer supported|session-id requires/.test(errMsg);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/artifact-routing.ts:194:    keywords: ['memory', 'context', 'session', 'previous session', 'prior work', 'last time', 'continue', 'resume', 'recover', 'continuation'],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/artifact-routing.ts:195:    patterns: [/memory/i, /(?:previous|prior|last)\\\\s+(?:session|work|context)/i, /what\\\\s+(?:did|was)\\\\s+(?:we|I)\\\\s+(?:do|work\\\\s+on)\\\\s+(?:last|before)/i],\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/missing-child-docs/spec.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:9:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:11:  parse_trigger_phrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:260: * Learns new trigger phrases from a selected result.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:263: * @returns True when trigger phrases were updated.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:270:  let memory: { trigger_phrases?: string | null } | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:273:      'SELECT trigger_phrases FROM memory_index WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:274:    ).get(selected_memory_id) as { trigger_phrases?: string | null } | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:284:    existing = parse_trigger_phrases(memory.trigger_phrases || undefined);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:314:      'UPDATE memory_index SET trigger_phrases = ? WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:359:        UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-aliases.ts:381:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/scripts/memory/cleanup-orphaned-vectors.ts:11:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/scripts/memory/cleanup-orphaned-vectors.ts:12:import { load as loadSqliteVec } from 'sqlite-vec';\\n.opencode/skills/system-spec-kit/scripts/memory/cleanup-orphaned-vectors.ts:79:        LEFT JOIN memory_index m ON h.memory_id = m.id\\n.opencode/skills/system-spec-kit/scripts/memory/cleanup-orphaned-vectors.ts:103:      LEFT JOIN memory_index m ON v.rowid = m.id\\n.opencode/skills/system-spec-kit/scripts/memory/cleanup-orphaned-vectors.ts:132:            WHERE memory_id NOT IN (SELECT id FROM memory_index)\\n.opencode/skills/system-spec-kit/scripts/memory/cleanup-orphaned-vectors.ts:142:            WHERE rowid NOT IN (SELECT id FROM memory_index)\\n.opencode/skills/system-spec-kit/scripts/memory/cleanup-orphaned-vectors.ts:155:    const memoryCount: CountResult = database.prepare('SELECT COUNT(*) as count FROM memory_index').get() as CountResult;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/README.md:34:The `pipeline/` directory implements the core retrieval pipeline behind `memory_search`. Each search request flows through four sequential stages, each with a defined I/O contract and clear responsibility boundary. The pipeline supports hybrid, vector and multi-concept search types with optional deep-mode query expansion, cross-encoder reranking, MMR diversity pruning and MPAB chunk-to-parent reassembly.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/README.md:47:| `stage2-fusion.ts` | Stage 2: Fusion + Signal Integration. The single authoritative scoring point. Applies 9 signal steps in fixed order: session boost, causal boost, co-activation spreading, community co-retrieval, graph signals, FSRS testing effect, intent weights (non-hybrid only, G2 prevention), artifact routing, feedback signals, artifact limiting, anchor metadata and validation metadata scoring. |\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/README.md:64:      |  session/causal/co-activation boosts, intent weights,\\n.opencode/skills/system-spec-kit/mcp_server/lib/chunking/anchor-chunker.ts:60:/** Minimum file size (chars) to trigger chunking */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:4:// REQ-D5-006: Retrieval session state for cross-turn context\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:6:// PURPOSE: Track per-session retrieval state to enable:\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:8:// 2. Goal-aware refinement — boost results aligned with session goal\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:9:// 3. Stateful session tracking — questions, anchors, seen items\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:21:/** Maximum concurrent sessions before LRU eviction. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:32:/** Session state for a single retrieval session. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:34:  sessionId: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:43:/** Minimal result shape for session operations. */\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:53:  deduplicated: boolean;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:68: * In-memory session state manager with TTL-based cleanup and LRU eviction.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:71: * persisted to disk or database. This is intentional: session state is\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:75:  private sessions: Map<string, SessionState> = new Map();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:78:   * Get an existing session or create a new one.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:80:   * @param sessionId - Unique session identifier.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:81:   * @returns The session state (existing or newly created).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:83:  getOrCreate(sessionId: string): SessionState {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:86:    const existing = this.sessions.get(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:93:    if (this.sessions.size >= MAX_SESSIONS) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:98:    const session: SessionState = {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:99:      sessionId,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:108:    this.sessions.set(sessionId, session);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:109:    return session;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:113:   * Update the active retrieval goal for a session.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:115:   * @param sessionId - Session to update.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:118:  updateGoal(sessionId: string, goal: string | null): void {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:119:    const session = this.getOrCreate(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:120:    session.activeGoal = goal;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:121:    session.updatedAt = Date.now();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:125:   * Mark result IDs as seen in a session (accumulates across calls).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:127:   * @param sessionId - Session to update.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:130:  markSeen(sessionId: string, resultIds: Array<number | string>): void {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:131:    const session = this.getOrCreate(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:133:      session.seenResultIds.add(String(id));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:135:    session.updatedAt = Date.now();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:139:   * Add an unresolved question to the session.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:141:   * @param sessionId - Session to update.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:144:  addQuestion(sessionId: string, question: string): void {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:145:    const session = this.getOrCreate(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:146:    session.openQuestions.push(question);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:147:    session.updatedAt = Date.now();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:151:   * Set preferred anchors for the session.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:153:   * @param sessionId - Session to update.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:156:  setAnchors(sessionId: string, anchors: string[]): void {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:157:    const session = this.getOrCreate(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:158:    session.preferredAnchors = [...anchors];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:159:    session.updatedAt = Date.now();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:163:   * Remove a session entirely.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:165:   * @param sessionId - Session to remove.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:167:  clear(sessionId: string): void {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:168:    this.sessions.delete(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:172:   * Get the current number of active sessions.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:176:    return this.sessions.size;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:180:   * Clear all sessions. Useful for testing.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:183:    this.sessions.clear();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:189:   * Evict sessions that have exceeded the inactivity TTL.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:193:    for (const [id, session] of this.sessions) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:194:      if (now - session.updatedAt > SESSION_TTL_MS) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:195:        this.sessions.delete(id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:201:   * Evict the least-recently-updated session (LRU).\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:202:   * Called when session count reaches MAX_SESSIONS.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:208:    for (const [id, session] of this.sessions) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:209:      if (session.updatedAt < oldestTime) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:210:        oldestTime = session.updatedAt;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:216:      this.sessions.delete(oldestId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:234: * Deprioritize results whose IDs appear in the session's seenResultIds set.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:237: * @param results - Result set to deduplicate.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:238: * @param sessionId - Session ID for seen-result lookup.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:241:function deduplicateResults(\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:243:  sessionId: string,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:245:  const defaultMeta: DedupMetadata = { deduplicated: false, seenCount: 0, deprioritizedCount: 0 };\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:255:  const session = manager.getOrCreate(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:256:  if (session.seenResultIds.size === 0) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:264:    if (session.seenResultIds.has(resultIdStr)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:270:        _deduplicated: true,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:286:      deduplicated: deprioritizedCount > 0,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:287:      seenCount: session.seenResultIds.size,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:324: * Boost results that align with the session's active goal.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:328: * @param sessionId - Session ID for goal lookup.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:333:  sessionId: string,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:345:  const session = manager.getOrCreate(sessionId);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:346:  if (!session.activeGoal) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:350:  const goal = session.activeGoal;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/session-state.ts:412:  deduplicateResults,\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:28:} from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:43:  triggerPhrases: number;\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:52:export type { QualityFlag, QualityDimensionScore, QualityInsufficiencySummary, QualityScoreResult } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:129:  triggerPhrases: 10,    // >= 4 trigger phrases extracted\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:130:  keyTopics: 5,          // >= 1 key topic present\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:142:  triggerPhrases: string[],\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:153:    triggerPhrases: 0,\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:162:  if (triggerPhrases.length >= 8) {\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:163:    breakdown.triggerPhrases = 20;\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:164:  } else if (triggerPhrases.length >= 4) {\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:165:    breakdown.triggerPhrases = 15;\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:166:  } else if (triggerPhrases.length > 0) {\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:167:    breakdown.triggerPhrases = 10;\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:169:    qualityFlags.add('missing_trigger_phrases');\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:170:    warnings.push('No trigger phrases extracted — memory will not surface via trigger matching');\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:173:  // 2. Key topics (0-15 points)\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:181:    qualityFlags.add('missing_key_topics');\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:182:    warnings.push('No key topics extracted — memory searchability reduced');\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:186:  // This rewards memory files that remain self-explanatory in future sessions.\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:249:    qualityFlags.add('duplicate_observations');\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:251:    warnings.push('No observations captured — memory lacks concrete session evidence');\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:262:      qualityFlags.add('duplicate_observations');\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:263:      warnings.push(`High observation duplication: ${titles.length - uniqueTitles.size} duplicate titles`);\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:266:      qualityFlags.add('duplicate_observations');\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:278:    hasTriggers: breakdown.triggerPhrases >= JSON_FLOOR_THRESHOLDS.triggerPhrases,\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:331:    { id: 'trigger_phrases', score01: breakdown.triggerPhrases / 20, score100: breakdown.triggerPhrases, maxScore100: 20, passed: triggerPhrases.length > 0 },\\n.opencode/skills/system-spec-kit/scripts/core/quality-scorer.ts:332:    { id: 'key_topics', score01: breakdown.keyTopics / 15, score100: breakdown.keyTopics, maxScore100: 15, passed: keyTopics.length > 0 },\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:12:import { sanitizeTriggerPhrase } from '../lib/trigger-phrase-sanitizer';\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:77:  triggers: string[];\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:485:  const triggers = parseFrontmatterArray(content, 'trigger_phrases');\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:493:    triggers,\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:530:  if (parsed.triggers.some((phrase) => sanitizeTriggerPhrase(phrase).reason === 'path_fragment')) {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:531:    signals.push('path_fragment_trigger');\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:551:function detectD3(triggers: string[]): boolean {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:552:  return triggers.some((phrase) => {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:571:function detectD6(triggers: string[]): boolean {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:573:  for (const trigger of triggers) {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:574:    const normalized = trigger.trim().toLowerCase();\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:618:  if (detectD3(parsed.triggers)) {\\n.opencode/skills/system-spec-kit/scripts/memory/migrate-historical-json-mode-memories.ts:627:  if (detectD6(parsed.triggers)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/orchestrator.ts:12:// Input:  PipelineConfig (query, embedding, limits, flags, intent, session)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/orchestrator.ts:101:        sessionBoostApplied: 'failed' as SignalStatus,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/pipeline/orchestrator.ts:102:        causalBoostApplied: 'failed' as SignalStatus,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/folder-discovery.ts:344: * - Deduplicates\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/folder-discovery.ts:347: * @returns Deduplicated array of significant lowercase keywords.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/folder-discovery.ts:707:    // Validate ALL PerFolderDescription fields — type mismatch triggers spec.md fallback.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/folder-discovery.ts:723:      return null; // Structurally invalid — triggers spec.md fallback\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:4:// Feature catalog: BM25 trigger phrase re-index gate\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:5:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:31:  trigger_phrases?: string | string[] | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:51: * These weights are consumed by the FTS5 path in sqlite-fts.ts,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:55: * trigger_phrases:  5.0 — curated keywords next most important\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:63:  trigger_phrases: BM25_FTS5_WEIGHTS[1],\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:119:  // Only deduplicate doubled consonants when a suffix was actually removed.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:124:  // Are identical consonants and deduplicate.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:181:function normalizeTriggerPhrasesForBM25(triggerPhrases: string | string[] | null | undefined): string {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:182:  if (Array.isArray(triggerPhrases)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:183:    return triggerPhrases\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:188:  if (typeof triggerPhrases !== 'string') {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:192:  const trimmed = triggerPhrases.trim();\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:222:  const triggerPhrases = normalizeTriggerPhrasesForBM25(row.trigger_phrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:223:  if (triggerPhrases) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:224:    textParts.push(triggerPhrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:380:        `SELECT id, title, content_text, trigger_phrases, file_path\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:381:         FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:388:        trigger_phrases: string | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/bm25-index.ts:430:         FROM memory_index\\n.opencode/skills/system-spec-kit/scripts/tests/test-export-contracts.js:112:  // Deduplicate noisy duplicates from multiple export forms\\n.opencode/skills/system-spec-kit/scripts/tests/test-export-contracts.js:167:  { file: 'causal-graph.ts', minHandleFuncs: 3 },\\n.opencode/skills/system-spec-kit/scripts/tests/test-export-contracts.js:174:  { file: 'memory-triggers.ts', minHandleFuncs: 1 },\\n.opencode/skills/system-spec-kit/scripts/tests/test-export-contracts.js:175:  { file: 'session-learning.ts', minHandleFuncs: 3 },\\n.opencode/skills/system-spec-kit/scripts/tests/test-export-contracts.js:331:    // Deduplicate\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/llm-reformulation.ts:24:import { fts5Bm25Search } from './sqlite-fts.js';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/llm-reformulation.ts:110:    const rawResults = fts5Bm25Search(db, query, { limit });\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/llm-reformulation.ts:389: * Deduplicated fanout: combines the original query with the LLM-produced\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/llm-reformulation.ts:394: * @param queries - Array of query strings to deduplicate.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/llm-reformulation.ts:395: * @returns Deduplicated array, original first.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:7:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:51:const REQUIRED_TABLES: readonly string[] = ['memory_index', 'schema_version'];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:53:  memory_index: [\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:74:  'session_id',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:122:  ON memory_index(\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:129:    session_id,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:137:  ON memory_index(spec_folder, canonical_file_path, id DESC)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:143:    \\\"SELECT 1 AS present FROM sqlite_master WHERE type='table' AND name = ?\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:151:    \\\"SELECT 1 AS present FROM sqlite_master WHERE type='index' AND name = ?\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:165:    \\\"SELECT sql FROM sqlite_master WHERE type='table' AND name = ?\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:217:  const tableSql = getTableSql(database, 'memory_index');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:247:    CREATE TABLE IF NOT EXISTS memory_conflicts (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:262:      FOREIGN KEY (existing_memory_id) REFERENCES memory_index(id) ON DELETE SET NULL\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:409:// Added causal_edges table for Causal Memory Graph (REQ-012, T043-T047)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:419:// V18: the rollout — weight_history table + causal_edges provenance + encoding_intent column\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:422:// V21: Add learned_triggers column (R11 learned feedback)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:424:// V23: One-time spec_folder re-canonicalization + session_state migration\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:425:// V24: Add trigger-cache source and temporal contiguity indexes\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:458:        database.exec('ALTER TABLE memory_index ADD COLUMN related_memories TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:461:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:470:        { name: 'stability', sql: 'ALTER TABLE memory_index ADD COLUMN stability REAL DEFAULT 1.0' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:471:        { name: 'difficulty', sql: 'ALTER TABLE memory_index ADD COLUMN difficulty REAL DEFAULT 5.0' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:472:        { name: 'last_review', sql: 'ALTER TABLE memory_index ADD COLUMN last_review TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:473:        { name: 'review_count', sql: 'ALTER TABLE memory_index ADD COLUMN review_count INTEGER DEFAULT 0' }\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:481:          if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:495:        'CREATE INDEX IF NOT EXISTS idx_stability ON memory_index(stability DESC)',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:501:        'CREATE INDEX IF NOT EXISTS idx_last_review ON memory_index(last_review)',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:507:        'CREATE INDEX IF NOT EXISTS idx_fsrs_retrieval ON memory_index(stability, difficulty, last_review)',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:516:          ALTER TABLE memory_index ADD COLUMN memory_type TEXT DEFAULT 'declarative'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:524:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:530:        database.exec('ALTER TABLE memory_index ADD COLUMN half_life_days REAL');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:533:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:540:          ALTER TABLE memory_index ADD COLUMN type_inference_source TEXT DEFAULT 'default'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:547:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:553:        database.exec('CREATE INDEX IF NOT EXISTS idx_memory_type ON memory_index(memory_type)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:554:        database.exec('CREATE INDEX IF NOT EXISTS idx_memory_type_decay ON memory_index(memory_type, half_life_days)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:565:        database.exec('ALTER TABLE memory_index ADD COLUMN file_mtime_ms INTEGER');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:568:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:574:        database.exec('CREATE INDEX IF NOT EXISTS idx_file_mtime ON memory_index(file_mtime_ms)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:585:          ON memory_index(embedding_status)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:596:          ON memory_index(spec_folder, embedding_status, importance_tier)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:605:      // V7 -> v8: Create causal_edges table for Causal Memory Graph (REQ-012, T043-T047)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:608:          CREATE TABLE IF NOT EXISTS causal_edges (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:623:        logger.info('Migration v8: Created causal_edges table');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:626:          console.warn('[VectorIndex] Migration v8 warning (causal_edges):', get_error_message(e));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:631:        database.exec('CREATE INDEX IF NOT EXISTS idx_causal_source ON causal_edges(source_id)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:632:        database.exec('CREATE INDEX IF NOT EXISTS idx_causal_target ON causal_edges(target_id)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:633:        database.exec('CREATE INDEX IF NOT EXISTS idx_causal_relation ON causal_edges(relation)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:634:        database.exec('CREATE INDEX IF NOT EXISTS idx_causal_strength ON causal_edges(strength DESC)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:635:        logger.info('Migration v8: Created causal_edges indexes');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:644:          CREATE TABLE IF NOT EXISTS memory_corrections (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:660:            FOREIGN KEY (original_memory_id) REFERENCES memory_index(id) ON DELETE CASCADE,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:661:            FOREIGN KEY (correction_memory_id) REFERENCES memory_index(id) ON DELETE SET NULL\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:693:        database.exec(\\\"ALTER TABLE memory_index ADD COLUMN document_type TEXT DEFAULT 'memory'\\\");\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:696:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:702:        database.exec('ALTER TABLE memory_index ADD COLUMN spec_level INTEGER');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:705:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:713:        'CREATE INDEX IF NOT EXISTS idx_document_type ON memory_index(document_type)',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:719:        'CREATE INDEX IF NOT EXISTS idx_doc_type_folder ON memory_index(document_type, spec_folder)',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:726:          UPDATE memory_index SET document_type = 'constitutional'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:738:        database.exec('ALTER TABLE memory_index ADD COLUMN content_text TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:741:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:753:          CREATE VIRTUAL TABLE memory_fts USING fts5(\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:754:            title, trigger_phrases, file_path, content_text,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:755:            content='memory_index', content_rowid='id'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:760:          CREATE TRIGGER memory_fts_insert AFTER INSERT ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:761:            INSERT INTO memory_fts(rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:762:            VALUES (new.id, new.title, new.trigger_phrases, new.file_path, new.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:766:          CREATE TRIGGER memory_fts_update AFTER UPDATE ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:767:            INSERT INTO memory_fts(memory_fts, rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:768:            VALUES ('delete', old.id, old.title, old.trigger_phrases, old.file_path, old.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:769:            INSERT INTO memory_fts(rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:770:            VALUES (new.id, new.title, new.trigger_phrases, new.file_path, new.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:774:          CREATE TRIGGER memory_fts_delete AFTER DELETE ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:775:            INSERT INTO memory_fts(memory_fts, rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:776:            VALUES ('delete', old.id, old.title, old.trigger_phrases, old.file_path, old.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:786:          'SELECT id, file_path FROM memory_index WHERE content_text IS NULL'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:792:          'UPDATE memory_index SET content_text = ? WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:834:        database.exec('ALTER TABLE memory_index ADD COLUMN quality_score REAL DEFAULT 0');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:837:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:843:        database.exec('ALTER TABLE memory_index ADD COLUMN quality_flags TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:846:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:854:        'CREATE INDEX IF NOT EXISTS idx_quality_score ON memory_index(quality_score)',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:862:        database.exec('ALTER TABLE memory_index ADD COLUMN parent_id INTEGER REFERENCES memory_index(id) ON DELETE CASCADE');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:865:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:871:        database.exec('ALTER TABLE memory_index ADD COLUMN chunk_index INTEGER');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:874:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:880:        database.exec('ALTER TABLE memory_index ADD COLUMN chunk_label TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:883:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:889:        database.exec('CREATE INDEX IF NOT EXISTS idx_parent_id ON memory_index(parent_id)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:890:        database.exec('CREATE INDEX IF NOT EXISTS idx_parent_chunk ON memory_index(parent_id, chunk_index)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:899:        database.exec('ALTER TABLE memory_index ADD COLUMN interference_score REAL DEFAULT 0');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:902:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:908:        database.exec('CREATE INDEX IF NOT EXISTS idx_interference_score ON memory_index(interference_score)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:918:          CREATE TABLE IF NOT EXISTS weight_history (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:920:            edge_id INTEGER NOT NULL REFERENCES causal_edges(id) ON DELETE CASCADE,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:938:        database.exec(\\\"ALTER TABLE causal_edges ADD COLUMN created_by TEXT DEFAULT 'manual'\\\");\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:939:        logger.info('Migration v18: Added created_by column to causal_edges');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:941:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:946:        database.exec('ALTER TABLE causal_edges ADD COLUMN last_accessed TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:947:        logger.info('Migration v18: Added last_accessed column to causal_edges');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:949:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:955:        database.exec(\\\"ALTER TABLE memory_index ADD COLUMN encoding_intent TEXT DEFAULT 'document'\\\");\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:956:        database.exec('CREATE INDEX IF NOT EXISTS idx_encoding_intent ON memory_index(encoding_intent)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:957:        logger.info('Migration v18: Added encoding_intent column to memory_index (R16)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:959:        if (!get_error_message(e).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:968:          CREATE TABLE IF NOT EXISTS degree_snapshots (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:987:          CREATE TABLE IF NOT EXISTS community_assignments (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1007:          CREATE TABLE IF NOT EXISTS memory_summaries (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1027:          CREATE TABLE IF NOT EXISTS memory_entities (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1049:          CREATE TABLE IF NOT EXISTS entity_catalog (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1068:  // V20 -> v21: Add learned_triggers column (R11 learned feedback)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1071:      database.exec(\\\"ALTER TABLE memory_index ADD COLUMN learned_triggers TEXT DEFAULT '[]'\\\");\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1072:      logger.info('Migration v21: Added learned_triggers column (R11)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1074:      if (!get_error_message(e).includes('duplicate column') && !get_error_message(e).includes('already exists')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1075:        console.warn('[VectorIndex] Migration v21 warning (learned_triggers):', get_error_message(e));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1094:      SELECT id, file_path, spec_folder FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1118:        'UPDATE memory_index SET spec_folder = ? WHERE id = ? AND spec_folder = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1126:    // P1-3 fix: Migrate session_state.spec_folder using old→new mapping\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1134:      'idx_trigger_cache_source',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1135:      `CREATE INDEX IF NOT EXISTS idx_trigger_cache_source\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1136:       ON memory_index(embedding_status, id)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1138:         AND trigger_phrases IS NOT NULL\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1139:         AND trigger_phrases != '[]'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1140:         AND trigger_phrases != ''`,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1146:      'CREATE INDEX IF NOT EXISTS idx_spec_folder_created_at ON memory_index(spec_folder, created_at DESC)',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1149:    logger.info('Migration v24: Created trigger-cache source and temporal contiguity indexes');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1156:      UPDATE memory_index SET context_type = 'planning' WHERE context_type = 'decision'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1159:      UPDATE memory_index SET context_type = 'general' WHERE context_type = 'discovery'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1166:      `SELECT COUNT(*) as cnt FROM pragma_table_info('memory_index') WHERE name = 'context_type'`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1172:        `SELECT sql FROM sqlite_master WHERE type='table' AND name='memory_index'`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1178:        const columns = database.prepare(`PRAGMA table_info(memory_index)`).all() as Array<{ name: string }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1183:          `SELECT sql FROM sqlite_master WHERE type='index' AND tbl_name='memory_index' AND sql IS NOT NULL`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1187:        database.exec(`ALTER TABLE memory_index RENAME TO memory_index_v24_backup`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1189:        // Get the CREATE TABLE statement and replace the CHECK constraint\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1206:        database.exec(`INSERT INTO memory_index SELECT ${columnNames} FROM memory_index_v24_backup`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1207:        database.exec(`DROP TABLE memory_index_v24_backup`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1218:        logger.info('Migration v25: Rebuilt memory_index with strict CHECK(context_type) — canonical types only');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1251:    CREATE TABLE IF NOT EXISTS schema_version (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1293:    CREATE TABLE IF NOT EXISTS memory_lineage (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1311:    \\\"SELECT sql FROM sqlite_master WHERE type='table' AND name='memory_lineage'\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1316:      CREATE TABLE memory_lineage (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1357:    CREATE TABLE IF NOT EXISTS active_memory_projection (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1366:    \\\"SELECT sql FROM sqlite_master WHERE type='table' AND name='active_memory_projection'\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1371:      CREATE TABLE active_memory_projection (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1407:  if (!hasTable(database, 'memory_index')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1411:  const columnNames = getTableColumns(database, 'memory_index');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1414:    { name: 'tenant_id', sql: 'ALTER TABLE memory_index ADD COLUMN tenant_id TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1415:    { name: 'user_id', sql: 'ALTER TABLE memory_index ADD COLUMN user_id TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1416:    { name: 'agent_id', sql: 'ALTER TABLE memory_index ADD COLUMN agent_id TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1417:    { name: 'shared_space_id', sql: 'ALTER TABLE memory_index ADD COLUMN shared_space_id TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1418:    { name: 'provenance_source', sql: 'ALTER TABLE memory_index ADD COLUMN provenance_source TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1419:    { name: 'provenance_actor', sql: 'ALTER TABLE memory_index ADD COLUMN provenance_actor TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1420:    { name: 'governed_at', sql: 'ALTER TABLE memory_index ADD COLUMN governed_at TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1421:    { name: 'retention_policy', sql: \\\"ALTER TABLE memory_index ADD COLUMN retention_policy TEXT DEFAULT 'keep'\\\" },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1422:    { name: 'delete_after', sql: 'ALTER TABLE memory_index ADD COLUMN delete_after TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1423:    { name: 'governance_metadata', sql: 'ALTER TABLE memory_index ADD COLUMN governance_metadata TEXT' },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1440:    CREATE TABLE IF NOT EXISTS governance_audit (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1449:      session_id TEXT,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1461:      ON governance_audit(tenant_id, user_id, agent_id, session_id, shared_space_id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1464:  if (hasTable(database, 'memory_index')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1467:        ON memory_index(tenant_id, user_id, agent_id, session_id, shared_space_id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1469:        ON memory_index(delete_after);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1478:    CREATE TABLE IF NOT EXISTS shared_spaces (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1492:    CREATE TABLE IF NOT EXISTS shared_space_members (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1504:    CREATE TABLE IF NOT EXISTS shared_space_conflicts (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1539:    if (hasTable(database, 'memory_index')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1540:      const existingColumns = new Set(getTableColumns(database, 'memory_index'));\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1543:        missingColumns.memory_index = absentColumns;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1546:        constraintMismatches.push('memory_index.importance_tier CHECK constraint is missing constitutional support');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1549:      missingColumns.memory_index = [...REQUIRED_MEMORY_INDEX_COLUMNS];\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1601:      missingColumns: { memory_index: [...REQUIRED_MEMORY_INDEX_COLUMNS] },\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1682:  const columns = database.prepare(`PRAGMA table_info(memory_index)`).all() as Array<{ name: string }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1687:      database.exec(`ALTER TABLE memory_index ADD COLUMN confidence REAL DEFAULT 0.5`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1690:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1699:      database.exec(`ALTER TABLE memory_index ADD COLUMN validation_count INTEGER DEFAULT 0`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1702:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1711:      database.exec(`ALTER TABLE memory_index ADD COLUMN importance_tier TEXT DEFAULT 'normal'`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1714:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1720:      database.exec(`CREATE INDEX IF NOT EXISTS idx_importance_tier ON memory_index(importance_tier)`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1731:      database.exec(`ALTER TABLE memory_index ADD COLUMN context_type TEXT DEFAULT 'general'`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1734:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1743:      database.exec(`ALTER TABLE memory_index ADD COLUMN content_hash TEXT`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1746:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1755:      database.exec(`ALTER TABLE memory_index ADD COLUMN channel TEXT DEFAULT 'default'`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1758:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1765:  if (!column_names.includes('session_id')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1767:      database.exec(`ALTER TABLE memory_index ADD COLUMN session_id TEXT`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1768:      console.warn('[vector-index] Migration: Added session_id column');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1770:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1773:      logDuplicateColumnMigrationSkip('session_id', error);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1779:      database.exec(`ALTER TABLE memory_index ADD COLUMN base_importance REAL DEFAULT 0.5`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1782:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1791:      database.exec(`ALTER TABLE memory_index ADD COLUMN decay_half_life_days REAL DEFAULT 90.0`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1794:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1803:      database.exec(`ALTER TABLE memory_index ADD COLUMN is_pinned INTEGER DEFAULT 0`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1806:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1815:      database.exec(`ALTER TABLE memory_index ADD COLUMN last_accessed INTEGER DEFAULT 0`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1818:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1827:      database.exec(`ALTER TABLE memory_index ADD COLUMN expires_at DATETIME`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1830:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1839:      database.exec(`ALTER TABLE memory_index ADD COLUMN related_memories TEXT`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1842:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1851:      database.exec(`ALTER TABLE memory_index ADD COLUMN stability REAL DEFAULT 1.0`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1854:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1863:      database.exec(`ALTER TABLE memory_index ADD COLUMN difficulty REAL DEFAULT 5.0`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1866:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1875:      database.exec(`ALTER TABLE memory_index ADD COLUMN last_review TEXT`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1878:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1887:      database.exec(`ALTER TABLE memory_index ADD COLUMN review_count INTEGER DEFAULT 0`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1890:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1904:  const columns = database.prepare('PRAGMA table_info(memory_index)').all() as Array<{ name: string }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1909:      database.exec('ALTER TABLE memory_index ADD COLUMN canonical_file_path TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1912:      if (!get_error_message(error).includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1920:    database.exec('CREATE INDEX IF NOT EXISTS idx_canonical_file_path ON memory_index(canonical_file_path)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1921:    database.exec('CREATE INDEX IF NOT EXISTS idx_spec_canonical_path ON memory_index(spec_folder, canonical_file_path)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1934:    FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1943:    UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1974:  const tableSql = getTableSql(database, 'memory_index');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1982:      SELECT COUNT(*) as count FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1988:        ? `Legacy memory_index importance_tier constraint is missing constitutional support and blocks ${constitutionalCount} constitutional memories`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:1989:        : 'Legacy memory_index importance_tier constraint is missing constitutional support and requires a table rebuild before startup can continue'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2002:    database.exec(`CREATE INDEX IF NOT EXISTS idx_file_path ON memory_index(file_path)`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2013:    database.exec('CREATE INDEX IF NOT EXISTS idx_canonical_file_path ON memory_index(canonical_file_path)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2014:    database.exec('CREATE INDEX IF NOT EXISTS idx_spec_canonical_path ON memory_index(spec_folder, canonical_file_path)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2030:    database.exec(`CREATE INDEX IF NOT EXISTS idx_content_hash ON memory_index(content_hash)`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2047:    database.exec(`CREATE INDEX IF NOT EXISTS idx_last_accessed ON memory_index(last_accessed DESC)`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2058:    database.exec(`CREATE INDEX IF NOT EXISTS idx_importance_tier ON memory_index(importance_tier)`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2070:      CREATE INDEX IF NOT EXISTS idx_trigger_cache_source\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2071:      ON memory_index(embedding_status, id)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2073:        AND trigger_phrases IS NOT NULL\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2074:        AND trigger_phrases != '[]'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2075:        AND trigger_phrases != ''\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2077:    logger.info('Created idx_trigger_cache_source index');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2079:    console.warn('[vector-index] Failed to create idx_trigger_cache_source', {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2081:      index: 'idx_trigger_cache_source',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2087:    database.exec('CREATE INDEX IF NOT EXISTS idx_spec_folder_created_at ON memory_index(spec_folder, created_at DESC)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2109: * Ensure companion tables exist alongside memory_index.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2113:    CREATE TABLE IF NOT EXISTS memory_history (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2127:    \\\"SELECT sql FROM sqlite_master WHERE type='table' AND name='memory_history'\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2132:      CREATE TABLE memory_history (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2148:    CREATE TABLE IF NOT EXISTS checkpoints (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2172: * Migrate session_state.spec_folder values using the old→new mapping\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2173: * produced by the memory_index re-canonicalization in migration v23.\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2179:  if (!hasTable(database, 'session_state')) return;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2190:    'UPDATE session_state SET spec_folder = ? WHERE session_id = ? AND spec_folder = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2193:  const sessionRows = database.prepare(\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2194:    `SELECT session_id, spec_folder FROM session_state WHERE spec_folder IS NOT NULL`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2195:  ).all() as Array<{ session_id: string; spec_folder: string }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2198:  for (const row of sessionRows) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2202:      updateStmt.run(canonical, row.session_id, row.spec_folder);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2205:      logger.warn(`Migration v23: Ambiguous session_state mapping for \\\"${row.spec_folder}\\\". Skipping.`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2210:    logger.info(`Migration v23: Updated spec_folder for ${updated} session_state rows`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2266:  options: { sqlite_vec_available: boolean; get_embedding_dim: () => number }\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2268:  const { sqlite_vec_available, get_embedding_dim } = options;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2271:    SELECT name FROM sqlite_master\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2272:    WHERE type='table' AND name='memory_index'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2297:  // Create memory_index table (metadata only)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2299:    CREATE TABLE memory_index (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2306:      trigger_phrases TEXT,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2325:      session_id TEXT,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2351:      parent_id INTEGER REFERENCES memory_index(id) ON DELETE CASCADE,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2355:      learned_triggers TEXT DEFAULT '[]',\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2361:  // Create vec_memories virtual table (only if sqlite-vec is available)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2362:  if (sqlite_vec_available) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2370:      CREATE TABLE IF NOT EXISTS vec_metadata (\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2384:    CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2385:      title, trigger_phrases, file_path, content_text,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2386:      content='memory_index', content_rowid='id'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2390:  // Create FTS5 sync triggers (includes content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2392:    CREATE TRIGGER IF NOT EXISTS memory_fts_insert AFTER INSERT ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2393:      INSERT INTO memory_fts(rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2394:      VALUES (new.id, new.title, new.trigger_phrases, new.file_path, new.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2399:    CREATE TRIGGER IF NOT EXISTS memory_fts_update AFTER UPDATE ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2400:      INSERT INTO memory_fts(memory_fts, rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2401:      VALUES ('delete', old.id, old.title, old.trigger_phrases, old.file_path, old.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2402:      INSERT INTO memory_fts(rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2403:      VALUES (new.id, new.title, new.trigger_phrases, new.file_path, new.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2408:    CREATE TRIGGER IF NOT EXISTS memory_fts_delete AFTER DELETE ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2409:      INSERT INTO memory_fts(memory_fts, rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2410:      VALUES ('delete', old.id, old.title, old.trigger_phrases, old.file_path, old.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2423:  // Create memory_index-specific indexes (not IF NOT EXISTS because this is a fresh DB)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2425:    CREATE INDEX idx_spec_folder ON memory_index(spec_folder);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2426:    CREATE INDEX idx_created_at ON memory_index(created_at);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2427:    CREATE INDEX idx_importance ON memory_index(importance_weight DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2428:    CREATE INDEX idx_embedding_status ON memory_index(embedding_status);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2429:    CREATE INDEX idx_retry_eligible ON memory_index(embedding_status, retry_count, last_retry_at)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2433:    CREATE INDEX IF NOT EXISTS idx_importance_tier ON memory_index(importance_tier);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2434:    CREATE INDEX IF NOT EXISTS idx_access_importance ON memory_index(access_count DESC, importance_weight DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2435:    CREATE INDEX IF NOT EXISTS idx_memories_scope ON memory_index(spec_folder, session_id, context_type);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2436:    CREATE INDEX IF NOT EXISTS idx_memories_governed_scope ON memory_index(tenant_id, user_id, agent_id, session_id, shared_space_id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2437:    CREATE INDEX IF NOT EXISTS idx_channel ON memory_index(channel);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2438:    CREATE INDEX IF NOT EXISTS idx_spec_folder_created_at ON memory_index(spec_folder, created_at DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2439:    CREATE INDEX IF NOT EXISTS idx_trigger_cache_source\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2440:      ON memory_index(embedding_status, id)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2442:        AND trigger_phrases IS NOT NULL\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2443:        AND trigger_phrases != '[]'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2444:        AND trigger_phrases != '';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2448:    CREATE INDEX IF NOT EXISTS idx_file_path ON memory_index(file_path);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2449:    CREATE INDEX IF NOT EXISTS idx_canonical_file_path ON memory_index(canonical_file_path);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2450:    CREATE INDEX IF NOT EXISTS idx_spec_canonical_path ON memory_index(spec_folder, canonical_file_path);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2451:    CREATE INDEX IF NOT EXISTS idx_save_parent_canonical_path ON memory_index(spec_folder, canonical_file_path, id DESC)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2453:    CREATE INDEX IF NOT EXISTS idx_content_hash ON memory_index(content_hash);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2454:    CREATE INDEX IF NOT EXISTS idx_save_parent_content_hash_scope ON memory_index(\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2461:      session_id,\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2466:    CREATE INDEX IF NOT EXISTS idx_last_accessed ON memory_index(last_accessed DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2467:    CREATE INDEX IF NOT EXISTS idx_file_mtime ON memory_index(file_mtime_ms);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2468:    CREATE INDEX IF NOT EXISTS idx_document_type ON memory_index(document_type);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2469:    CREATE INDEX IF NOT EXISTS idx_doc_type_folder ON memory_index(document_type, spec_folder);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2470:    CREATE INDEX IF NOT EXISTS idx_quality_score ON memory_index(quality_score);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2474:    CREATE INDEX IF NOT EXISTS idx_stability ON memory_index(stability DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2475:    CREATE INDEX IF NOT EXISTS idx_last_review ON memory_index(last_review);\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/vector-index-schema.ts:2476:    CREATE INDEX IF NOT EXISTS idx_fsrs_retrieval ON memory_index(stability, difficulty, last_review);\\n.opencode/skills/system-spec-kit/mcp_server/lib/chunking/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/chunking/README.md:113:| `CHUNKING_THRESHOLD` | 50,000 chars | Minimum file size to trigger chunking |\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:8:import { collectSessionData } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:11:const COLLECT_SESSION_DATA_PATH = path.join(TEST_DIR, '..', 'extractors', 'collect-session-data.ts');\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:14:  it('keeps moderately long authored session summaries intact instead of forcing an ellipsis', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:15:    const sessionSummary = 'Shipped the 014 code graph upgrades runtime lane across detector provenance, blast-radius correctness, hot-file breadcrumbs, edge evidence, and a frozen regression floor. The runtime adds a DetectorProvenance taxonomy to shared-payload, enforces blast-radius depth-cap at BFS traversal time with explicit multi-file unionMode, emits advisory hotFileBreadcrumb entries with low-authority wording, carries edgeEvidenceClass and numericConfidence additively on existing owner payloads without replacing the StructuralTrust envelope, and locks the provenance plus depth expectations behind a scripts-side frozen fixture floor. Strict packet validation passes.';\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:16:    const sessionData = await collectSessionData({\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:18:      sessionSummary,\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:22:    expect(sessionSummary.length).toBeGreaterThan(500);\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:23:    expect(sessionSummary.length).toBeLessThan(800);\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:24:    expect(sessionData.SUMMARY).toBe(sessionSummary);\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:25:    expect(sessionData.SUMMARY.endsWith('…')).toBe(false);\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:26:    expect(sessionData.SUMMARY.endsWith('.')).toBe(true);\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:31:    const sessionData = await collectSessionData({\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:33:      sessionSummary: longSummary,\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:37:    const summary = sessionData.SUMMARY;\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:42:    expect(source).toContain('renderOverviewSummary(data.sessionSummary, truncateOnWordBoundary(data.sessionSummary, 500))');\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:51:    const sessionSummary = 'Shipped the 014 code graph upgrades runtime lane across detector provenance, blast-radius correctness, hot-file breadcrumbs, edge evidence, and a frozen regression floor. The runtime adds a DetectorProvenance taxonomy to shared-payload, enforces blast-radius depth-cap at BFS traversal time with explicit multi-file unionMode, emits advisory hotFileBreadcrumb entries with low-authority wording, carries edgeEvidenceClass and numericConfidence additively on existing owner payloads without replacing the StructuralTrust envelope, and locks the provenance plus depth expectations behind a scripts-side frozen fixture floor. Strict packet validation passes.';\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:59:${sessionSummary}\\n.opencode/skills/system-spec-kit/scripts/tests/overview-boundary-safe-truncation.vitest.ts:74:        sessionSummary,\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:38:- `generate-context.ts` - generate memory output from spec folder or JSON input with content-aware candidate selection\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:41:- `validate-memory-quality.ts` - validates post-render memory quality against scoring thresholds before indexing/reporting; includes post-save quality gates (structure, semantic sufficiency, duplicate detection), heuristic calibration, and trigger sanitization\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:59:node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js /tmp/save-context-data.json specs/<###-spec-name>\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:67:node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js --json '{\\\"sessionSummary\\\":\\\"...\\\",\\\"specFolder\\\":\\\"...\\\"}' specs/NNN-name\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:94:- Uses content-aware candidate selection so task/session evidence beats generic folder fallback when valid.\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:97:- Runs post-render memory quality validation so contaminated headings or fallback-decision leaks are caught after template population. The post-save quality pipeline includes 3-layer gates (structure, semantic sufficiency, duplicate detection), heuristic calibration for scoring thresholds, and trigger sanitization to prevent noisy or over-broad trigger phrases from persisting in the index.\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:98:- Retroactive title refresh for existing memories: run `memory_index_scan({ force: true })` after parser/template updates.\\n.opencode/skills/system-spec-kit/scripts/memory/README.md:109:- `trigger_phrases`\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:35:  | 'session_boosted'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:36:  | 'causal_boosted'\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:113:    const causalDelta = typeof graphContrib.causalDelta === 'number' ? graphContrib.causalDelta : 0;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:118:    if (causalDelta > 0) signals.push('causal_boosted');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:125:  const sessionBoost = typeof row.sessionBoost === 'number' ? row.sessionBoost : 0;\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:126:  if (sessionBoost > 0) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:127:    signals.push('session_boosted');\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:137:  // Feedback boost (learned trigger weight)\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:207:    if (signal === 'session_boosted') return 'session attention';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:208:    if (signal === 'causal_boosted') return 'causal graph';\\n.opencode/skills/system-spec-kit/mcp_server/lib/search/result-explainability.ts:211:    if (signal === 'feedback_boosted') return 'learned trigger';\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/missing-child-docs/plan.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:4:// Memory classification, session dedup, causal links, and evidence\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:10:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:12:import type { FileChange } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:44:  sessionId: string;\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:131:  sessionData: { CONTEXT_TYPE: string; IMPORTANCE_TIER: string },\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:135:  const fallbackType = inferMemoryType(sessionData.CONTEXT_TYPE, sessionData.IMPORTANCE_TIER);\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:172:      importanceMultiplier(sessionData.IMPORTANCE_TIER),\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:181:  sessionData: { SESSION_ID: string; SUMMARY: string },\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:184:  const rawDedup = readNamedObject(collectedData, 'session_dedup', 'sessionDedup');\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:207:    .update(`${sessionData.SESSION_ID}\\\\n${memoryTitle}\\\\n${sessionData.SUMMARY}`)\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:236:  const snakeCaseLinks = readNamedObject(collectedData, 'causal_links');\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:237:  const camelCaseLinks = readNamedObject(collectedData, 'causalLinks');\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:297:    const sessionId = parseStructuredValue(frontmatter, ['session_id'])\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:298:      || parseStructuredValue(content, ['session_id']);\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:299:    if (!sessionId) {\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:307:      sessionId,\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:319:  currentSession: { sessionId: string; contextType: string },\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:330:    .filter((entry): entry is ExistingMemoryHeader => entry !== null && entry.sessionId !== currentSession.sessionId)\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:354:    DERIVED_FROM: merge(existing.DERIVED_FROM, [latest.sessionId]),\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:356:      ? merge(existing.SUPERSEDES, [latest.sessionId])\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:392:  triggerPhrases: string[];\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:404:    triggerPhrases,\\n.opencode/skills/system-spec-kit/scripts/core/memory-metadata.ts:423:    triggerPhrases,\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:8:      \\\"name\\\": \\\"generate-context\\\",\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:9:      \\\"path\\\": \\\"scripts/dist/memory/generate-context.js\\\",\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:12:      \\\"trigger\\\": [\\\"save context\\\", \\\"save memory\\\", \\\"/memory:save\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:29:      \\\"trigger\\\": [\\\"reindex embeddings\\\", \\\"force reindex\\\", \\\"memory index rebuild\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:46:      \\\"trigger\\\": [\\\"validate spec\\\", \\\"check spec\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:63:      \\\"trigger\\\": [\\\"check completion\\\", \\\"verify complete\\\", \\\"claiming done\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:80:      \\\"trigger\\\": [\\\"upgrade level\\\", \\\"level upgrade\\\", \\\"promote spec level\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:97:      \\\"trigger\\\": [\\\"check prerequisites\\\", \\\"verify files\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:113:      \\\"trigger\\\": [\\\"calculate progress\\\", \\\"completeness\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:130:      \\\"trigger\\\": [\\\"test validation\\\", \\\"run tests\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:146:      \\\"trigger\\\": [\\\"create spec\\\", \\\"new spec folder\\\", \\\"Option B\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:163:      \\\"trigger\\\": [\\\"nested changelog\\\", \\\"packet changelog\\\", \\\"phase changelog\\\", \\\"spec changelog\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:180:      \\\"trigger\\\": [\\\"recommend level\\\", \\\"what level\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:196:      \\\"trigger\\\": [\\\"archive spec\\\", \\\"move to archive\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:213:      \\\"trigger\\\": [],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:228:      \\\"trigger\\\": [\\\"cleanup vectors\\\", \\\"database cleanup\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:235:      \\\"dependencies\\\": [\\\"better-sqlite3\\\", \\\"sqlite-vec\\\"]\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:242:      \\\"trigger\\\": [\\\"test embeddings\\\", \\\"verify provider\\\"],\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:414:        \\\"name\\\": \\\"trigger-extractor\\\",\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:415:        \\\"path\\\": \\\"scripts/dist/lib/trigger-extractor.js\\\",\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:416:        \\\"description\\\": \\\"Re-exports from ../../shared/trigger-extractor\\\"\\n.opencode/skills/system-spec-kit/scripts/scripts-registry.json:458:      \\\"memory\\\": [\\\"generate-context\\\", \\\"cleanup-orphaned-vectors\\\", \\\"test-embeddings-factory\\\"],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:5:function buildValidMemory(overrides: { triggerBlock?: string; bodyTail?: string } = {}): string {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:10:    overrides.triggerBlock ?? [\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:11:      'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:27:    '<!-- ANCHOR:continue-session -->',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:32:    '<!-- /ANCHOR:continue-session -->',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:69:    'session_id: \\\"test-session\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:94:  it('rejects malformed trigger_phrases frontmatter shapes', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:96:      buildValidMemory({ triggerBlock: 'trigger_phrases: \\\"session summary\\\"' })\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:100:    expect(result.violations.some((violation) => violation.code === 'invalid_trigger_phrases')).toBe(true);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:114:          '- [CONTINUE SESSION](#continue-session)',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:162:          && violation.message.includes('duplicate or orphaned closing ANCHOR comments')\\n.opencode/skills/system-spec-kit/scripts/tests/memory-template-contract.vitest.ts:215:      expect(result.missingAnchors).not.toContain('session-history');\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:12:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:31:const DB_PATH = path.join(DB_DIR, 'context-index.sqlite');\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:180:  const fts5Query1 = buildFTS5Query(queryTerms);\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:181:  if (fts5Query1) {\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:187:        JOIN memory_index m ON m.id = f.rowid\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:192:      `).all(fts5Query1) as CandidateRow[];\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:203:          matchStrategy: 'fts5_query',\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:215:  const fts5Query2 = buildFTS5Query(descTerms);\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:216:  if (fts5Query2) {\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:222:        JOIN memory_index m ON m.id = f.rowid\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:227:      `).all(fts5Query2) as CandidateRow[];\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:239:          matchStrategy: 'fts5_description',\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:255:        FROM memory_index\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:299:  if (desc.includes('libsql') || desc.includes('sqlite-to-libsql')) {\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:300:    specFolderPatterns.push('%140-sqlite-to-libsql%');\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:313:        FROM memory_index\\n.opencode/skills/system-spec-kit/scripts/evals/map-ground-truth-ids.ts:441:  const totalMemories = (db.prepare('SELECT COUNT(*) as cnt FROM memory_index WHERE parent_id IS NULL').get() as CountRow | undefined)?.cnt ?? 0;\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/missing-child-docs/tasks.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:31:  for (let sessionIndex = 0; sessionIndex < SESSION_COUNT; sessionIndex += 1) {\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:32:    const sessionId = `session-${String(sessionIndex + 1).padStart(2, '0')}`;\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:33:    const hasIntentionalReadMiss = sessionIndex % 10 === 0; // 5 misses\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:34:    const hasIntentionalGrepMiss = sessionIndex % 7 === 0; // 8 misses\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:36:    const sessionEvents = [\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:38:        sessionId,\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:41:          ? `Read /tmp/${sessionId}-notes.md`\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:42:          : `Read /tmp/${sessionId}-spec.md`,\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:46:        sessionId,\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:49:          ? `warning: ${sessionId} edge case`\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:50:          : `error: ${sessionId} build failed`,\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:54:        sessionId,\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:56:        content: sessionIndex % 3 === 0\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:57:          ? `git commit -m \\\"${sessionId} checkpoint\\\"`\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:58:          : `npm run test:${sessionId}`,\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:59:        expectedExtract: sessionIndex % 3 === 0,\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:61:      { sessionId, tool: 'Edit', content: `edit ${sessionId} handler`, expectedExtract: false },\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:62:      { sessionId, tool: 'Read', content: `Read /tmp/${sessionId}-README.md`, expectedExtract: false },\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:63:      { sessionId, tool: 'Grep', content: `match_count=${sessionIndex}`, expectedExtract: false },\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:64:      { sessionId, tool: 'Bash', content: `echo ${sessionId} smoke`, expectedExtract: false },\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:65:      { sessionId, tool: 'Write', content: `write ${sessionId} scratch`, expectedExtract: false },\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:68:    events.push(...sessionEvents.slice(0, EVENTS_PER_SESSION));\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:97:      missesBySession.add(event.sessionId);\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:113:    sessionsWithMisses: missesBySession.size,\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:119:  const automatedManualSaves = extractionMetrics.sessionsWithMisses;\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:192:    '- Baseline assumes one manual save per session for continuity-critical context.',\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:193:    '- Automated run requires manual save only for sessions with extraction misses.',\\n.opencode/skills/system-spec-kit/scripts/evals/run-phase2-closure-metrics.mjs:228:    sessions: SESSION_COUNT,\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:4:// Frontmatter injection and trigger phrase rendering utilities.\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:9:import { sanitizeTriggerPhrases } from '../lib/trigger-phrase-sanitizer';\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:10:import type { FileChange } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:12:// CG-04: Domain-specific stopwords — duplicated from workflow.ts to avoid circular imports\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:19:  'based', 'features', 'perfect', 'session', 'capturing', 'pipeline',\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:96:export function renderTriggerPhrasesYaml(triggerPhrases: string[]): string {\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:97:  if (!Array.isArray(triggerPhrases) || triggerPhrases.length === 0) {\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:98:    return 'trigger_phrases: []';\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:101:  const escapedPhrases = triggerPhrases.map((phrase) => {\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:106:  return ['trigger_phrases:', ...escapedPhrases].join('\\\\n');\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:146:  const topicFromFolder = normalizeSpecSegment(path.basename(specFolderName));\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:147:  const folderTokens = topicFromFolder\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:162:    const compoundFallback = sanitizeTriggerPhrases([leafFolderAnchor || topicFromFolder], { source: 'extracted' })[0];\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:163:    return [combined[0], compoundFallback && compoundFallback !== combined[0] ? compoundFallback : 'session'];\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:166:  return ['session', 'context'];\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:174:  const topicFromFolder = normalizeSpecSegment(path.basename(specFolderName));\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:175:  const folderTokens = topicFromFolder\\n.opencode/skills/system-spec-kit/scripts/core/frontmatter-editor.ts:186:  return combined.length > 0 ? [combined[0]] : ['session'];\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:10:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:44:  'trigger_phrases',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:60:  'session_id',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:101:    .prepare('PRAGMA table_info(memory_index)')\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:107:      throw new Error(`Cannot downgrade: required v16 column \\\"${col}\\\" not found on memory_index`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:114:    CREATE TABLE memory_index (\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:120:      trigger_phrases TEXT,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:136:      session_id TEXT,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:167:    CREATE INDEX IF NOT EXISTS idx_spec_folder ON memory_index(spec_folder);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:168:    CREATE INDEX IF NOT EXISTS idx_created_at ON memory_index(created_at);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:169:    CREATE INDEX IF NOT EXISTS idx_importance ON memory_index(importance_weight DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:170:    CREATE INDEX IF NOT EXISTS idx_embedding_status ON memory_index(embedding_status);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:171:    CREATE INDEX IF NOT EXISTS idx_retry_eligible ON memory_index(embedding_status, retry_count, last_retry_at);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:173:    CREATE INDEX IF NOT EXISTS idx_importance_tier ON memory_index(importance_tier);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:174:    CREATE INDEX IF NOT EXISTS idx_access_importance ON memory_index(access_count DESC, importance_weight DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:175:    CREATE INDEX IF NOT EXISTS idx_memories_scope ON memory_index(spec_folder, session_id, context_type);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:176:    CREATE INDEX IF NOT EXISTS idx_channel ON memory_index(channel);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:178:    CREATE INDEX IF NOT EXISTS idx_file_path ON memory_index(file_path);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:179:    CREATE INDEX IF NOT EXISTS idx_content_hash ON memory_index(content_hash);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:180:    CREATE INDEX IF NOT EXISTS idx_last_accessed ON memory_index(last_accessed DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:181:    CREATE INDEX IF NOT EXISTS idx_file_mtime ON memory_index(file_mtime_ms);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:182:    CREATE INDEX IF NOT EXISTS idx_document_type ON memory_index(document_type);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:183:    CREATE INDEX IF NOT EXISTS idx_doc_type_folder ON memory_index(document_type, spec_folder);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:184:    CREATE INDEX IF NOT EXISTS idx_quality_score ON memory_index(quality_score);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:186:    CREATE INDEX IF NOT EXISTS idx_stability ON memory_index(stability DESC);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:187:    CREATE INDEX IF NOT EXISTS idx_last_review ON memory_index(last_review);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:188:    CREATE INDEX IF NOT EXISTS idx_fsrs_retrieval ON memory_index(stability, difficulty, last_review);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:190:    CREATE INDEX IF NOT EXISTS idx_memory_type ON memory_index(memory_type);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:191:    CREATE INDEX IF NOT EXISTS idx_memory_type_decay ON memory_index(memory_type, half_life_days);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:194:      ON memory_index(embedding_status)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:198:      ON memory_index(spec_folder, embedding_status)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:205:    CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:206:      title, trigger_phrases, file_path, content_text,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:207:      content='memory_index', content_rowid='id'\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:212:    CREATE TRIGGER IF NOT EXISTS memory_fts_insert AFTER INSERT ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:213:      INSERT INTO memory_fts(rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:214:      VALUES (new.id, new.title, new.trigger_phrases, new.file_path, new.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:219:    CREATE TRIGGER IF NOT EXISTS memory_fts_update AFTER UPDATE ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:220:      INSERT INTO memory_fts(memory_fts, rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:221:      VALUES ('delete', old.id, old.title, old.trigger_phrases, old.file_path, old.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:222:      INSERT INTO memory_fts(rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:223:      VALUES (new.id, new.title, new.trigger_phrases, new.file_path, new.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:228:    CREATE TRIGGER IF NOT EXISTS memory_fts_delete AFTER DELETE ON memory_index BEGIN\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:229:      INSERT INTO memory_fts(memory_fts, rowid, title, trigger_phrases, file_path, content_text)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:230:      VALUES ('delete', old.id, old.title, old.trigger_phrases, old.file_path, old.content_text);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:278:      database.exec(`ALTER TABLE memory_index RENAME TO memory_index_v16_backup`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:284:        INSERT INTO memory_index (${columnsCsv})\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:286:        FROM memory_index_v16_backup\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:290:      database.exec(`DROP TABLE memory_index_v16_backup`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/schema-downgrade.ts:306:  const row = database.prepare('SELECT COUNT(*) as count FROM memory_index').get() as { count: number };\\n.opencode/skills/system-spec-kit/scripts/tests/content-filter-parity.vitest.ts:71:    expect(pipeline.deduplicate([\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:16:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:18:  sessionBoost,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:19:  causalBoost,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:49:  sessionBoost: LatencyStats;\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:50:  causalBoost: LatencyStats;\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:143:    CREATE TABLE memory_index (\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:149:      trigger_phrases TEXT,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:153:    CREATE TABLE working_memory (\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:155:      session_id TEXT NOT NULL,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:167:      UNIQUE(session_id, memory_id)\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:170:    CREATE TABLE causal_edges (\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:182:    INSERT INTO memory_index (id, spec_folder, file_path, title, importance_tier, trigger_phrases)\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:191:    INSERT INTO working_memory (session_id, memory_id, attention_score, event_counter, mention_count, focus_count, last_focused)\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:197:    wmInsert.run('bench-session', id, Math.min(0.95, score));\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:201:    INSERT INTO causal_edges (source_id, target_id, relation, strength, evidence)\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:230:    sessionBoost.applySessionBoost(input, 'bench-session');\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:241:    causalBoost.applyCausalBoost(input);\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:301:    const withSession = sessionBoost.applySessionBoost(baseline, 'bench-session').results;\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:302:    causalBoost.applyCausalBoost(withSession);\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:327:    const withSession = sessionBoost.applySessionBoost(input, 'bench-session').results;\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:328:    causalBoost.applyCausalBoost(withSession);\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:359:    `- NFR-P01 (session boost p95): < ${report.thresholds.nfrP01SessionBoostP95Ms}ms`,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:360:    `- NFR-P02 (causal traversal p95): < ${report.thresholds.nfrP02CausalTraversalP95Ms}ms`,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:365:    `- Session boost p95: ${report.sessionBoost.p95Ms.toFixed(3)}ms`,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:366:    `- Causal traversal p95: ${report.causalBoost.p95Ms.toFixed(3)}ms`,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:415:  sessionBoost.init(db);\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:416:  causalBoost.init(db);\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:419:    const sessionBoostStats = measureSessionBoostLatency();\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:420:    const causalBoostStats = measureCausalBoostLatency();\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:426:      chk110: sessionBoostStats.p95Ms < NFR_P01_P95_MS ? 'PASS' as const : 'FAIL' as const,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:427:      chk111: causalBoostStats.p95Ms < NFR_P02_P95_MS ? 'PASS' as const : 'FAIL' as const,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:454:      sessionBoost: sessionBoostStats,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:455:      causalBoost: causalBoostStats,\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:466:    console.log(`session_boost_p95_ms=${sessionBoostStats.p95Ms.toFixed(3)}`);\\n.opencode/skills/system-spec-kit/scripts/evals/run-performance-benchmarks.ts:467:    console.log(`causal_boost_p95_ms=${causalBoostStats.p95Ms.toFixed(3)}`);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:13:} from '../memory/migrate-trigger-phrase-residual';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:24:  const triggerSection = detection.sections.find((section) => section.key === 'trigger_phrases');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:25:  const triggerValue = triggerSection ? parseSectionValue(triggerSection) : undefined;\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:26:  return Array.isArray(triggerValue)\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:27:    ? triggerValue.filter((value): value is string => typeof value === 'string')\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:48:    if (match[1] === 'trigger_phrases') {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:101:describe('Phase 6 PR-13 trigger residual migration', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:102:  it('flags junk residuals in dry-run mode, preserves useful anchors, and rewrites only trigger_phrases in apply mode', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-migration.test.ts:135:      expect.objectContaining({ phrase: 'trigger phrase migration', reason: 'title_overlap' }),\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:13:        'Implemented a shared insufficiency gate across workflow and memory_save so thin saves fail explicitly.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:17:        '- Rationale: the prior path could index generic sessions that matched workspace identity but not the real task.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:19:      triggerPhrases: ['perfect session capturing', 'memory sufficiency', 'memory save', 'alignment block'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:38:        'Rerun the memory_save dry-run coverage after wiring the new rejection payload.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:56:        'Please save context for perfect session capturing.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:58:      triggerPhrases: ['perfect session capturing'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:62:          learning: 'Please save context for perfect session capturing.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:80:        'This rendered file contains a long scaffolded summary block, several headings, and anchored metadata, but no real files, observations, decisions, or outcomes from the session.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:85:      triggerPhrases: ['perfect session capturing', 'recovery hints'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:96:      title: 'Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:98:        '# Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:101:        'Implemented the shared insufficiency gate in both generate-context and memory_save, then wired the rejection payload so dry-run reports reasons and evidence counts before any write occurs.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:106:      triggerPhrases: ['memory_save', 'dry run', 'insufficient context', 'generate-context'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:135:        { path: 'scripts/core/workflow.ts', description: 'Modified during session', specRelevant: true },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:138:      triggerPhrases: ['perfect session capturing', 'workflow'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:152:        '### Tool: bash memory_save dry run',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:155:      triggerPhrases: ['memory_save', 'dry run', 'insufficient context', 'evidence counts'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:158:          title: 'Tool: bash memory_save dry run',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-sufficiency.vitest.ts:159:          narrative: 'Executed memory_save with dryRun=true and confirmed the insufficiency payload is explicit and non-mutating.',\\n.opencode/skills/system-spec-kit/scripts/evals/run-bm25-baseline.ts:10:// Live production context-index.sqlite and record results in the\\n.opencode/skills/system-spec-kit/scripts/evals/run-bm25-baseline.ts:22:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/scripts/evals/run-bm25-baseline.ts:27:  fts5Bm25Search, isFts5Available,\\n.opencode/skills/system-spec-kit/scripts/evals/run-bm25-baseline.ts:36:const PROD_DB_PATH = path.join(DB_DIR, 'context-index.sqlite');\\n.opencode/skills/system-spec-kit/scripts/evals/run-bm25-baseline.ts:85:    'SELECT COUNT(*) as c FROM memory_index'\\n.opencode/skills/system-spec-kit/scripts/evals/run-bm25-baseline.ts:101:  //    Wraps fts5Bm25Search() to match the BM25SearchFn signature:\\n.opencode/skills/system-spec-kit/scripts/evals/run-bm25-baseline.ts:104:    const ftsResults = fts5Bm25Search(prodDb, query, { limit });\\n.opencode/skills/system-spec-kit/scripts/core/workflow-path-utils.ts:11:import type { FileChange } from '../types/session-types';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/access-tracker.ts:6:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/access-tracker.ts:157:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:16:  createBoard: (opts: { sessionId: string; generation?: number; loopType: string; target?: string }) => any;\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:32:  createSegmentState: (id: string, config: { sessionId: string; generation?: number; waveId?: string; loopType?: string; files?: string[]; domains?: string[] }) => any;\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:51:      const b = board.createBoard({ sessionId: 'sess-1', loopType: 'review', target: 'my-repo' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:53:      expect(b.sessionId).toBe('sess-1');\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:60:    it('throws for missing sessionId', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:65:      expect(board.createBoard({ sessionId: 's', loopType: 'invalid' } as any)).toBeNull();\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:71:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:80:    it('deduplicates identical findings', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:81:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:91:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:104:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:121:      const b = board.createBoard({ sessionId: 's1', generation: 2, loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:127:      expect(record.sessionId).toBe('s1');\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:136:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:145:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:152:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:179:      expect(segState.MERGE_KEYS).toEqual(['sessionId', 'generation', 'segment', 'wave', 'findingId']);\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:185:      const s = segState.createSegmentState('seg-1', { sessionId: 'sess-1', files: ['a.ts'] });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:187:      expect(s.sessionId).toBe('sess-1');\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:194:      expect(segState.createSegmentState('', { sessionId: 's' })).toBeNull();\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:197:    it('throws for missing sessionId', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:204:      const state = segState.createSegmentState('seg-1', { sessionId: 's1', generation: 2, waveId: 'w1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:206:      expect(record.sessionId).toBe('s1');\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:216:      const state = segState.createSegmentState('seg-1', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:219:      expect(state.jsonlRecords[0].sessionId).toBe('s1');\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:226:      const s1 = segState.createSegmentState('seg-1', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:229:      const s2 = segState.createSegmentState('seg-2', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:237:    it('deduplicates findings with same ID', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:238:      const s1 = segState.createSegmentState('seg-1', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:241:      const s2 = segState.createSegmentState('seg-2', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:250:      const s1 = segState.createSegmentState('seg-1', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:253:      const s2 = segState.createSegmentState('seg-2', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:262:      const s1 = segState.createSegmentState('seg-2', { sessionId: 's1', generation: 1 });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:265:      const s2 = segState.createSegmentState('seg-1', { sessionId: 's1', generation: 1 });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:282:      const state = segState.createSegmentState('seg-1', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:294:        '{\\\"sessionId\\\":\\\"s1\\\",\\\"generation\\\":1,\\\"segment\\\":\\\"seg-1\\\",\\\"wave\\\":\\\"w1\\\",\\\"findingId\\\":\\\"f1\\\",\\\"valid\\\":true}',\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:296:        '{\\\"sessionId\\\":\\\"s1\\\",\\\"generation\\\":1,\\\"segment\\\":\\\"seg-1\\\",\\\"wave\\\":\\\"w1\\\",\\\"findingId\\\":\\\"f2\\\",\\\"also\\\":\\\"valid\\\"}',\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:308:        sessionId: 's1', generation: 1, segment: 'seg-1', wave: 'w1', findingId: 'f1',\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-merge.vitest.ts:315:      const result = segState.validateMergeKeys({ sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/missing-child-docs/001-design/spec.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/evals/run-ablation.ts:14://   SPECKIT_ABLATION=true npx tsx scripts/evals/run-ablation.ts [--channels vector,bm25,fts5] [--verbose]\\n.opencode/skills/system-spec-kit/scripts/evals/run-ablation.ts:47:const PROD_DB_PATH = path.join(DB_DIR, 'context-index.sqlite');\\n.opencode/skills/system-spec-kit/scripts/evals/run-ablation.ts:53:// Parse --channels flag (e.g., --channels vector,bm25,fts5)\\n.opencode/skills/system-spec-kit/scripts/evals/run-ablation.ts:111:    'SELECT COUNT(*) as c FROM memory_index'\\n.opencode/skills/system-spec-kit/scripts/evals/run-ablation.ts:144:      triggerPhrases: channelFlags.useTrigger ? undefined : [],\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:9:spec_folder: \\\"022-hybrid-rag-fusion/009-perfect-session-capturing\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:10:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:28:spec_folder: \\\"022-hybrid-rag-fusion/009-perfect-session-capturing\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:29:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:48:title: \\\"Implementation session for phase 009\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:50:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:56:# Implementation session\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:64:      filePath: '/project/specs/system-spec-kit/009-reindex-validator/memory/session.md',\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:73:      filePath: '/project/specs/009-reindex-validator/memory/session.md',\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:80:  it('V12 skip: memory directory files bypass topical coherence', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:84:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:92:Detailed notes about graduating feature flags with different terminology than parent spec trigger phrases.\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:93:The topical coherence check should be skipped for memory directory files.\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:103:  it('V12 skip: spec doc files bypass topical coherence', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:107:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality.vitest.ts:131:    expect(v12?.name).toBe('topical-coherence-mismatch');\\n.opencode/skills/system-spec-kit/scripts/evals/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/memory-pipeline-regressions.vitest.ts:5:import { extractTriggerPhrases as extractSharedTriggerPhrases } from '@spec-kit/shared/trigger-extractor';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-pipeline-regressions.vitest.ts:50:  it('filters generic single-word trigger phrases while preserving meaningful phrases', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-pipeline-regressions.vitest.ts:52:      'Manual testing per spec phase validated deterministic trigger extraction for embeddings provider selection and memory title truncation.',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:7:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:19:} from './causal-edges.js';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:20:import type { CausalEdge } from './causal-edges.js';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:94:    // Query high-similarity pairs from vec_memories using sqlite-vec\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:114:      \\\"SELECT name FROM sqlite_master WHERE type='table' AND name='vec_memories'\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:123: * Vector-based contradiction scan using sqlite-vec cosine similarity.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:133:    FROM memory_index m\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:195:    FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:286: * (via causal edges) to surface the full context for resolution.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:297:    // Expand cluster via causal edges (1-hop neighbors)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:301:          SELECT CAST(target_id AS INTEGER) as neighbor_id FROM causal_edges WHERE source_id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:303:          SELECT CAST(source_id AS INTEGER) as neighbor_id FROM causal_edges WHERE target_id = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:346:        SELECT id, strength, last_accessed, created_by FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:370:        SELECT id, strength, last_accessed, created_by FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:454:        SELECT source_id AS node_id FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:456:        SELECT target_id AS node_id FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/consolidation.ts:493:      CREATE TABLE IF NOT EXISTS consolidation_state (\\n.opencode/skills/system-spec-kit/scripts/core/subfolder-utils.ts:46:  // Deduplicate aliased roots upfront to avoid duplicate traversal\\n.opencode/skills/system-spec-kit/scripts/core/subfolder-utils.ts:108:    // Deduplicate aliased results (belt-and-suspenders with root dedup)\\n.opencode/skills/system-spec-kit/scripts/core/subfolder-utils.ts:137:  // Deduplicate aliased roots upfront to avoid duplicate traversal\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/missing-child-docs/001-design/tasks.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-planner.vitest.ts:51:function makeDomains(count: number, opts: { diverse?: boolean } = {}): Array<{ domain: string; authority: number; cluster: string; topics: string[] }> {\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-planner.vitest.ts:60:      topics: [`topic-${i % 4}`],\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:24:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:46:  const v4 = validator.validateMemoryQualityContent(validContent + '\\\\nNo specific decisions were made during this session.\\\\n');\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:50:  assert(v5.failedRules.includes('V5'), 'V5 should fail empty trigger_phrases with >=5 tools');\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:54:      'trigger_phrases:\\\\n  - \\\"memory\\\"\\\\n  - \\\"quality\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:55:      'trigger_phrases: [\\\"memory\\\", \\\"quality\\\"]'\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:58:  assert(inlineTriggerPhrases.valid === true, 'inline trigger_phrases list should count as populated');\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:83:      { narrative: 'Selected a fallback strategy for sparse trigger phrases.' },\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:258:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:270:  // V11 should fail on error-dominated trigger phrases\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:275:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:288:  assert(v11Triggers.failedRules.includes('V11'), 'V11 should fail when >50% trigger phrases contain error vocabulary');\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:295:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/test-memory-quality-lane.js:370:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/post-insert-metadata.ts:7:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/post-insert-metadata.ts:15: * Keys align to the guarded `memory_index` columns below.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/post-insert-metadata.ts:39:  session_id?: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/post-insert-metadata.ts:60:  'session_id',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/post-insert-metadata.ts:70: * Build and execute a dynamic `UPDATE memory_index SET ... WHERE id = ?`\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/post-insert-metadata.ts:106:    UPDATE memory_index\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:12:import { buildProjectStateSnapshot } from '../extractors/session-extractor';\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:50:          userInput: 'Perfect session capturing hardening for stateless mode',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:51:          assistantResponse: 'Improved perfect session capturing alignment and enrichment safeguards.',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:57:      sessionTitle: 'Perfect Session Capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:58:      sessionId: 'session-test',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:60:    }, 'system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:71:          userInput: 'Perfect session capturing hardening for stateless mode',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:72:          assistantResponse: 'Improved perfect session capturing alignment and enrichment safeguards.',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:83:      sessionTitle: 'Perfect Session Capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:84:      sessionId: 'session-test',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:86:    }, 'system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:89:    expect(transformed.userPrompts[0]?.prompt).toContain('Perfect session capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:105:      sessionTitle: 'Foreign Spec Session',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:106:      sessionId: 'foreign-session',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:108:    }, 'system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:119:          userInput: 'Perfect session capturing hardening for stateless mode',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:120:          assistantResponse: 'Validated the stateless alignment guard for perfect session capturing.',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:132:          output: 'Confirmed scripts/core/workflow.ts still blocks mis-scoped 009-perfect-session-capturing saves.',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:136:      sessionTitle: 'Codex stateless evidence preservation',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:137:      sessionId: 'codex-evidence',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:139:    }, 'system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing', 'codex-cli-capture');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:169:            command: \\\"node .opencode/skills/system-spec-kit/scripts/dist/memory/generate-context.js .opencode/specs/00--anobel.com/036-hero-contact-success\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:175:      sessionTitle: 'Generic infrastructure session',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:176:      sessionId: 'generic-infra',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:178:    }, 'system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:185:  it('extracts trigger phrases from merged specs that embed a second frontmatter block', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:198:        'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:220:    expect(extracted.triggerPhrases).toEqual(expect.arrayContaining(['stateless mode', 'improve stateless']));\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:229:      id: '009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:239:        'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:240:        '  - \\\"perfect session capturing\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:351:    const specFolderPath = path.join(repoRoot, '.opencode', 'specs', 'system-spec-kit', '022-hybrid-rag-fusion', '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:503:    const targetSpecFolder = path.join(repoRoot, '.opencode', 'specs', 'system-spec-kit', '022-hybrid-rag-fusion', '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:523:        FILE_PATH: '.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/note-2.md',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:526:        FILE_PATH: '.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/note-6.md',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:531:        FILE_PATH: '.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/note-1.md',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:538:    const targetSpecFolder = path.join(repoRoot, '.opencode', 'specs', 'system-spec-kit', '022-hybrid-rag-fusion', '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:558:        FILE_PATH: '.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/spec.md',\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:564:        files: ['.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/spec.md'],\\n.opencode/skills/system-spec-kit/scripts/tests/session-enrichment.vitest.ts:569:        FILE_PATH: '.opencode/specs/system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing-archive/notes.md',\\n.opencode/skills/system-spec-kit/scripts/tests/test-phase-system.js:170:    assertEqual(phaseMapCount, 1, 'create.sh parent mode: phase-map section not duplicated');\\n.opencode/skills/system-spec-kit/scripts/core/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/core/README.md:26:The `core/` directory contains orchestration modules used by `dist/memory/generate-context.js`.\\n.opencode/skills/system-spec-kit/scripts/core/README.md:38:- `frontmatter-editor.ts` - frontmatter metadata injection and trigger phrase YAML rendering\\n.opencode/skills/system-spec-kit/scripts/core/README.md:40:- `memory-metadata.ts` - memory classification, session dedup, causal links, and evidence snapshot assembly\\n.opencode/skills/system-spec-kit/scripts/core/README.md:46:- `topic-extractor.ts` - derive topic signals from folder/content inputs\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:23:    .replace(/^session_id:\\\\s*\\\".*\\\"$/gm, 'session_id: \\\"<normalized>\\\"')\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:95:// RC-6: Return duplicate filename instead of throwing, so callers can skip\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:96:// Idempotently. Previously, throw-on-duplicate was treated as a batch error\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:97:// That triggered rollback, causing 5 separate runs to create 5 files.\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:120:        return existing; // duplicate found — return the matching filename\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:141:    // RC-6: Skip duplicate files idempotently instead of crashing the batch\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:142:    const duplicateOf = await checkForDuplicateContent(contextDir, content, filename);\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:143:    if (duplicateOf) {\\n.opencode/skills/system-spec-kit/scripts/core/file-writer.ts:144:      console.warn(`   Skipping ${filename}: duplicate of existing ${duplicateOf}`);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:16:import Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:32:import { buildSessionActivitySignal } from '../lib/session-activity-signal';\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:79:  sessionActivityBoost: number;\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:80:  sessionActivitySignalCount: number;\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:102:  sessionActivityBoost?: number;\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:103:  sessionActivitySignalCount?: number;\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:344:    return { lowConfidence: true, reason: 'no candidates resolved from session learning rows' };\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:470:    const sessionActivity = buildSessionActivitySignal(collectedData, candidate.relativePath);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:475:      sessionActivityBoost: sessionActivity.confidenceBoost,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:476:      sessionActivitySignalCount:\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:477:        sessionActivity.toolCallPaths.length\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:478:        + sessionActivity.gitChangedFiles.length\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:479:        + sessionActivity.transcriptMentions.length,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:516:  if (a.sessionActivityBoost !== b.sessionActivityBoost) {\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:517:    return b.sessionActivityBoost - a.sessionActivityBoost;\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:520:  if (a.sessionActivitySignalCount !== b.sessionActivitySignalCount) {\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:521:    return b.sessionActivitySignalCount - a.sessionActivitySignalCount;\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:528:  return [...pickPreferredCandidates(candidates.filter((candidate) => candidate.sessionActivityBoost > 0))]\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:534:    return { lowConfidence: true, reason: 'no session activity matched candidate folders' };\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:538:    return { lowConfidence: false, reason: 'single session-activity candidate' };\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:544:    top.sessionActivityBoost === second.sessionActivityBoost\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:545:    && top.sessionActivitySignalCount === second.sessionActivitySignalCount\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:547:    return { lowConfidence: true, reason: 'top session-activity candidates tie on boost and signal count' };\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:550:  return { lowConfidence: false, reason: 'clear session-activity winner' };\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:560:  if (a.sessionActivityBoost !== b.sessionActivityBoost) {\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:561:    return b.sessionActivityBoost - a.sessionActivityBoost;\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:600:  const sameActivity = top.sessionActivityBoost === second.sessionActivityBoost;\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:719:      console.warn(`Skipping session_learning spec_folder outside specs roots: ${resolvedSpecFolder}`);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:786:    // Fix F6 — validate session-learning paths against approved roots.\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:791:          `[folder-detector] Skipping session-learning row with unapproved absolute spec_folder: ${resolvedAbsoluteSpecFolder}`\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:839:  console.log(`   [Priority 2.5] Low-confidence session match: ${reason}`);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:844:  console.log(`   ${shortlist.length + 1}. Skip session-learning selection and continue\\\\n`);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:874:      sessionActivityBoost: 0,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:875:      sessionActivitySignalCount: 0,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1054:      sessionActivityBoost: input.sessionActivityBoost ?? 0,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1055:      sessionActivitySignalCount: input.sessionActivitySignalCount ?? 0,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1154:        // so alignment validator can extract topics from all path segments.\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1249:      console.error('\\\\nUsage: node generate-context.js [spec-folder-name] OR node generate-context.js <data-file> [spec-folder]\\\\n');\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1347:         FROM session_learning\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1353:      const sessionCandidates = await buildSessionCandidates(rows, specsDirsForDetection);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1354:      const rankedSessionCandidates = rankSessionCandidates(sessionCandidates);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1374:            console.warn(`   [Priority 2.5] Low-confidence session match (${confidence.reason}); falling through.`);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1385:            `source=session_learning, recency=${selected.recencyIso}, reason=${confidence.reason}`\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1479:    const sessionActivityCandidates = rankSessionActivityCandidates(await loadAutoDetectCandidates());\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1480:    if (sessionActivityCandidates.length > 0) {\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1481:      const confidence = assessSessionActivityConfidence(sessionActivityCandidates);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1482:      let selected: AutoDetectCandidate | null = sessionActivityCandidates[0];\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1484:        console.warn(`   [Priority 3.5] Low-confidence session-activity match (${confidence.reason}); falling through.`);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1493:          `activity_boost=${selected.sessionActivityBoost.toFixed(2)}, signals=${selected.sessionActivitySignalCount}, reason=${confidence.reason}`,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/folder-detector.ts:1555:    console.log('\\\\n   Conversation topic may not align with most recent spec folder');\\n.opencode/skills/system-spec-kit/scripts/core/config.ts:233:    maxObservations: 15, // Raised from 3 to 15 to prevent 96% data loss (010-perfect-session-capturing)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:11:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:27:import { deleteEdgesForMemory } from './causal-edges.js';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:67:    'memory_index',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:70:    'working_memory',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:71:    'causal_edges',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:80:    'session_learning',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:85:    'session_state',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:86:    'session_sent_memories',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:109:  'memory_index',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:112:  'working_memory',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:113:  'causal_edges',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:122:  'session_learning',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:127:  'session_state',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:128:  'session_sent_memories',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:206:  causalEdges?: Array<Record<string, unknown>>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:300:      \\\"SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name = ?\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:311:  'memory_index', 'memory_fts', 'vec_memories', 'vec_metadata', 'causal_edges',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:314:  // Working memory & session\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:315:  'working_memory', 'session_state', 'session_sent_memories', 'session_learning',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:320:  'learned_feedback_audit', 'learned_trigger_scores', 'learned_trigger_feedback',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:443:    || columns.has('session_id')\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:485:    ? database.prepare('SELECT * FROM memory_index WHERE spec_folder = ?').all(specFolder) as Array<Record<string, unknown>>\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:486:    : database.prepare('SELECT * FROM memory_index').all() as Array<Record<string, unknown>>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:596:  if (memoryIds.length === 0 || !tableExists(database, 'causal_edges')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:606:          SELECT * FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:614:          SELECT * FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:626:  if (memoryIds.length === 0 || !tableExists(database, 'causal_edges')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:660:  if (tableName === 'memory_index') {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:663:        'SELECT * FROM memory_index WHERE spec_folder = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:665:      : database.prepare('SELECT * FROM memory_index').all() as Array<Record<string, unknown>>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:681:      JOIN memory_index m ON m.id = v.rowid\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:690:  if (tableName === 'causal_edges') {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:694:    return hasScope ? [] : database.prepare('SELECT * FROM causal_edges').all() as Array<Record<string, unknown>>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:840:    tableSnapshots.memory_index = {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:847:    tableSnapshots.working_memory = {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:863:  if (Array.isArray(snapshot.causalEdges)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:864:    tableSnapshots.causal_edges = {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:865:      columns: Object.keys(snapshot.causalEdges[0] ?? {}),\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:866:      rows: snapshot.causalEdges,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:940:  if (tableName === 'memory_index') {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:942:      database.prepare(`DELETE FROM memory_index WHERE ${scopedClauses.join(' AND ')}`).run(...scopedParams);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:952:  if (tableName === 'causal_edges') {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1107:      CREATE TABLE IF NOT EXISTS working_memory (\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1109:        session_id TEXT NOT NULL,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1121:        UNIQUE(session_id, memory_id),\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1122:        FOREIGN KEY (memory_id) REFERENCES memory_index(id) ON DELETE SET NULL\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1126:    const wmColumns = (database.prepare('PRAGMA table_info(working_memory)').all() as Array<{ name: string }>)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1129:      database.exec('ALTER TABLE working_memory ADD COLUMN event_counter INTEGER NOT NULL DEFAULT 0');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1132:      database.exec('ALTER TABLE working_memory ADD COLUMN mention_count INTEGER NOT NULL DEFAULT 0');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1135:      database.exec('ALTER TABLE working_memory ADD COLUMN source_tool TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1138:      database.exec('ALTER TABLE working_memory ADD COLUMN source_call_id TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1141:      database.exec('ALTER TABLE working_memory ADD COLUMN extraction_rule_id TEXT');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1144:      database.exec('ALTER TABLE working_memory ADD COLUMN redaction_applied INTEGER NOT NULL DEFAULT 0');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1193:  const hasMemoryParentId = tableHasColumn(database, 'memory_index', 'parent_id');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1284:  if ((column === 'trigger_phrases' || column === 'quality_flags') && Array.isArray(value)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1295:  const tableColumns = new Set(getTableColumns(database, 'memory_index'));\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1316:    'trigger_phrases',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1332:    'session_id',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1453:      const workingMemorySnapshot = tables.working_memory?.rows ?? [];\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1454:      const causalEdgesSnapshot = tables.causal_edges?.rows ?? [];\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1466:        causalEdges: causalEdgesSnapshot,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1624:    const memorySnapshot = tableSnapshots.memory_index;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1651:    const edgeIds = getEdgeIds(tableSnapshots.causal_edges?.rows ?? []);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1672:      result.errors.push('No compatible memory_index columns found for restore');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1678:    // Merge mode: INSERT OR REPLACE triggers CASCADE DELETE on working_memory\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1679:    // Via the FOREIGN KEY (memory_id) REFERENCES memory_index(id) ON DELETE CASCADE.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1683:          INSERT OR ${clearExisting ? 'REPLACE' : 'IGNORE'} INTO memory_index (${memoryRestoreColumns.join(', ')})\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1691:          UPDATE memory_index SET ${nonIdColumns.map(c => `${c} = ?`).join(', ')}\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1696:    // Ensure working_memory table schema is ready BEFORE the transaction.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1697:    // DDL (CREATE TABLE, ALTER TABLE) causes SQLite to auto-commit, which would\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1699:    if (tableSnapshots.working_memory) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1749:          // P4-11 FIX: When clearExisting=false, check for duplicate logical key\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1754:                SELECT id FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1785:                FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1825:          // Apply the snapshot values without triggering CASCADE deletes.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1844:        if (tableName === 'memory_index') {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1873:          if (tableName === 'working_memory') {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/checkpoints.ts:1883:      // Throw to trigger ROLLBACK — this undoes both the DELETEs and partial INSERTs,\\n.opencode/skills/system-spec-kit/scripts/tests/memory-indexer-weighting.vitest.ts:50:vi.mock('../lib/trigger-extractor', () => ({\\n.opencode/skills/system-spec-kit/scripts/tests/memory-indexer-weighting.vitest.ts:136:  it('falls back to manual trigger phrases when extraction throws', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-indexer-weighting.vitest.ts:147:      'test-trigger-fallback.md',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-indexer-weighting.vitest.ts:155:      triggerPhrases: expect.arrayContaining(['manual phrase one', 'manual phrase two']),\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:8:// Extracts key topics from session data using weighted scoring and bigram analysis\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:12:/** Represents decision for topics. */\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:20:// NOTE: Similar to extractors/session-extractor.ts:extractKeyTopics but differs in:\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:21:// - Uses compound phrase extraction (bigrams) for more meaningful topics\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:22:// - Accepts `string` only (session-extractor accepts `string | undefined`)\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:23:// - Includes spec folder name tokens as high-priority topics\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:25:/** Extract key topics. */\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:34:  // contaminate topics with generic infrastructure words. Topics should come from\\n.opencode/skills/system-spec-kit/scripts/core/topic-extractor.ts:35:  // actual session content (summary, decisions).\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/README.md:33:- Reconsolidation, consolidation, and causal-edge persistence helpers.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/README.md:47:| `causal-edges.ts` | Insert, query, and manage causal edge records |\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/README.md:53:| `learned-triggers-schema.ts` | Migration helpers for the `learned_triggers` column and FTS isolation checks |\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/README.md:56:| `post-insert-metadata.ts` | Guarded dynamic post-insert metadata updates for `memory_index` rows |\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:12:  'session',\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:25:  sessionId?: string;\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:27:  sessionSummary?: string;\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:34:  causal_links?: Record<string, unknown>;\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:35:  causalLinks?: Record<string, unknown>;\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:39:  sessionId: string;\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:72:  return readSupersedes(currentSession.causal_links).length > 0\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:73:    || readSupersedes(currentSession.causalLinks).length > 0;\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:104:    currentSession.sessionSummary,\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:207:    const sessionId = parseFrontmatterValue(frontmatter, 'session_id');\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:209:    if (sessionId.length === 0 || title.length === 0) {\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:214:      sessionId,\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:253: * across mixed-topic sibling folders. Auto-linking requires either an exact\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:254: * source-session match, an explicit continuation marker, or >=50% title-family\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:266:  const currentSessionId = typeof currentSession.sessionId === 'string' ? currentSession.sessionId.trim() : '';\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:300:    if (candidateHeader.sessionId === currentSessionId) {\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:314:      sourceMatch: sourceSessionId.length > 0 && candidateHeader.sessionId === sourceSessionId,\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:315:      explicitMarkerMatch: hasExplicitContinuationMarker(currentSession, candidateHeader.sessionId),\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:341:    if (comparison === 'tie' && candidate.sessionId !== bestCandidate.sessionId) {\\n.opencode/skills/system-spec-kit/scripts/core/find-predecessor-memory.ts:350:  return bestCandidate.sessionId;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:6:// - collect-session-data.js (424 LOC) - P0\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:7:// - session-extractor.js (330 LOC) - P1\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:193:    narrative: 'Explored Redis vs Memcached for session caching. Next: implement Redis solution.',\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:245:    { decision: 'Redis for session cache', title: 'Caching Strategy' }\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:268:    const collectSessionData = require(path.join(EXTRACTORS_DIR, 'collect-session-data'));\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:444:    const sessionExtractor = require(path.join(EXTRACTORS_DIR, 'session-extractor'));\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:447:    assertType(sessionExtractor.generateSessionId, 'function', 'EXT-Session-001: generateSessionId exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:448:    assertType(sessionExtractor.getChannel, 'function', 'EXT-Session-002: getChannel exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:449:    assertType(sessionExtractor.detectContextType, 'function', 'EXT-Session-003: detectContextType exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:450:    assertType(sessionExtractor.detectImportanceTier, 'function', 'EXT-Session-004: detectImportanceTier exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:451:    assertType(sessionExtractor.detectProjectPhase, 'function', 'EXT-Session-005: detectProjectPhase exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:452:    assertType(sessionExtractor.extractActiveFile, 'function', 'EXT-Session-006: extractActiveFile exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:453:    assertType(sessionExtractor.extractNextAction, 'function', 'EXT-Session-007: extractNextAction exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:454:    assertType(sessionExtractor.extractBlockers, 'function', 'EXT-Session-008: extractBlockers exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:455:    assertType(sessionExtractor.buildFileProgress, 'function', 'EXT-Session-009: buildFileProgress exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:456:    assertType(sessionExtractor.countToolsByType, 'function', 'EXT-Session-010: countToolsByType exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:457:    assertType(sessionExtractor.calculateSessionDuration, 'function', 'EXT-Session-011: calculateSessionDuration exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:458:    assertType(sessionExtractor.calculateExpiryEpoch, 'function', 'EXT-Session-012: calculateExpiryEpoch exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:459:    assertType(sessionExtractor.extractKeyTopics, 'function', 'EXT-Session-013: extractKeyTopics exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:460:    assertType(sessionExtractor.detectSessionCharacteristics, 'function', 'EXT-Session-014: detectSessionCharacteristics exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:461:    assertType(sessionExtractor.buildProjectStateSnapshot, 'function', 'EXT-Session-015: buildProjectStateSnapshot exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:464:    const { generateSessionId } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:465:    const sessionId = generateSessionId();\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:466:    assertMatch(sessionId, /^session-\\\\d+-[a-z0-9]+$/, 'EXT-Session-016: Session ID format correct');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:468:    // Test unique session IDs\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:478:    const { getChannel } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:488:    const { detectContextType } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:496:    const { detectImportanceTier } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:503:    const { detectProjectPhase } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:510:    const { extractActiveFile } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:519:    const { extractNextAction } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:524:    const { extractBlockers } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:537:    const { buildFileProgress } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:543:    const { countToolsByType } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:550:    const { calculateSessionDuration } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:561:    const { calculateExpiryEpoch } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:573:    const { extractKeyTopics } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:574:    const topics = extractKeyTopics('Implemented OAuth authentication with JWT tokens');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:575:    assertArray(topics, 'EXT-Session-047: extractKeyTopics returns array');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:576:    if (topics.some(t => t.includes('oauth')) || topics.some(t => t.includes('authentication')) || topics.some(t => t.includes('tokens'))) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:577:      pass('EXT-Session-048: Relevant topics extracted', topics.slice(0, 3).join(', '));\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:579:      fail('EXT-Session-048: Relevant topics extracted', topics.join(', '));\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:583:    const topicsFiltered = extractKeyTopics('The quick fox jumps over the lazy dog');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:585:    if (!topicsFiltered.includes('the')) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:586:      pass('EXT-Session-049: Stopwords filtered', `'the' filtered, remaining: ${topicsFiltered.slice(0, 3).join(', ')}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:588:      fail('EXT-Session-049: Stopwords filtered', topicsFiltered.join(', '));\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:592:    const { detectSessionCharacteristics } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:600:    const { buildProjectStateSnapshot } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:764:        narrative: 'Observation duplicate of the authoritative manual decision.',\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:832:    assertEqual(dedupedFiles.length, 1, 'EXT-File-016: Duplicate files deduplicated');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:841:    assertEqual(normalizedDedupedFiles.length, 1, 'EXT-File-016b: Normalized path-equivalent files deduplicated');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:876:    const duplicateObs = [\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:881:    const uniqueAnchors = buildObservationsWithAnchors(duplicateObs, '007-test');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:897:    const baseFiles = [{ FILE_PATH: 'src/auth.js', DESCRIPTION: 'Modified during session' }];\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1070:    const topicFromFolder = extractMainTopic([], '007-oauth-auth');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1071:    if (topicFromFolder.includes('oauth') || topicFromFolder.includes('auth')) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1072:      pass('EXT-Impl-011: Topic from folder name', topicFromFolder);\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1074:      fail('EXT-Impl-011: Topic from folder name', topicFromFolder);\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1077:    const topicFromObs = extractMainTopic(MOCK_OBSERVATIONS, null);\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1078:    assertType(topicFromObs, 'string', 'EXT-Impl-012: Topic from observations is string');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1095:    assertEqual(dedupedBuilt.length, 1, 'EXT-Impl-016: Duplicate features deduplicated');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1189:    // Test with short session\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1192:    assertArray(shortPhases, 'EXT-Diag-008: Short session returns array');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1245:    assertType(opencodeCapture.getSessionResponses, 'function', 'EXT-OC-002: get_session_responses exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1249:    assertType(opencodeCapture.getRecentSessions, 'function', 'EXT-OC-006: get_recent_sessions exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1250:    assertType(opencodeCapture.getCurrentSession, 'function', 'EXT-OC-007: get_current_session exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1251:    assertType(opencodeCapture.getSessionMessages, 'function', 'EXT-OC-008: get_session_messages exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1292:    // Test get_recent_sessions with invalid project ID\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1294:    const sessions = await getRecentSessions('nonexistent-project-id', 10);\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1295:    assertArray(sessions, 'EXT-OC-025: Invalid project returns empty array');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1296:    assertEqual(sessions.length, 0, 'EXT-OC-026: No sessions for invalid project');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1298:    // Test get_session_messages with invalid session ID\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1300:    const messages = await getSessionMessages('nonexistent-session-id');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1301:    assertArray(messages, 'EXT-OC-027: Invalid session returns empty array');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1411:    const sessionExtractor = require(path.join(EXTRACTORS_DIR, 'session-extractor'));\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1430:    // Test session extractor with edge cases\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1431:    const { countToolsByType } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1447:    const { extractKeyTopics } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1448:    const topics1 = extractKeyTopics('');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1449:    assertArray(topics1, 'ERR-009: Empty string returns array');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1451:    const topics2 = extractKeyTopics(null);\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1452:    assertArray(topics2, 'ERR-010: Null summary returns array');\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1455:    const { calculateSessionDuration } = sessionExtractor;\\n.opencode/skills/system-spec-kit/scripts/tests/test-extractors-loaders.js:1514:    // Test session characteristics detection\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:7:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:13:import { get_embedding_dim, refresh_interference_scores_for_folder, sqlite_vec_available } from '../search/vector-index-store.js';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:37:  session_id?: string | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:138:  duplicateActiveLogicalKeys: string[];\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:176:  const row = database.prepare('SELECT * FROM memory_index WHERE id = ?').get(memoryId) as MemoryIndexRow | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:178:    throw new Error(`Memory ${memoryId} not found in memory_index`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:212:    ['session', normalizeScopeValue(row.session_id)],\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:431:    UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:453:    ? (sqlite_vec_available() ? 'success' : 'pending')\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:457:    INSERT INTO memory_index (\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:462:      trigger_phrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:482:    JSON.stringify(parsed.triggerPhrases),\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:512:  if (embedding && sqlite_vec_available()) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:529:        trigger_phrases: parsed.triggerPhrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:538:    recordHistory(memoryId, 'ADD', null, parsed.title ?? filePath, params.actor ?? 'mcp:memory_save');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:816:      actor: params.actor ?? 'mcp:memory_save',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:997:  const duplicateActiveLogicalKeys: string[] = [];\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:1014:  const duplicateActive = database.prepare(`\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:1022:  for (const issue of duplicateActive) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:1023:    duplicateActiveLogicalKeys.push(issue.logical_key);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:1054:    duplicateActiveLogicalKeys,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/lineage-state.ts:1076:    FROM memory_index\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:24:import { sanitizeTriggerPhrase, type TriggerPhraseSanitizeReason } from '../lib/trigger-phrase-sanitizer';\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:84:    sessionSummary?: string;\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:129:  'session summary',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:132:  'development session',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:133:  'session in progress',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:135:  'implementation session',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:362:  return extractYamlListEntries(extractMemoryMetadataYaml(content), 'trigger_phrases');\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:419:function buildD3Counts(triggerPhrases: string[]): Record<D3Reason, number> {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:420:  return triggerPhrases.reduce<Record<D3Reason, number>>((counts, phrase) => {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:437:function buildManualTriggerKeySet(triggerPhrases: string[] | undefined): Set<string> {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:439:    (Array.isArray(triggerPhrases) ? triggerPhrases : [])\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:447:  triggerPhrases: string[],\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:450:  return triggerPhrases.reduce<Record<D3Reason, number>>((counts, phrase) => {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:550:    structuredLog('warn', 'memory_save_review_violation', {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:568:      structuredLog('warn', 'memory_save_git_provenance_degraded', {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:577:      structuredLog('warn', 'memory_save_template_contract_violation', {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:625:    const savedTriggers = parseFrontmatterArray(fileContent, 'trigger_phrases');\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:632:    const metadataHasTriggerPhrases = /(^|\\\\n)trigger_phrases:\\\\s*/m.test(memoryMetadataYaml);\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:639:    const payloadSummary = (collectedData.sessionSummary || '').trim();\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:659:        message: `\\\"${savedTitle}\\\" — should reflect sessionSummary`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:673:          field: 'trigger_phrases',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:687:          field: 'trigger_phrases',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:689:          fix: `Add to trigger_phrases: ${JSON.stringify(missingPhrases.slice(0, 5))}`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:758:    const duplicatedDecisionPropositions = Array.from(normalizedOutcomePropositions).filter((proposition) => (\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:763:    if (duplicatedDecisionPropositions.length > 0) {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:768:        message: `decision proposition is repeated across outcomes, title, and rationale: ${JSON.stringify(duplicatedDecisionPropositions.slice(0, 3))}`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:769:        fix: 'Deduplicate repeated decision propositions across Key Outcomes, decision titles, and fallback rationale',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:781:        message: `completed-session closure guidance is repeated across ${closureSignals.length} surfaces`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:782:        fix: 'Keep completed-session closure guidance on the canonical Next Action surface only',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:807:    const normalizedSavedTriggers = Array.from(new Set(savedTriggers.map((trigger) => trigger.trim().toLowerCase()).filter(Boolean))).sort();\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:808:    const normalizedMetadataTriggers = Array.from(new Set(metadataTriggers.map((trigger) => trigger.trim().toLowerCase()).filter(Boolean))).sort();\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:813:        field: 'trigger_phrases',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:814:        message: `frontmatter trigger_phrases ${JSON.stringify(normalizedSavedTriggers)} drift from MEMORY METADATA ${JSON.stringify(normalizedMetadataTriggers)}`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:815:        fix: 'Render MEMORY METADATA trigger_phrases from the same resolved frontmatter trigger list',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:846:        'session focused on implementing and testing features',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:847:        'development session',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:857:          fix: `Replace with sessionSummary: \\\"${payloadSummary.substring(0, 100)}\\\"`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:885:          fix: 'Re-render the OVERVIEW from the full session summary using the boundary-safe truncation helper',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:901:    // CHECK-D3: trigger phrase sanitization.\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:912:        field: 'trigger_phrases',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:913:        message: `trigger_phrases contains unsanitized junk (${details})`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:914:        fix: 'Run trigger phrases through the Phase 3 sanitizer before render and persist only the kept phrases',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:934:        field: 'causal_links.supersedes',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:935:        message: `continuation signal matched \\\"${continuationPattern}\\\" but causal_links.supersedes is empty`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:936:        fix: 'Populate causal_links.supersedes when a continuation save has a valid predecessor',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:940:    // CHECK-D6: duplicate trigger phrases.\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:943:      const duplicates = new Set<string>();\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:948:          duplicates.add(normalized);\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:954:      if (duplicates.size > 0) {\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:958:          field: 'trigger_phrases',\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:959:          message: `duplicate trigger phrases detected: ${JSON.stringify(Array.from(duplicates))}`,\\n.opencode/skills/system-spec-kit/scripts/core/post-save-review.ts:960:          fix: 'Deduplicate trigger_phrases before the saved frontmatter is rendered',\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:23:import { extractKeyTopics } from './topic-extractor';\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:24:import type { DecisionForTopics } from './topic-extractor';\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:36:} from '../lib/trigger-phrase-sanitizer';\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:37:import { shouldAutoSave, collectSessionData } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:38:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:68:import { extractTriggerPhrases } from '../lib/trigger-extractor';\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:84:import type { FileChange, SessionData } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:303:  /** Path to a JSON file containing pre-collected session data. */\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:311:  /** Custom async function to collect live session data from the environment. */\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:319:  /** Optional session ID forwarded from CLI --session-id flag. */\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:320:  sessionId?: string;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:351:    /** Whether the data originated from a simulation rather than a live session. */\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:527:      // Merge FILES (deduplicate by path, prefer existing descriptions)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:537:      // Merge trigger phrases\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:538:      if (specContext.triggerPhrases.length > 0) {\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:541:          ...specContext.triggerPhrases,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:554:      if (specContext.summary && (!enriched.SUMMARY || enriched.SUMMARY === 'Development session')) {\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:575:      // Merge FILES (deduplicate by path)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:603:    // Synthetic observations provide file coverage but do not influence session narrative\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:654:      // Rec 1: Normalize JSON-derived preloaded data so sessionSummary → userPrompts,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:659:      // preserving preloadedData's non-normalized fields (e.g., _source, _sessionId).\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:672:        causalLinks: n.causalLinks ?? preloadedData.causalLinks,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:673:        causal_links: n.causal_links ?? preloadedData.causal_links,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:697:    // Step 1.5: Captured-session alignment check\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:698:    // When no JSON data file was provided, data comes from the active OpenCode session.\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:700:    // Cross-spec contamination (e.g., session working on spec A saved to spec B).\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:711:        const alignMsg = `ALIGNMENT_WARNING: Captured-session content matched the workspace but not the target spec folder \\\"${activeSpecFolderArg}\\\". ` +\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:731:            `The active session appears to be working on a different task (alignment keywords: [${alignmentTargets.keywordTargets.join(', ')}], ` +\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:849:      // Phase 002 T010: Clean _JSON_SESSION_SUMMARY (raw sessionSummary title candidate)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:920:    // Step 3.5: Enrich captured-session data with spec folder and git context\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:932:      log('Step 3.5: Enriching captured-session data...');\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1013:    const sessionDataFn = collectSessionDataFn || collectSessionData;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1014:    if (!sessionDataFn) {\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1016:        'Missing session data collector function.\\\\n' +\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1018:        '  - If using generate-context.js, ensure extractors/collect-session-data.js exports collectSessionData'\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1066:    const [sessionData, conversations, decisions, diagrams, workflowData] = await Promise.all([\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1068:      log('   Collecting session data...');\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1069:      const result = await sessionDataFn(narrativeCollectedData, specFolderName, options.sessionId);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1118:  // Patch TOOL_COUNT for enriched captured-session saves so V7 does not flag\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1121:  let patchedToolCount = Number.isFinite(sessionData.TOOL_COUNT) ? sessionData.TOOL_COUNT : 0;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1160:  log(`   Content quality: ${filterStats.qualityScore}/100 (${filterStats.noiseFiltered} noise, ${filterStats.duplicatesRemoved} duplicates filtered from ${filterStats.totalProcessed} items)`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1175:    sessionData.FILES || [],\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1206:  const specFolderBasename: string = path.basename(sessionData.SPEC_FOLDER || specFolderName);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1230:      sessionData._JSON_SESSION_SUMMARY || '',  // RC1: raw JSON sessionSummary as first candidate\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1231:      sessionData.QUICK_SUMMARY || '',\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1232:      sessionData.TITLE || '',\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1233:      sessionData.SUMMARY || '',\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1247:  const rawCtxFilename: string = `${sessionData.DATE}_${sessionData.TIME}__${contentSlug}.md`;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1251:  const keyTopicsInitial: string[] = extractKeyTopics(sessionData.SUMMARY, decisions.DECISIONS, specFolderName);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1254:    ?? buildMemoryTitle(preferredMemoryTask, specFolderName, sessionData.DATE, contentSlug);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1255:  // Keep dashboard titles stable across duplicate-save retries so content dedup\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1260:      summary: sessionData.SUMMARY,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1264:  // Pre-extract trigger phrases for template embedding AND later indexing\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1267:    // Build enriched text for trigger extraction from semantic session content only.\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1268:    const triggerSourceParts: string[] = [];\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1269:    if (sessionData.SUMMARY && sessionData.SUMMARY.length > 20) {\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1270:      triggerSourceParts.push(sessionData.SUMMARY);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1273:      if (d.TITLE) triggerSourceParts.push(d.TITLE);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1274:      if (d.RATIONALE) triggerSourceParts.push(d.RATIONALE);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1275:      if (d.CONTEXT) triggerSourceParts.push(d.CONTEXT);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1276:      if (d.CHOSEN) triggerSourceParts.push(d.CHOSEN);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1282:      if (f.DESCRIPTION && !f.DESCRIPTION.includes('pending')) triggerSourceParts.push(f.DESCRIPTION);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1292:    const triggerSource = triggerSourceParts.join('\\\\n');\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1293:    const autoExtractedTriggers = extractTriggerPhrases(triggerSource);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1299:    // RC2: Merge manual trigger phrases from JSON into frontmatter triggers.\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1354:    // CG-04: Domain-specific stopwords for single-word trigger phrases from folder names\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1361:      'based', 'features', 'perfect', 'session', 'capturing', 'pipeline',\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1397:    log(`   Pre-extracted ${preExtractedTriggers.length} trigger phrases`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1400:    warn(`   Warning: Pre-extraction of trigger phrases failed: ${errMsg}`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1404:  const memoryClassification = buildMemoryClassificationContext(collectedData, sessionData);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1405:  const sessionDedup = buildSessionDedupContext(collectedData, sessionData, memoryTitle);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1407:    collectedData.causal_links\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1408:    && typeof collectedData.causal_links === 'object'\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1409:    && !Array.isArray(collectedData.causal_links)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1410:  ) ? { ...(collectedData.causal_links as Record<string, unknown>) } : null;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1412:    collectedData.causalLinks\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1413:    && typeof collectedData.causalLinks === 'object'\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1414:    && !Array.isArray(collectedData.causalLinks)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1415:  ) ? { ...(collectedData.causalLinks as Record<string, unknown>) } : null;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1425:      summary: sessionData.SUMMARY,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1426:      sessionId: sessionData.SESSION_ID,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1428:      sourceSessionId: sessionData.SOURCE_SESSION_ID,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1429:      causal_links: currentSnakeCaseCausalLinks ?? undefined,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1430:      causalLinks: currentCamelCaseCausalLinks ?? undefined,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1438:      collectedData.causal_links = nextCausalLinks;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1439:      collectedData.causalLinks = nextCausalLinks;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1443:    sessionId: sessionData.SESSION_ID,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1444:    contextType: sessionData.CONTEXT_TYPE,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1478:  collectedData.causal_links = {\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1486:  collectedData.causalLinks = collectedData.causal_links;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1487:  const causalLinks = buildCausalLinksContext(collectedData);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1488:  const effectiveDecisionCount = Math.max(sessionData.DECISION_COUNT, decisions.DECISIONS.length);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1492:      ...sessionData,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1496:      // Captured-session mode, because conversations object contains TOOL_COUNT: 0\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1497:      // Which overwrites the patched value from captured-session enrichment.\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1499:      // O1-4: Uses patchedToolCount (local variable) instead of mutated sessionData.\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1508:      CANONICAL_DOCS: sessionData.CANONICAL_DOCS || {},\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1509:      CANONICAL_SOURCE_ENTRIES: Array.isArray((sessionData.CANONICAL_DOCS as unknown as Record<string, unknown> | undefined)?.CANONICAL_SOURCE_ENTRIES)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1510:        ? (sessionData.CANONICAL_DOCS as unknown as Record<string, unknown>).CANONICAL_SOURCE_ENTRIES as Array<Record<string, string>>\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1512:      DISTINGUISHING_EVIDENCE: sessionData.DISTINGUISHING_EVIDENCE || [],\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1515:      HAS_IMPLEMENTATION_GUIDE: sessionData.HAS_IMPLEMENTATION_GUIDE === true,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1546:      ...sessionDedup,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1547:      ...causalLinks,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1573:        const topics = (exchanges as Array<Record<string, unknown>>)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1575:          .map(ex => ex.topic || ex.userInput || 'exchange')\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1579:        return `${exchanges.length} exchanges${topics ? ` \\\\u2014 ${topics}` : ''}`;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1583:      timestamp: `${sessionData.DATE} ${sessionData.TIME}`,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1584:      messageCount: sessionData.MESSAGE_COUNT,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1588:      autoTriggered: shouldAutoSave(sessionData.MESSAGE_COUNT),\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1607:        fileCount: sessionData.FILE_COUNT,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1608:        capturedFileCount: sessionData.CAPTURED_FILE_COUNT,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1609:        filesystemFileCount: sessionData.FILESYSTEM_FILE_COUNT,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1610:        gitChangedFileCount: sessionData.GIT_CHANGED_FILE_COUNT,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1613:        transcriptPath: sessionData.SOURCE_TRANSCRIPT_PATH,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1614:        sessionId: sessionData.SOURCE_SESSION_ID,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1615:        sessionCreated: sessionData.SOURCE_SESSION_CREATED,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1616:        sessionUpdated: sessionData.SOURCE_SESSION_UPDATED,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1625:  let duplicateExistingFilename: string | null = null;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1631:        duplicateExistingFilename = rawCtxFilename;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1642:      warn(`   Warning: Could not preflight duplicate check for ${rawCtxFilename}: ${errMsg}`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1678:    triggerPhrases: preExtractedTriggers,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1680:    observations: sessionData.OBSERVATIONS || [],\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1682:    outcomes: sessionData.OUTCOMES || [],\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1683:    nextAction: sessionData.NEXT_ACTION,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1684:    blockers: sessionData.BLOCKERS,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1730:    const warningHeader = `> **Note:** This session had limited actionable content (input_completeness_score: ${filterStats.qualityScore}/100). ${filterStats.noiseFiltered} noise entries and ${filterStats.duplicatesRemoved} duplicates were filtered.\\\\n\\\\n`;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1732:    log(`   Warning: Low quality session (${filterStats.qualityScore}/100) - warning header added`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1736:    const simWarning = `<!-- WARNING: This is simulated/placeholder content - NOT from a real session -->\\\\n\\\\n`;\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1774:      `This typically means the captured session data does not contain meaningful content for this spec folder. ` +\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1802:      warn(`QUALITY_GATE_WARN: Captured-session save continuing despite soft validation failures: ${qualityValidation.failedRules.join(', ')}`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1839:            warn(`   [PRE-SAVE OVERLAP] Memory content matches existing \\\"${existingFile}\\\" — possible duplicate save`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1854:  if (duplicateExistingFilename) {\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1855:    log(`   Skipping ${ctxFilename}: duplicate of existing ${duplicateExistingFilename}`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1861:  // Have been skipped as a duplicate). Guard downstream operations accordingly.\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1934:    log('   Context file was a duplicate — skipping description tracking');\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1951:  log(`  - Session duration: ${sessionData.DURATION}\\\\n`);\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1966:          sessionSummary: collectedData.sessionSummary || jsonSessionSummary,\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:1975:    structuredLog('info', 'memory_save_started', {\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:2001:      'memory_save_review_completed',\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:2015:      structuredLog('warn', 'memory_save_review_failure', {\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:2025:    // to preserve content-based duplicate detection at line 1259)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:2062:  // RC-6 fix: Only index if the context file was actually written (not a duplicate skip)\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:2064:    log('   Skipping indexing — context file was a duplicate');\\n.opencode/skills/system-spec-kit/scripts/core/workflow.ts:2066:      'skipped_duplicate',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:12:import { collectSessionData } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:93:      sessionSummary: 'Completed runtime hardening.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:115:      spec_folder: '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:116:      session_summary: 'Verified generated memory render quality in snake_case JSON mode.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:117:      trigger_phrases: ['perfect session capturing', 'render quality', 'trigger phrases'],\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:136:        specFolderArg: '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:143:        'perfect session capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:145:        'trigger phrases',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:220:      sessionTitle: 'Copilot parity capture',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:221:      sessionId: 'copilot-parity',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:326:      sessionSummary: 'Stabilized delegated memory save runtime behavior.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:348:    const sessionData = await collectSessionData(normalized, '022-hybrid-rag-fusion');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:350:    expect(sessionData.SUMMARY).toBe('Stabilized delegated memory save runtime behavior.');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:351:    expect(sessionData.NEXT_ACTION).toBe('Add regression coverage for explicit dataFile failures.');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:385:    const sessionData = await collectSessionData(\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:390:    expect(sessionData.NEXT_ACTION).toBe('Promote the preserved structured next action.');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:394:      next_steps: ['This should not duplicate the existing next-step facts.'],\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:406:      sessionSummary: 'Session with no next steps.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:417:      sessionSummary: 'Both fields present.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:432:      sessionSummary: 'Edge case: empty first step.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:446:      sessionSummary: 'Critical save should keep the caller-provided tier.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:450:    const sessionData = await collectSessionData(\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:455:    expect(sessionData.IMPORTANCE_TIER).toBe('critical');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:456:    expect(sessionData.EXPIRES_AT_EPOCH).toBe(0);\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:462:      sessionSummary: 'Temporary save should retain the snake_case override.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:466:    const sessionData = await collectSessionData(\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:471:    expect(sessionData.IMPORTANCE_TIER).toBe('temporary');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:472:    expect(sessionData.EXPIRES_AT_EPOCH).toBeGreaterThan(sessionData.CREATED_AT_EPOCH);\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:478:      sessionSummary: 'Architecture work should still auto-detect as critical.',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:482:    const sessionData = await collectSessionData(\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:487:    expect(sessionData.IMPORTANCE_TIER).toBe('critical');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:488:    expect(sessionData.EXPIRES_AT_EPOCH).toBe(0);\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:495:      specFolder: '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:512:    const sessionData = await collectSessionData(\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:514:      '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:517:    expect(sessionData.NEXT_ACTION).toBe('run smoke tests on staging');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:523:      specFolder: '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:540:    const sessionData = await collectSessionData(\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:542:      '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:545:    expect(sessionData.NEXT_ACTION).toHaveLength(100);\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:555:      specFolder: '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:585:    const sessionData = await collectSessionData(\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:587:      '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:592:    expect(sessionData.NEXT_ACTION).toBe('Fix bug X');\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:597:      specFolder: '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:615:    const sessionData = await collectSessionData(\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:617:      '022-hybrid-rag-fusion/009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/runtime-memory-inputs.vitest.ts:622:    expect(sessionData.NEXT_ACTION).toBe('Deploy to staging');\\n.opencode/skills/system-spec-kit/scripts/tests/distinguishing-evidence-dedup.vitest.ts:3:import { buildDistinctiveEvidence } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/distinguishing-evidence-dedup.vitest.ts:6:  it('deduplicates repeated bullets and prefers file-line anchored evidence', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/distinguishing-evidence-dedup.vitest.ts:18:        'scripts/extractors/collect-session-data.ts:1200 canonical docs now render from relative links.',\\n.opencode/skills/system-spec-kit/scripts/tests/distinguishing-evidence-dedup.vitest.ts:24:      'scripts/extractors/collect-session-data.ts:1200 canonical docs now render from relative links.',\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:19:import { extractTriggerPhrases } from '../lib/trigger-extractor';\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:20:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:26:  | 'skipped_duplicate'\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:104:  let triggerPhrases: string[] = [];\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:106:    // Start with pre-extracted triggers (from enriched sources), fall back to content extraction\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:108:      triggerPhrases = [...preExtractedTriggers];\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:109:      console.log(`   Using ${triggerPhrases.length} pre-extracted trigger phrases`);\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:111:      triggerPhrases = extractTriggerPhrases(content);\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:112:      console.log(`   Extracted ${triggerPhrases.length} trigger phrases from content`);\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:118:      const existingLower = new Set(triggerPhrases.map((p) => p.toLowerCase()));\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:121:          triggerPhrases.push(phrase);\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:124:      console.log(`   Total: ${triggerPhrases.length} trigger phrases (${manualPhrases.length} manual)`);\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:126:  } catch (triggerError: unknown) {\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:127:    const errMsg = triggerError instanceof Error ? triggerError.message : String(triggerError);\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:134:      triggerPhrases = collectedData._manualTriggerPhrases;\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:135:      console.log(`   Using ${triggerPhrases.length} manual trigger phrases`);\\n.opencode/skills/system-spec-kit/scripts/core/memory-indexer.ts:167:      triggerPhrases: triggerPhrases,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:41:| **Alignment Validation**    | Calculate alignment scores between conversation topics and spec folder names        |\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:45:| **CLI Authority**           | Respect explicit CLI spec-folder targets without rerouting to session-learning picks |\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:123:const topics = extractConversationTopics({\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:173:| `alignment-validator.ts` | Validates alignment between conversation topics and folder names. Calculates scores |\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:199:node scripts/dist/memory/generate-context.js /tmp/save-context-data.json specs/<###-feature-name>/\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:201:node scripts/dist/memory/generate-context.js /tmp/save-context-data.json .opencode/specs/<###-feature-name>/\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:208:**Cause**: Conversation topics don't match folder name keywords\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:213:node scripts/dist/memory/generate-context.js /tmp/context.json specs/<###-feature-name>/\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:216:node scripts/dist/memory/generate-context.js 003-parent/001-child\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:219:node scripts/dist/memory/generate-context.js .opencode/specs/system-spec-kit/022-hybrid-rag-fusion/012-code-audit-per-feature-catalog/021-remediation-revalidation\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:260:# Test with actual generate-context script (which uses these utilities)\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:261:node scripts/dist/memory/generate-context.js --help\\n.opencode/skills/system-spec-kit/scripts/spec-folder/README.md:276:| [scripts/memory/generate-context.ts](../memory/generate-context.ts)                        | Main memory save script that uses these utilities |\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-title-description-override.vitest.ts:67:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-title-description-override.vitest.ts:72:        sessionSummary: 'Patched the structured memory-save schema so explicit authored metadata wins.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-title-description-override.vitest.ts:75:        triggerPhrases: ['authored metadata override', 'structured json save'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-title-description-override.vitest.ts:109:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-title-description-override.vitest.ts:114:        sessionSummary: 'Implemented a fallback save path for the title builder when explicit title is absent.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-title-description-override.vitest.ts:116:        triggerPhrases: ['title fallback verification'],\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:8:// - similarity in [0.88, 1.0]: MERGE (duplicate — merge content, boost importance_weight)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:9:// - similarity in [0.75, 0.88): CONFLICT (supersede prior memory via causal 'supersedes' edge)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:16:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:18:import * as causalEdges from './causal-edges.js';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:60:  triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:93:  causalEdgeId: number | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:129:/** Threshold above which memories are merged (near-duplicates) */\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:223:    const memoryIndexColumns = getTableColumns(db, 'memory_index');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:225:    const existingRow = db.prepare('SELECT * FROM memory_index WHERE id = ?').get(existingMemory.id) as Record<string, unknown> | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:240:    // Better-sqlite3's synchronous transaction callback).\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:257:      const currentRow = db.prepare('SELECT * FROM memory_index WHERE id = ?').get(existingMemory.id) as Record<string, unknown> | undefined;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:278:      const mergedTriggerPhrases = buildMergedTriggerPhrases(currentRow, newMemory.triggerPhrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:285:        trigger_phrases: mergedTriggerPhrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:291:        UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:303:        trigger_phrases: mergedTriggerPhrases,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:320:        INSERT INTO memory_index (${insertColumns.join(', ')})\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:346:      // Create supersedes causal edge\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:348:        INSERT OR IGNORE INTO causal_edges (source_id, target_id, relation, strength, extracted_at)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:465: * - Create a 'supersedes' causal edge from new -> existing\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:482:    // Add causal 'supersedes' edge only when caller provides a distinct new ID.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:495:          UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:508:        edgeId = causalEdges.insertEdge(\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:526:          UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:547:      causalEdgeId: edgeId,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:632:    // Caller owns canonical create flow (prevents duplicate writes).\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:773:    db.exec('ALTER TABLE memory_index ADD COLUMN bm25_repair_needed INTEGER DEFAULT 0');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:777:    if (message.toLowerCase().includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:797:      UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:854:  triggerPhrases?: string[],\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:856:  if (Array.isArray(triggerPhrases)) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:857:    return JSON.stringify(triggerPhrases);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:859:  const existingValue = existingRow.trigger_phrases;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/reconsolidation.ts:922:    session_id: existingRow.session_id,\\n.opencode/skills/system-spec-kit/scripts/core/title-builder.ts:57:  const fallback = readableFolder.length > 0 ? `${readableFolder} session ${_date}` : `Session ${_date}`;\\n.opencode/skills/system-spec-kit/scripts/core/tree-thinning.ts:24:  /** Memory-specific thinning trigger threshold */\\n.opencode/skills/system-spec-kit/scripts/core/tree-thinning.ts:186:      // Memory thinning trigger: merge into parent\\n.opencode/skills/system-spec-kit/scripts/tests/validation-rule-metadata.vitest.ts:57:  it('blocks indexing but allows write for V12 topical mismatch', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/validation-rule-metadata.vitest.ts:73:  it('triggers V12 when memory content has zero overlap with spec trigger_phrases', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/validation-rule-metadata.vitest.ts:74:    // Build a memory file whose content has no overlap with the spec's trigger_phrases.\\n.opencode/skills/system-spec-kit/scripts/tests/validation-rule-metadata.vitest.ts:75:    // V12 requires a spec_folder that points to a spec.md with trigger_phrases, and then\\n.opencode/skills/system-spec-kit/scripts/tests/validation-rule-metadata.vitest.ts:86:      'trigger_phrases: []',\\n.opencode/skills/system-spec-kit/scripts/tests/validation-rule-metadata.vitest.ts:91:      'This memory discusses something entirely off-topic with no spec alignment.',\\n.opencode/skills/system-spec-kit/scripts/tests/validation-rule-metadata.vitest.ts:96:    // V12 passes when no spec.md is found on disk (no trigger_phrases to compare against).\\n.opencode/skills/system-spec-kit/scripts/tests/validation-rule-metadata.vitest.ts:97:    // The rule only fires when it can read a spec.md with trigger_phrases and finds zero overlap.\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/no-children/spec.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality-v12-normalization.vitest.ts:25:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality-v12-normalization.vitest.ts:41:describe('V12 topical normalization', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality-v12-normalization.vitest.ts:47:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality-v12-normalization.vitest.ts:55:It should satisfy the topical coherence gate even though the spec trigger phrases are prose.\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality-v12-normalization.vitest.ts:66:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality-v12-normalization.vitest.ts:80:  it('fails when the memory body has zero overlap with the spec trigger phrases', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality-v12-normalization.vitest.ts:85:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/validate-memory-quality-v12-normalization.vitest.ts:105:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:4:// Feature catalog: Causal edge creation (memory_causal_link)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:6:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:35:  caused:       1.3,  // Strong causal link\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:36:  enabled:      1.1,  // Weak causal link\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:103:  edgeId?: number;          // T202: causal_edges.id for unlink workflow\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:146:    database.exec('CREATE INDEX IF NOT EXISTS idx_causal_source ON causal_edges(source_id)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:147:    database.exec('CREATE INDEX IF NOT EXISTS idx_causal_target ON causal_edges(target_id)');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:168:    console.warn('[causal-edges] Database not initialized. Server may still be starting up.');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:183:  // Fix #26 (FK check) deferred — test environments use synthetic IDs not in memory_index.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:184:  // Implementing FK validation would require seeding memory_index in 20+ causal edge tests.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:190:      console.warn(`[causal-edges] Edge bounds: node ${sourceId} has ${edgeCount} edges (max ${MAX_EDGES_PER_NODE}), rejecting auto edge`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:198:      console.warn('[causal-edges] insertEdge rejected non-finite strength');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:218:        SELECT id, strength FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:223:        INSERT INTO causal_edges (source_id, target_id, relation, strength, evidence, created_by)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:227:          evidence = COALESCE(excluded.evidence, causal_edges.evidence)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:231:        SELECT id FROM causal_edges WHERE source_id = ? AND target_id = ? AND relation = ?\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:250:    console.warn(`[causal-edges] insertEdge error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:296:    console.warn(`[causal-edges] insertEdgesBatch error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:310:    const edgeColumns = (database.prepare('PRAGMA table_info(causal_edges)').all() as Array<{ name: string }>)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:319:      INSERT OR IGNORE INTO causal_edges (${edgeColumns.join(', ')})\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:351:    console.warn(`[causal-edges] bulkInsertEdges error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:373:      SELECT * FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:382:        console.warn(`[causal-edges] touchEdgeAccess failed for edge ${edge.id}: ${e instanceof Error ? e.message : String(e)}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:388:    console.warn(`[causal-edges] getEdgesFrom error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:398:      SELECT * FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:407:        console.warn(`[causal-edges] touchEdgeAccess failed for edge ${edge.id}: ${e instanceof Error ? e.message : String(e)}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:413:    console.warn(`[causal-edges] getEdgesTo error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:423:      SELECT * FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:432:    console.warn(`[causal-edges] getAllEdges error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:521:        console.warn('[causal-edges] updateEdge rejected non-finite strength');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:543:          'SELECT strength FROM causal_edges WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:551:        `UPDATE causal_edges SET ${parts.join(', ')} WHERE id = ?`\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:573:    console.warn(`[causal-edges] updateEdge error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:583:      'DELETE FROM causal_edges WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:591:    console.warn(`[causal-edges] deleteEdge error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:603:    DELETE FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:622:    const total = (db.prepare('SELECT COUNT(*) as count FROM causal_edges') as Database.Statement).get() as { count: number };\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:623:    const byRelation = (db.prepare('SELECT relation, COUNT(*) as count FROM causal_edges GROUP BY relation') as Database.Statement).all() as Array<{ relation: string; count: number }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:624:    const avgStrength = (db.prepare('SELECT AVG(strength) as avg FROM causal_edges') as Database.Statement).get() as { avg: number | null };\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:625:    const sources = (db.prepare('SELECT COUNT(DISTINCT source_id) as count FROM causal_edges') as Database.Statement).get() as { count: number };\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:626:    const targets = (db.prepare('SELECT COUNT(DISTINCT target_id) as count FROM causal_edges') as Database.Statement).get() as { count: number };\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:642:    console.warn(`[causal-edges] getGraphStats error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:652:      SELECT ce.* FROM causal_edges ce\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:653:      WHERE NOT EXISTS (SELECT 1 FROM memory_index m WHERE CAST(m.id AS TEXT) = ce.source_id)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:654:        OR NOT EXISTS (SELECT 1 FROM memory_index m WHERE CAST(m.id AS TEXT) = ce.target_id)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:658:    console.warn(`[causal-edges] findOrphanedEdges error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:678:    console.warn(`[causal-edges] cleanupOrphanedEdges error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:688: * Create causal relationship chain between spec folder documents.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:692: * @param documentIds Map of document_type -> memory_index.id for documents in the same spec folder\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:763:    console.warn(`[causal-edges] getWeightHistory error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:776:        'SELECT strength FROM causal_edges WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:811:        'UPDATE causal_edges SET strength = ? WHERE id = ?'\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:827:    console.warn(`[causal-edges] rollbackWeights error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:840:      SELECT COUNT(*) as count FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:846:    console.warn(`[causal-edges] countEdgesForNode error: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:854:    \\\"UPDATE causal_edges SET last_accessed = datetime('now') WHERE id = ?\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:862:      SELECT * FROM causal_edges\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/causal-edges.ts:869:    console.warn(`[causal-edges] getStaleEdges error: ${msg}`);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:11:import type { SessionData } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:12:import { collectSessionData } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:35:      triggerPhrases: 20,\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:67:    triggerPhrases: 4,\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:84:    MESSAGES: [{ TIMESTAMP: '2026-03-06T09:00:00Z', ROLE: 'User', CONTENT: 'Development session', TOOL_CALLS: [] }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:123:    String(data.TRIGGER_PHRASES_YAML ?? 'trigger_phrases: []'),\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:141:    '<!-- ANCHOR:continue-session -->',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:156:    '<!-- ANCHOR:session-history -->',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:170:    'session_id: \\\"test-session\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:196:        userPrompts: [{ prompt: 'Development session', timestamp: '2026-03-06T09:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:202:      userPrompts: [{ prompt: 'Development session', timestamp: '2026-03-06T09:01:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:217:    task: 'Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:223:    triggerPhrases: [],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:286:    SESSION_ID: 'session-test',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:383:      triggerPhrases: 4,\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:402:      triggerPhrases: 20,\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:430:  'Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:436:  'Work session',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:456:    expect(isContaminatedMemoryName('Epistemic state captured at session start for learning delta calculation.')).toBe(true);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:463:    expect(shouldEnrichTaskFromSpecTitle('Development session', 'file', null)).toBe(false);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:464:    expect(shouldEnrichTaskFromSpecTitle('Development session', 'opencode-capture', '/tmp/context.json')).toBe(false);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:468:    expect(shouldEnrichTaskFromSpecTitle('Development session', 'opencode-capture', null)).toBe(true);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:493:  const genericTask = 'Development session';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:558:  it('prefers specific session semantics over folder fallback when task and spec title are unusable', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:560:      'Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:569:      'Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:579:      'Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:601:    triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:607:    const triggerLines = (overrides.triggerPhrases ?? ['memory audit', 'lint gate'])\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:635:      '- No significant gaps identified at session start',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:649:      'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:650:      triggerLines,\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:670:  it('does not treat quoted template tokens in session content as V6 leakage', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:700:  it('fails when frontmatter trigger phrases reference a foreign spec id', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:702:      triggerPhrases: [\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:819:  it('passes V10 when capturedFileCount is 0 (no file references in session)', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:899:    const sessionData = await collectSessionData(collectedData, '022-hybrid-rag-fusion');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:901:    expect(sessionData.TITLE).toBe('hybrid rag fusion');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:902:    expect(sessionData.QUICK_SUMMARY).toBe('Direct save naming fix for hybrid RAG fusion collector path');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:906:    const sessionData = await collectSessionData({\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:907:      SPEC_FOLDER: '009-perfect-session-capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:908:      userPrompts: [{ prompt: 'Validate session source counts', timestamp: '2026-03-16T08:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:927:      _sourceTranscriptPath: '/tmp/.claude/projects/spec-kit/session-123.jsonl',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:928:      _sourceSessionId: 'session-123',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:931:    }, '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:933:    expect(sessionData.CAPTURED_FILE_COUNT).toBe(1);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:934:    expect(sessionData.FILESYSTEM_FILE_COUNT).toBe(2);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:935:    expect(sessionData.GIT_CHANGED_FILE_COUNT).toBe(1);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:936:    expect(sessionData.FILE_COUNT).toBe(2);\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:937:    expect(sessionData.SOURCE_TRANSCRIPT_PATH).toContain('session-123.jsonl');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:938:    expect(sessionData.SOURCE_SESSION_ID).toBe('session-123');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:960:      const sessionData = createSessionData(specFolderName || '022-hybrid-rag-fusion');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:961:      sessionData.QUICK_SUMMARY = 'Hybrid RAG fusion recall regression audit';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:962:      sessionData.TITLE = 'Hybrid RAG fusion recall regression audit';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:963:      sessionData.SUMMARY = 'Hybrid RAG fusion recall regression audit for file-backed root save naming.';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:964:      return sessionData;\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:969:      userPrompts: [{ prompt: 'Development session', timestamp: '2026-03-06T09:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:990:    const specFolderPath = path.join(tempRoot, '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1017:          userPrompts: [{ prompt: 'Perfect session capturing', timestamp: '2026-03-15T15:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1019:        collectSessionDataFn: async (_collectedData, specFolderName) => createSessionData(specFolderName || '009-perfect-session-capturing'),\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1038:  it.skip('persists source provenance fields and excludes raw path noise from trigger extraction', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1040:    const specFolderPath = path.join(tempRoot, '011-session-source-validation');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1060:          userPrompts: [{ prompt: 'Validate Claude session source provenance', timestamp: '2026-03-16T12:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1063:          ...createSessionData(specFolderName || '011-session-source-validation'),\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1064:          SUMMARY: 'Bound Claude transcript selection to expected session id and history timestamps.',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1068:              DESCRIPTION: 'Bound Claude transcript selection to expected session id and history timestamps.',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1072:              FILE_PATH: 'src/zorbiumsessionpath.ts',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1083:          SOURCE_TRANSCRIPT_PATH: '/tmp/.claude/projects/spec-kit/session-abc.jsonl',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1084:          SOURCE_SESSION_ID: 'session-abc',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1092:      expect(rendered).toContain('_sourceTranscriptPath: \\\"/tmp/.claude/projects/spec-kit/session-abc.jsonl\\\"');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1093:      expect(rendered).toContain('_sourceSessionId: \\\"session-abc\\\"');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1096:      expect(rendered).not.toContain('zorbiumsessionpath');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1106:    const specFolderPath = path.join(tempRoot, '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1130:      userPrompts: [{ prompt: 'Perfect session capturing hardening', timestamp: '2026-03-06T09:01:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1134:          narrative: 'Updated stateless alignment handling for perfect session capturing.',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1151:        collectSessionDataFn: async (_collectedData, specFolderName) => createSessionData(specFolderName || '009-perfect-session-capturing'),\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1164:    const specFolderPath = path.join(tempRoot, '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1212:        collectSessionDataFn: async (_collectedData, specFolderName) => createSessionData(specFolderName || '009-perfect-session-capturing'),\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1227:    const specFolderPath = path.join(tempRoot, '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1253:        triggerPhrases: 1,\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1265:          userPrompts: [{ prompt: 'Perfect session capturing', timestamp: '2026-03-15T15:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1267:        collectSessionDataFn: async (_collectedData, specFolderName) => createSessionData(specFolderName || '009-perfect-session-capturing'),\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1282:    const specFolderPath = path.join(tempRoot, '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1321:          userPrompts: [{ prompt: 'Perfect session capturing', timestamp: '2026-03-15T15:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1330:        collectSessionDataFn: async (_collectedData, specFolderName) => createSessionData(specFolderName || '009-perfect-session-capturing'),\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1343:    const specFolderPath = path.join(tempRoot, '009-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1362:      'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1382:          userPrompts: [{ prompt: 'Perfect session capturing', timestamp: '2026-03-15T15:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1391:        collectSessionDataFn: async (_collectedData, specFolderName) => createSessionData(specFolderName || '009-perfect-session-capturing'),\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1428:      userPrompts: [{ prompt: 'Development session', timestamp: '2026-03-06T09:01:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1432:      const sessionData = createSessionData(specFolderName || '013-memory-search-bug-fixes');\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1433:      sessionData.QUICK_SUMMARY = 'Development session';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1434:      sessionData.TITLE = 'Development session';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1435:      sessionData.SUMMARY = 'Implementation and updates';\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1436:      return sessionData;\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1441:      userPrompts: [{ prompt: 'Development session', timestamp: '2026-03-06T09:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1512:          userPrompts: [{ prompt: 'Development session', timestamp: '2026-03-06T09:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1526:        userPrompts: [{ prompt: 'Development session', timestamp: '2026-03-06T09:01:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1607:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1620:  it('V11 fails when trigger phrases are error-dominated', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1625:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/task-enrichment.vitest.ts:1646:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:28:    const specRoot = path.join(makeTempSpecRoot(), '010-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:32:      triggerPhrases: ['perfect session capturing', 'stateless capture quality'],\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:39:        'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:40:        '  - \\\"perfect session capturing\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:56:    expect(targets.specId).toBe('010-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:58:      '010 perfect session capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:59:      'perfect session capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:66:    const specRoot = path.join(makeTempSpecRoot(), '010-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:91:    const specRoot = path.join(makeTempSpecRoot(), '010-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:132:  it('filters single-word stopword trigger phrases from exact phrase anchors', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:140:        'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/spec-affinity.vitest.ts:167:        'trigger_phrases:',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:11:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:79:    const columns = (db.prepare('PRAGMA table_info(memory_index)').all() as Array<{ name: string }>);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:120:          FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:127:          FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:205:          UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:210:          UPDATE memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:290:          FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:295:          FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:351:            FROM memory_index\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/incremental-index.ts:356:            FROM memory_index\\n.opencode/skills/system-spec-kit/scripts/tests/progressive-validation.vitest.ts:542:      // File with trailing spaces → triggers WHITESPACE fix\\n.opencode/skills/system-spec-kit/scripts/tests/progressive-validation.vitest.ts:587:      // File with trailing spaces → will trigger WHITESPACE fix\\n.opencode/skills/system-spec-kit/scripts/core/alignment-validator.ts:11:import type { FileChange } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:10:import type { SessionData } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:64:    SESSION_ID: 'session-render-fixture',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:120:    CONTEXT_SUMMARY: 'This fixture exercises the real workflow render path with deterministic session data.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:199:            prompt: 'Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:232:      expect(result.contextFilename).not.toContain('development-session');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:238:      expect(frontmatterTitle).not.toMatch(/to promote a memory|epistemic state captured at session start|table of contents/i);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:239:      expect(rendered).not.toMatch(/^#\\\\s*(To promote a memory|Epistemic state captured at session start|Table of Contents)\\\\b/im);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:241:      expect(frontmatter).toContain('trigger_phrases:');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:244:      expect(frontmatter.match(/trigger_phrases:/g)?.length ?? 0).toBe(1);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:245:      expect(frontmatter).toMatch(/trigger_phrases:\\\\n  - \\\"/);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:247:      expect(frontmatter).not.toContain('session summary');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:288:          userPrompts: [{ prompt: 'Development session', timestamp: '2026-03-06T09:25:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:293:              facts: ['Tool: Read File: scripts/core/workflow.ts Result: development session'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:301:            TITLE: 'Development session',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:315:      expect(result.contextFilename).not.toContain('development-session');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:320:      expect(heading).not.toMatch(/development session|to promote a memory|constitutional tier|always surfaced/i);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:321:      expect(frontmatterTitle).not.toMatch(/development session|to promote a memory|constitutional tier|always surfaced/i);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:331:  it('renders session-source provenance and split file counts into frontmatter', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:338:      const specFolderPath = path.join(tempRoot, '011-session-source-validation');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:355:          userPrompts: [{ prompt: 'Validate session source provenance', timestamp: '2026-03-16T12:00:00Z' }],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:358:          specFolderName || '011-session-source-validation',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:360:            SOURCE_TRANSCRIPT_PATH: '/tmp/.claude/projects/spec-kit/session-xyz.jsonl',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:361:            SOURCE_SESSION_ID: 'session-xyz',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:376:      expect(frontmatter).toContain('_sourceTranscriptPath: \\\"/tmp/.claude/projects/spec-kit/session-xyz.jsonl\\\"');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:377:      expect(frontmatter).toContain('_sourceSessionId: \\\"session-xyz\\\"');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:390:  it('renders an empty trigger list when no trigger phrases are provided', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:402:        TRIGGER_PHRASES_YAML: 'trigger_phrases: []',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:433:      expect(frontmatter).toContain('trigger_phrases: []');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:435:      expect(frontmatter.match(/trigger_phrases:/g)?.length ?? 0).toBe(1);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:437:      expect(rendered).not.toContain('session summary');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:480:                'Tool: read File: scripts/extractors/collect-session-data.ts Result: inspected quick summary derivation',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:483:              files: ['scripts/extractors/collect-session-data.ts', 'scripts/tests/memory-render-fixture.vitest.ts'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:508:  it.skip('escapes literal anchor examples from captured session text without breaking real anchors', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:515:      const specFolderPath = path.join(tempRoot, '010-perfect-session-capturing');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:541:              narrative: 'Verified that literal anchor examples from the session render as escaped text instead of malformed real anchors.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:548:        collectSessionDataFn: async (_input, specFolderName) => createSessionData(specFolderName || '010-perfect-session-capturing'),\\n.opencode/skills/system-spec-kit/scripts/tests/memory-render-fixture.vitest.ts:656:  it('renders git provenance metadata into the session summary table and YAML block (M-007d)', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/no-children/plan.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:5:// Schema migration for the learned_triggers column.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:7:// ALTER TABLE memory_index ADD COLUMN learned_triggers TEXT DEFAULT '[]';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:13:// Rollback: ALTER TABLE memory_index DROP COLUMN learned_triggers;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:22: * A single learned trigger entry stored in the learned_triggers JSON array.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:39:/** Column name for learned triggers (NOT in FTS5 index) */\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:40:export const LEARNED_TRIGGERS_COLUMN = 'learned_triggers';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:42:/** Default value for the learned_triggers column */\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:50: * Add the learned_triggers column to memory_index if it does not already exist.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:53: * CRITICAL: This column is stored on memory_index only. It is NOT added to\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:55: *   title, trigger_phrases, file_path, content_text\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:56: * learned_triggers is deliberately excluded to keep user-generated content\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:65:    const columns = db.prepare('PRAGMA table_info(memory_index)').all() as Array<{ name: string }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:73:      `ALTER TABLE memory_index ADD COLUMN ${LEARNED_TRIGGERS_COLUMN} TEXT DEFAULT '${LEARNED_TRIGGERS_DEFAULT}'`\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:76:    console.warn('[learned-triggers-schema] Migration complete: learned_triggers column added');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:80:    // SQLite may report \\\"duplicate column name\\\" if run concurrently\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:81:    if (msg.includes('duplicate column')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:84:    console.error(`[learned-triggers-schema] Migration failed: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:94: * CRITICAL test: Verify that learned_triggers is NOT present in the\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:99: *   title, trigger_phrases, file_path, content_text\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:101: * If learned_triggers appears in FTS5, it means user-generated feedback\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:105: * @returns true if isolation is verified (learned_triggers NOT in FTS5)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:106: * @throws Error if learned_triggers IS found in FTS5 (critical violation)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:112:      `SELECT sql FROM sqlite_master WHERE type='table' AND name='memory_fts'`\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:122:    // Check that learned_triggers does NOT appear in the FTS5 CREATE statement\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:123:    if (createSql.includes('learned_triggers')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:125:        'CRITICAL: learned_triggers found in FTS5 index (memory_fts). ' +\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:126:        'This violates data isolation requirements. Learned triggers must ' +\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:127:        'ONLY exist in the memory_index.learned_triggers column, never in FTS5.'\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:137:    console.error(`[learned-triggers-schema] FTS5 isolation check failed: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:147: * Drop the learned_triggers column from memory_index.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:156:    const columns = db.prepare('PRAGMA table_info(memory_index)').all() as Array<{ name: string }>;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:163:    db.exec(`ALTER TABLE memory_index DROP COLUMN ${LEARNED_TRIGGERS_COLUMN}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:164:    console.warn('[learned-triggers-schema] Rollback complete: learned_triggers column removed');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:168:    console.error(`[learned-triggers-schema] Rollback failed: ${msg}`);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:178: * Parse the learned_triggers JSON column value into typed entries.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:181: * @returns Parsed array of learned trigger entries\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:203: * Serialize learned trigger entries to JSON for storage.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/learned-triggers-schema.ts:205: * @param entries - Array of learned trigger entries\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase1.vitest.ts:11:const COLLECT_SESSION_DATA_PATH = path.join(TEST_DIR, '..', 'extractors', 'collect-session-data.ts');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase1.vitest.ts:16:  sessionSummary: string;\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase1.vitest.ts:26:    const result = truncateOnWordBoundary(fixture.sessionSummary, 500);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase1.vitest.ts:28:    const nextChar = fixture.sessionSummary.charAt(keptText.length);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase1.vitest.ts:31:    expect(fixture.sessionSummary.length).toBeGreaterThan(600);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase1.vitest.ts:34:    expect(fixture.sessionSummary.startsWith(keptText)).toBe(true);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase1.vitest.ts:36:    expect(collectSessionDataSource).toContain('truncateOnWordBoundary(data.sessionSummary, 500)');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:21:vi.mock('../extractors/collect-session-data', () => ({\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:40:describe('generate-context CLI authority', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:58:    process.argv = ['node', path.join('scripts', 'dist', 'memory', 'generate-context.js'), dataFile, explicitSpecFolder];\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:60:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:76:  it('forwards explicit --session-id to workflow', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:79:    const sessionId = 'test-session-123';\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:82:      path.join('scripts', 'dist', 'memory', 'generate-context.js'),\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:83:      '--session-id',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:84:      sessionId,\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:89:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:97:      sessionId,\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:111:      sessionSummary: 'Structured stdin payload should not override an explicit CLI target.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:114:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:123:        sessionSummary: 'Structured stdin payload should not override an explicit CLI target.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:137:      sessionSummary: 'Inline JSON should resolve its own spec folder when no override exists.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:140:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:149:        sessionSummary: 'Inline JSON should resolve its own spec folder when no override exists.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:163:      sessionSummary: 'Equivalent structured payloads should resolve identically across stdin and inline JSON modes.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:164:      triggerPhrases: ['structured parity', 'stdin json parity'],\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:167:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:182:        sessionSummary: 'Equivalent structured payloads should resolve identically across stdin and inline JSON modes.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:191:        sessionSummary: 'Equivalent structured payloads should resolve identically across stdin and inline JSON modes.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:203:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:219:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:231:      sessionSummary: 'Missing target should fail before workflow execution.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:234:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:246:      sessionSummary: 'Invalid target should fail validation before workflow execution.',\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:249:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/generate-context-cli-authority.vitest.ts:264:      await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/trigger-phrase-sanitizer.vitest.ts:6:} from '../lib/trigger-phrase-sanitizer';\\n.opencode/skills/system-spec-kit/scripts/tests/trigger-phrase-sanitizer.vitest.ts:8:describe('trigger-phrase sanitizer', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/trigger-phrase-sanitizer.vitest.ts:32:    expect(sanitizeTriggerPhrase('session for')).toEqual({ keep: false, reason: 'synthetic_bigram' });\\n.opencode/skills/system-spec-kit/scripts/tests/trigger-phrase-sanitizer.vitest.ts:44:  it('deduplicates and preserves only kept phrases in wrapper output', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:9:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:78:    sessionSummary: 'Healthy reviewer contract baseline for PR-9.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:90:  triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:102:  const triggerPhrases = options.triggerPhrases ?? [\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:115:    'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:116:    ...triggerPhrases.map((phrase) => `  - \\\"${phrase}\\\"`),\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:144:    'session_id: \\\"phase4-pr9-inline\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:152:    'causal_links:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:237:  it('triggers CHECK-D1 HIGH on the broken truncation fixture and emits M1 + M8', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:247:  it('triggers CHECK-D2 HIGH on placeholder contamination and emits M2 + M8', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:257:        sessionSummary: 'Placeholder contamination should be caught.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:269:  it('triggers CHECK-D3 MEDIUM on unsanitized trigger phrases and emits M3 + M8', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:271:      triggerPhrases: ['and', 'with phases', 'specs/026-graph-and-context-optimization'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:278:        sessionSummary: 'Unsanitized trigger phrases should be caught.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:289:  it('triggers CHECK-D4 HIGH on the broken tier-drift fixture and emits M4 + M8', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:299:  it('triggers CHECK-D5 MEDIUM on continuation titles without supersedes and emits M5 + M8', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:309:        sessionSummary: 'Continuation saves should carry supersedes lineage.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:320:  it('triggers CHECK-D6 MEDIUM on duplicate trigger phrases and emits M8', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:322:      triggerPhrases: ['phase 4 reviewer fixture', 'phase 4 reviewer fixture'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:329:        sessionSummary: 'Duplicate trigger phrases should be caught.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:339:  it('triggers CHECK-D7 HIGH on the broken provenance fixture and emits M6 + M8', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:349:  it('triggers CHECK-D8 MEDIUM on the broken anchor fixture and emits M7 + M8', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:365:    expect(events.some((event) => event.message === 'memory_save_review_violation')).toBe(false);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:381:        sessionSummary: 'This broken overview proves the reviewer catches truncation when the rendered text still ends mid token and falls back to the old ASCII ellipsis shape instead of the boundary safe contract that Phase 1 pinned down for JSON mode saves.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:403:        sessionSummary: 'Composite blocker should reject one HIGH plus two MEDIUM findings.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:442:        sessionSummary: 'Healthy reviewer contract baseline for PR-9.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:443:        triggerPhrases: ['phase 4 reviewer fixture', 'memory telemetry contract'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:465:    expect(events.some((event) => event.message === 'memory_save_started')).toBe(true);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:466:    expect(events.some((event) => event.message === 'memory_save_review_completed')).toBe(true);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:468:    expect(stdout).not.toContain('\\\"message\\\":\\\"memory_save_started\\\"');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr9.test.ts:469:    expect(stdout).not.toContain('\\\"message\\\":\\\"memory_save_review_completed\\\"');\\n.opencode/skills/system-spec-kit/scripts/tests/test-naming-migration.js:70:  ['mcp_server/lib/search/causal-boost.ts', 1],\\n.opencode/skills/system-spec-kit/scripts/tests/test-naming-migration.js:79:  ['mcp_server/lib/session/session-manager.ts', 1],\\n.opencode/skills/system-spec-kit/scripts/tests/test-naming-migration.js:154:    msg.includes('sqlite') ||\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:10:import { collectSessionData } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:22:  sessionSummary: string;\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:26:  triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:49:    'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:64:    'session_id: \\\"phase2-pr3-test\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:112:        sessionSummary: 'Importance-tier drift should be detected after save.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:149:        sessionSummary: 'Matching tiers with inline comments should still pass.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:160:    const sessionData = await collectSessionData(normalized as never, fixture.specFolder);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:161:    const input = buildMemoryWithTierDrift('normal', sessionData.IMPORTANCE_TIER, sessionData.CONTEXT_TYPE);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:168:    expect(extractFrontmatterImportanceTier(result.content)).toBe(sessionData.IMPORTANCE_TIER);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr3.test.ts:169:    expect(extractMetadataImportanceTier(result.content)).toBe(sessionData.IMPORTANCE_TIER);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:6:// SQLite triggers enforce immutability (no UPDATE/DELETE on ledger)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:8:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:27:  session_id: string | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:38:  session_id?: string | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:44:  session_id?: string;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:74:  session_id?: string | null;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:90:  CREATE TABLE IF NOT EXISTS mutation_ledger (\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:100:    session_id TEXT\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:108:  CREATE INDEX IF NOT EXISTS idx_ledger_session ON mutation_ledger(session_id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:150:    INSERT INTO mutation_ledger (mutation_type, reason, prior_hash, new_hash, linked_memory_ids, decision_meta, actor, session_id)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:162:    entry.session_id ?? null\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:187:  if (opts.session_id) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:188:    conditions.push('session_id = ?');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:189:    params.push(opts.session_id);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:241: * Verify that append-only triggers exist on the mutation_ledger table.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:242: * Returns true if both UPDATE and DELETE triggers are present.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:245:  const triggers = db.prepare(\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:246:    \\\"SELECT name FROM sqlite_master WHERE type = 'trigger' AND tbl_name = 'mutation_ledger'\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:249:  const names = triggers.map(t => t.name);\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:395:        session_id: input.session_id ?? null,\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/mutation-ledger.ts:431:      session_id: input.session_id ?? null,\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:8:// Validates conversation-to-spec-folder alignment using topic and keyword matching\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:16:import type { CollectedDataSubset } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:48:/** Alignment-focused subset of collected session data. */\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:315:  const topics = new Set<string>();\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:320:    words.forEach((w) => topics.add(w.toLowerCase()));\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:327:        words.forEach((w) => topics.add(w.toLowerCase()));\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:332:  return Array.from(topics).filter((t) =>\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:457:  // Accept full relative paths (with / separators) and extract topics from ALL segments\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:462:    const topic = segment.replace(/^\\\\d+-/, '');\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:463:    const words = topic.split(/[-_]/).filter((w) => w.length > 0);\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:477:    const topicRegex = new RegExp(`\\\\\\\\b${escapeRegExp(specTopic)}\\\\\\\\b`, 'i');\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:479:      topicRegex.test(ct) || new RegExp(`\\\\\\\\b${escapeRegExp(ct)}\\\\\\\\b`, 'i').test(specTopic)\\n.opencode/skills/system-spec-kit/scripts/spec-folder/alignment-validator.ts:535:  console.log(`   Conversation topics: ${combinedTopics.slice(0, 5).join(', ')}`);\\n.opencode/skills/system-spec-kit/scripts/tests/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/README.md:69:  - `collect-session-data.vitest.ts`\\n.opencode/skills/system-spec-kit/scripts/tests/README.md:70:  - `generate-context-cli-authority.vitest.ts`\\n.opencode/skills/system-spec-kit/scripts/tests/README.md:84:  - `session-enrichment.vitest.ts`\\n.opencode/skills/system-spec-kit/scripts/tests/README.md:101:  - `trigger-phrase-filter.vitest.ts`\\n.opencode/skills/system-spec-kit/scripts/tests/README.md:168:- Direct CLI authority coverage for explicit spec-folder saves through the real `generate-context -> runWorkflow` seam.\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-validation/no-children/tasks.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/transaction-manager.ts:6:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/transaction-manager.ts:48: * Return `true` when the original path already has a committed `memory_index` row.\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/transaction-manager.ts:258:    // The dbOperation callback runs synchronously (better-sqlite3 transaction). If it\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/transaction-manager.ts:261:    // Can report which step failed. No SAVEPOINT is used — better-sqlite3 transactions\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/transaction-manager.ts:282:    // This state and trigger recovery (e.g., re-index from DB or replay the write).\\n.opencode/skills/system-spec-kit/scripts/tests/trigger-phrase-sanitizer-manual-preservation.vitest.ts:6:} from '../lib/trigger-phrase-sanitizer';\\n.opencode/skills/system-spec-kit/scripts/tests/trigger-phrase-sanitizer-manual-preservation.vitest.ts:8:describe('manual trigger phrase preservation', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr6.vitest.ts:14:  sessionSummary?: string;\\n.opencode/skills/system-spec-kit/scripts/tests/test-bug-fixes.js:82:      path.join(ROOT, 'scripts', 'dist', 'memory', 'generate-context.js'),\\n.opencode/skills/system-spec-kit/scripts/tests/test-bug-fixes.js:172:    // Test 2: better-sqlite3 wrapper replaces manual BEGIN/COMMIT/ROLLBACK control.\\n.opencode/skills/system-spec-kit/scripts/tests/test-bug-fixes.js:177:           'Mutation layer relies on better-sqlite3 transaction wrappers instead of manual BEGIN/COMMIT control');\\n.opencode/skills/system-spec-kit/scripts/tests/test-bug-fixes.js:270:    if (dbState.includes('CREATE TABLE IF NOT EXISTS config') || \\n.opencode/skills/system-spec-kit/scripts/tests/canonical-sources-auto-discovery.vitest.ts:8:import { detectRelatedDocs } from '../extractors/session-extractor';\\n.opencode/skills/system-spec-kit/scripts/tests/canonical-sources-auto-discovery.vitest.ts:9:import { deriveCanonicalDocPointers } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/test-phase-validation.js:369:      '--topic',\\n.opencode/skills/system-spec-kit/scripts/tests/test-phase-validation.js:394:      '--topic',\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:6:import type Database from 'better-sqlite3';\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:82:    CREATE TABLE IF NOT EXISTS memory_history (\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:99:    \\\"SELECT sql FROM sqlite_master WHERE type='table' AND name='memory_history'\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:102:    const hasMemoryIndexTable = hasTable(database, 'memory_index');\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:105:      CREATE TABLE memory_history (\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:123:        LEFT JOIN memory_index m ON m.id = h.memory_id;\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:140:  if (hasTable(database, 'memory_index')) {\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:144:        SELECT m.spec_folder FROM memory_index m WHERE m.id = memory_history.memory_id\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:147:        AND EXISTS (SELECT 1 FROM memory_index m WHERE m.id = memory_history.memory_id)\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:161:    'SELECT spec_folder FROM memory_index WHERE id = ? LIMIT 1'\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:176:    \\\"SELECT 1 as present FROM sqlite_master WHERE type='table' AND name = ? LIMIT 1\\\"\\n.opencode/skills/system-spec-kit/mcp_server/lib/storage/history.ts:421:             SELECT 1 FROM memory_index m\\n.opencode/skills/system-spec-kit/scripts/tests/test-validation-system.js:716:    // Test duplicate anchor IDs (both closed)\\n.opencode/skills/system-spec-kit/scripts/tests/test-validation-system.js:717:    const duplicateAnchors = `# Memory File\\n.opencode/skills/system-spec-kit/scripts/tests/test-validation-system.js:732:    while (openPattern.exec(duplicateAnchors) !== null) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-validation-system.js:735:    while (closePattern.exec(duplicateAnchors) !== null) {\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:33:  const startIndex = lines.findIndex((line) => line.trim() === 'trigger_phrases:');\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:83:      sessionSummary: 'Implemented the render-layer fixes for canonical sources, trigger phrases, evidence bullets, phase capture, and score naming.',\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:84:      triggerPhrases: ['canonical sources', 'render quality', 'memory save'],\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:87:          decision: 'Use authored trigger phrases as the canonical trigger surface.',\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:92:        'scripts/core/workflow.ts:1260 manual trigger phrases now outrank prose bigrams.',\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:93:        'scripts/extractors/collect-session-data.ts:1176 canonical docs now render as relative links.',\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:94:        'scripts/extractors/collect-session-data.ts:1176 canonical docs now render as relative links.',\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:97:        { path: 'scripts/core/workflow.ts', description: 'Fixed trigger and metadata render bindings.' },\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:98:        { path: 'scripts/extractors/collect-session-data.ts', description: 'Fixed canonical discovery and counts.' },\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:110:    const { main } = await import('../memory/generate-context');\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:129:    expect(evidence).toContain('scripts/extractors/collect-session-data.ts:1176');\\n.opencode/skills/system-spec-kit/scripts/tests/post-save-render-round-trip.vitest.ts:130:    expect((evidence.match(/scripts\\\\/extractors\\\\/collect-session-data\\\\.ts:1176/g) ?? []).length).toBe(1);\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:17:/** Captures a file change discovered in session data. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:50: * JSON-parsed session data whose shape is not fully controlled at compile time.\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:74:/** Raw user prompt metadata consumed by the session pipeline. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:80:/** Recent context entry used for session summarization. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:109:/** Summary of a tool call made during the session (JSON-mode enrichment). */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:118:/** Summary of a user-assistant exchange during the session (JSON-mode enrichment). */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:151:  sessionSummary?: string;\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:159:  _sessionId?: string;\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:167:  // Fields surfaced during O3-6 index signature removal (captured-session enrichment + capture pipeline)\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:176:  // Fields accessed by workflow.ts read helpers for memory classification, dedup, and causal links\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:177:  // (AI-composed JSON data from generate-context.js input)\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:184:  /** Snake-case variant for raw JSON compatibility. Prefer sessionDedup (camelCase) in new code. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:185:  session_dedup?: Record<string, unknown>;\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:186:  sessionDedup?: Record<string, unknown>;\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:187:  /** Snake-case variant for raw JSON compatibility. Prefer causalLinks (camelCase) in new code. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:188:  causal_links?: Record<string, unknown>;\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:189:  causalLinks?: Record<string, unknown>;\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:216:/** Counts tool usage by category within a session.\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:218: * in `countToolsByType()` (session-extractor.ts) via `counts[tool]++`.\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:234:/** File entry metadata consumed by session state helpers. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:241:/** Spec file entry metadata consumed by the session pipeline. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:259:/** Represents a pending task extracted from session context. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:266:/** Represents a context item included in continue-session payloads. */\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:301:  | 'missing_trigger_phrases'\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:302:  | 'missing_key_topics'\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:307:  | 'duplicate_observations'\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:312:  | 'has_session_source_mismatch'\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:318:  | 'has_topical_mismatch';\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:347:    triggerPhrases: number;\\n.opencode/skills/system-spec-kit/scripts/types/session-types.ts:573:  /** RC1: Raw sessionSummary from JSON payload, used as preferred title candidate */\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:68:describe('D5 continuation and causal links', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:69:  it('passes explicit causalLinks.supersedes through the save path and avoids D5 warnings', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:92:          sessionSummary: 'Continuation verification for explicit causal links.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:97:          causalLinks: { supersedes: ['explicit-predecessor-session'] },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:98:          triggerPhrases: ['explicit lineage verification'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:104:      expect(rendered).toContain('\\\"explicit-predecessor-session\\\"');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:113:          sessionSummary: 'Continuation verification for explicit causal links.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:116:          causalLinks: { supersedes: ['explicit-predecessor-session'] },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:135:      sessionId: 'hit-current-3',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:147:      title: 'Implementation session',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:150:      sessionId: 'hit-current-4',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:151:      filename: '06-04-26_13-30__implementation-session.md',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:162:title: Regular implementation session\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:166:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:170:# Regular implementation session\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:186:        sessionSummary: 'Regular implementation summary with no lineage signal.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:216:          sessionSummary: 'Continuation request with two equally recent predecessors.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:220:          triggerPhrases: ['continuation deep research'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-save-d5-continuation-and-causal-links.vitest.ts:232:          sessionSummary: 'Continuation request with two equally recent predecessors.',\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:12:    sessionSummary: 'Test session',\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:28:    expect(files[0].DESCRIPTION).toBe('Modified during session');\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:69:    expect(files[0].DESCRIPTION).toBe('Modified during session');\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:102:    expect(files[0].DESCRIPTION).toBe('Modified during session');\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:166:      sessionSummary: 'Test',\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:174:      sessionSummary: 'Test',\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:192:      sessionSummary: 'Test',\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:199:  it('preserves explicit title, description, and causalLinks through the slow path', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:201:      sessionSummary: 'Slow-path metadata propagation test.',\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:204:      causalLinks: {\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:205:        supersedes: ['previous-session'],\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:206:        derivedFrom: ['planning-session'],\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:212:    expect(result.causalLinks).toMatchObject({\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:213:      supersedes: ['previous-session'],\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:214:      derivedFrom: ['planning-session'],\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:215:      derived_from: ['planning-session'],\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:217:    expect(result.causal_links).toMatchObject({\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:218:      supersedes: ['previous-session'],\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:219:      derivedFrom: ['planning-session'],\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:223:  it('preserves explicit title, description, and causal_links through the fast path', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:230:      causal_links: {\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:238:    expect(result.causalLinks).toMatchObject({\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:243:    expect(result.causal_links).toMatchObject({\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:253:      user_prompts: ['Capture the session context'],\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:259:    expect(result.userPrompts[0].prompt).toBe('Capture the session context');\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:280:      sessionSummary: 'Patched the fast-path normalizer and verified the save flow end to end.',\\n.opencode/skills/system-spec-kit/scripts/tests/input-normalizer-unit.vitest.ts:305:  it('deduplicates duplicate observations in fast-path structured payloads', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:12:import { buildRichSessionData, buildSparseSessionData, buildTreeThinningSessionData } from './fixtures/session-data-factory';\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:32:const SPEC_RELATIVE_PATH = 'system-spec-kit/022-hybrid-rag-fusion/009-perfect-session-capturing/010-integration-testing';\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:80:    description: 'Integration testing coverage for the perfect session capturing save pipeline.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:114:      'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:115:      '  - \\\"perfect session capturing\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:153:    session_summary: 'Implemented the integration testing phase with a real workflow save harness and Vitest migration.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:154:    trigger_phrases: [\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:155:      'perfect session capturing',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:166:        prompt: 'Cover duplicate deduplication, insufficiency aborts, index failures, and tree-thinning interaction.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:190:        request: 'Finish integration testing for perfect session capturing.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:208:      'Keep deterministic session data collection limited to save-boundary assertions that would otherwise flap.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:272:  process.env.MEMORY_DB_PATH = path.join(harness.dbDir, 'context-index.sqlite');\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:411:    expect(rendered).not.toContain('> **Note:** This session had limited actionable content');\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:412:    expect(rendered).not.toContain('<!-- WARNING: This is simulated/placeholder content - NOT from a real session -->');\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:444:      session_summary: 'Exercise the write-only indexing disposition for an index-blocking rule.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:469:  it('skips duplicate markdown content on a second identical save without bumping description tracking', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:472:    const dataFile = writeInputFile(harness, 'duplicate.json', createExplicitJsonInput());\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:474:    const sessionDataFactory = async (_collectedData: unknown, specFolderName?: string | null) => (\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:481:      collectSessionDataFn: sessionDataFactory,\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:489:      collectSessionDataFn: sessionDataFactory,\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:502:  it.skip('creates unique filenames and independent indexing records for same-minute non-duplicate saves', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:511:      session_summary: 'First same-minute save to verify unique filename generation.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:524:      session_summary: 'Second same-minute save to verify collision-safe filename generation.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:567:      session_summary: 'Sparse insufficiency probe for the workflow guard chain.',\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:568:      trigger_phrases: ['integration testing', 'sufficiency'],\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-e2e.vitest.ts:624:      trigger_phrases: ['tree thinning', 'workflow integration', 'memory sequence'],\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:7:const Database = require('better-sqlite3');\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:17:// Track sqlite-vec availability (loaded once)\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:18:let sqliteVecAvailable = false;\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:20:let sqliteVecUnavailableReason = '';\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:26:  const sqliteVec = require('sqlite-vec');\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:27:  loadSqliteVec = sqliteVec.load;\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:31:    sqliteVecAvailable = true;\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:33:    sqliteVecUnavailableReason = e instanceof Error ? e.message : String(e);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:34:    sqliteVecAvailable = false;\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:39:  sqliteVecUnavailableReason = e instanceof Error ? e.message : String(e);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:40:  sqliteVecAvailable = false;\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:111: * @param {boolean} opts.withVec - Include vec_memories virtual table (default true, requires sqlite-vec)\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:112: * @returns {Database} better-sqlite3 Database instance\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:123:  // Core memory_index table (simplified for tests)\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:125:    CREATE TABLE memory_index (\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:140:      CREATE TABLE memory_history (\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:149:        FOREIGN KEY (memory_id) REFERENCES memory_index(id)\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:154:  // Vec_memories virtual table (requires sqlite-vec extension)\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:155:  if (withVec && sqliteVecAvailable) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:168: * Insert a memory record into memory_index.\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:173:    INSERT INTO memory_index (spec_folder, file_path, title)\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:234:    if (content.includes('memory_history') && content.includes('LEFT JOIN memory_index')) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:324:    LEFT JOIN memory_index m ON h.memory_id = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:350:    db.prepare('DELETE FROM memory_index WHERE id = ?').run(memId);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:382:    db.prepare('DELETE FROM memory_index WHERE id = ?').run(toDeleteId);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:404:    db.prepare('DELETE FROM memory_index WHERE id = ?').run(toDeleteId);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:436:  if (!sqliteVecAvailable) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:437:    skip('T-COV-003a: Orphaned vector detection (entire section)', `sqlite-vec unavailable: ${sqliteVecUnavailableReason || 'unknown reason'}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:444:    LEFT JOIN memory_index m ON v.rowid = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:468:    db.prepare('DELETE FROM memory_index WHERE id = ?').run(memId);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:501:      db.prepare('DELETE FROM memory_index WHERE id = ?').run(memIds[i]);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:518:    db.prepare('DELETE FROM memory_index WHERE id = ?').run(memId);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:548:    db.exec('DELETE FROM memory_index');\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:589:    const db = createTestDatabase({ withVec: sqliteVecAvailable });\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:597:    if (sqliteVecAvailable) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:603:    const memoryCount = db.prepare('SELECT COUNT(*) as count FROM memory_index').get();\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:604:    assertEqual(memoryCount.count, 2, 'T-COV-004a: memory_index count is correct');\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:609:    if (sqliteVecAvailable) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:613:      skip('T-COV-004c: vec_memories count', `sqlite-vec unavailable: ${sqliteVecUnavailableReason || 'unknown reason'}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:623:    const db = createTestDatabase({ withVec: sqliteVecAvailable });\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:635:    if (sqliteVecAvailable) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:642:    db.prepare('DELETE FROM memory_index WHERE id = ?').run(toDelete);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:647:      LEFT JOIN memory_index m ON h.memory_id = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:656:    if (sqliteVecAvailable) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:659:        LEFT JOIN memory_index m ON v.rowid = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:669:    const finalMemCount = db.prepare('SELECT COUNT(*) as count FROM memory_index').get();\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:670:    assertEqual(finalMemCount.count, 2, 'T-COV-004d: memory_index count after cleanup');\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:675:    if (sqliteVecAvailable) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:679:      skip('T-COV-004f: vec_memories count after cleanup', `sqlite-vec unavailable: ${sqliteVecUnavailableReason || 'unknown reason'}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:750:      LEFT JOIN memory_index m ON h.memory_id = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:760:  // Test 3: Database with only memory_index (no history, no vectors to clean)\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:768:      LEFT JOIN memory_index m ON h.memory_id = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:784:    db.prepare('DELETE FROM memory_index WHERE id = ?').run(memId);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:863:    db.prepare(`INSERT INTO memory_index (id, spec_folder, file_path, title) VALUES (?, ?, ?, ?)`).run(\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:869:    db.prepare('DELETE FROM memory_index WHERE id = ?').run(99999);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:873:      LEFT JOIN memory_index m ON h.memory_id = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:896:  if (!sqliteVecAvailable) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:897:    skip('T-COV-006a: Full cleanup workflow (entire section)', `sqlite-vec unavailable: ${sqliteVecUnavailableReason || 'unknown reason'}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:927:      db.prepare('DELETE FROM memory_index WHERE id = ?').run(id);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:931:    const preMemCount = db.prepare('SELECT COUNT(*) as count FROM memory_index').get();\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:946:      LEFT JOIN memory_index m ON h.memory_id = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:967:      LEFT JOIN memory_index m ON v.rowid = m.id\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:992:    const finalMemCount = db.prepare('SELECT COUNT(*) as count FROM memory_index').get();\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:1004:      LEFT JOIN memory_index m ON h.memory_id = m.id WHERE m.id IS NULL\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:1010:      LEFT JOIN memory_index m ON v.rowid = m.id WHERE m.id IS NULL\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:1122:  log(`sqlite-vec available: ${sqliteVecAvailable}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:1123:  if (!sqliteVecAvailable && sqliteVecUnavailableReason) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-cleanup-orphaned-vectors.js:1124:    log(`sqlite-vec unavailable reason: ${sqliteVecUnavailableReason}`);\\n.opencode/skills/system-spec-kit/scripts/renderers/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/renderers/README.md:25:The `renderers/` directory turns extracted session data into markdown output for memory and spec-context documents.\\n.opencode/skills/system-spec-kit/scripts/renderers/template-renderer.ts:8:// Mustache-based template engine — renders memory files from collected session data\\n.opencode/skills/system-spec-kit/scripts/types/README.md:3:description: \\\"Shared session type definitions used across the Spec Kit scripts pipeline.\\\"\\n.opencode/skills/system-spec-kit/scripts/types/README.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/types/README.md:5:  - \\\"session types\\\"\\n.opencode/skills/system-spec-kit/scripts/types/README.md:7:  - \\\"session data interface\\\"\\n.opencode/skills/system-spec-kit/scripts/types/README.md:12:> Shared session type definitions used across the Spec Kit scripts pipeline.\\n.opencode/skills/system-spec-kit/scripts/types/README.md:23:- [5. ROOT TYPE: SESSIONDATA](#5--root-type-sessiondata)\\n.opencode/skills/system-spec-kit/scripts/types/README.md:34:**Shared session type definitions** used across the Spec Kit scripts pipeline. This module is the **canonical source of truth** for all session-related types, eliminating parallel type hierarchies that previously existed between `simulation-factory` and the extractors (resolves **TECH-DEBT P6-05**).\\n.opencode/skills/system-spec-kit/scripts/types/README.md:45:└── session-types.ts    # Canonical session interfaces across 4 sections\\n.opencode/skills/system-spec-kit/scripts/types/README.md:50:- `../extractors/session-extractor` for `ToolCounts`, `SpecFileEntry`\\n.opencode/skills/system-spec-kit/scripts/types/README.md:64:├── SpecFileEntry[]           ← from session-extractor\\n.opencode/skills/system-spec-kit/scripts/types/README.md:65:├── ToolCounts                ← from session-extractor\\n.opencode/skills/system-spec-kit/scripts/types/README.md:123:| `OutcomeEntry` | `OUTCOME`, `TYPE?` | Single session outcome |\\n.opencode/skills/system-spec-kit/scripts/types/README.md:124:| `SessionData` | 35+ fields | **Root type**: complete AI coding session context |\\n.opencode/skills/system-spec-kit/scripts/types/README.md:130:<!-- ANCHOR:session-data -->\\n.opencode/skills/system-spec-kit/scripts/types/README.md:133:`SessionData` is the top-level type representing a complete session. Key field groups:\\n.opencode/skills/system-spec-kit/scripts/types/README.md:146:<!-- /ANCHOR:session-data -->\\n.opencode/skills/system-spec-kit/scripts/types/README.md:153:**Before:** Types duplicated in `simulation-factory.ts` and extractor modules.\\n.opencode/skills/system-spec-kit/scripts/types/README.md:154:**After:** Single source in `types/session-types.ts`, imported by all consumers.\\n.opencode/skills/system-spec-kit/scripts/types/README.md:166:| Session extractor (provides `ToolCounts`, `SpecFileEntry`) | `../extractors/session-extractor.ts` |\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-resume.vitest.ts:67:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-resume.vitest.ts:109:      const s1 = segState.createSegmentState('seg-1', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-resume.vitest.ts:112:      const s2 = segState.createSegmentState('seg-2', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-resume.vitest.ts:124:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-resume.vitest.ts:139:      const b = board.createBoard({ sessionId: 's1', loopType: 'review' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-resume.vitest.ts:259:      const state = segState.createSegmentState('seg-1', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/deep-loop-wave-resume.vitest.ts:268:      const state = segState.createSegmentState('seg-1', { sessionId: 's1' });\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-warning.vitest.ts:8:import type { SessionData } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/tests/workflow-warning.vitest.ts:62:    SESSION_ID: 'session-workflow-warning',\\n.opencode/skills/system-spec-kit/scripts/tests/progressive-validation.vitest.js:469:            // File with trailing spaces → triggers WHITESPACE fix\\n.opencode/skills/system-spec-kit/scripts/tests/progressive-validation.vitest.js:500:            // File with trailing spaces → will trigger WHITESPACE fix\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:7:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:36:  sessionSummary: string;\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:37:  triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:57:      'title: \\\"Spec: Phase 6 trigger fixture\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:58:      'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:59:      '  - \\\"phase 6 trigger fixture\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:71:  const triggerIndex = lines.findIndex((line) => line.trim() === 'trigger_phrases:');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:72:  if (triggerIndex === -1) {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:77:  for (let index = triggerIndex + 1; index < lines.length; index++) {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:101:describe('Phase 6 trigger-surface duplication fixes', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:103:    const fixture = readFixture('F-DUP-001-trigger-cluster.json');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:104:    const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'speckit-phase6-trigger-cluster-'));\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:119:    const triggerPhrases = parseFrontmatterTriggerPhrases(rendered);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:121:    expect(triggerPhrases).toContain('claude optimization settings');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:122:    expect(triggerPhrases).toContain('graphify research');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:123:    expect(triggerPhrases).not.toContain('graph and context optimization');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:124:    expect(triggerPhrases).not.toContain('kit/026');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:125:    expect(triggerPhrases).not.toContain('optimization/001');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:128:  it('collapses hyphen-space aliases to one canonical trigger while preserving api cli mcp anchors', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:129:    const fixture = readFixture('F-DUP-003-canonical-trigger.json');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:130:    const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'speckit-phase6-trigger-canonical-'));\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:145:    const triggerPhrases = parseFrontmatterTriggerPhrases(rendered);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:147:    expect(triggerPhrases).toContain('codex-cli-compact');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:148:    expect(triggerPhrases).toContain('tree-sitter');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:149:    expect(triggerPhrases).toContain('implementation-summary');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:150:    expect(triggerPhrases).not.toContain('codex cli compact');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:151:    expect(triggerPhrases).not.toContain('tree sitter');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:152:    expect(triggerPhrases).not.toContain('implementation summary');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:153:    expect(triggerPhrases).toContain('api');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:154:    expect(triggerPhrases).toContain('cli');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-trigger.test.ts:155:    expect(triggerPhrases).toContain('mcp');\\n.opencode/skills/system-spec-kit/scripts/tests/truncate-on-word-boundary.vitest.ts:16:    'session',\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-path-fragment.json:3:  \\\"sessionSummary\\\": \\\"Phase 3 replay verifies that reusable trigger sanitization strips folder leaks before persistence while preserving the intended memory pipeline phrasing for retrieval.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-path-fragment.json:4:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-path-fragment.json:13:      \\\"description\\\": \\\"Routes merged and folder-derived trigger phrases through the D3 sanitizer\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:15:    const { collectSessionData } = await import('../extractors/collect-session-data');\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:17:    const sessionData = await collectSessionData({\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:19:      sessionSummary: 'Verified structured file capture counts.',\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:24:        { path: 'scripts/extractors/collect-session-data.ts', description: 'Fixed packet doc discovery.' },\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:29:    expect(sessionData.CAPTURED_FILE_COUNT).toBe(5);\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:30:    expect(sessionData.FILESYSTEM_FILE_COUNT).toBe(5);\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:31:    expect(sessionData.GIT_CHANGED_FILE_COUNT).toBe(5);\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:35:    const { collectSessionData } = await import('../extractors/collect-session-data');\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:37:    const sessionData = await collectSessionData({\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:39:      sessionSummary: 'Verified fallback git capture counts.',\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:43:    expect(sessionData.CAPTURED_FILE_COUNT).toBe(2);\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:44:    expect(sessionData.FILESYSTEM_FILE_COUNT).toBe(2);\\n.opencode/skills/system-spec-kit/scripts/tests/file-capture-structured-mode.vitest.ts:45:    expect(sessionData.GIT_CHANGED_FILE_COUNT).toBe(2);\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC1-truncation.json:3:  \\\"sessionSummary\\\": \\\"Phase 1 foundation work focused on two narrow repairs that improve memory quality without widening the remediation packet into unrelated metadata or reviewer behavior. The first repair aligned the OVERVIEW anchor identity so the table of contents, the HTML anchor, and the internal comment marker all point to the same destination. The second repair extracted a shared truncation helper so long session summaries stop at a clean word boundary and carry the canonical Unicode ellipsis instead of drifting between punctuation styles. The fixture describes a realistic verification pass where the helper was reused by the observation summary path, the OVERVIEW owner adopted the same contract, the compiled CLI replay was exercised with explicit JSON input, and the temporary replay artifacts were removed immediately after the check so the packet memory store stayed clean for the real documentation workflow.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC1-truncation.json:11:      \\\"path\\\": \\\".opencode/skills/system-spec-kit/scripts/extractors/collect-session-data.ts\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC1-truncation.json:22:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC8-clean.json:5:    \\\"sessionSummary\\\": \\\"This healthy overview proves the reviewer stays quiet when the saved artifact remains internally consistent and the telemetry contract is satisfied end to end.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC8-clean.json:19:    \\\"trigger_phrases:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC8-clean.json:49:    \\\"session_id: \\\\\\\"phase4-pr9-clean\\\\\\\"\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC8-clean.json:57:    \\\"causal_links:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:7:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:37:describe('causal link auto-population', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:39:    const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'speckit-causal-links-'));\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:49:        '010-causal-link-fixture',\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:62:session_id: \\\"planning-save-1\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:74:session_id: \\\"review-save-1\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:89:        sessionId: 'implementation-save-2',\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:92:          sessionSummary: 'Implemented the follow-on runtime after the planning save.',\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:95:            { path: 'scripts/core/memory-metadata.ts', description: 'Auto-populated causal links from prior saves.' },\\n.opencode/skills/system-spec-kit/scripts/tests/causal-links-auto-populate.vitest.ts:97:          triggerPhrases: ['causal links', 'derived from'],\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:172:    const { extractKeyTopics } = require(path.join(SCRIPTS_DIR, 'core', 'topic-extractor'));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:204:    // Test 4: extractKeyTopics returns array of topics\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:205:    const topics = extractKeyTopics('Implemented OAuth authentication with JWT tokens');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:206:    if (Array.isArray(topics) && topics.length > 0) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:207:      pass('T-002k: extractKeyTopics extracts topics', `Found: ${topics.slice(0, 3).join(', ')}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:209:      fail('T-002k: extractKeyTopics extracts topics', 'No topics extracted');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:290:      sessionSummary: 'Test session summary',\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:309:    // Test 5: validateInputData throws on invalid triggerPhrases type\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:310:    assertThrows(() => validateInputData({ triggerPhrases: 'not-an-array' }),\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:311:      'T-004e: validateInputData throws on invalid triggerPhrases');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:330:    const summaryObs = buildSessionSummaryObservation('Test summary', ['trigger1', 'trigger2']);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:332:      pass('T-004h: buildSessionSummaryObservation creates observation', 'Facts include triggers');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:342:      sessionTitle: 'Test Session'\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:707:    if (pipeline.filter && pipeline.filterNoise && pipeline.deduplicate) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:916:    // Test 1: create_session_data creates valid structure\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:917:    const session = createSessionData({ specFolder: 'test-spec' });\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:918:    if (session.TITLE && session.SPEC_FOLDER === 'test-spec' && session.DATE) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:919:      pass('T-013a: create_session_data creates valid structure', 'Key fields present');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:921:      fail('T-013a: create_session_data creates valid structure', 'Missing fields');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:987:    const topics = extractConversationTopics(data);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:988:    if (Array.isArray(topics) && topics.includes('oauth')) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:989:      pass('T-014b: extractConversationTopics extracts topics', topics.join(', '));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:991:      fail('T-014b: extractConversationTopics extracts topics', topics.join(', '));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1237:    const files = [{ FILE_PATH: '/test/file.js', DESCRIPTION: 'Modified during session' }];\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1343:  log('\\\\n🔬 EXTRACTORS: session-extractor.js');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1354:    } = require(path.join(SCRIPTS_DIR, 'extractors', 'session-extractor'));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1417:    // Test 8: extractKeyTopics extracts topics\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1418:    const topics = extractKeyTopics('Implemented OAuth authentication with JWT');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1419:    if (Array.isArray(topics) && topics.length > 0) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1420:      pass('T-022i: extractKeyTopics extracts topics', topics.slice(0, 3).join(', '));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1422:      fail('T-022i: extractKeyTopics extracts topics', 'No topics');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1431:  log('\\\\n🔬 EXTRACTORS: collect-session-data.js');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1434:    const { collectSessionData, shouldAutoSave } = require(path.join(SCRIPTS_DIR, 'extractors', 'collect-session-data'));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1436:    // Test 1: shouldAutoSave triggers at message count threshold\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1440:      pass('T-023a: shouldAutoSave triggers at threshold', `Threshold: ${CONFIG.MESSAGE_COUNT_TRIGGER}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1442:      fail('T-023a: shouldAutoSave triggers at threshold', `shouldSave: ${shouldSave}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1457:    skip('T-023d: collectSessionData returns full session data', 'Requires mock spec folder');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1460:    fail('T-023: Collect session data module', error.message);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1576:    const topicFromFolder = extractMainTopic([], '042-oauth-authentication');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1577:    if (topicFromFolder === 'oauth-authentication') {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1578:      pass('T-026c: extractMainTopic extracts from spec folder', topicFromFolder);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1580:      fail('T-026c: extractMainTopic extracts from spec folder', topicFromFolder);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1585:    const topicFromObs = extractMainTopic(obsWithTopic, null);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1586:    if (topicFromObs.includes('user') || topicFromObs.includes('profile')) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1587:      pass('T-026d: extractMainTopic extracts from observations', topicFromObs);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1589:      fail('T-026d: extractMainTopic extracts from observations', topicFromObs);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1696:  log('\\\\n🔬 EXTRACTORS: session-extractor.js (Additional Functions)');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1699:    const sessionExtractor = require(path.join(SCRIPTS_DIR, 'extractors', 'session-extractor'));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1702:    assertType(sessionExtractor.extractActiveFile, 'function', 'T-027a: extractActiveFile exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1705:    assertType(sessionExtractor.extractNextAction, 'function', 'T-027b: extractNextAction exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1708:    assertType(sessionExtractor.extractBlockers, 'function', 'T-027c: extractBlockers exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1711:    assertType(sessionExtractor.buildFileProgress, 'function', 'T-027d: buildFileProgress exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1714:    assertType(sessionExtractor.calculateExpiryEpoch, 'function', 'T-027e: calculateExpiryEpoch exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1717:    assertType(sessionExtractor.detectRelatedDocs, 'function', 'T-027f: detectRelatedDocs exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1720:    assertType(sessionExtractor.detectSessionCharacteristics, 'function', 'T-027g: detectSessionCharacteristics exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1723:    assertType(sessionExtractor.buildProjectStateSnapshot, 'function', 'T-027h: buildProjectStateSnapshot exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1730:    const activeFile = sessionExtractor.extractActiveFile(obsWithFiles, []);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1734:    const fallbackFile = sessionExtractor.extractActiveFile([], [{ FILE_PATH: '/backup.js' }]);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1738:    const noFileResult = sessionExtractor.extractActiveFile([], []);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1743:    const nextAction = sessionExtractor.extractNextAction(obsWithNext, []);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1751:    const defaultNext = sessionExtractor.extractNextAction([], []);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1756:    const blocker = sessionExtractor.extractBlockers(obsWithBlocker);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1764:    const noBlocker = sessionExtractor.extractBlockers([{ narrative: 'Everything is working fine.' }]);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1769:    const progress = sessionExtractor.buildFileProgress(specFiles);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1777:    const emptyProgress = sessionExtractor.buildFileProgress(null);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1786:    const criticalExpiry = sessionExtractor.calculateExpiryEpoch('critical', createdAt);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1790:    const constitutionalExpiry = sessionExtractor.calculateExpiryEpoch('constitutional', createdAt);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1794:    const tempExpiry = sessionExtractor.calculateExpiryEpoch('temporary', createdAt);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1803:    const normalExpiry = sessionExtractor.calculateExpiryEpoch('normal', createdAt);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1812:    const relatedDocs = await sessionExtractor.detectRelatedDocs(__dirname);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1823:    const characteristics = sessionExtractor.detectSessionCharacteristics(observations, userPrompts, FILES);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:1841:    const snapshot = sessionExtractor.buildProjectStateSnapshot(snapshotInput);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2025:      // \\\"Chose:\\\" at start triggers decision classification\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2235:    assertEqual(isDescriptionValid('Modified during session'), false, 'T-034f: isDescriptionValid rejects garbage patterns');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2463:  log('\\\\n🔬 LIB: trigger-extractor.js (re-export verification)');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2466:    const triggerModule = require(path.join(SCRIPTS_DIR, 'lib', 'trigger-extractor'));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2469:    assertType(triggerModule.extractTriggerPhrases, 'function', 'T-037a: extractTriggerPhrases is exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2471:    // Test 2: extract_trigger_phrases is also exported (snake_case alias)\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2472:    assertType(triggerModule.extractTriggerPhrases, 'function', 'T-037b: extract_trigger_phrases is exported');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2476:    const phrases = triggerModule.extractTriggerPhrases(text);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2484:    const emptyResult = triggerModule.extractTriggerPhrases(null);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2492:    const shortResult = triggerModule.extractTriggerPhrases('Hi');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2500:    const configPreview = triggerModule.CONFIG\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2501:      ? JSON.stringify(triggerModule.CONFIG).substring(0, 50)\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2503:    assertExists(triggerModule.CONFIG, 'T-037f: CONFIG is exported', configPreview);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2506:    if (triggerModule.STOP_WORDS_ENGLISH instanceof Set) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2507:      pass('T-037g: STOP_WORDS_ENGLISH is exported', `${triggerModule.STOP_WORDS_ENGLISH.size} words`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2602:    // Test 3: extractConversationTopics extracts topics correctly\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2607:    const topics = extractConversationTopics(testData);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2608:    if (Array.isArray(topics) && topics.some(t => t.includes('oauth'))) {\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2609:      pass('T-039c: extractConversationTopics extracts OAuth topics', topics.join(', '));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2611:      fail('T-039c: extractConversationTopics extracts OAuth topics', topics.join(', '));\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2627:    // Test 5: calculateAlignmentScore returns high score for matching topics\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2635:    // Test 6: calculateAlignmentScore returns low score for non-matching topics\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2688:    // Test 3: extractPhasesFromData returns empty for short sessions\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2692:      pass('T-040c: extractPhasesFromData returns empty for short sessions', 'Empty array');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2694:      fail('T-040c: extractPhasesFromData returns empty for short sessions', `Length: ${shortResult.length}`);\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2841:  log('\\\\n🔬 MEMORY: generate-context.js');\\n.opencode/skills/system-spec-kit/scripts/tests/test-scripts-modules.js:2848:    } = require(path.join(SCRIPTS_DIR, 'memory', 'generate-context'));\\n.opencode/skills/system-spec-kit/scripts/tests/project-phase-e2e.vitest.ts:11:} from '../extractors/session-extractor';\\n.opencode/skills/system-spec-kit/scripts/tests/test-integration.vitest.ts:77:  const dbPath = path.join(workspaceRoot, 'test-context-index.sqlite');\\n.opencode/skills/system-spec-kit/scripts/tests/test-integration.vitest.ts:326:  it('confirms generate-context.js compiled entrypoint exists', () => {\\n.opencode/skills/system-spec-kit/scripts/tests/test-integration.vitest.ts:327:    // W1-T3 parity: compiled generate-context must be present for CLI invocation\\n.opencode/skills/system-spec-kit/scripts/tests/test-integration.vitest.ts:328:    const generateContextPath = path.join(SCRIPTS_DIR, 'dist', 'memory', 'generate-context.js');\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/deep-loop-replay/028/sample-iterations.jsonl:1:{\\\"type\\\":\\\"config\\\",\\\"mode\\\":\\\"research\\\",\\\"topic\\\":\\\"Legacy holdout replay fixture\\\",\\\"maxIterations\\\":5,\\\"convergenceThreshold\\\":0.15,\\\"stuckThreshold\\\":3,\\\"sessionId\\\":\\\"replay-028-fixture\\\"}\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC7-anchor.json:3:  \\\"sessionSummary\\\": \\\"Phase 1 foundation work aligned the OVERVIEW anchor names across the template.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC7-anchor.json:17:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC6-provenance.json:3:  \\\"sessionSummary\\\": \\\"Phase 2 PR-4 adds JSON-mode git provenance without changing the authored memory narrative.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC6-provenance.json:27:      \\\"rationale\\\": \\\"Avoid leaking captured-session summary, observations, trigger phrases, and decisions into structured JSON saves.\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC6-provenance.json:30:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/test-five-checks.js:559:      pass('T-LA-005: >100 LOC threshold documented', '>100 LOC trigger found');\\n.opencode/skills/system-spec-kit/scripts/tests/test-five-checks.js:564:    // Test: Architectural decisions trigger documented\\n.opencode/skills/system-spec-kit/scripts/tests/test-five-checks.js:566:      pass('T-LA-006: Architectural decisions trigger documented', 'Architectural trigger found');\\n.opencode/skills/system-spec-kit/scripts/tests/test-five-checks.js:568:      fail('T-LA-006: Architectural decisions trigger documented', 'Architectural trigger not documented');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr4.test.ts:8:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr4.test.ts:9:import type { SessionData } from '../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr4.test.ts:73:  sessionSummary: string;\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr4.test.ts:77:  triggerPhrases: string[];\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase2-pr4.test.ts:222:      expect(rendered).toContain(fixture.sessionSummary);\\n.opencode/skills/system-spec-kit/scripts/tests/deep-research-reducer.vitest.ts:47:        topic: 'Reducer fixture topic',\\n.opencode/skills/system-spec-kit/scripts/tests/deep-research-reducer.vitest.ts:54:          sessionId: 'session-001',\\n.opencode/skills/system-spec-kit/scripts/tests/deep-research-reducer.vitest.ts:69:      '{\\\"type\\\":\\\"config\\\",\\\"topic\\\":\\\"Reducer fixture topic\\\",\\\"maxIterations\\\":5,\\\"convergenceThreshold\\\":0.05,\\\"createdAt\\\":\\\"2026-04-03T00:00:00Z\\\",\\\"specFolder\\\":\\\"fixture\\\"}',\\n.opencode/skills/system-spec-kit/scripts/tests/deep-research-reducer.vitest.ts:89:<!-- ANCHOR:topic -->\\n.opencode/skills/system-spec-kit/scripts/tests/deep-research-reducer.vitest.ts:91:Reducer fixture topic\\n.opencode/skills/system-spec-kit/scripts/tests/deep-research-reducer.vitest.ts:92:<!-- /ANCHOR:topic -->\\n.opencode/skills/system-spec-kit/scripts/tests/deep-research-reducer.vitest.ts:256:    expect(firstDashboard).toContain('Session ID: session-001');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:7:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:8:import { sanitizeTriggerPhrase } from '../lib/trigger-phrase-sanitizer';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:37:  sessionSummary: string;\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:38:  triggerPhrases?: string[];\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:62:      'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:64:      '  - \\\"trigger phrase sanitizer\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:76:  const triggerIndex = lines.findIndex((line) => line.trim() === 'trigger_phrases:');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:77:  if (triggerIndex === -1) {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:82:  for (let index = triggerIndex + 1; index < lines.length; index++) {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:124:  it.each(fixtureNames)('keeps saved triggers and rendered topics free of junk for %s', async (fixtureName) => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:142:    const triggerPhrases = parseFrontmatterTriggerPhrases(rendered);\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:145:      (fixture.triggerPhrases ?? []).map((phrase) => phrase.toLowerCase()),\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:148:    for (const phrase of triggerPhrases) {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:161:      expect(triggerPhrases).not.toContain(phrase.toLowerCase());\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase3-pr5.vitest.ts:165:      expect(triggerPhrases).toContain(phrase.toLowerCase());\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC2-degraded-fallback.json:3:  \\\"sessionSummary\\\": \\\"Degraded payload with no authored decisions but decision-like prose that should still produce lexical placeholders.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:12:} from '../../mcp_server/handlers/session-resume.js';\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:20:const VALID_SPEC_FOLDER = 'specs/system-spec-kit/026-graph-and-context-optimization/012-cached-sessionstart-consumer-gated';\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:51:  run: (context: { sessionId: string }) => Promise<T>,\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:58:  const sessionId = `session-${Date.now()}-${Math.random().toString(16).slice(2, 8)}`;\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:70:    return await run({ sessionId });\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:82:  sessionId: string,\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:99:    claudeSessionId: sessionId,\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:100:    speckitSessionId: `speckit-${sessionId}`,\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:102:    sessionSummary: {\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:125:  saveState(sessionId, state);\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:277:    expect(additiveResult.cachedSummary?.continuityText).toContain('Last session worked on');\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:281:  it('exercises session_resume, session_bootstrap, and session-prime against the frozen corpus via hook state', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:304:    vi.doMock('../../mcp_server/lib/session/context-metrics.js', () => ({\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:310:    vi.doMock('../../mcp_server/lib/session/session-snapshot.js', () => ({\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:314:        recommendedAction: 'Use code_graph_query for structural lookups.',\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:315:        sourceSurface: 'session_bootstrap',\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:320:    vi.doMock('../../mcp_server/handlers/session-health.js', () => ({\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:332:        sessionContinuity: null,\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:348:    const { handleSessionResume } = await import('../../mcp_server/handlers/session-resume.js');\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:349:    const { handleSessionBootstrap } = await import('../../mcp_server/handlers/session-bootstrap.js');\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:350:    const { handleStartup } = await import('../../mcp_server/hooks/claude/session-prime.js');\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:375:      await withHookSandbox(async ({ sessionId }) => {\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:378:        const liveStartup = handleStartup({ session_id: sessionId, specFolder: VALID_SPEC_FOLDER });\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:380:        seedHookState(sessionId, scenario);\\n.opencode/skills/system-spec-kit/scripts/tests/session-cached-consumer.vitest.ts.test.ts:384:        const cachedStartup = handleStartup({ session_id: sessionId, specFolder: VALID_SPEC_FOLDER });\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:9:import type { CollectedDataFull } from '../extractors/collect-session-data';\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:65:  it('returns the exact predecessor when continuation lineage supplies a matching source session id', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:71:      sessionId: 'hit-current-3',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:79:  it('returns null when a continuation save has no valid predecessor session id to attach', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:85:      sessionId: 'miss-current-2',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:98:      sessionId: 'ambiguity-current-3',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:105:  it('renders causal_links.supersedes into the saved memory on the hit path', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:125:        sessionId: 'hit-current-3',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:130:          sessionSummary: 'Extended continuation run for the lineage fixture.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:141:              narrative: 'The save should inherit the predecessor session id before render.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:142:              facts: ['Touched workflow.ts immediately before causal link render.'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:156:              description: 'Inject predecessor discovery before causal link render.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:159:          triggerPhrases: ['phase 4 pr7', 'auto supersedes'],\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase4-pr7.test.ts:166:      expect(rendered).toContain('causal_links:');\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/migration/F-MIG-003-title-overlap.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/migration/F-MIG-003-title-overlap.md:6:  - \\\"trigger phrase migration\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/session-data-factory.ts:8:import type { SessionData } from '../../types/session-types';\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/session-data-factory.ts:49:      OBSERVATION: 'Verified duplicate content skips the markdown write and leaves bookkeeping unchanged.',\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/session-data-factory.ts:56:  SESSION_ID: 'session-workflow-e2e',\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/session-data-factory.ts:157:    LAST_ACTION: 'Prepared a sparse session to verify the sufficiency abort path.',\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/deep-loop-replay/040/sample-iterations.jsonl:1:{\\\"type\\\":\\\"config\\\",\\\"mode\\\":\\\"review\\\",\\\"topic\\\":\\\"Replay fixture for 040\\\",\\\"maxIterations\\\":7,\\\"convergenceThreshold\\\":0.10,\\\"stuckThreshold\\\":2,\\\"sessionId\\\":\\\"replay-040-fixture\\\"}\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:58:    TRIGGER_PHRASES_YAML: 'trigger_phrases:\\\\n  - \\\"phase 6 template fixture\\\"\\\\n  - \\\"memory duplication reduction\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:182:    'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:183:    ...frontmatterTriggers.map((triggerPhrase) => `  - \\\"${triggerPhrase}\\\"`),\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:193:    'session_id: \\\"phase6-mirror-drift\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:196:    'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:197:    ...metadataTriggers.map((triggerPhrase) => `  - \\\"${triggerPhrase}\\\"`),\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:217:  const frontmatterTriggers = spec.frontmatterTriggerPhrases ?? ['phase 6 reviewer fixture', 'clean trigger'];\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:245:    'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:246:    ...frontmatterTriggers.map((triggerPhrase) => `  - \\\"${triggerPhrase}\\\"`),\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:303:    'session_id: \\\"phase6-dup-fixture\\\"',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:310:    'trigger_phrases:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:311:    ...metadataTriggers.map((triggerPhrase) => `  - \\\"${triggerPhrase}\\\"`),\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:313:    'causal_links:',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:346:  it.skip('F004.1 keeps a single closeout instruction for completed sessions and preserves all continuation surfaces for in-progress sessions', async () => {\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:361:    expect(inProgress).toContain('Collapse completed-session closure duplication');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:374:    expect(rendered).toContain('<!-- ANCHOR:continue-session -->');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:403:    expect(rewrite.content).not.toContain('  - \\\"stale metadata trigger\\\"');\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:412:        sessionSummary: 'Phase 6 mirror drift reviewer fixture.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:424:      field: 'trigger_phrases',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:434:        sessionSummary: 'Phase 6 clean mirror reviewer fixture.',\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:448:      { fixture: 'F-CHECK-DUP1-trigger.json', checkId: 'DUP1', severity: 'MEDIUM', field: 'observations' },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:449:      { fixture: 'F-CHECK-DUP2-trigger.json', checkId: 'DUP2', severity: 'MEDIUM', field: 'decisions' },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:450:      { fixture: 'F-CHECK-DUP3-trigger.json', checkId: 'DUP3', severity: 'MEDIUM', field: 'continuation' },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:451:      { fixture: 'F-CHECK-DUP4-trigger.json', checkId: 'DUP4', severity: 'MEDIUM', field: 'resume_context' },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:452:      { fixture: 'F-CHECK-DUP5-trigger.json', checkId: 'DUP5', severity: 'HIGH', field: 'trigger_phrases' },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:453:      { fixture: 'F-CHECK-DUP6-trigger.json', checkId: 'DUP6', severity: 'MEDIUM', field: 'anchors' },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:454:      { fixture: 'F-CHECK-DUP7-trigger.json', checkId: 'DUP7', severity: 'MEDIUM', field: 'files' },\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:466:          sessionSummary: `Trigger fixture for ${expectation.checkId}.`,\\n.opencode/skills/system-spec-kit/scripts/tests/memory-quality-phase6-template.test.ts:487:        sessionSummary: 'Clean Phase 6 duplication reviewer fixture.',\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-004a-in-progress.json:10:        \\\"TASK_DESCRIPTION\\\": \\\"Collapse completed-session closure duplication\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/tasks.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/migration/F-MIG-002-clean.md:3:description: \\\"Fixture whose trigger_phrases should remain unchanged.\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/migration/F-MIG-002-clean.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/002-phase-2/spec.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/002-phase-2/spec.md:44:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/001-phase-1/spec.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/001-phase-1/spec.md:44:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/deep-loop-optimizer/sample-040-corpus.jsonl:1:{\\\"type\\\":\\\"config\\\",\\\"mode\\\":\\\"review\\\",\\\"topic\\\":\\\"Review of graph optimization module\\\",\\\"reviewTarget\\\":\\\"specs/040-graph-optimization\\\",\\\"reviewTargetType\\\":\\\"spec-folder\\\",\\\"reviewDimensions\\\":[\\\"correctness\\\",\\\"security\\\",\\\"traceability\\\",\\\"maintainability\\\"],\\\"sessionId\\\":\\\"rvw-2026-03-20T14-00-00Z\\\",\\\"parentSessionId\\\":null,\\\"lineageMode\\\":\\\"new\\\",\\\"generation\\\":1,\\\"continuedFromRun\\\":null,\\\"maxIterations\\\":7,\\\"convergenceThreshold\\\":0.10,\\\"stuckThreshold\\\":2,\\\"createdAt\\\":\\\"2026-03-20T14:00:00Z\\\",\\\"specFolder\\\":\\\"040-graph-optimization\\\",\\\"releaseReadinessState\\\":\\\"in-progress\\\"}\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/deep-loop-optimizer/sample-040-corpus.jsonl:2:{\\\"type\\\":\\\"iteration\\\",\\\"mode\\\":\\\"review\\\",\\\"run\\\":1,\\\"status\\\":\\\"complete\\\",\\\"focus\\\":\\\"D1 Correctness - reducer logic review\\\",\\\"dimensions\\\":[\\\"correctness\\\"],\\\"filesReviewed\\\":[\\\"src/graph-reducer.ts\\\",\\\"src/parser.ts\\\"],\\\"sessionId\\\":\\\"rvw-2026-03-20T14-00-00Z\\\",\\\"parentSessionId\\\":null,\\\"lineageMode\\\":\\\"new\\\",\\\"generation\\\":1,\\\"continuedFromRun\\\":null,\\\"findingsCount\\\":4,\\\"findingsSummary\\\":{\\\"P0\\\":1,\\\"P1\\\":2,\\\"P2\\\":1},\\\"findingsNew\\\":{\\\"P0\\\":1,\\\"P1\\\":2,\\\"P2\\\":1},\\\"newFindingsRatio\\\":0.90,\\\"timestamp\\\":\\\"2026-03-20T14:12:00Z\\\",\\\"durationMs\\\":72000}\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/deep-loop-optimizer/sample-040-corpus.jsonl:3:{\\\"type\\\":\\\"iteration\\\",\\\"mode\\\":\\\"review\\\",\\\"run\\\":2,\\\"status\\\":\\\"complete\\\",\\\"focus\\\":\\\"D2 Security - injection prevention audit\\\",\\\"dimensions\\\":[\\\"security\\\",\\\"correctness\\\"],\\\"filesReviewed\\\":[\\\"src/sanitizer.ts\\\",\\\"src/input-validator.ts\\\"],\\\"sessionId\\\":\\\"rvw-2026-03-20T14-00-00Z\\\",\\\"parentSessionId\\\":null,\\\"lineageMode\\\":\\\"new\\\",\\\"generation\\\":1,\\\"continuedFromRun\\\":null,\\\"findingsCount\\\":6,\\\"findingsSummary\\\":{\\\"P0\\\":1,\\\"P1\\\":3,\\\"P2\\\":2},\\\"findingsNew\\\":{\\\"P0\\\":0,\\\"P1\\\":1,\\\"P2\\\":1},\\\"newFindingsRatio\\\":0.40,\\\"timestamp\\\":\\\"2026-03-20T14:24:00Z\\\",\\\"durationMs\\\":65000}\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/deep-loop-optimizer/sample-040-corpus.jsonl:5:{\\\"type\\\":\\\"iteration\\\",\\\"mode\\\":\\\"review\\\",\\\"run\\\":3,\\\"status\\\":\\\"complete\\\",\\\"focus\\\":\\\"D3 Traceability + D4 Maintainability sweep\\\",\\\"dimensions\\\":[\\\"traceability\\\",\\\"maintainability\\\"],\\\"filesReviewed\\\":[\\\"specs/040/spec.md\\\",\\\"src/graph-reducer.ts\\\",\\\"src/utils.ts\\\"],\\\"sessionId\\\":\\\"rvw-2026-03-20T14-00-00Z\\\",\\\"parentSessionId\\\":null,\\\"lineageMode\\\":\\\"new\\\",\\\"generation\\\":1,\\\"continuedFromRun\\\":null,\\\"findingsCount\\\":7,\\\"findingsSummary\\\":{\\\"P0\\\":0,\\\"P1\\\":3,\\\"P2\\\":4},\\\"findingsNew\\\":{\\\"P0\\\":0,\\\"P1\\\":0,\\\"P2\\\":2},\\\"newFindingsRatio\\\":0.08,\\\"convergenceSignals\\\":{\\\"rollingAvg\\\":0.09,\\\"madScore\\\":0.06,\\\"noveltyRatio\\\":0.08,\\\"compositeStop\\\":0.62},\\\"timestamp\\\":\\\"2026-03-20T14:36:00Z\\\",\\\"durationMs\\\":58000}\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/spec.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/spec.md:179:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/decision-record.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/checklist.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/002-phase-2/tasks.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/plan.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/002-phase-2/plan.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/001-phase-1/plan.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/migration/F-MIG-001-junk-residual.md:3:description: \\\"Fixture with stale residual triggers plus useful short anchors.\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/migration/F-MIG-001-junk-residual.md:4:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D8.json:5:    \\\"sessionSummary\\\": \\\"This healthy overview proves the reviewer catches anchor drift without introducing unrelated findings.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D8.json:19:    \\\"trigger_phrases:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D8.json:49:    \\\"session_id: \\\\\\\"phase4-pr9-d8\\\\\\\"\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D8.json:57:    \\\"causal_links:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-CHECK-DUP3-trigger.json:2:  \\\"pendingNoTasksLine\\\": \\\"- No pending tasks - session completed successfully\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/spec.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/spec.md:227:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-synthetic-bigrams.json:3:  \\\"sessionSummary\\\": \\\"We reject across 4 prioritization tiers and the full Level 3 spec set while the spec kit validator stays green for adjacent topic extraction.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-synthetic-bigrams.json:4:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-synthetic-bigrams.json:6:    \\\"session for\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-synthetic-bigrams.json:22:    \\\"session for\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC4-importance-tier.json:3:  \\\"sessionSummary\\\": \\\"Phase 2 PR-3 validation keeps the importance-tier resolver authoritative while the managed-frontmatter rewrite re-emits both serialized tier locations from the same resolved value. This fixture models the historical drift case where an explicit important-tier save could later be normalized back to a default-looking frontmatter tier if migration treated the serializer as a second authority.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC4-importance-tier.json:14:      \\\"decision\\\": \\\"Use session-extractor as the canonical importance-tier resolver\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC4-importance-tier.json:18:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC4-importance-tier.json:24:    \\\"Replay the fixture through generate-context.js and confirm tier parity\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-2phase-default/001-phase-1/tasks.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-004b-last-clipping.json:9:        \\\".opencode/skills/system-spec-kit/scripts/extractors/collect-session-data.ts\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-happy-path.json:3:  \\\"sessionSummary\\\": \\\"Phase 3 replay preserves spec kit retrieval language, semantic search adjacency, and the mcp integration topic without introducing junk trigger phrases.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-happy-path.json:4:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-happy-path.json:13:      \\\"description\\\": \\\"Applies the reusable sanitizer without disturbing healthy trigger phrases\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D4.json:5:    \\\"sessionSummary\\\": \\\"This healthy overview proves the reviewer catches tier drift without introducing unrelated findings.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D4.json:19:    \\\"trigger_phrases:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D4.json:53:    \\\"session_id: \\\\\\\"phase4-pr9-d4\\\\\\\"\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D4.json:61:    \\\"causal_links:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-002b-proposition-overlap.json:3:  \\\"session_summary\\\": \\\"Decision and outcome dedupe fixture for Phase 6 extractor coverage.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-002b-proposition-overlap.json:6:      \\\"prompt\\\": \\\"Deduplicate repeated propositions across outcomes and decisions without dropping authored rationale.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-002b-proposition-overlap.json:24:        \\\".opencode/skills/system-spec-kit/scripts/extractors/collect-session-data.ts\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-002b-proposition-overlap.json:32:        \\\".opencode/skills/system-spec-kit/scripts/extractors/collect-session-data.ts\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-002b-proposition-overlap.json:47:      \\\"path\\\": \\\".opencode/skills/system-spec-kit/scripts/extractors/collect-session-data.ts\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-002b-proposition-overlap.json:48:      \\\"changes_summary\\\": \\\"Remove duplicate outcome propositions before rendering.\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-003-canonical-trigger.json:3:  \\\"sessionSummary\\\": \\\"Codex-cli-compact audit for tree-sitter and implementation-summary coverage across api cli mcp entry points.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-003-canonical-trigger.json:4:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-003-canonical-trigger.json:23:      \\\"path\\\": \\\".opencode/skills/system-spec-kit/scripts/lib/trigger-phrase-sanitizer.ts\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-suspicious-prefix.json:3:  \\\"sessionSummary\\\": \\\"Phase 3 replay keeps meaningful indexing terms while removing numbered and identifier-shaped junk that previously polluted saved trigger phrases.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-suspicious-prefix.json:4:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-suspicious-prefix.json:13:      \\\"path\\\": \\\".opencode/skills/system-spec-kit/scripts/lib/trigger-phrase-sanitizer.ts\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-suspicious-prefix.json:19:    \\\"Verify the saved trigger list\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/plan.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-standalone-stopwords.json:3:  \\\"sessionSummary\\\": \\\"Phase 3 replay proves standalone trigger junk no longer survives the save path when the packet context includes graph and issues language next to a valid mcp surface.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-standalone-stopwords.json:4:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC3-standalone-stopwords.json:15:      \\\"path\\\": \\\".opencode/skills/system-spec-kit/scripts/lib/trigger-phrase-sanitizer.ts\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-001-trigger-cluster.json:3:  \\\"sessionSummary\\\": \\\"Investigated sibling-memory trigger duplication while keeping the claude optimization settings continuation discoverable for Phase 6.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-001-trigger-cluster.json:4:  \\\"triggerPhrases\\\": [\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-001-trigger-cluster.json:17:      \\\"description\\\": \\\"Guarded the fallback cluster anchor append for trigger phrase generation.\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-005a-anchor-scaffolding.json:25:    \\\"continue-session\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-005a-anchor-scaffolding.json:31:    \\\"session-history\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D7.json:5:    \\\"sessionSummary\\\": \\\"This healthy overview proves the reviewer catches missing provenance without introducing unrelated findings.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D7.json:19:    \\\"trigger_phrases:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D7.json:53:    \\\"session_id: \\\\\\\"phase4-pr9-d7\\\\\\\"\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D7.json:61:    \\\"causal_links:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC2-authored-decisions.json:3:  \\\"sessionSummary\\\": \\\"Short neutral session summary for decision precedence testing.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/tasks.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-002a-blank-observation-titles.json:3:  \\\"session_summary\\\": \\\"Observation-title filtering fixture for Phase 6 extractor coverage.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D1.json:5:    \\\"sessionSummary\\\": \\\"This broken overview proves the reviewer catches truncation when the rendered text still ends mid token and falls back to the old ASCII ellipsis shape instead of the boundary safe contract that Phase 1 pinned down for JSON mode saves.\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D1.json:19:    \\\"trigger_phrases:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D1.json:53:    \\\"session_id: \\\\\\\"phase4-pr9-d1\\\\\\\"\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-broken-D1.json:61:    \\\"causal_links:\\\",\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-DUP-005b-frontmatter-mirror.json:9:    \\\"stale metadata trigger\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/checklist.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/001-design/spec.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/001-design/spec.md:44:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/003-verify/spec.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/003-verify/spec.md:44:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/001-design/plan.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-detection/phase-blocked-by-level/spec.md:19:- Phase score: 30/50 (3 of 5 dimensions triggered -- qualifies on its own)\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/001-design/tasks.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-detection/phase-maximum/spec.md:12:Maximum-complexity fixture that triggers all 5 phase scoring dimensions,\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-detection/phase-maximum/spec.md:18:- Phase score: 50/50 (all 5 dimensions triggered)\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-detection/phase-high/spec.md:12:High-complexity fixture that triggers 4 of 5 phase scoring dimensions.\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-detection/phase-high/spec.md:18:- Phase score: 40/50 (4 of 5 dimensions triggered)\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/002-build/spec.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/002-build/spec.md:44:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/003-verify/tasks.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC5-lineage/hit/memory/06-04-26_12-30__project-notes.md:4:session_id: \\\"hit-unrelated-2\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC5-lineage/miss/memory/06-04-26_09-00__orphan-notes.md:3:description: \\\"Malformed predecessor fixture without a session id.\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/003-verify/plan.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC5-lineage/ambiguity/memory/06-04-26_09-00__candidate-b.md:4:session_id: \\\"ambiguous-b\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/002-build/plan.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-creation/expected-3phase-named/002-build/tasks.md:5:trigger_phrases:\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-detection/no-phase/spec.md:18:- Phase score: 0/50 (no dimensions triggered)\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC5-lineage/hit/memory/06-04-26_12-05__deep-research-run-8.md:4:session_id: \\\"hit-predecessor-1\\\"\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/phase-detection/phase-minimum/spec.md:20:- Phase score: 30/50 (3 of 5 dimensions triggered)\\n.opencode/skills/system-spec-kit/scripts/tests/fixtures/memory-quality/F-AC5-lineage/ambiguity/memory/06-04-26_09-00__candidate-a.md:4:session_id: \\\"ambiguous-a\\\"\\n\", truncated_after_lines: None }, duration: 0ns, timed_out: false }, network_policy_decision: None }))" }
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:26436:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:26529:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:26746:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:26807:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:39240:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:39301:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:39443:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:39536:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:47218:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:47279:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:47376:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:47469:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:54703:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:54764:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:54842:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:54935:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:70472:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:70565:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:78695:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:78788:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:91250:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:91343:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:97791:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:97884:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:104287:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:104380:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:113010:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:113103:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:118007:    92	| `/memory:save` | Save conversation context | 4 tools |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:120369:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:120462:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:133379:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:133472:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:141738:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:141831:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:146070:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:146163:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:155294:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:155387:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:163556:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed                                 |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:163617:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:163754:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:163847:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:170489:| **Save context**          | `/memory:save` OR compose JSON → `generate-context.js --json '<data>' [spec-folder]` → Auto-indexed |
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:170582:Trigger: "save context", "save memory", `/memory:save`, memory file creation
.opencode/specs/system-spec-kit/z_future/hybrid-rag-fusion-upgrade/001-research-hybrid-rag-fusion-systems/001-engram-main/research/research.md:181209:  │ "generate-context\.js|session_bootstrap|session_resume|memory_context\(|/memory:save|/spec_kit:r
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/006-skill-advisor/002-advisor-phrase-booster-tuning/research/iterations/iteration-002.md:27:| P0-CMD-003 | P0 | /memory:save this context | command-memory-save | - | save this context | command `command-memory-save` + explicit variant + phrase + single-token intent + multi-token + name + corpus | low | Fixture L11; explicit command bridge plus existing `save this context` PHRASE entry dominate. |

codex
The first pass points at a catalog entry named “Feature Specification: /memory:save Planner-First Default.” I’m narrowing from the generated descriptions index into the actual spec packet so the answer cites the canonical folder, not the command implementation.
exec
/bin/zsh -lc "sed -n '4255,4290p' specs/descriptions.json" in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
 succeeded in 0ms:
      "keywords": [
        "feature",
        "specification",
        "phase",
        "continuity",
        "refactor",
        "gates"
      ],
      "lastUpdated": "2026-04-26T07:03:47.477Z"
    },
    {
      "specFolder": "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite",
      "description": "Feature Specification: /memory:save Planner-First Default",
      "keywords": [
        "feature",
        "specification",
        "memory",
        "save",
        "planner-first",
        "default"
      ],
      "lastUpdated": "2026-04-26T07:03:47.483Z"
    },
    {
      "specFolder": "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/005-memory-search-runtime-bugs",
      "description": "Feature Specification: /memory:search Runtime Bugs and Refinements",
      "keywords": [
        "feature",
        "specification",
        "memory",
        "search",
        "runtime",
        "bugs",
        "refinements"
      ],
      "lastUpdated": "2026-04-27T13:55:36.078Z"

exec
/bin/zsh -lc "rg -n \"Feature Specification: /memory:save Planner-First Default|Planner-First Default|planner-first\" specs -S --glob 'spec.md' --glob 'plan.md' --glob 'tasks.md' --glob 'implementation-summary.md' --glob 'description.json'" in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
 exited 1 in 0ms:
exec
/bin/zsh -lc 'rg --files specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
exec
/bin/zsh -lc 'rg -n "planner|Planner|memory:save|handover|continuity|contract|anchor" specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite -S' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
 exited 2 in 0ms:
rg: specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite: IO error for operation on specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite: No such file or directory (os error 2)

 exited 2 in 0ms:
rg: specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite: IO error for operation on specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite: No such file or directory (os error 2)

codex
That catalog entry is relative to the OpenCode spec root, not the repo-level `specs/` directory. I hit a missing path under `specs/`; checking the `.opencode/specs/` mirror now.
exec
/bin/zsh -lc 'rg --files .opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
 succeeded in 0ms:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-review.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3-review.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-planner-output.json
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3-planner-output.json
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-planner-output.json
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-review.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json

exec
/bin/zsh -lc 'rg -n "planner|Planner|memory:save|handover|continuity|contract|anchor" .opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite -S' in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
 succeeded in 0ms:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:2:title: "...em-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record]"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:3:description: "ADR ledger for the planner-first /memory:save contract: the trim-targeted verdict, planner-first default output, reconsolidation opt-in, enrichment deferral, router category contract, hard-blocker preservation, and the scoped content-router.ts exception."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:6:  - "memory save planner first adr"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:7:  - "planner-first save"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:13:  continuity:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:14:    packet_pointer: "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:17:    recent_action: "Rewrote ADR ledger as cohesive planner-first decision sequence"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:25:      fingerprint: "sha256:014-planner-first-adr-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:26:      session_id: "014-planner-first-adr-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:27:      parent_session_id: "014-planner-first-seed"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:31:      - "All ADRs reframed under the planner-first delivery arc."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:34:# Decision Record: /memory:save Planner-First Default
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:58:**We chose**: Keep the canonical atomic writer, routed record identity, content-router core, and thin continuity validation, then trim or defer the save-time work that no longer earns default-path cost.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:78:| Keep the whole stack untouched | Research showed the default path was heavier than the remaining contract |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:91:### ADR-002: Planner-First Output Contract for `/memory:save`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:107:**We chose**: Make planner-first output the default `/memory:save` contract and preserve `full-auto` as explicit fallback.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:109:**How it works**: The handler computes the same route and legality data as before, but the default path stops short of mutation and returns structured planner output instead.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:128:| Replace the save system with a new planner service | Wider scope and safety risk |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:158:**How it works**: Planner mode surfaces reconsolidation as follow-up capability. `full-auto` or explicit flags preserve access when operators want it.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:167:- Added some operator choice and documentation complexity. Mitigation: planner follow-up guidance and env-reference alignment.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:176:| Keep reconsolidation on every save | Cost too high for the remaining contract |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:205:**How it works**: The planner surfaces enrichment opportunities, and the follow-up APIs or explicit fallback path handle the actual execution when it is wanted.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:246:Research judged the eight-category contract useful, but it judged the wider classifier stack too large for the simplified save problem. The implementation had to keep target authority while reducing default-path routing complexity.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:264:- Route overrides and audit behavior stayed part of the router contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:299:**How it works**: The planner reports advisory quality issues, but malformed or unsafe saves still block.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:308:- Some fixes now require explicit edits. Mitigation: planner output shows them clearly.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:346:**How it works**: The eight-category switch, Tier 1 logic, Tier 2 matching, and target selection remain the preserved contract. The documented exception is the Tier 3 default-disable and manual-review guard.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:2:title: "Feature [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec]"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:3:description: "Make /memory:save planner-first (non-mutating) by default while preserving full-auto as an explicit fallback, retire the legacy [spec]/memory/*.md write path, and decouple freshness (graph-metadata refresh, spec-doc reindex, enrichment) from the hot save path via explicit follow-up APIs."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:7:  - "memory save planner first"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:8:  - "planner-first memory save"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:10:  - "speckit_save_planner_mode"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:19:  continuity:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:20:    packet_pointer: "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:23:    recent_action: "Folder renamed; spec rewritten under planner-first framing"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:37:      fingerprint: "sha256:014-planner-first-default-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:38:      session_id: "014-planner-first-default-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:39:      parent_session_id: "014-planner-first-default-closeout"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:45:      - "Implementation shipped planner-first default with explicit full-auto fallback; freshness work moved to explicit follow-up APIs."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:49:# Feature Specification: /memory:save Planner-First Default
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:58:`/memory:save` was doing too much on every invocation. The runtime still created, wrote, indexed, and read `[spec]/memory/*.md` even though v3.4.0.0 docs claimed that artifact was retired; on top of that legacy write path, every save triggered Tier 3 routing, a heavy quality-loop auto-fix, reconsolidation-on-save, post-insert enrichment, unconditional graph-metadata refresh, and unconditional spec-doc reindex — regardless of whether the caller actually wanted mutation. Auditing the code proved the system was half-migrated, turning vague drift into 25 concrete findings. Classifying the remaining 15 save-flow subsystems proved which ones still earned runtime cost (the canonical atomic writer, routed record identity, the content-router category contract, and thin continuity validation) and which ones did not belong on the default path.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:60:This packet delivers the end state implied by that analysis. `/memory:save` is planner-first by default: the handler computes the same route and legality data as before but stops short of mutation and returns structured planner output instead. `full-auto` is preserved as an explicit fallback via `SPECKIT_SAVE_PLANNER_MODE=full-auto`, with canonical atomic mutation, `POST_SAVE_FINGERPRINT` safety parity, same-path identity, and rollback intact. The legacy `[spec]/memory/*.md` write path is retired. Four previously default-on behaviors become explicit opt-in: `SPECKIT_ROUTER_TIER3_ENABLED`, `SPECKIT_QUALITY_AUTO_FIX`, `SPECKIT_RECONSOLIDATION_ENABLED`, `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED`. Freshness becomes follow-up work via three new APIs: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. `hybrid` is documented as reserved and currently behaves like `plan-only`. The content-router category contract is preserved with one honest, scoped exception: a Tier 3 default-disable and manual-review guard inside `content-router.ts`. 43 implementation tasks shipped under v3.4.1.0. A deep-review pass flagged 3 P0, 5 P1, and 1 P2 findings on router honesty, fallback safety parity, blocker classification, deferred-helper coverage, and changelog accuracy; all 9 were resolved before closeout.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:83:| **Predecessor** | ../003-continuity-refactor-gates/spec.md |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:91:`/memory:save` mutated by default, did work that had nothing to do with the caller's intent, and still honored an artifact family that had supposedly been retired. The audit produced 25 concrete findings across runtime write path, runtime read path, indexing, documentation contradictions, template drift, test drift, and a phantom save-side dedup contract. Relevance research then classified the remaining 15 save-flow subsystems and showed that four core pieces earned their cost (canonical atomic writer, routed record identity, content-router category contract, thin continuity validation) while four others (Tier 3 routing, reconsolidation-on-save, heavy quality-loop auto-fix, post-insert enrichment) did not belong on the default path. That combined picture made the default contract untenable: operators got mutation they didn't ask for, freshness work they didn't need, and an artifact surface docs claimed was gone.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:95:Ship a `/memory:save` contract that matches the evidence: planner-first by default so operators see the plan before anything changes, full-auto preserved as an explicit fallback for the cases that still need it, and freshness work moved to callable follow-up APIs so every save doesn't pay for work it doesn't need. Retire the legacy `[spec]/memory/*.md` write path end-to-end. Make four previously default-on behaviors opt-in via per-subsystem env flags, preserve `hybrid` as a reserved value, and record the scoped router exception honestly so docs match the code.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:105:- Make `/memory:save` planner-first by default: the default path computes route + legality data, returns structured planner output, does not mutate files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:110:- Preserve the content-router eight-category contract. Record the single scoped exception inside `content-router.ts`: Tier 3 default-disable + manual-review return behavior.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:114:- Promote template-contract failures from advisories to planner blockers.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:116:- Update packet docs, `ENV_REFERENCE.md`, release notes, and test fixtures so the documented contract matches the shipped behavior (router scope, hybrid reserved state, follow-up tool names, freshness as explicit follow-up).
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:117:- Update tests across `memory-save`, `content-router`, `quality-loop`, `save-quality-gate`, reconsolidation-bridge, reconsolidation, assistive-reconsolidation, chunking, graph-refresh, thin-continuity, planner UX, CLI target authority, and memory-save integration to prove planner-default + fallback end-to-end behavior.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:118:- Validate planner-first behavior against three real session transcripts before closeout.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:123:- Changes to the eight-category router contract; reuse as-is.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:124:- Replacing the save system with a new planner service; the existing handler owns the contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:133:| Planner contract core | `memory-save.ts`, `types.ts`, `response-builder.ts`, `validation-responses.ts`, `generate-context.ts` | Modify | Introduce planner-first default + shared types + blocker/advisory separation |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:134:| Canonical writer reuse | `create-record.ts`, `atomic-index-memory.ts`, `thin-continuity-record.ts`, `post-insert.ts` | Reuse/preserve | Core writer earns its cost; fallback path depends on stable interfaces |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:135:| Content router | `content-router.ts` | Modify (scoped) | Preserve eight-category contract; add Tier 3 default-disable + manual-review guard |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:139:| Command docs | `../../../../command/memory/save.md`, `../../../../command/memory/manage.md` | Modify | Document planner-first default, fallback, and follow-up freshness actions |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:140:| Reference docs | `../../../../skill/system-spec-kit/references/memory/save_workflow.md`, `../../../../skill/system-spec-kit/references/memory/memory_system.md`, templates | Modify | Align operator-facing references with shipped contract |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:142:| Release notes | `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` | Author | Record shipped contract, router scoped exception, reserved `hybrid`, follow-up APIs |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:143:| Test surfaces | See tasks.md §Testing — broad vitest + transcript prototype sweep | Modify | Prove planner-default, fallback parity, gate behavior, continuity upserts |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:149:The packet carries packet-local snapshots of the audit report, research synthesis, deep-review report, and planner-first transcript prototypes so a reader can inspect the most important artifacts without leaving the folder. Those snapshots live under `research/013-audit-snapshot/`, `research/014-research-snapshot/`, `review/015-deep-review-snapshot/`, and `scratch/transcripts-snapshot/` inside this flattened `004-memory-save-rewrite` packet.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:161:| REQ-001 | The default `/memory:save` path must be planner-first and non-mutating. | Default invocation returns structured planner output (route, legality, blockers, advisories, follow-up actions) and mutates no files on disk. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:164:| REQ-004 | Tier 3 routing must be default-off with a scoped, auditable exception. | `SPECKIT_ROUTER_TIER3_ENABLED=false` is default; `content-router.ts` contains the scoped default-disable + manual-review guard; the eight-category contract is otherwise unchanged. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:168:| REQ-008 | Unconditional graph refresh and spec-doc reindex must leave planner-default saves. | Planner-default saves no longer trigger these; explicit follow-up APIs handle the work when wanted. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:171:| REQ-011 | Template-contract failures must be planner blockers. | Template-contract misses surface as `blocker` entries in planner output, not as advisories. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:172:| REQ-012 | Deferred helpers must return explicit deferred status. | When default-path skips reconsolidation, enrichment, Tier 3 routing, or quality auto-fix, the planner response records `deferred` rather than success-shaped output. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:174:| REQ-014 | Shipped documentation must match the runtime contract. | `/memory:save` docs, `ENV_REFERENCE.md`, release notes, and templates describe planner-first default, explicit fallback, follow-up APIs, reserved `hybrid`, and the scoped router exception honestly. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:175:| REQ-015 | Canonical atomic writer, routed record identity, content-router category contract, and thin continuity validation must remain intact. | Fallback path plus continuity upserts still run through the preserved core; tests prove no behavior regression outside the documented gated flags. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:181:| REQ-016 | Planner output must preserve blocker/advisory separation. | Types and helpers distinguish `blocker` entries (must fix) from `advisory` entries (informational) in all code paths and tests. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:182:| REQ-017 | CLI target authority must stay deterministic. | Planner-default CLI tests prove the same target selection as full-auto for identical inputs. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:183:| REQ-018 | Same-path identity must remain deterministic after the refactor. | Record identity tests confirm identical path semantics for the same-target save case across planner and full-auto paths. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:184:| REQ-019 | `/spec_kit:resume` recovery ladder must stay intact. | Recovery ladder tests show no regression when the save path is planner-first. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:185:| REQ-020 | Transcript prototypes must ground planner behavior. | Three real session transcripts are exercised; no unexpected drops, wrong-anchor outcomes, or unsafe target exposures are produced. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:186:| REQ-021 | Planner output must not expose unsafe file targets. | Target authority tests verify the planner emits only caller-authorized paths. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:188:| REQ-023 | Continuity upserts must still use validated helpers. | Thin continuity + upsert tests pass unchanged expectations. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:197:| REQ-027 | No new network dependency on the default path. | Planner-default never depends on new network calls introduced by this packet. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:200:| REQ-030 | Follow-up actions surface consistently. | Planner output surfaces follow-up actions in a single consistent schema across router, quality, reconsolidation, enrichment, and indexing scenarios. |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:208:- **SC-001**: `/memory:save` with no env override returns structured planner output and mutates no files.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:218:- **SC-011**: Template-contract failures produce `blocker` entries in planner output.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:219:- **SC-012**: Docs (`/memory:save`, `ENV_REFERENCE.md`, release notes, templates) match the shipped contract; router scope is described honestly.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:222:- **SC-015**: Canonical atomic writer, routed record identity, content-router category contract, and thin continuity validation are unchanged outside the documented Tier 3 guard.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:226:- **SC-019**: Three real session transcripts validate planner-first behavior with no wrong-anchor or unsafe-target outcomes.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:237:| Dependency | Eight-category router contract | High | Preserve; record scoped Tier 3 exception only |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:238:| Dependency | Vitest + transcript fixtures | High | Broad test sweep covers planner, fallback, router, quality, reconsolidation, enrichment, follow-up APIs, continuity |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:240:| Risk | Default path still mutates on some branch | High | Planner-default tests assert non-mutation; CI catches regression |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:244:| Risk | Deferred helpers appear to have "succeeded" when they ran nothing | Medium | Explicit `deferred` status in planner output (P015-R004) |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:245:| Risk | Template-contract misses hide as advisories | Medium | Promote to planner blockers (P015-R003) |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:256:- **NFR-C01**: The planner-default path must not mutate any file on disk.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:258:- **NFR-C03**: Router target authority must be identical between planner and fallback paths for the same inputs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:263:- **NFR-SA02**: Planner output must expose only caller-authorized file targets.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:268:- **NFR-T01**: Every planner output item must map to a typed entry (`blocker` or `advisory` or `deferred`) with a source reason.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:275:- **NFR-M02**: The eight-category router contract must remain the single route-target mapping.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:282:- **NFR-G03**: Release notes, `/memory:save` docs, and `ENV_REFERENCE.md` must agree on the same default/opt-in/reserved vocabulary.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:286:- **NFR-U01**: Planner output must be human-readable and action-oriented.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:287:- **NFR-U02**: Operator docs must describe planner-first default, explicit fallback, and follow-up APIs in consistent language.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:298:- **NFR-TH01**: Transcript snapshots retained in packet-local `scratch/` or `review/` directories must not contain raw API keys, bearer tokens, or user credentials. The planner and fallback paths must strip or redact credential-shaped strings before writing any transcript artifact to disk.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:307:- Caller invokes `/memory:save` with no args → planner-default; returns plan; does not mutate.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:311:- Malformed template-contract save → planner output contains at least one `blocker` entry.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:312:- Default-path call that would otherwise run reconsolidation → planner returns a `deferred` entry naming reconsolidation explicitly.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:318:- A reader assumes "planner-first" means `full-auto` was deleted → docs must be explicit that `full-auto` remains available as fallback.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:330:| Risk | 21/25 | High narrative + correctness risk because the packet changes the default save contract and must preserve fallback safety parity |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:342:| R-001 | Default path mutates under a hidden branch | High | Low | Planner-default non-mutation tests |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:346:| R-005 | Release notes drift from runtime contract | Medium | Medium | Changelog honesty remediation P015-R009 |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:348:| R-007 | Template-contract failures hide as advisories | Medium | Medium | Promoted to blockers (P015-R003) |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:355:### US-001: Planner-first default
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:357:**As an** operator running `/memory:save`, **I want** the default path to show me a plan before anything changes, **so that** I can review routing, legality, and follow-up actions without committing to mutation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:360:1. Given a caller invokes `/memory:save` with no args, when the handler runs, then it returns structured planner output and mutates nothing.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:361:2. Given a caller sees a planner blocker, when they correct the blocker, then a subsequent planner call shows the blocker resolved.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:376:1. Given a planner-default save completes, when I call `refreshGraphMetadata`, then graph metadata refreshes without mutating saved records.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:397:**As a** save caller with a malformed save, **I want** template-contract failures surfaced as blockers, **so that** I can't silently ship content that misses the contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:400:1. Given a template-contract miss, when the planner runs, then the output contains at least one `blocker` entry naming the contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:405:**As an** operator reading planner output, **I want** `deferred` status on skipped subsystems, **so that** I don't misread the result as "everything ran and succeeded."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:408:1. Given `SPECKIT_RECONSOLIDATION_ENABLED=false`, when the planner runs, then reconsolidation shows `deferred` in the output (not success-shaped).
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:409:2. Given multiple subsystems are deferred, when the planner returns, then each appears as its own `deferred` entry naming the subsystem.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:433:- [x] Runtime contract described consistently across `/memory:save` docs, `ENV_REFERENCE.md`, release notes, and templates.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:439:- [x] Implementation truth preserved: planner-first default + explicit fallback + follow-up APIs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:457:| Tooling operators | `/memory:save` users | Medium | Need clear default, fallback, and follow-up behavior |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:458:| AI orchestrators | Session continuity readers | High | Need the planner-first contract documented end-to-end |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:466:- Shipped planner-first default for `/memory:save` with explicit `full-auto` fallback.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:478:### Scenario 1: Planner-first default is the shipped contract
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:482:**Then** they understand that `/memory:save` now returns a structured planner response by default and no longer mutates files on the default path.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:496:### Scenario 4: `SPECKIT_SAVE_PLANNER_MODE` is the primary planner flag
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:539:| Research | Which save-flow pieces remained load-bearing? | Canonical atomic writer, routed record identity, content-router core, thin continuity validation. | `research/014-research-snapshot/research.md`, `research/014-research-snapshot/findings-registry.json` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:541:| Research | Could the save system be redesigned without replacing the core writer? | Yes. The research recommended a planner-first wrapper around the existing canonical prep and fallback writer. | `research/014-research-snapshot/research.md`, `research/014-research-snapshot/iterations/iteration-020.md` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:544:| Implementation | What became the new default operator contract? | Planner-first `/memory:save` with structured non-mutating output. | `review/015-deep-review-snapshot/primary-docs/spec.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:557:None. The packet records the shipped and remediated state of `/memory:save` as of 2026-04-15.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:2:title: "Implemen [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan]"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:3:description: "Milestoned delivery (M1-M10) for the planner-first /memory:save contract: audit + retirement of the legacy [spec]/memory/*.md write path, 20-iteration relevance research, planner contract + fallback implementation, routing/quality/reconsolidation/enrichment trim, follow-up API extraction, verification, release alignment, and deep-review remediation."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:6:  - "memory save planner first"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:7:  - "planner-first memory save plan"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:9:  - "retirement audit to planner-first"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:13:  continuity:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:14:    packet_pointer: "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:17:    recent_action: "Folder renamed; plan rewritten as M1-M10 planner-first delivery"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:28:      fingerprint: "sha256:014-planner-first-plan-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:29:      session_id: "014-planner-first-plan-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:30:      parent_session_id: "014-planner-first-seed"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:34:      - "The planner-first default + explicit fallback architecture preserves the canonical writer while eliminating the default-path overreach."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:38:# Implementation Plan: /memory:save Planner-First Default
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:60:The plan delivers a planner-first default for `/memory:save` while preserving the canonical atomic writer as an explicit fallback. It retires the legacy `[spec]/memory/*.md` write path end-to-end, gates four previously default-on save-path behaviors behind explicit env flags, and extracts freshness into three explicit follow-up APIs. Delivery runs through 10 sequential milestones: audit surface + classification, retirement cutover, relevance research, planner contract build-out, routing + quality trim, verification + transcript prototypes, release alignment, and deep-review remediation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:67:| M2 | Audit convergence | 25-finding audit report + half-migrated diagnosis | Proves the default contract is broken |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:68:| M3 | Retirement cutover | v3.4.1.0 removes legacy memory-file write path + aligns docs | Bridges audit to planner work |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:71:| M6 | Planner contract | Planner-first default + flag plumbing + type surface + shared types | Ships the new operator contract |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:73:| M8 | Verification + transcripts | Targeted tests, transcript prototypes, packet validation | Grounds planner behavior in real operator flows |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:74:| M9 | Release alignment | v3.4.1.0 release note + env reference + template updates | Runtime contract documented honestly |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:88:- [x] Packet scope limited to the planner contract, retirement of legacy write path, subsystem gating, follow-up APIs, and docs alignment.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:92:- [x] Packet canonical docs exist and agree on the planner-first contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:98:- [x] Planner-default runtime tests prove the default path is non-mutating.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:111:Planner-first wrapper around the preserved canonical atomic writer. The default path computes route + legality + advisory data and returns structured planner output without mutating files. An explicit fallback path activates the canonical writer with full atomic semantics intact. Freshness work lives in callable follow-up APIs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:115:- **Planner-first handler (`memory-save.ts`)**: Default execution path returning planner output (routes, blockers, advisories, follow-up actions). No mutation on default.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:116:- **Canonical atomic writer (preserved: `create-record.ts`, `atomic-index-memory.ts`, `thin-continuity-record.ts`, `post-insert.ts`)**: Fallback path when `SPECKIT_SAVE_PLANNER_MODE=full-auto`. Rollback, promotion, same-path identity, `POST_SAVE_FINGERPRINT` parity intact.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:117:- **Content router (`content-router.ts`)**: Eight-category contract preserved. Scoped exception: Tier 3 default-disable + manual-review guard.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:127:Caller invokes /memory:save
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:135:    |       Return structured planner output (no mutation)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:146:See `spec.md §3 Files to Change` for the consolidated table covering legacy write-path retirement, planner contract core, canonical writer preservation, content router scoped exception, quality gate updates, reconsolidation gating, enrichment deferral, freshness APIs, command + reference + env docs, release notes, test surfaces, and packet metadata.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:153:| Load-bearing core preserved | `memory-save.ts`, `create-record.ts`, `atomic-index-memory.ts`, `thin-continuity-record.ts`, `content-router.ts`, `post-insert.ts`, `reconsolidation-bridge.ts`, `workflow.ts` | Writer core + continuity + routing |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:154:| Planner contract | `types.ts`, `response-builder.ts`, `validation-responses.ts`, `generate-context.ts`, `/memory:save` docs | Default non-mutating output |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:172:  -> M6 Planner contract
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:185:Run the audit to convergence across 7 iterations. Document the half-migrated state in concrete families: runtime write path, runtime read path, doc contradiction, phantom dedup contract, test drift, and template drift. 25 active findings across 9 P0, 9 P1, and 7 P2 produce three closure paths (A retire, B rescind, C dedup redesign). Evidence: `research/013-audit-snapshot/iterations/`, `research/013-audit-snapshot/review-report.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:193:After the retirement cutover, open relevance research with Q1-Q10 covering load-bearing core, planner-first feasibility, quality-check classification, reindex vs freshness, graph-metadata refresh, entity extraction, reconsolidation cost, router classifier overfitting, trigger harmonization, and continuity ownership. Evidence: `research/014-research-snapshot/primary-docs/spec.md`, `research/014-research-snapshot/deep-research-strategy.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:197:Run 20 iterations of relevance research. Classify 15 subsystems into load-bearing (canonical atomic writer, routed record identity, content-router core, thin continuity validation), candidate trim targets (Tier 3 routing, reconsolidation-on-save, heavy quality-loop auto-fix, post-insert enrichment), and other categories. Reach the `trim-targeted` verdict: keep the writer, trim the oversized default-path stack. Evidence: `research/014-research-snapshot/research.md`, `research/014-research-snapshot/findings-registry.json`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:199:### M6 — Planner contract
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:201:Build the planner-first default, CLI defaults, docs, and type surfaces:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:203:- [x] T001-T005 Add planner-default and fallback flag definitions; planner response interfaces; response serialization helpers; planner blocker and advisory response helpers.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:204:- [x] T006-T008 Make `generate-context.ts` request planner-first behavior by default; update `/memory:save` docs; make `memory-save.ts` return planner output by default with explicit fallback.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:205:- [x] T009-T012 Update aggregate and handler tests for planner-default behavior; focused planner-first regression coverage.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:209:Trim Tier 3 routing, quality-loop auto-fix, reconsolidation-on-save, and post-insert enrichment from the default hot path while preserving the category contract and hard blockers:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:211:- [x] T013-T017 Trim default Tier 3 participation while preserving category contract; reduce Tier 2 prototype library; update content-router tests for Tier 1/Tier 2 deterministic default; update runtime routing + intent-routing tests.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:214:- [x] T027-T034 Move unconditional graph refresh + spec-doc reindex out of planner-default saves; expose explicit follow-up indexing entry points; keep graph refresh callable as explicit follow-up; update reconsolidation-bridge, reconsolidation, assistive-reconsolidation, chunking, graph-refresh tests.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:218:Prove the planner-first model holds up against real session evidence:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:220:- [x] T035-T037 Memory-save integration tests for planner-default plus fallback end-to-end; planner UX regression tests for readable output; thin-continuity tests for normalization + upsert parity.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:221:- [x] T038 Prototype planner-first behavior against three real session transcripts. Evidence: `scratch/transcripts-snapshot/`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:223:- [x] T041-T043 Review structural parity between `/memory:save` + `AGENTS.md` + system-spec-kit skill doc; review fallback safety against `atomic-index-memory.ts` + `create-record.ts`; review transcript mismatches and convert unresolved issues into follow-on tasks.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:227:Document the shipped contract in `v3.4.1.0` release notes and closeout docs, including the explicit follow-up APIs, the scoped router exception, and the reserved state of `hybrid`. Evidence: `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`, `../../../../changelog/01--system-spec-kit/v3.4.1.0.md`.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:235:- **F003 [P0]**: template-contract failures hidden as advisories → resolved by promoting them to planner blockers.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:253:| Runtime contract tests | Planner-default + fallback parity + router + quality + follow-up APIs | Vitest suites + targeted sweeps | `review/015-deep-review-snapshot/primary-docs/tasks.md`, `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:254:| Transcript validation | Planner-first behavior against real sessions | Transcript markdown + planner-output JSON + transcript reviews | `scratch/transcripts-snapshot/` |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:275:- Planner-first contract built before trim work.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:297:| Eight-category router contract | Runtime core | Preserved | Target authority depends on it |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:298:| Vitest suites | Verification tooling | Ready | Runtime contract evidence |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:312:- **Trigger**: Planner-default mutates under some branch, fallback loses atomic safety parity, router preservation claim contradicts code, or remediation reopens a closed finding.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:321:| M6 planner contract | Planner output schema drift or default mutation | Revert planner commits; re-enable prior handler default | None |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:329:Because the canonical atomic writer is preserved, rollback means reverting the planner-first wrapper + env-flag gates + follow-up API exports. Fallback behavior continues to work with full atomic semantics intact.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:342:  -> M6 Planner contract
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:370:| Planner contract | High | 0.5-1 day |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:383:| Implementation | 43 tasks across planner + trim + verification | Explains why the contract cannot be summarized as a small one-line change |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:392:- [x] Planner-default runtime tests pass
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:399:1. Revert planner commits atomically; fallback behavior continues via canonical writer.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:429:│ Planner +    │
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:455:| Research | Retirement cutover | Trim-targeted verdict | Planner contract |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:456:| Planner contract | Research | Non-mutating default + fallback | Trim milestones |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:457:| Trim milestones | Planner contract | Gated subsystems + follow-up APIs | Verification |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:469:4. **Ship the planner-first default + full-auto fallback** — critical because it is the operator-facing contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:472:7. **Align docs + release notes + env reference** — critical so the shipped contract is documented honestly.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:475:**Total Critical Path**: Audit → Retirement → Research → Planner + Trim → Verification → Release → Remediation
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:488:| M6 | Planner contract | Planner-first default + fallback + shared types | Runtime handler |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:491:| M9 | Release alignment | v3.4.1.0 + `/memory:save` docs + env reference + templates | Release artifacts |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:501:| ADR-002 | Planner-first output becomes the default `/memory:save` contract |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:516:- [x] Confirm planner default stays non-mutating
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:522:| EXEC-SEQ | Ship planner contract before trim work |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:543:- Preserve the canonical atomic writer + routing + continuity; move default-path overreach behind env flags; expose follow-up APIs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:549:| Runtime contract docs | `/memory:save` docs + `ENV_REFERENCE.md` + templates | Align to shipped contract |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:573:| W-C | Planner contract + trim | Runtime handlers + env flags + follow-up APIs | Runtime TypeScript |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:575:| W-E | Docs + release alignment | `/memory:save` docs + env reference + release notes + packet docs | Docs surface |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:597:- **Checkpoint 4**: Planner + trim + follow-up APIs merged.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:610:- The packet is a runtime change with documented operator-facing contract; changelog honesty matters.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:622:| Runtime correctness | Complete | Planner default non-mutating + fallback atomic parity |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/plan.md:623:| Documentation alignment | Complete | `/memory:save` docs + env reference + release notes agree |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:2:title: "Ver [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist]"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:3:description: "Verification ledger covering audit + retirement, relevance research, planner + trim implementation, deep-review remediation, and packet-level merge checks. Every item is source-backed."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:6:  - "memory save planner first checklist"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:7:  - "planner-first verification"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:13:  continuity:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:14:    packet_pointer: "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:17:    recent_action: "Rewrote checklist under planner-first framing preserving all verification items"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:25:      fingerprint: "sha256:014-planner-first-checklist-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:26:      session_id: "014-planner-first-checklist-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:27:      parent_session_id: "014-planner-first-seed"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:34:# Verification Checklist: /memory:save Planner-First Default
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:64:- [x] ✅ **CHK-CODE-002 [P1]** Remediation corrected the planner blocker contract and fallback parity. Evidence: `review/015-deep-review-snapshot/review-report.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:70:- [x] ✅ **CHK-TEST-001 [P0]** Test coverage included planner, fallback, router, quality, and continuity paths. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:112:- [x] ✅ **CHK-014-002 [P0]** Research resolved Q2 and confirmed planner-first substitution was feasible. Evidence: `research/014-research-snapshot/findings-registry.json`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:116:- [x] ✅ **CHK-014-006 [P1]** Research resolved Q8 and preserved the eight-category router contract while trimming classifier scope. Evidence: `research/014-research-snapshot/findings-registry.json`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:117:- [x] ✅ **CHK-014-007 [P1]** Research resolved Q9 and Q10 and preserved continuity validation while relaxing save-flow ownership. Evidence: `research/014-research-snapshot/findings-registry.json`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:128:- [x] ✅ **CHK-001 [P0]** Planner-first default and explicit fallback were defined in the packet docs. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/spec.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:136:- [x] ✅ **CHK-009 [P1]** The packet preserved the planner schema and follow-up guidance coherently across docs. Evidence: `review/015-deep-review-snapshot/primary-docs/spec.md`, `review/015-deep-review-snapshot/primary-docs/plan.md`, `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:137:- [x] ✅ **CHK-010 [P0]** The planner-default path stayed non-mutating. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:139:- [x] ✅ **CHK-012 [P1]** Shared planner schema types existed and were reused. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:145:- [x] ✅ **CHK-018 [P1]** Planner-default saves no longer ran unconditional reindex or graph refresh. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:146:- [x] ✅ **CHK-019 [P1]** Planner output preserved blocker and advisory separation. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`, `review/015-deep-review-snapshot/primary-docs/decision-record.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:147:- [x] ✅ **CHK-020 [P0]** Focused `memory-save` tests passed for planner and fallback scenarios. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:148:- [x] ✅ **CHK-021 [P0]** Integration tests passed for planner-default and fallback behavior. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:153:- [x] ✅ **CHK-026 [P0]** Thin continuity tests passed unchanged expectations. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:154:- [x] ✅ **CHK-027 [P1]** CLI authority tests passed with planner-default behavior. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:156:- [x] ✅ **CHK-029 [P1]** Planner UX regression tests passed for readable operator-facing output. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:158:- [x] ✅ **CHK-031 [P2]** Transcript prototypes showed no unexpected drop or wrong-anchor outcomes. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:161:- [x] ✅ **CHK-034 [P2]** Planner output did not expose unsafe file targets. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:164:- [x] ✅ **CHK-037 [P1]** Planner output preserved the same target authority as the fallback path. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`, `review/015-deep-review-snapshot/primary-docs/checklist.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:167:- [x] ✅ **CHK-040 [P1]** The packet docs used the correct packet structure and anchors. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:168:- [x] ✅ **CHK-041 [P1]** `/memory:save` docs described planner-first default, fallback, and follow-up freshness actions. Evidence: `review/015-deep-review-snapshot/primary-docs/checklist.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:187:- [x] ✅ **CHK-R003 [P0]** F003 template-contract failures promoted to planner blockers. Evidence: `review/015-deep-review-snapshot/review-report.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/checklist.md:205:- [x] ✅ **CHK-014-007 [P1]** Packet primary docs describe the runtime contract accurately (planner default, fallback, follow-up APIs, reserved `hybrid`, scoped router exception). Evidence: packet primary docs
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:2:title: "...-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary]"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:3:description: "Packet closeout for the /memory:save planner-first default: audit + retirement, relevance research, planner + trim implementation, transcript-grounded verification, and deep-review remediation all documented in one surface."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:7:  - "memory save planner first closeout"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:8:  - "planner-first save closeout"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:9:  - "save flow planner first delivery"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:13:  continuity:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:14:    packet_pointer: "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:17:    recent_action: "Folder renamed; impl-summary rewritten under planner-first framing"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:26:      fingerprint: "sha256:014-planner-first-closeout-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:27:      session_id: "014-planner-first-closeout-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:28:      parent_session_id: "014-planner-first-seed"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:32:      - "Packet is complete; shipped contract is planner-first default with explicit full-auto fallback."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:58:`/memory:save` is planner-first by default. Invoking it now returns a structured planner response — routes, legality blockers, advisories, follow-up actions — and mutates no files on disk. Operators who still need automatic mutation can opt in by setting `SPECKIT_SAVE_PLANNER_MODE=full-auto`, which runs the canonical atomic writer with `POST_SAVE_FINGERPRINT` safety parity, same-path identity, promotion, and rollback intact. `hybrid` is reserved and currently behaves like `plan-only`. The legacy `[spec]/memory/*.md` write path is retired runtime-wide. Four previously default-on save-path behaviors are now explicit opt-in: Tier 3 routing (`SPECKIT_ROUTER_TIER3_ENABLED`), quality-loop auto-fix (`SPECKIT_QUALITY_AUTO_FIX`), reconsolidation-on-save (`SPECKIT_RECONSOLIDATION_ENABLED`), and post-insert enrichment (`SPECKIT_POST_INSERT_ENRICHMENT_ENABLED`). Freshness is callable via three new follow-up APIs: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. Docs, env reference, and release notes all agree on the same default/opt-in/reserved/fallback vocabulary.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:66:20 iterations of research resolved Q1 through Q10 and classified the 15 remaining subsystems. Four stayed load-bearing (canonical atomic writer, routed record identity, content-router core, thin continuity validation). Four became trim targets (Tier 3 routing, reconsolidation-on-save, heavy quality-loop auto-fix, post-insert enrichment). Seven were deferred or follow-up. The synthesis produced the `trim-targeted` top-line recommendation that made planner-first the right shape for the default contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:70:43 of 43 tasks completed under v3.4.1.0. The planner-first contract + flag plumbing (M1) landed before the trim work (M2-M4) so the schema was stable by the time routing, quality, reconsolidation, and enrichment moved behind env gates. Follow-up APIs (`refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`) expose freshness as callable work instead of baked-in side effects. Targeted tests covered planner-default behavior, fallback parity, router deterministic default, quality advisory output, structural blocker preservation, reconsolidation opt-in, enrichment deferral, continuity upsert parity, planner UX readability, CLI target authority, and end-to-end integration. Three real session transcripts exercised planner-first behavior before closeout.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:80:| F003 | P0 | Template-contract failures hidden as advisories | FIXED — promoted to planner blockers |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:98:- transcripts and planner-output artifacts under `scratch/transcripts-snapshot/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:133:| Preserve research as the decision bridge | The planner-first design only makes sense with the trim-targeted verdict in view |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:134:| Ship planner-first default + explicit full-auto fallback | Non-mutating default is reviewable; full-auto remains available for automation that depends on it |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:140:| Promote template-contract failures to planner blockers | Hidden advisories let malformed saves through |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/implementation-summary.md:153:| Implementation carry-over | PASS — packet preserves planner-first default, explicit fallback, follow-up APIs, and 43 completed tasks |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:2:  "title": "/memory:save Planner-First Default",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:4:    "memory save planner-first default",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:5:    "planner-first save contract",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:12:    "planner mode hybrid reserved",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:18:    "new_spec_folder": "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:22:    "intermediate_spec_folder": "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/014-memory-save-rewrite",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:28:      "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/014-memory-save-rewrite",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:29:      "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:32:  "specFolder": "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:33:  "description": "Feature Specification: /memory:save Planner-First Default",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:39:    "planner-first",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/description.json:48:    "003-continuity-memory-runtime"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:2:title: "Tasks [system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks]"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:6:  - "memory save planner first"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:7:  - "planner-first tasks"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:15:  continuity:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:16:    packet_pointer: "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:19:    recent_action: "Rewrote task ledger as cohesive planner-first delivery sequence"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:28:      fingerprint: "sha256:014-planner-first-tasks-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:29:      session_id: "014-planner-first-tasks-2026-04-15"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:30:      parent_session_id: "014-planner-first-seed"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:37:# Tasks: /memory:save Planner-First Default
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:52:| `P015-` | Planner + trim implementation |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:74:- [x] **P013-R009** Identify the phantom save-side dedup contract and classify its defect family separately from the retirement contradiction. Evidence: `research/013-audit-snapshot/review-report.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:82:- [x] **P013-F017-F021** Preserve the phantom dedup-contract family and its closure context. Evidence: `research/013-audit-snapshot/review-report.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:95:- [x] **P014-Q2** Resolve whether planner-first `/memory:save` can replace default-path automation. Evidence: `research/014-research-snapshot/findings-registry.json`, `research/014-research-snapshot/research.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:103:- [x] **P014-Q10** Resolve whether continuity validation still matters more than save-flow ownership. Evidence: `research/014-research-snapshot/findings-registry.json`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:132:- [x] **P014-V003** Keep the content-router category contract while trimming classifier scope. Evidence: `research/014-research-snapshot/findings-registry.json`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:133:- [x] **P014-V004** Keep thin continuity validation and upsert logic. Evidence: `research/014-research-snapshot/findings-registry.json`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:148:- [x] **P015-T001** Add planner-default and fallback flag definitions. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:149:- [x] **P015-T002** Document planner, fallback, and deferred follow-up flags. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:150:- [x] **P015-T003** Add planner response interfaces and follow-up action types. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:151:- [x] **P015-T004** Add planner response serialization helpers. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:152:- [x] **P015-T005** Add planner blocker and advisory response helpers. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:153:- [x] **P015-T006** Make `generate-context.ts` request planner-first behavior by default. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:154:- [x] **P015-T007** Update `/memory:save` docs for planner-first default and fallback. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:155:- [x] **P015-T008** Make `memory-save.ts` return planner output by default with explicit fallback. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:156:- [x] **P015-T009** Update aggregate `memory-save` tests for planner-default behavior. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:158:- [x] **P015-T011** Update CLI target-authority tests for planner-default execution. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:159:- [x] **P015-T012** Create focused planner-first regression coverage. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:160:- [x] **P015-T013** Trim default Tier 3 participation while preserving category contract. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:169:- [x] **P015-T022** Update pipeline-enforcement tests so the planner path still surfaces legality blockers. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:174:- [x] **P015-T027** Move unconditional graph refresh and spec-doc reindex out of planner-default saves. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:182:- [x] **P015-T035** Update memory-save integration tests for planner-default plus fallback end-to-end behavior. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:183:- [x] **P015-T036** Update planner UX regression tests for readable, action-oriented output. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:184:- [x] **P015-T037** Update thin-continuity tests to prove normalization and upsert parity. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:185:- [x] **P015-T038** Prototype planner-first behavior against three real session transcripts. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`, `scratch/transcripts-snapshot/`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:188:- [x] **P015-T041** Review structural parity between `/memory:save`, `AGENTS.md`, and the system-spec-kit skill doc. Evidence: `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:194:- [x] **P015-M1** Planner contract and flag plumbing complete. Evidence: `review/015-deep-review-snapshot/primary-docs/plan.md`, `review/015-deep-review-snapshot/primary-docs/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:206:- [x] **P015-R003** Promote template-contract failures to planner blockers instead of advisories. Evidence: `review/015-deep-review-snapshot/review-report.md`, `review/015-deep-review-snapshot/primary-docs/implementation-summary.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:238:- [x] Planner-default runtime tests pass (non-mutating default)
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:240:- [x] Three real session transcripts prototype planner-first behavior without unexpected drops or wrong-anchor outcomes
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/tasks.md:241:- [x] `/memory:save` docs, `ENV_REFERENCE.md`, templates, and v3.4.1.0 release notes align on default/opt-in/reserved/fallback vocabulary
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3-review.md:1:<!-- SNAPSHOT: copied from 015-save-flow-planner-first-trim/scratch/transcript-3-review.md on 2026-04-15. Authoritative source at original packet. -->
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3-review.md:5:description: "Alignment review for transcript 3 planner-first prototype."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3-review.md:24:- This is an expected safety refusal, not a wrong-anchor or dropped-route defect.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3.md:1:<!-- SNAPSHOT: copied from 015-save-flow-planner-first-trim/scratch/transcript-3.md on 2026-04-15. Authoritative source at original packet. -->
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3.md:8:  - "planner-transcript"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3.md:27:Continue from the Packet 013 audit and add a follow-on task that captures the half-migrated `memory/*.md` contradiction, the phantom Session Deduplication contract, and the need to resolve the documentary-retirement overclaim before another release goes out.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3.md:36:- `.opencode/specs/system-spec-kit/026-graph-and-context-optimization/015-save-flow-planner-first-trim/tasks.md`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3.md:42:The Packet 013 audit found a half-migrated state: active runtime write and read paths still touch `[spec]/memory/*.md`, while multiple docs and templates claim the surface is retired. The transcript asks for a follow-on task but does not name a concrete `T###` or `CHK-###` identifier, so the planner should refuse to auto-target a specific checklist row.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3.md:49:- The same review documented a contract-without-implementation gap for save-side Session Deduplication.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3.md:58:- Expect a blocked planner result and convert the mismatch into a new follow-on task in Packet 015 closeout docs.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-review.md:1:<!-- SNAPSHOT: copied from 015-save-flow-planner-first-trim/scratch/transcript-2-review.md on 2026-04-15. Authoritative source at original packet. -->
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-review.md:5:description: "Alignment review for transcript 2 planner-first prototype."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-review.md:13:Transcript 2 aligned with the continuity-only planner path.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-review.md:18:- Routed target: `implementation-summary.md::_memory.continuity`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-review.md:24:- The transcript asks for continuity carry-forward only, so metadata-only targeting is the expected result.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-planner-output.json:3:  "plannerMode": "plan-only",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-planner-output.json:5:  "targetDocPath": ".opencode/specs/system-spec-kit/026-graph-and-context-optimization/015-save-flow-planner-first-trim/implementation-summary.md",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-planner-output.json:6:  "targetAnchorId": "_memory.continuity",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2-planner-output.json:14:  "notes": "Transcript 2 carries packet 014 continuity into the packet 015 implementation summary without mutating files by default."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-review.md:1:<!-- SNAPSHOT: copied from 015-save-flow-planner-first-trim/scratch/transcript-1-review.md on 2026-04-15. Authoritative source at original packet. -->
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-review.md:5:description: "Alignment review for transcript 1 planner-first prototype."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-review.md:13:Transcript 1 aligned with the planner-first contract.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-review.md:20:- Follow-up path: explicit `apply` action with `plannerMode: "full-auto"`
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-review.md:24:- The existing planner output kept the target stable even with advisories present.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:1:<!-- SNAPSHOT: copied from 015-save-flow-planner-first-trim/scratch/transcript-2.md on 2026-04-15. Authoritative source at original packet. -->
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:8:  - "planner-transcript"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:12:  continuity:
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:40:| Expected Target | implementation-summary.md::_memory.continuity |
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:46:Continue from the 20-iteration save-flow relevance review and carry the trim-targeted verdict forward as continuity metadata for the implementation packet.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:61:Packet 014 concluded that the canonical atomic writer and continuity contract remain load-bearing, while the default operator flow should move toward planner-first output plus explicit follow-up actions instead of always-on save-time automation.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:68:- The review explicitly recommends opening an implementation packet for planner-first default-path trim.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:69:- The verdict keeps atomic fallback and continuity validation intact.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-2.md:77:- Keep the continuity target stable and use the planner output to confirm the implementation packet receives the same packet pointer and next-safe-action values.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3-planner-output.json:3:  "plannerMode": "plan-only",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3-planner-output.json:5:  "targetDocPath": ".opencode/specs/system-spec-kit/026-graph-and-context-optimization/015-save-flow-planner-first-trim/tasks.md",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-3-planner-output.json:8:    "Planner requires a concrete task or checklist identifier before it can target an update-in-place save safely."
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-planner-output.json:5:  "summary": "Planner prepared canonical save plan",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-planner-output.json:6:  "message": "Planner prepared a non-mutating canonical save plan.",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-planner-output.json:7:  "plannerMode": "plan-only",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-planner-output.json:26:      "contentPreview": "---\ntitle: \"Packet 012 Closeout Transcript Replay\"\ndescription: \"Transcript prototype derived from the Packet 012 implementation summary closeout.\"\ntrigger_phrases:\n  - \"packet-012-closeout\"\n  - \"planner-transcript\"\nimportance_tier: \"important\"\ncontextType: \"implementation\"\n---\n\n"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-planner-output.json:89:      "message": "Reconsolidation available as follow-up action. Planner-first saves do not run supersede, reinforce, or create-linked reconsolidation work by default.",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-planner-output.json:109:        "plannerMode": "full-auto",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1-planner-output.json:140:        "plannerMode": "full-auto",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1.md:1:<!-- SNAPSHOT: copied from 015-save-flow-planner-first-trim/scratch/transcript-1.md on 2026-04-15. Authoritative source at original packet. -->
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1.md:8:  - "planner-transcript"
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1.md:42:Packet 012 is complete. The final closeout introduced `/spec_kit:start` as the canonical intake surface, finished the M9 middleware cleanup that removed deprecated debug, handover, and speckit wrapper surfaces, and closed the packet's strict-validation tail after converting the remaining unchecked checklist rows to source-contract verification.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1.md:49:- The middleware cleanup removed deprecated debug, handover, and speckit wrapper surfaces.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1.md:62:- The planner output should keep `append-as-paragraph` and `what-built` stable.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/scratch/transcripts-snapshot/transcript-1.md:68:- Compare the planner target with the full-auto canonical diff before treating the transcript as aligned.
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:3:  "packet_id": "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:4:  "spec_folder": "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:5:  "parent_id": "system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:18:      "memory save planner first",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:19:      "planner-first memory save",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:21:      "speckit_save_planner_mode",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:34:      "planner",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:36:      "planner-first",
.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/graph-metadata.json:200:    "causal_summary": "This packet delivers the end state implied by that analysis. `/memory:save` is planner-first by default: the handler computes the same route and legality data as before but stops short of mutation and returns structured planner output instead. `full-auto` is preserved as an explicit fallback via `SPECKIT_SAVE_PLANNER_MODE=full-auto`, with canonical atomic mutation, `POST_SAVE_FINGERPRINT` safety parity, same-path identity, and rollback intact. The legacy `[spec]/memory/*.md` write path is retired. Four previously default-on behaviors become explicit opt-in: `SPECKIT_ROUTER_TIER3_ENABLED`, `SPECKIT_QUALITY_AUTO_FIX`, `SPECKIT_RECONSOLIDATION_ENABLED`, `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED`. Freshness becomes follow-up work via three new APIs: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. `hybrid` is documented as reserved and currently behaves like `plan-only`. The content-router category contract is preserved with one honest, scoped exception: a Tier 3 default-disable and manual-review guard inside `content-router.ts`. 43 implementation tasks shipped under v3.4.1.0. A deep-review pass flagged 3 P0, 5 P1, and 1 P2 findings on router honesty, fallback safety parity, blocker classification, deferred-helper coverage, and changelog accuracy; all 9 were resolved before closeout.",

exec
/bin/zsh -lc "nl -ba .opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md | sed -n '49,66p;101,118p;157,166p'" in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
 succeeded in 0ms:
    49	# Feature Specification: /memory:save Planner-First Default
    50	
    51	<!-- SPECKIT_LEVEL: 3+ -->
    52	<!-- SPECKIT_TEMPLATE_SOURCE: spec-core + level2-verify + level3-arch + level3plus-gov | v2.2 -->
    53	
    54	---
    55	
    56	## EXECUTIVE SUMMARY
    57	
    58	`/memory:save` was doing too much on every invocation. The runtime still created, wrote, indexed, and read `[spec]/memory/*.md` even though v3.4.0.0 docs claimed that artifact was retired; on top of that legacy write path, every save triggered Tier 3 routing, a heavy quality-loop auto-fix, reconsolidation-on-save, post-insert enrichment, unconditional graph-metadata refresh, and unconditional spec-doc reindex — regardless of whether the caller actually wanted mutation. Auditing the code proved the system was half-migrated, turning vague drift into 25 concrete findings. Classifying the remaining 15 save-flow subsystems proved which ones still earned runtime cost (the canonical atomic writer, routed record identity, the content-router category contract, and thin continuity validation) and which ones did not belong on the default path.
    59	
    60	This packet delivers the end state implied by that analysis. `/memory:save` is planner-first by default: the handler computes the same route and legality data as before but stops short of mutation and returns structured planner output instead. `full-auto` is preserved as an explicit fallback via `SPECKIT_SAVE_PLANNER_MODE=full-auto`, with canonical atomic mutation, `POST_SAVE_FINGERPRINT` safety parity, same-path identity, and rollback intact. The legacy `[spec]/memory/*.md` write path is retired. Four previously default-on behaviors become explicit opt-in: `SPECKIT_ROUTER_TIER3_ENABLED`, `SPECKIT_QUALITY_AUTO_FIX`, `SPECKIT_RECONSOLIDATION_ENABLED`, `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED`. Freshness becomes follow-up work via three new APIs: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. `hybrid` is documented as reserved and currently behaves like `plan-only`. The content-router category contract is preserved with one honest, scoped exception: a Tier 3 default-disable and manual-review guard inside `content-router.ts`. 43 implementation tasks shipped under v3.4.1.0. A deep-review pass flagged 3 P0, 5 P1, and 1 P2 findings on router honesty, fallback safety parity, blocker classification, deferred-helper coverage, and changelog accuracy; all 9 were resolved before closeout.
    61	
    62	---
    63	
    64	<!-- ANCHOR:metadata -->
    65	## 1. METADATA
    66	
   101	## 3. SCOPE
   102	
   103	### In Scope
   104	
   105	- Make `/memory:save` planner-first by default: the default path computes route + legality data, returns structured planner output, does not mutate files.
   106	- Preserve the `full-auto` writer path as an explicit fallback activated via `SPECKIT_SAVE_PLANNER_MODE=full-auto` with canonical atomic mutation, promotion, rollback, and same-path identity intact.
   107	- Retire the legacy `[spec]/memory/*.md` write and read path runtime-wide: remove the write path, update dedup and causal-link behavior to use canonical docs + the routed record, stop indexing `memory/*.md` into the vector DB.
   108	- Introduce three explicit follow-up APIs for freshness: `refreshGraphMetadata`, `reindexSpecDocs`, `runEnrichmentBackfill`. Remove their unconditional participation in every save.
   109	- Gate four previously default-on save-path behaviors behind explicit env flags: `SPECKIT_ROUTER_TIER3_ENABLED` (default OFF), `SPECKIT_QUALITY_AUTO_FIX` (default OFF), `SPECKIT_RECONSOLIDATION_ENABLED` (default OFF), `SPECKIT_POST_INSERT_ENRICHMENT_ENABLED` (default OFF).
   110	- Preserve the content-router eight-category contract. Record the single scoped exception inside `content-router.ts`: Tier 3 default-disable + manual-review return behavior.
   111	- Preserve hard legality checks and structural blockers in the save-quality gate; remove default-path quality-loop auto-fix retries while keeping advisory output.
   112	- Reserve `hybrid` as a valid value for `SPECKIT_SAVE_PLANNER_MODE` that currently behaves like `plan-only`; document it as reserved honestly.
   113	- Restore `POST_SAVE_FINGERPRINT` parity on the full-auto path.
   114	- Promote template-contract failures from advisories to planner blockers.
   115	- Make deferred helpers return explicit deferred status when skipped (no success-shaped status when nothing ran).
   116	- Update packet docs, `ENV_REFERENCE.md`, release notes, and test fixtures so the documented contract matches the shipped behavior (router scope, hybrid reserved state, follow-up tool names, freshness as explicit follow-up).
   117	- Update tests across `memory-save`, `content-router`, `quality-loop`, `save-quality-gate`, reconsolidation-bridge, reconsolidation, assistive-reconsolidation, chunking, graph-refresh, thin-continuity, planner UX, CLI target authority, and memory-save integration to prove planner-default + fallback end-to-end behavior.
   118	- Validate planner-first behavior against three real session transcripts before closeout.
   157	### P0 — Blockers
   158	
   159	| ID | Requirement | Acceptance Criteria |
   160	|----|-------------|---------------------|
   161	| REQ-001 | The default `/memory:save` path must be planner-first and non-mutating. | Default invocation returns structured planner output (route, legality, blockers, advisories, follow-up actions) and mutates no files on disk. |
   162	| REQ-002 | Explicit `full-auto` must remain available as fallback. | Setting `SPECKIT_SAVE_PLANNER_MODE=full-auto` runs the canonical atomic writer with promotion, rollback, and same-path identity intact. |
   163	| REQ-003 | The legacy `[spec]/memory/*.md` write path must be retired. | `workflow.ts`, `file-writer.ts`, `memory-indexer.ts`, `memory-metadata.ts`, and `directory-setup.ts` no longer create, write, index, or read that surface. |
   164	| REQ-004 | Tier 3 routing must be default-off with a scoped, auditable exception. | `SPECKIT_ROUTER_TIER3_ENABLED=false` is default; `content-router.ts` contains the scoped default-disable + manual-review guard; the eight-category contract is otherwise unchanged. |
   165	| REQ-005 | Quality-loop auto-fix must leave the default path while hard blockers remain. | Default path emits advisory output only; structural/legality blockers still fail the save; `SPECKIT_QUALITY_AUTO_FIX=false` is default. |
   166	| REQ-006 | Reconsolidation-on-save must be explicit opt-in. | Default path never triggers reconsolidation; `SPECKIT_RECONSOLIDATION_ENABLED=false` is default; opt-in via env flag or fallback execution. |

exec
/bin/zsh -lc "nl -ba .opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md | sed -n '34,42p;91,112p'" in /Users/michelkerkmeester/MEGA/Development/Code_Environment/Public
 succeeded in 0ms:
    34	# Decision Record: /memory:save Planner-First Default
    35	
    36	<!-- SPECKIT_LEVEL: 3+ -->
    37	<!-- SPECKIT_TEMPLATE_SOURCE: decision-record | v2.2 -->
    38	
    39	---
    40	
    41	<!-- ANCHOR:adr-001 -->
    42	## ADR-001: Trim-Targeted Verdict — Preserve the Writer Core, Trim the Default-Path Stack
    91	### ADR-002: Planner-First Output Contract for `/memory:save`
    92	
    93	### Metadata
    94	
    95	| Field | Value |
    96	|-------|-------|
    97	| **Status** | Accepted |
    98	| **Date** | 2026-04-15 |
    99	| **Deciders** | Implementation lead |
   100	
   101	### Context
   102	
   103	Research showed that the default save path already had enough information to tell the AI what canonical doc to edit, what legality checks applied, and what follow-up actions remained. The question was whether the system should keep mutating by default or return a plan first.
   104	
   105	### Decision
   106	
   107	**We chose**: Make planner-first output the default `/memory:save` contract and preserve `full-auto` as explicit fallback.
   108	
   109	**How it works**: The handler computes the same route and legality data as before, but the default path stops short of mutation and returns structured planner output instead.
   110	
   111	### Consequences
   112	

codex
Spec folder:

`/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite`

Canonical anchors/files:
- [spec.md](/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:49) has `# Feature Specification: /memory:save Planner-First Default`.
- [spec.md](/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:161) defines `REQ-001`: default `/memory:save` must be planner-first and non-mutating.
- [decision-record.md](/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:91) has `ADR-002: Planner-First Output Contract for /memory:save`.
hook: Stop
hook: Stop Completed
2026-04-27T14:18:27.454457Z ERROR codex_core::session: failed to record rollout items: thread 019dcf4d-c11e-7701-bf5f-dca1e5e940d4 not found
tokens used
58,914
Spec folder:

`/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite`

Canonical anchors/files:
- [spec.md](/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:49) has `# Feature Specification: /memory:save Planner-First Default`.
- [spec.md](/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/spec.md:161) defines `REQ-001`: default `/memory:save` must be planner-first and non-mutating.
- [decision-record.md](/Users/michelkerkmeester/MEGA/Development/Code_Environment/Public/.opencode/specs/system-spec-kit/026-graph-and-context-optimization/003-continuity-memory-runtime/004-memory-save-rewrite/decision-record.md:91) has `ADR-002: Planner-First Output Contract for /memory:save`.
