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 |
Work is organized into 5 phases. Each phase unlocks the next.
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.
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.
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.