Skip to content

Architecture backlog: L-effort items from 2026-08-23 engineering review #113

Description

@hellodk

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium priority — this quarterarchitectureArchitectural debt

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions