+ contextGraph: {"meta":{"nodeCount":8,"edgeCount":10,"skippedFiles":0,"droppedEdges":0,"repoName":"Graft","subtitle":"PR #345","defaultTab":"context","tabs":["context"]},"nodes":[{"id":"changed:src/context/","name":"Token Savings Calculation","type":"changed","summary":"Edits groupDigits and savingsLine in 1 file. A test that reaches it changed too — 2 of 2 functions covered.","sources":["src/context/savings.ts"],"evidence":[{"label":"groupDigits · src/context/savings.ts:123-125","lines":[{"n":108,"sign":"+","text":"/**"},{"n":109,"sign":"+","text":" * Digits grouped for display, pinned to en-US."},{"n":110,"sign":"+","text":" *"},{"n":111,"sign":"+","text":" * Not a style choice: the `[graft] tokens saved ≈ N` line below is read back by"},{"n":112,"sign":"+","text":" * {@link sumSavingsFooters}, whose regex knows `,` and nothing else. Rendered"},{"n":113,"sign":"+","text":" * with the machine's locale instead, a de-DE or tr-TR box wrote `1.990` and"}],"more":13},{"label":"savingsLine · src/context/savings.ts:132-145","lines":[{"n":null,"sign":"-","text":" `[graft] tokens saved ≈ ${delta.toLocaleString()} (${pct}%) — this output ≈ ` +"},{"n":null,"sign":"-","text":" `${pack.toLocaleString()} tok vs reading the ${saved.files} file(s) it covers whole ≈ ` +"},{"n":null,"sign":"-","text":" `${base.toLocaleString()} tok (estimate).` +"},{"n":140,"sign":"+","text":" `[graft] tokens saved ≈ ${groupDigits(delta)} (${pct}%) — this output ≈ ` +"},{"n":141,"sign":"+","text":" `${groupDigits(pack)} tok vs reading the ${saved.files} file(s) it covers whole ≈ ` +"},{"n":142,"sign":"+","text":" `${groupDigits(base)} tok (estimate).` +"}]}],"owners":[{"name":"anirudhkumar-nanonets","handle":"anirudhkumar-nanonets","commits":4,"last":"2026-09-02"},{"name":"Anthony Feddersen","handle":"afeddersen","commits":1,"last":"2026-08-31"}]},{"id":"changed:src/ask/","name":"Ask Savings Display","type":"changed","summary":"Edits askSavingsLine in 1 file. No test reaches this code.","sources":["src/ask/ask.ts"],"evidence":[{"label":"askSavingsLine · src/ask/ask.ts:1556-1569","lines":[{"n":null,"sign":"-","text":" `[graft] tokens saved ≈ ${saved.toLocaleString()} (${pct}%) — this pack ≈ ` +"},{"n":null,"sign":"-","text":" `${pack.toLocaleString()} tok vs reading the ${r.saved.files} source file(s) whole ≈ ` +"},{"n":null,"sign":"-","text":" `${base.toLocaleString()} tok. Estimate (baseline = those files read in full).` +"},{"n":1564,"sign":"+","text":" `[graft] tokens saved ≈ ${groupDigits(saved)} (${pct}%) — this pack ≈ ` +"},{"n":1565,"sign":"+","text":" `${groupDigits(pack)} tok vs reading the ${r.saved.files} source file(s) whole ≈ ` +"},{"n":1566,"sign":"+","text":" `${groupDigits(base)} tok. Estimate (baseline = those files read in full).` +"}]}],"owners":[{"name":"Shrish Dwivedi","handle":"shhdwi","commits":16,"last":"2026-07-30"},{"name":"anirudhkumar-nanonets","handle":"anirudhkumar-nanonets","commits":11,"last":"2026-09-10"}]},{"id":"changed:src/claude/","name":"Session Metrics Formatting","type":"changed","summary":"Edits renderStatusline, formatRetrieval and formatSessionStats in 2 files. A test that reaches it changed too — 3 of 3 functions covered.","sources":["src/claude/format.ts","src/claude/session-metrics.ts"],"evidence":[{"label":"renderStatusline · src/claude/format.ts:26-53","lines":[{"n":null,"sign":"-","text":" top.push(C.indigo(`~${saved.toLocaleString()} tok saved${money}`));"},{"n":43,"sign":"+","text":" top.push(C.indigo(`~${groupDigits(saved)} tok saved${money}`));"}]},{"label":"formatRetrieval · src/claude/format.ts:128-141","lines":[{"n":null,"sign":"-","text":" `${body}\\n[graft] tokens saved ≈ ${saved.toLocaleString()} (${pct}%); this pack ≈ ` +"},{"n":null,"sign":"-","text":" `${tokensOf(body.length).toLocaleString()} tok vs reading the ${ask.saved!.files} file(s) whole ≈ ` +"},{"n":null,"sign":"-","text":" `${base.toLocaleString()} tok (estimate).`"},{"n":137,"sign":"+","text":" `${body}\\n[graft] tokens saved ≈ ${groupDigits(saved)} (${pct}%); this pack ≈ ` +"},{"n":138,"sign":"+","text":" `${groupDigits(tokensOf(body.length))} tok vs reading the ${ask.saved!.files} file(s) whole ≈ ` +"},{"n":139,"sign":"+","text":" `${groupDigits(base)} tok (estimate).`"}]},{"label":"formatSessionStats · src/claude/session-metrics.ts:187-211","lines":[{"n":null,"sign":"-","text":" ` tokens saved: ~${saved.toLocaleString()}`,"},{"n":202,"sign":"+","text":" ` tokens saved: ~${groupDigits(saved)}`,"}]}],"owners":[{"name":"Shrish Dwivedi","handle":"shhdwi","commits":10,"last":"2026-07-27"},{"name":"anirudhkumar-nanonets","handle":"anirudhkumar-nanonets","commits":6,"last":"2026-09-02"}]},{"id":"affected:src/graph/","name":"Workspace Federation","type":"affected","summary":"Not edited by this PR. 4 symbols here reach code it changed — nearest is formatRepoMap, 2 hops away.","sources":["src/graph/map.ts · L325-L350","src/graph/traverse-cli.ts · L166-L242","src/graph/workspace-cli.ts · L88-L97","src/graph/workspace.ts · L659-L695"],"evidence":[{"label":"runCallersCommand · src/graph/traverse-cli.ts:166-242","note":"calls walk","lines":[{"n":194,"sign":" ","text":" // `all` (aka full/max) = the whole transitive closure: walk until no new"}]}],"owners":[{"name":"Shrish Dwivedi","handle":"shhdwi","commits":14,"last":"2026-08-12"},{"name":"anirudhkumar-nanonets","handle":"anirudhkumar-nanonets","commits":8,"last":"2026-08-24"}]},{"id":"affected:src/mcp/","name":"MCP Tool Invocation","type":"affected","summary":"Not edited by this PR. 2 symbols here reach code it changed — nearest is callSingleTool, 2 hops away.","sources":["src/mcp/tools.ts · L247-L329","src/mcp/tools.ts · L153-L199"],"owners":[{"name":"Shrish Dwivedi","handle":"shhdwi","commits":14,"last":"2026-08-12"},{"name":"anirudhkumar-nanonets","handle":"anirudhkumar-nanonets","commits":7,"last":"2026-09-02"}]},{"id":"affected:src/claude/","name":"Claude UI Integration","type":"affected","summary":"Not edited by this PR. 2 symbols here reach code it changed — nearest is main, 1 hop away.","sources":["src/claude/statusline.ts · L24-L35","src/claude/hooks.ts · L394-L462"],"evidence":[{"label":"main · src/claude/statusline.ts:24-35","note":"calls renderStatusline","lines":[{"n":34,"sign":" ","text":" process.stdout.write(renderStatusline(stats, session, { ctxPct }).join('\\n'));"}]},{"label":"main · src/claude/hooks.ts:394-462","note":"calls","lines":[{"n":421,"sign":" ","text":" if (event === 'tool-savings') { handleToolUse(input, dir); return; }"}]}],"owners":[{"name":"Shrish Dwivedi","handle":"shhdwi","commits":13,"last":"2026-08-12"},{"name":"anirudhkumar-nanonets","handle":"anirudhkumar-nanonets","commits":9,"last":"2026-09-02"}]},{"id":"affected:src/","name":"CLI Entry Point","type":"affected","summary":"Not edited by this PR. 1 symbol here reaches code it changed — nearest is cli.ts, 1 hop away.","sources":["src/cli.ts · L1-L1407"],"evidence":[{"label":"cli.ts · src/cli.ts:1-1407","note":"calls formatSessionStats","lines":[{"n":48,"sign":" ","text":"import { latestSession, formatSessionStats, sessionInputRate } from \"./claude/session-metrics.js\";"}]}],"owners":[{"name":"anirudhkumar-nanonets","handle":"anirudhkumar-nanonets","commits":39,"last":"2026-09-10"},{"name":"Shrish Dwivedi","handle":"shhdwi","commits":23,"last":"2026-08-13"}]},{"id":"affected:src/search/","name":"Grep Search Formatting","type":"affected","summary":"Not edited by this PR. 1 symbol here reaches code it changed — nearest is formatGrepResult, 2 hops away.","sources":["src/search/grep-cli.ts · L54-L63"],"owners":[{"name":"anirudhkumar-nanonets","handle":"anirudhkumar-nanonets","commits":4,"last":"2026-08-11"},{"name":"Shrish Dwivedi","handle":"shhdwi","commits":3,"last":"2026-07-27"}]}],"edges":[{"source":"affected:src/graph/","target":"changed:src/ask/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/graph/","target":"changed:src/context/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/mcp/","target":"changed:src/ask/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/mcp/","target":"changed:src/context/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/claude/","target":"changed:src/claude/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/claude/","target":"changed:src/context/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/","target":"changed:src/ask/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/","target":"changed:src/claude/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/","target":"changed:src/context/","relation":"depends_on","description":"this area calls or imports code the PR changed"},{"source":"affected:src/search/","target":"changed:src/context/","relation":"depends_on","description":"this area calls or imports code the PR changed"}]},
0 commit comments