Spec'd backlog from the 2026-08-23 multi-persona engineering review (docs/reviews/2026-08-23-engineering-review.md). Each item is L-effort and needs its own ticket+branch when picked up.
1. extension.ts decomposition (Architect)
4,496-line activate() closure, ~20 concern domains, 53 inline commands, 27 module-level mutable singletons, audit middleware via monkey-patching toolRegistry.execute. Deactivate never disposes smartRouter providers, AgentManager, SessionStore, persistentRunner; ChatViewProvider streamListener nulled without invoke.
Plan: extract per-domain modules (commands/, provider-wiring, mcp-wiring, indexing-wiring, ui-wiring) each exporting dispose(); replace singleton lets with an ActivationContext object; make audit middleware a registry decorator instead of runtime patch.
2. WorkerBridge implementation ("champd" phase 6)
agent-worker-bridge.ts is a spec-only interface. Move CPU-bound work off the ext host: diff LCS (32MB DP tables today), indexing/embedding orchestration, token estimation, markdown pre-render. Message protocol already defined in the file.
3. Hybrid retrieval + reranking (RAG)
Fuse existing rg keyword path with vector search via RRF (codebase-search.ts fallback branch is the seed); local cross-encoder or LLM listwise rerank top-20→top-8; IoU dedupe of overlapping chunks; token-budgeted context packing via ContextWindowManager; retrieval telemetry (latency/scores/accepted-edit correlation) to tune threshold 0.65 which is currently meaningless on unnormalized L2 scores.
4. Tree-sitter chunking for all languages
chunking-service.ts supports TS/JS only (:45-52); Python/Go/Rust/Java get blind 100-line windows. Header documents the tree-sitter path. Include token-based sizing to replace line counts.
5. Chat virtualization + bounded activity log
No IntersectionObserver/content-visibility in main.js; history restore re-renders everything; activityLog[] grows unbounded per session.
6. Config merge correctness
config-loader.ts merge(): workspace triggers silently dropped when user config exists; mcp.servers/routing.rules/fallback.providers replaced wholesale not merged; unknown top-level keys silently discarded by validate(); only first YAML error surfaced. Add deep-merge semantics for lists-of-maps by key + warn on unknown keys.
7. Structured logging with trace IDs
Replace console.* across src with OutputChannel-backed structured logger; propagate runId→traceId through agent loop, tool executions, MCP calls, provider requests; OTLP exporter parity for non-analytics paths.
8. Release automation
CHANGELOG stale since 1.6.5 vs v1.6.169; manual version bumps left uncommitted while 9 VSIX builds were cut; zero publish automation; CI lacks build/package gate. Add changesets-style changelog gen, tag-triggered package job, vsce publish script, CI packaging verification.
Tests required
Per-item when picked up; this umbrella carries no code change.
Spec'd backlog from the 2026-08-23 multi-persona engineering review (docs/reviews/2026-08-23-engineering-review.md). Each item is L-effort and needs its own ticket+branch when picked up.
1. extension.ts decomposition (Architect)
4,496-line activate() closure, ~20 concern domains, 53 inline commands, 27 module-level mutable singletons, audit middleware via monkey-patching toolRegistry.execute. Deactivate never disposes smartRouter providers, AgentManager, SessionStore, persistentRunner; ChatViewProvider streamListener nulled without invoke.
Plan: extract per-domain modules (commands/, provider-wiring, mcp-wiring, indexing-wiring, ui-wiring) each exporting dispose(); replace singleton lets with an ActivationContext object; make audit middleware a registry decorator instead of runtime patch.
2. WorkerBridge implementation ("champd" phase 6)
agent-worker-bridge.ts is a spec-only interface. Move CPU-bound work off the ext host: diff LCS (32MB DP tables today), indexing/embedding orchestration, token estimation, markdown pre-render. Message protocol already defined in the file.
3. Hybrid retrieval + reranking (RAG)
Fuse existing rg keyword path with vector search via RRF (codebase-search.ts fallback branch is the seed); local cross-encoder or LLM listwise rerank top-20→top-8; IoU dedupe of overlapping chunks; token-budgeted context packing via ContextWindowManager; retrieval telemetry (latency/scores/accepted-edit correlation) to tune threshold 0.65 which is currently meaningless on unnormalized L2 scores.
4. Tree-sitter chunking for all languages
chunking-service.ts supports TS/JS only (:45-52); Python/Go/Rust/Java get blind 100-line windows. Header documents the tree-sitter path. Include token-based sizing to replace line counts.
5. Chat virtualization + bounded activity log
No IntersectionObserver/content-visibility in main.js; history restore re-renders everything; activityLog[] grows unbounded per session.
6. Config merge correctness
config-loader.ts merge(): workspace triggers silently dropped when user config exists; mcp.servers/routing.rules/fallback.providers replaced wholesale not merged; unknown top-level keys silently discarded by validate(); only first YAML error surfaced. Add deep-merge semantics for lists-of-maps by key + warn on unknown keys.
7. Structured logging with trace IDs
Replace console.* across src with OutputChannel-backed structured logger; propagate runId→traceId through agent loop, tool executions, MCP calls, provider requests; OTLP exporter parity for non-analytics paths.
8. Release automation
CHANGELOG stale since 1.6.5 vs v1.6.169; manual version bumps left uncommitted while 9 VSIX builds were cut; zero publish automation; CI lacks build/package gate. Add changesets-style changelog gen, tag-triggered package job, vsce publish script, CI packaging verification.
Tests required
Per-item when picked up; this umbrella carries no code change.