* docs: align resolution architecture and roadmap * docs: add language ingestion gap inventories * test: audit receiver gap targets and coverage Check exact declaration IDs, expose the Dart await wrong-owner edge, and execute previously excluded C++, Rust, PHP, Dart and Vue shapes. Refresh the baseline and all language inventories from fresh measurements; call-drop counts remain unchanged. * docs: focus roadmap and shorten project README Keep the resolution roadmap limited to future work and acceptance criteria. Move detailed editor, CLI, MCP, deployment and wiki instructions into linked guides, preserve their command examples, and correct stale onboarding claims. * docs: correct setup and audit descriptions --------- Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com>
7.7 KiB
Language Ingestion Gap Inventories
These inventories are the starting point for language-specific plans. There is one
<language>-ingestion-gaps.md file for each of the 18 languages in
SCOPE_RESOLVERS.
Names match provider directories; jvm is shared infrastructure, not another language.
Freshly audited on 2026-10-23 with production sources at c35806d24 and the
accompanying benchmark changes. The measurement receipt
records the commands, exact-target checks, newly executed exclusions and test limits.
The baseline now covers
110 executable cases and 58 explicit N/A declarations. Parsing, imports, visibility,
inheritance and incremental behavior still need separate evidence; these fixed
receiver examples do not establish whole-language, CFG/PDG or rename completeness.
Inventories
| Language | First planning candidate |
|---|---|
| C | Reproduce header ownership separately from pointer dispatch. |
| COBOL | Measure procedure-pointer and structural-call paths separately. |
| C++ | Substitute explicit template arguments into proven return types. |
| C# | Trace typed array receivers and qualified nullable fields. |
| Dart | Correct awaited-call ownership; trace indexed and generic receivers. |
| Go | Expand ownership coverage beyond the passing receiver matrix. |
| Java | Trace array-element receiver typing. |
| JavaScript | Preserve JSDoc container evidence for indexed receivers. |
| Kotlin | Inventory companion and inherited-receiver limits. |
| Objective-C | Add receiver measurements without weakening dynamic-dispatch boundaries. |
| PHP | Retain PHPDoc container types and establish namespace owners. |
| Python | Audit constructor-field and module ownership coverage. |
| Ruby | Isolate YARD parameter bindings before adding recall. |
| Rust | Measure conservative smart-pointer limits before widening them. |
| Swift | Type indexed receivers, then revalidate historical reports. |
| TypeScript | Revalidate deferred narrowing contracts. |
| Vue | Type indexed receivers in SFC script blocks. |
| Zig | Add matrix coverage for the delivered receiver forms. |
Reading the evidence
| Label | Meaning |
|---|---|
| Measured gap | A checked-in receiver cell lacks its call edge. Reproduce on the chosen base before fixing it. |
| Recorded gap / boundary | The baseline notes, source contract or dedicated tests describe a limitation; it may be outside the shape matrix. |
| Negative control / deliberate limit | An unresolved result protects precision. Do not make it resolve without new evidence of the exact target. |
| Coverage gap / audit | A measurement is absent or coverage needs inventory. This does not establish a product bug. |
| Historical reports | Older claims still need current positive and negative reproductions. |
The receiver harness has separate states:
- RESOLVES: the terminal call reaches its full expected declaration ID, with no same-named edge to a different owner. This proves only the supplied fixture.
- WRONG-TARGET: at least one same-named call reaches another declaration, including any guessed edge from an untyped control.
- VISIBLE-GAP: no matching edge, with a recorded receiver-unresolved drop. Some cells intentionally represent untyped negative controls.
- INVISIBLE-GAP: neither the edge nor the receiver drop is recorded; drop counts cannot reveal this loss.
- N/A: the harness declares this spelling inapplicable to its measurement. Read its reason before interpreting language support.
- GRAMMAR-UNAVAILABLE: the parser did not load. No behavior was measured; this is not a product-gap verdict.
An all-N/A row (C or COBOL) does not mean complete ingestion. Vue now has an executable SFC row. Zig and Objective-C have dedicated tests but no row in this shape arm. A fully resolving row also proves only its fixed examples. The baseline's count arm includes external and unknown receivers, so total drops are not an actionable bug count.
Turning an inventory into a plan
- Select a stable gap ID and pin the implementation base. Record a minimal source example, expected full target identity, observed edge/drop and relevant tests.
- Add a meaningful negative: a same-name decoy, unknown type, shadowed import or ambiguous owner. Keep intentional untyped controls unresolved.
- Locate the missing fact: parsing/capture, type extraction, declaration ownership, import binding, receiver folding or dispatch. Keep language rules in providers and shared resolution algorithms language-agnostic.
- Write the plan under
docs/plans/, linking back to the gap ID. Define the smallest contract change, affected tests and corpus/benchmark comparisons. Follow the repository's impact-analysis and pre-commit change-analysis requirements. - Run focused regressions and the receiver check before updating expectations. The harness documents build and cache requirements. Record grammar skips and measurement limits explicitly.
- Update the inventory with the merged PR, verified source revision and evidence. Close the specific item without marking the whole language complete.
Keep historical reports separate from measured gaps. When adding a registered language, add its inventory here; when refreshing a snapshot, update its source pin and explain intended baseline changes. Do not copy old green results as fresh runs.
Related documentation
-
Receiver measurement audit: fresh results and corrected classifications.
-
Type Resolution System: active layers and lifecycle.
-
Type Resolution Roadmap: planned work and acceptance criteria.
-
Architecture: provider contract and shared pipeline.
-
Objective-C provider guide: supported static behavior and runtime limits.