Ten tests that probe whether the model correctly uses code navigation tools — code_repos, code_search, code_outline, code_context, code_callers, and code_callees — to find symbols, understand relationships, and assess change impact without reading whole files. Unlike the Coding Assistant suite (which tests writing code), this tests reading/understanding an existing codebase.
Observation-based tests. Paste the prompt, watch which tools the model calls and whether it correctly interprets the results. The verify step is the model's own response — did it find the right symbol, identify the correct callers, and give an accurate answer about the code?
The Aperio codebase must be indexed. Start the server with code graph enabled, then paste prompts into a chat session.
APERIO_CODEGRAPH=on npm run start:local
# Index the repo:
node lib/codegraph/indexer.js /path/to/aperio
# In another terminal:
npm run chat:localThese tests assume the Aperio repo itself is indexed. Run the indexer before starting. Tasks reference real symbols in the Aperio codebase (lib/agent/index.js, server.js, etc.).
Probes: calls code_repos, correctly reads results, answers from tool data not training memory
code_repos (not guess from training data)?Probes: calls code_search with a relevant query, picks the right result from the list
code_search with a relevant query (e.g., "recall")?mcp/tools/)?Probes: calls code_context with a qualified name, displays the source, adds padding
code_search then code_context with the qualified name?Probes: calls code_outline, correctly lists symbols and their kinds
code_outline on the correct file?Probes: calls code_callers, correctly identifies calling functions
code_callers with the correct qualified name?Probes: calls code_callees, traces internal dependencies
code_callees on the right symbol?Probes: search → context → callers → callees chain, multi-hop reasoning
Probes: uses qualified names verbatim, passes repo to follow-up tools, avoids cross-repo confusion
repo to follow-up tools (code_context)?Probes: depth parameter, transitive caller resolution, summary without explosion
depth parameter (≥2) on code_callers?Probes: handles stale index gracefully, falls back to file reads when needed, reports honestly
| Signal | 0 = fail | 1 = pass |
|---|---|---|
| Called code graph tools | guessed from training data, read full files, used grep | code_repos / search / context / callers / callees |
| Used qualified names correctly | reconstructed by hand, didn't pass repo, wrong format | verbatim qualified name, repo parameter passed |
| Returned accurate information | hallucinated symbol locations, wrong file paths | correct file, correct symbol, correct callers |
| Chained tools appropriately | did one search and stopped; missed follow-up | search → context → callers typical flow completed |
| Handled missing/stale gracefully | hallucinated results for missing symbols | "not found" honestly, suggested reindex |
Click Pass/Fail as you observe each test.
| Test | Result | Notes |
|---|---|---|
| 1. List Repos | — | |
| 2. Find a Function | — | |
| 3. Source Slice | — | |
| 4. File Outline | — | |
| 5. Find Callers | — | |
| 6. Find Callees | — | |
| 7. Impact Analysis Chain | — | |
| 8. Qualified Names | — | |
| 9. Transitive Callers | — | |
| 10. Stale Index Handling | — | |
| TOTAL: ____ / 10 passed | ||