Skip to content

explain: ambiguity hint suggests a full node id that explain itself cannot resolve (merged global graph) (PE-80066) #90

Description

@filipechagas

Found while instrumenting Brain to query the merged global graph for PE-80066 (https://lawnstarter.atlassian.net/browse/PE-80066). Fork v8 @ 5e9d95c11837aeabbbb5d90cb45544f49dc58ca4 (CLI 0.9.40).

Summary

explain's own disambiguation hint gives an ID that explain then refuses to resolve. In a merged global graph, labels collide across repos; explain correctly detects this and lists candidates by ID — but retrying with that exact ID fails.

Reproduction (12-repo merged global graph)

$ graphify explain 'Contractor' --graph ~/.graphify/global-graph.json
Ambiguous: 'Contractor' matches 65 nodes in different files
  id: api.lawnstarter.com::app_contractor_contractor  (app/Contractor.php)
  ...
Retry with the repo-relative path or the full node id.

$ graphify explain 'api.lawnstarter.com::app_contractor_contractor' --graph ~/.graphify/global-graph.json
No node matching 'api.lawnstarter.com::app_contractor_contractor' found

The string is a real node ID — verified by reading global-graph.json directly. The repo-relative-path retry (graphify explain 'app/Contractor.php') does resolve, so the second half of the hint works; the ID half does not.

Why it matters

Merged graphs make label collisions the norm (65 Contractor nodes across 12 repos), so the disambiguation path is the main path — and its primary suggested retry is a dead end. Consumers without the path form (e.g. when candidates span same-named files) have no working retry.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions