Repository navigation
Call-graph skills: language onboarding, miss sweep, Haiku triage scout (#3779, #3780) - #3795
Conversation
#3779, #3780) - .claude/skills/callgraph-language-onboarding: the checklist for adding a language's compiler reference (tool/pin traps, corpus choice, adapter naming rules, registry, fixture test, sanity checks, baseline/CI/hook, docs). - .claude/skills/callgraph-miss-sweep: triage -> known-pattern table -> source verification -> explain_call root cause -> fix -> net-change rule -> ship. - .claude/agents/callgraph-triage-scout (haiku): mechanical triage/split/explain runs and issue drafts; pastes tool output verbatim, never judges. - callgraph_triage.py: --split BUCKET classifies a bucket's call sites by shape and receiver deterministically (a Haiku trial misclassified them by eye); --json samples now carry their source excerpt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AbvXUJpva5XxxbssoKG9Jt
|
This PR changes only skills, an agent file, docs and Cause: on Windows, Fix: no fix PR exists yet. The test-only patch is in my comment on #3793: a Generated by Claude Code |
…ive paths) The rehydrated ram_cache is keyed by native paths (src\LEDGER.cbl on Windows), so indexing it with "src/LEDGER.cbl" failed the Windows matrix since #3768. Test-only: look the key up via a _cached(cache, rel) helper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AbvXUJpva5XxxbssoKG9Jt
Summary
The second PR under epic #3772. It turns the call-graph tools from #3793 into routines that are repeatable and cheap on tokens.
.claude/skills/callgraph-language-onboarding(Skill: callgraph-language-onboarding (add a compiler reference for a new language) #3779) is the checklist for adding a language's compiler reference. It covers:import_graph_corpus.json);/paths);.claude/skills/callgraph-miss-sweep(Skill: callgraph-miss-sweep, plus a Haiku callgraph-triage-scout agent #3780) is the fix loop: start green, then pick a bucket (precision first, split broad buckets), then check the known-pattern table (Call resolver: an untyped receiver's built-in method call (str.trim(),map.get()) links confidently to a same-named repo method viafile/import#3756–[TypeScript] func_start names a quoted methodasync "array-objects"() {}asasync#3760, Delta scans lose inherited-method call links: the rehydrator restoresinheritance_parentsbut the resolver readsinheritance#3786–Import graph (TS/JS): a package's imports of itself by name (from "zod/v4") resolve nowhere, costing ~130 call links on zod #3789, and the untrackedin_string/after_nested_def/same_namebuckets), then verify against source, root-cause withexplain_call, and fix. It adds the net-change rule (Call resolver: several block-scoped definitions of one name in a file (const Node = …per test) all resolve to one of them, not the enclosing scope's #3759's first attempt fixed 3 links and broke 3), then verify and ship..claude/agents/callgraph-triage-scout.md(model: haiku, Skill: callgraph-miss-sweep, plus a Haiku callgraph-triage-scout agent #3780) handles the mechanical runs: triage, split, explain and issue drafts. It pastes tool output verbatim and never judges.callgraph_triage.py --split BUCKETclassifies every item in a bucket by the shape of its call site and its receiver (spread, spread-qualified, constructor, qualified:recv, chained, bare, template). On a first trial the Haiku scout misread the triage header and misclassified spreads by eye. The classification now lives in the tool, and the agent pastes the tool's output.--jsonsamples now carry their sourceexcerpt.--split resolved_outsideon zod (269 edges):qualified:zqualified:processorsspread+spread-qualified:errorUtilutil.x(), bare, other)Earlier I counted about 51 spreads by eye; the deterministic count is 64.
A re-run of the scout trial with these instructions reproduced the tool output exactly.
Type of change
CI checklist
ruff formatand the ruff, mypy and dead-key audits passcall_shapecases,spliton the fixture scan, and the JSON excerptDifferential Scan target
N/A: no parsing or engine code changed, so golden masters are unaffected.
Verification
python tests/tools/callgraph_check.py --langs typescript,python --skip crucible,tree-sitter(crucible and tree-sitter skipped because nothing in the engine changed):Closes #3779
Closes #3780
🤖 Generated with Claude Code
https://claude.ai/code/session_01AbvXUJpva5XxxbssoKG9Jt
Generated by Claude Code