Skip to content

path '*': the methods behind a [by name] caller are counted, and bound: lines survive to the front door - #1855

Merged
swapnilpaliwal-sd merged 7 commits into
apps/integration-0.1.9from
fix/path-name-matched-callers
Oct 7, 2026
Merged

swapnilpaliwal-sd merged 7 commits into
apps/integration-0.1.9from
fix/path-name-matched-callers

Conversation

@swapnilpaliwal-sd

Copy link
Copy Markdown
Contributor

What

Two gaps in path '*' <target>, both from the week-2 external usage report (finding 8 / ask 2):

  1. The closure stopped silently behind a by-name caller. A method that reaches a [by name] caller through resolved edges reaches the target too whenever the by-name site is real — on "only X can trigger this" (the report's Q3, their spec-writing shape) exactly the triggers the answer dropped under a verified: line. One reverse walk from the by-name caller set now counts them, with up-to-3 nearest NAMED examples (placeholders like <arrow> are pushed behind named methods):

    [by name] cancel_endpoint   api.py:5   — calls `cancel` (receiver not typed)
    behind them: 1 more method(s) in 1 file(s) reach these by-name caller(s) through the graph's edges — callers of the target too if a by-name site is really `OrderService.cancel`; nearest: outer_handler (api.py:13)
    
  2. The front door dropped every bound: line. ax_blocks.render kept only run:/verified foot lines, so the honesty lines the report explicitly asks us not to tidy away were invisible on the default surface (CLI and MCP). They are kept now; run: stays last.

Evidence

  • Both languages reproduce the gap (python + typescript 4-function fixtures; the resolved caller of the by-name caller was absent and uncounted in both).
  • Scale + cost on a real graph (this repository, ~2,100 TS/JS files): a hot name (has) counts 907 behind-methods in 126 files, ~1s added; a mid-frequency name (6 sites) counts 8 in 1 file. Mid-size target before the walk: 2.7s; after: unchanged to the tenth.
  • Controls: a target with only resolved callers prints nothing new; a caller of a method whose by-name site names ANOTHER method is not counted (suite check).

Tests

swapnilpaliwal-sd and others added 2 commits October 5, 2026 23:33
…earest examples

A method that reaches a by-name caller through resolved edges reaches the target too
whenever the by-name site is real. The upstream closure listed the by-name callers (#1421)
but what reaches THEM was absent and uncounted under the verified: line — on "only X can
trigger this" exactly the triggers a spec answer silently dropped. One reverse walk from
the by-name caller set, counted as its own bound: line with up-to-3 nearest NAMED examples
(an <arrow> placeholder names nothing a reader can look up). 907 behind a hot name on an
engine-sized graph, ~1s.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
The numbered-places surface kept only run: and verified: foot lines, so every bound:
honesty line — the closure's lower-bound count and the by-name behind count — was
invisible exactly where agents and the CLI read the answer. An agent writing "only X
reaches this" from these places needs the bound as much as the verified line.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
swapnilpaliwal-sd and others added 2 commits October 6, 2026 14:00
…ounts are typed fields

Two successful path --json answers carried verified: null and bound: null beside prose lines
stating the chain was verified and counting its unresolved calls, so an automation had to
parse prose. verified is now true/false once hops were checked (null stays 'nothing was
checked'); unresolved_inside and unresolved_closure are counted numbers where 0 is a counted
zero, distinguishable from missing; bound is the same text the prose prints. Checks compare
both formats on one query, at zero and at a nonzero count.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
The surface trim folded context into find(question), which answers as ranked places; the flow
answer (how does X work, every step in the order the calls are written, source=True with each
step's code) had no tool left. context(task, source) joins the surface: five tools, each still
at most two parameters and no options. The roster docs, the argument checks and the tools/list
assertions carry it.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
@swapnilpaliwal-sd

Copy link
Copy Markdown
Contributor Author

Two more commits from the AllScale pilot feedback:

  • path --json carries what the prose says (their Finding 1): verified is true/false once hops were checked (null stays "nothing was checked"); unresolved_inside / unresolved_closure are counted numbers where 0 is a counted zero; bound is the same text the prose prints. Suite checks compare both formats on one query, at zero and at a nonzero count.
  • context is back on the MCP surface: context(task, source) — the narrative flow verb beside find — five tools, each still at most two parameters. Roster docs, argument checks and tools/list assertions updated.

All legs green: py 292/292, ts 225/225, java 329/329, js 285/285, cs 207/207, front_door 17/17, mcp ok.

swapnilpaliwal-sd and others added 3 commits October 6, 2026 14:10
…rsing fault

A task written in a non-Latin script yielded 'nothing to search for in that task
description', which reads as a fault in the task rather than as the stated limit it is:
the graph's vocabulary is the code's own identifiers, which are English words and names.
The refusal now says only English task words are supported and names the working escape —
keep the language and include one identifier as written in the code; a mixed task lands.
An English task with no content words keeps the plain line.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
…arrowed

The integration side removed find, graph, diff and install from the installed command and
the MCP server (search is grep's job). Kept all of that, and kept context surfaced as asked:
context joins the dispatcher's public help (which IS the delegated verb list), the MCP roster
(context, impact, path, tests), the refusal test loses context and gains a positive check,
and the roster docs carry context without find.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
The audit pinned the trimmed surface (context internal, no MCP tool, no flag taught
anywhere but index's). context moves to PUBLIC — dispatcher help, SKILL.md section in
both copies, MCP tool — and --source joins the flags the surface may teach.

Co-authored-by: axiomcode-bot[bot] <334110751+axiomcode-bot[bot]@users.noreply.github.com>
@swapnilpaliwal-sd

Copy link
Copy Markdown
Contributor Author

Merged apps/integration-0.1.9 into this branch (the conflicts were the surface trim vs context's return). Resolution: everything from the trim stands — find, graph, diff and install stay gone — and context stays surfaced as a first-class verb: the dispatcher's public help (which is the delegated list), the MCP roster (context, impact, path, tests), both SKILL.md copies, and the surfaces audit (fifth public verb, --source the one taught option; the off-surface refusal test loses context and gains a positive check).

After the merge: front_door 21/21, mcp ok, mcp_first 30/30, surfaces ok, python 302/302, java 333/333, csharp 208/208. typescript 25 and javascript 11 failing checks are the incoming const-object cases and fail identically on pristine apps/integration-0.1.9 — pre-existing on the base, not from this branch.

@swapnilpaliwal-sd
swapnilpaliwal-sd merged commit a30511e into apps/integration-0.1.9 Oct 7, 2026
12 checks passed
@swapnilpaliwal-sd
swapnilpaliwal-sd deleted the fix/path-name-matched-callers branch October 7, 2026 03:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant