Skip to content

Entry-point signature matching ignores erased_signature, so a composed entry named that way loses its verdict #288

Description

@agustingroh

Summary

Entry-point signature matching in the stitch compares against Function.CanonicalSignature only. A request naming a published entry point by its erased_signature therefore roots no enumeration and, for a composed entry point, produces no finding graph — so the finding is served without reachability or analysis.

The same function, named by two published and equally valid spellings, answers differently.

Observed

pkg:maven/org.springframework.kafka/spring-kafka@3.2.2, include_call_chains: true, one signature per request:

entry_point_signatures assets reachability analysis unmatched
...KafkaTemplate.send(String, K, V): CompletableFuture 7 reachable call_chains: partial 0
...KafkaTemplate.send(String, Object, Object): CompletableFuture 7 absent absent 0

Both spellings are published on that entry point. unmatched is empty in both cases, so both are recognised for finding selection; only the first reaches the enumeration.

Cause

chainEntryNodes and composedChainEntryFindings (pkg/graphfrag/stitch.go) build the wanted set from the raw request strings and compare against Function.CanonicalSignature / CryptoEntryPoint.CanonicalSignature. ErasedSignature is carried on Function (schema 1.9+) and published on every exported entry point, but is never consulted here.

For a composed entry point the consequence is the whole verdict: with no signature matched, composedChainEntryFindings returns nil, the zero-chain guard in traceBackward continues, and no finding graph is emitted for the verdict to attach to.

Scope

Accept ErasedSignature alongside CanonicalSignature in both matchers. Pure widening — every signature that matches today still matches — and it restores symmetry between the two published spellings.

function_key is also published and equally unambiguous; accepting it is the same one-line addition and worth deciding on at the same time.

Context

#286 restored the verdict for the canonical spelling. That fix was deliberately scoped to the canonical contract and this limitation was recorded at the time, before the serving layer began accepting the erased spelling for finding selection. Now that it does, the asymmetry is observable in the served response.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions