{
  "exploration": "context-window-to-todo association for compression-on-completion",
  "verified_at": "2026-07-07T21:40:00Z",
  "conclusion": "Granular context-window entries are NOT associated with todo items. The live context is a flat ChatMessage[] stream (no todoId field) grouped only by coarse activity PHASE via ContextTree (explore/plan/implement/verify/mixed), compressed on phase/budget triggers via StructuredContextCompressor + messageLog task boundaries. Todo state (TodoReminderTodo) exists only for reminder-gating with no span/period tracking.",
  "evidence": {
    "e1_flat_message_stream": {
      "command": "grep -c 'contextWindow\\|toolResults\\|messages.push\\|appendMessage' packages/orchestrator/src/agenticRunner.ts",
      "result": 112,
      "meaning": "112 sites append to the flat ChatMessage[] stream. ChatMessage (context-compressor.ts L23-31) has role/content/tool_calls/tool_call_id but NO todoId/spanId field."
    },
    "e2_todo_tracking": {
      "command": "grep -c 'TodoItem\\|todoId\\|activeTodo\\|currentTodo\\|todo_write\\|todos' packages/orchestrator/src/agenticRunner.ts",
      "result": 252,
      "meaning": "TodoReminderTodo (agenticRunner.ts L1771-1777) + shouldInjectTodoReminder (L1802-1843) are reminder-gating only. No start/end turn or message-index span map exists."
    },
    "e3_compression": {
      "command": "grep -rln 'compact\\|compress' packages/orchestrator/src",
      "result_count": 36,
      "meaning": "Compression is phase-based (ContextTree) + budget (StructuredContextCompressor.generateSummary at agenticRunner L27465) + messageLog task boundaries. Not todo-based. Files include context-compressor.ts, contextTree.ts, messageLog.ts, context-fabric.ts, todoTruth.ts."
    },
    "e4_context_fabric": {
      "command": "grep -c 'todo' packages/orchestrator/src/context-fabric.ts",
      "result": 0,
      "meaning": "The dedicated context-intake module context-fabric.ts (473 lines, typed 'Context Fabric' that emits one bounded frame before each model call) has ZERO todo references — confirms even the purpose-built context layer does not associate context entries with todos."
    }
  },
  "design_proposal": "To add todo-scoped compression-on-completion: (1) tag messages with active todoId (add field to ChatMessage or parallel Map<msgIdx,todoId>); (2) track todo spans Map<todoId,{startTurn,endTurn,startMsgIdx,endMsgIdx}> opened on in_progress, closed on completed/blocked; (3) on todo completion summarize the span slice via StructuredContextCompressor and replace with a task_summary message (reuse messageLog boundary pattern), reusing ContextTree.contractInactive/archive for persistence; (4) hook point: shouldInjectTodoReminder (agenticRunner L1802) already observes todo status transitions.",
  "deliverable": "docs/explorations/context-window-todo-association.md",
  "status": "exploration_complete_no_source_changes"
}
