Skip to content

feat(mcp): session-isolated context documents to prevent multi-session overwrites #843

@JeremyDev87

Description

@JeremyDev87

Purpose

The current single docs/codingbuddy/context.md file is overwritten when multiple sessions run simultaneously (e.g., taskMaestro conductor + workers, or multiple Claude Code sessions). PLAN mode resets the entire file, destroying other sessions' context.

Problem

Session A (conductor): PLAN → resets context.md
Session B (worker 1):  ACT → appends to context.md
Session C (worker 2):  ACT → appends to context.md
  ↓
Session A resets → B and C's context lost
B and C append simultaneously → race condition

Observed in 2026-03-21 parallel execution: worker sessions overwrote conductor's context.

Solution: Session-Isolated Context Files

docs/codingbuddy/
├── context.md                        ← Index (active session list)
├── sessions/
│   ├── ctx-{session-id-A}.md         ← Conductor session
│   ├── ctx-{session-id-B}.md         ← Worker 1 session
│   └── ctx-{session-id-C}.md         ← Worker 2 session
└── shared/
    └── decisions.md                  ← Cross-session shared decisions (append-only)

Changes

  • apps/mcp-server/src/ — Modify update_context and parse_mode context handling
  • Add sessionId parameter to update_context
  • PLAN reset only affects own session file, not others
  • shared/decisions.md for cross-session communication (append-only, no reset)
  • context.md becomes an index listing active sessions

Session ID Strategy

  • Auto-generated UUID per session (stored in session state)
  • Fallback: if no sessionId provided, use legacy single-file behavior (backward compatible)
  • taskMaestro integration: session ID derived from pane-{N} for easy mapping

API Changes

// update_context — add sessionId
update_context({
  mode: "ACT",
  sessionId: "abc-123",         // NEW
  progress: [...],
  shareDecisions: ["..."]       // NEW: also written to shared/decisions.md
})

// parse_mode — returns session-specific path
parse_mode("PLAN: ...")  {
  contextFilePath: "docs/codingbuddy/sessions/ctx-abc-123.md",
  sharedDecisions: [...],        // from shared/decisions.md
}

Backward Compatibility

  • No sessionId → falls back to single context.md (existing behavior)
  • sessions/ directory auto-created on first session-isolated call
  • Existing context.md content preserved

Acceptance Criteria

  • update_context accepts sessionId parameter
  • Each session writes to its own file (sessions/ctx-{id}.md)
  • PLAN reset only affects own session file
  • shared/decisions.md for cross-session append-only data
  • context.md serves as index of active sessions
  • No sessionId → legacy single-file behavior (backward compatible)
  • Race condition free (each session writes to different file)
  • TDD: tests first

References

  • Current implementation: apps/mcp-server/src/mcp/ (context handling)
  • context-management skill: packages/rules/.ai-rules/skills/context-management/
  • Related: feat: add session issue tracking to update_context #842 (session issue tracking)
  • Incident: 2026-03-21 parallel execution context overwrites

Metadata

Metadata

Assignees

No one assigned

    Labels

    featmcp-serverapps/mcp-serverpriority:mustMust Have - 반드시 필요, 없으면 릴리즈 불가

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions