diff --git a/.claude/commands/memory/compact.md b/.claude/commands/memory/compact.md index beec9259..5b86ee2a 100644 --- a/.claude/commands/memory/compact.md +++ b/.claude/commands/memory/compact.md @@ -29,17 +29,57 @@ The `memory:compact` command **compresses current session working memory** into ## 3. Structured Output Format ```markdown +## Session ID +[WFS-ID if workflow session active, otherwise (none)] + +## Project Root +[Absolute path to project root, e.g., D:\Claude_dms3] + ## Objective [High-level goal - the "North Star" of this session] -## Plan -- [x] [Completed step] -- [x] [Completed step] -- [ ] [Pending step] +## Execution Plan +[CRITICAL: Embed the LATEST plan in its COMPLETE and DETAILED form] -## Active Files -- path/to/file1.ts (role: main implementation) -- path/to/file2.ts (role: tests) +### Source: [workflow | todo | user-stated | inferred] + +
+Full Execution Plan (Click to expand) + +[PRESERVE COMPLETE PLAN VERBATIM - DO NOT SUMMARIZE] +- ALL phases, tasks, subtasks +- ALL file paths (absolute) +- ALL dependencies and prerequisites +- ALL acceptance criteria +- ALL status markers ([x] done, [ ] pending) +- ALL notes and context + +Example: +## Phase 1: Setup +- [x] Initialize project structure + - Created D:\Claude_dms3\src\core\index.ts + - Added dependencies: lodash, zod +- [ ] Configure TypeScript + - Update tsconfig.json for strict mode + +## Phase 2: Implementation +- [ ] Implement core API + - Target: D:\Claude_dms3\src\api\handler.ts + - Dependencies: Phase 1 complete + - Acceptance: All tests pass + +
+ +## Working Files (Modified) +[Absolute paths to actively modified files] +- D:\Claude_dms3\src\file1.ts (role: main implementation) +- D:\Claude_dms3\tests\file1.test.ts (role: unit tests) + +## Reference Files (Read-Only) +[Absolute paths to context files - NOT modified but essential for understanding] +- D:\Claude_dms3\.claude\CLAUDE.md (role: project instructions) +- D:\Claude_dms3\src\types\index.ts (role: type definitions) +- D:\Claude_dms3\package.json (role: dependencies) ## Last Action [Last significant action and its result/status] @@ -71,9 +111,12 @@ The `memory:compact` command **compresses current session working memory** into | Field | Purpose | Recovery Value | |-------|---------|----------------| +| **Session ID** | Workflow session identifier (WFS-*) | Links memory to specific stateful task execution | +| **Project Root** | Absolute path to project directory | Enables correct path resolution in new sessions | | **Objective** | Ultimate goal of the session | Prevents losing track of broader feature | -| **Plan** | Steps with status markers | Avoids re-planning or repeating steps | -| **Active Files** | Working set of files | Eliminates re-exploration of codebase | +| **Execution Plan** | Complete plan from any source (verbatim) | Preserves full planning context, avoids re-planning | +| **Working Files** | Actively modified files (absolute paths) | Immediately identifies where work was happening | +| **Reference Files** | Read-only context files (absolute paths) | Eliminates re-exploration for critical context | | **Last Action** | Final tool output/status | Immediate state awareness (success/failure) | | **Decisions** | Architectural choices + reasoning | Prevents re-litigating settled decisions | | **Constraints** | User-imposed limitations | Maintains personalized coding style | @@ -91,9 +134,15 @@ Extract the following from conversation history: ```javascript const sessionAnalysis = { + sessionId: "", // WFS-* if workflow session active, null otherwise + projectRoot: "", // Absolute path: D:\Claude_dms3 objective: "", // High-level goal (1-2 sentences) - plan: [], // Steps with status: {step, status: 'done'|'pending'} - activeFiles: [], // {path, role} - working set + executionPlan: { + source: "workflow" | "todo" | "user-stated" | "inferred", + content: "" // Full plan content - ALWAYS preserve COMPLETE and DETAILED form + }, + workingFiles: [], // {absolutePath, role} - modified files + referenceFiles: [], // {absolutePath, role} - read-only context files lastAction: "", // Last significant action + result decisions: [], // {decision, reasoning} constraints: [], // User-specified limitations @@ -108,16 +157,43 @@ const sessionAnalysis = { ### Step 2: Generate Structured Text ```javascript -const structuredText = `## Objective +// Helper: Generate execution plan section +const generateExecutionPlan = (plan) => { + const sourceLabels = { + 'workflow': 'workflow (IMPL_PLAN.md)', + 'todo': 'todo (TodoWrite)', + 'user-stated': 'user-stated', + 'inferred': 'inferred' + }; + + // CRITICAL: Preserve complete plan content verbatim - DO NOT summarize + return `### Source: ${sourceLabels[plan.source] || plan.source} + +
+Full Execution Plan (Click to expand) + +${plan.content} + +
`; +}; + +const structuredText = `## Session ID +${sessionAnalysis.sessionId || '(none)'} + +## Project Root +${sessionAnalysis.projectRoot} + +## Objective ${sessionAnalysis.objective} -## Plan -${sessionAnalysis.plan.map(p => - `- [${p.status === 'done' ? 'x' : ' '}] ${p.step}` -).join('\n')} +## Execution Plan +${generateExecutionPlan(sessionAnalysis.executionPlan)} -## Active Files -${sessionAnalysis.activeFiles.map(f => `- ${f.path} (${f.role})`).join('\n')} +## Working Files (Modified) +${sessionAnalysis.workingFiles.map(f => `- ${f.absolutePath} (role: ${f.role})`).join('\n') || '(none)'} + +## Reference Files (Read-Only) +${sessionAnalysis.referenceFiles.map(f => `- ${f.absolutePath} (role: ${f.role})`).join('\n') || '(none)'} ## Last Action ${sessionAnalysis.lastAction} @@ -135,7 +211,7 @@ ${sessionAnalysis.dependencies.map(d => `- ${d}`).join('\n') || '(none)'} ${sessionAnalysis.knownIssues.map(i => `- ${i}`).join('\n') || '(none)'} ## Changes Made -${sessionAnalysis.changesMade.map(c => `- ${c}`).join('\n')} +${sessionAnalysis.changesMade.map(c => `- ${c}`).join('\n') || '(none)'} ## Pending ${sessionAnalysis.pending.length > 0 @@ -208,17 +284,114 @@ ccw core-memory summary --id CMEM-20251218-150322 ## 8. Quality Checklist Before generating: +- [ ] Session ID captured if workflow session active (WFS-*) +- [ ] Project Root is absolute path (e.g., D:\Claude_dms3) - [ ] Objective clearly states the "North Star" goal -- [ ] Plan shows completion status with [x] / [ ] markers -- [ ] Active Files includes 3-8 core files with roles +- [ ] Execution Plan: COMPLETE plan preserved VERBATIM (no summarization) +- [ ] Plan Source: Clearly identified (workflow | todo | user-stated | inferred) +- [ ] Plan Details: ALL phases, tasks, file paths, dependencies, status markers included +- [ ] All file paths are ABSOLUTE (not relative) +- [ ] Working Files: 3-8 modified files with roles +- [ ] Reference Files: Key context files (CLAUDE.md, types, configs) - [ ] Last Action captures final state (success/failure) - [ ] Decisions include reasoning, not just choices - [ ] Known Issues separates deferred from forgotten bugs - [ ] Notes preserve debugging hypotheses if any -## 9. Notes +## 9. Path Resolution Rules + +### Project Root Detection +1. Check current working directory from environment +2. Look for project markers: `.git/`, `package.json`, `.claude/` +3. Use the topmost directory containing these markers + +### Absolute Path Conversion +```javascript +// Convert relative to absolute +const toAbsolutePath = (relativePath, projectRoot) => { + if (path.isAbsolute(relativePath)) return relativePath; + return path.join(projectRoot, relativePath); +}; + +// Example: "src/api/auth.ts" → "D:\Claude_dms3\src\api\auth.ts" +``` + +### Reference File Categories +| Category | Examples | Priority | +|----------|----------|----------| +| Project Config | `.claude/CLAUDE.md`, `package.json`, `tsconfig.json` | High | +| Type Definitions | `src/types/*.ts`, `*.d.ts` | High | +| Related Modules | Parent/sibling modules with shared interfaces | Medium | +| Test Files | Corresponding test files for modified code | Medium | +| Documentation | `README.md`, `ARCHITECTURE.md` | Low | + +## 10. Plan Detection (Priority Order) + +### Priority 1: Workflow Session (IMPL_PLAN.md) +```javascript +// Check for active workflow session +const manifest = await mcp__ccw-tools__session_manager({ + operation: "list", + location: "active" +}); + +if (manifest.sessions?.length > 0) { + const session = manifest.sessions[0]; + const plan = await mcp__ccw-tools__session_manager({ + operation: "read", + session_id: session.id, + content_type: "plan" + }); + sessionAnalysis.sessionId = session.id; + sessionAnalysis.executionPlan.source = "workflow"; + sessionAnalysis.executionPlan.content = plan.content; +} +``` + +### Priority 2: TodoWrite (Current Session Todos) +```javascript +// Extract from conversation - look for TodoWrite tool calls +// Preserve COMPLETE todo list with all details +const todos = extractTodosFromConversation(); +if (todos.length > 0) { + sessionAnalysis.executionPlan.source = "todo"; + // Format todos with full context - preserve status markers + sessionAnalysis.executionPlan.content = todos.map(t => + `- [${t.status === 'completed' ? 'x' : t.status === 'in_progress' ? '>' : ' '}] ${t.content}` + ).join('\n'); +} +``` + +### Priority 3: User-Stated Plan +```javascript +// Look for explicit plan statements in user messages: +// - "Here's my plan: 1. ... 2. ... 3. ..." +// - "I want to: first..., then..., finally..." +// - Numbered or bulleted lists describing steps +const userPlan = extractUserStatedPlan(); +if (userPlan) { + sessionAnalysis.executionPlan.source = "user-stated"; + sessionAnalysis.executionPlan.content = userPlan; +} +``` + +### Priority 4: Inferred Plan +```javascript +// If no explicit plan, infer from: +// - Task description and breakdown discussion +// - Sequence of actions taken +// - Outstanding work mentioned +const inferredPlan = inferPlanFromDiscussion(); +if (inferredPlan) { + sessionAnalysis.executionPlan.source = "inferred"; + sessionAnalysis.executionPlan.content = inferredPlan; +} +``` + +## 11. Notes - **Timing**: Execute at task completion or before context switch - **Frequency**: Once per independent task or milestone - **Recovery**: New session can immediately continue with full context - **Knowledge Graph**: Entity relationships auto-extracted for visualization +- **Absolute Paths**: Critical for cross-session recovery on different machines