GitNexus/docs/languages/ruby-ingestion-gaps.md
Gergő Magyar 48f108a58a
docs: simplify guides and verify receiver gaps (#3694)
* 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>
2026-10-23 09:06:03 +01:00

5.2 KiB

Ruby Ingestion Gaps

Audited on 2026-10-23 with freshly built production sources at c35806d24 and the accompanying benchmark changes. See the measurement audit for commands, target checks, exclusions and test limits. Historical reports below remain separate from freshly measured receiver cases; broader ingestion is not exhaustively assessed.

Receiver shape snapshot

States below come from baseline.json. The harness defines each spelling and its N/A reason. RESOLVES requires the exact expected declaration ID and no same-named call to a different owner. WRONG-TARGET records incorrect edges.

Shape Recorded state Expression or exclusion
plainChain RESOLVES plain_svc.get_user.save
untypedChain VISIBLE-GAP untyped_svc.get_user.save (intentional untyped control)
plainDeepChain VISIBLE-GAP deep_svc.get_user.address.save
optionalChain RESOLVES opt_svc&.get_user.save
nonNullAssert N/A Ruby has no non-null assertion operator.
awaitParen N/A Ruby has no await expression in the core language.
explicitTypeArgs N/A Ruby has no type-argument syntax.
indexElement VISIBLE-GAP idx_repos[0].save
fieldReceiverCall RESOLVES @repo.save
decoratedReceiverBase N/A Ruby method receivers carry no type decoration.
decoratedFieldType N/A Ruby instance variables carry no declared type, so there is no decoration to strip.

The typed plain and safe-navigation chains resolve. The baseline records YARD parameter bindings landing on Module scope: a typed sibling can lend its type to an untyped parameter with the same name, in either declaration order. The benchmark avoids the collision with distinct parameter names; that workaround does not fix the product. Fresh probes using the same svc parameter reproduced the wrong User.save edge from the untyped sibling in both declaration orders; see the audit receipt.

Planning candidates

ID Evidence Gap or boundary Next planning step and acceptance
RUBY-01 Recorded gap YARD parameter types can leak between sibling functions. Bind annotations to the declaring function. Test typed/untyped siblings with the same parameter name in both orders; the typed call must hit its exact owner and the untyped call must remain unresolved.
RUBY-02 Measured gap plainDeepChain reaches an attr_reader property whose type is unavailable. Reproduce the property-type loss before choosing a propagation rule. Preserve accessor dispatch and same-name owner boundaries.
RUBY-03 Measured gap indexElement is visible after the walker learned element_reference, but there is no elementTypeOf hook. Carry YARD Array element evidence into a provider route. Keep unsupported arrays and the intentional untypedChain control unresolved.

Code and regression entry points

Evidence details: receiver baseline notes and current roadmap.