Where We Are

The ingestion pipeline has converged on a config+factory pattern for language-agnostic extraction. Method extractors (11 configs) and field extractors (12 configs) are shipped. Three extraction domains remain:

Extractor Status Issue
Call extractor Planned #874
Variable extractor Planned #875
Class config migration Planned #876

The Roadmap

Work is organized into 5 phases. Each phase unlocks the next.

Phase 1: Complete the Extractor Layer

Goal: Every extraction domain uses config+factory. Language providers are the single source of truth.

Issue What Type
#874 Call extractor — replace ~225 lines of inline parse-worker logic feat
#875 Variable extractor — structured metadata for Const/Static/Variable nodes feat
#876 Class config migration — move inline configs to configs/ subdirectory refactor

Unlocks: Clean provider layer, consistent patterns across all extraction domains.

Phase 2: Post-Extraction Cleanup

Goal: Remove dead code and duplicated helpers left over from the pre-provider era.

Issue What Type
#880 Deduplicate genericFuncName/inferFunctionLabel, delete dead TypeConfig.extractReturnType, move language-specific helpers to providers refactor

Unlocks: Clean shared utilities, no dead code in ast-helpers.ts.

Phase 3: Wire SemanticModel

Goal: All resolution flows through the SemanticModel directly, not through SymbolTable wrappers.

This completes Phase 6 of the Fuzzy Lookup Elimination RFC.

Issue What Type
#881 SM-20: Migrate 37 internal call sites to table.model.* across call-processor, resolution-context, type-env, heritage-map refactor

Unlocks: O(1) deterministic resolution for all call types. SymbolTable becomes a thin adapter.

Phase 4: Import Resolution + Heritage Extractor