Skip to content

codeweb v0.4.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 00:15
1487d88

Added

  • Java + C# on the deterministic fast path (extractor v8): class/interface/enum/
    record/struct discovery with visibility-as-export, owner-qualified method ids
    (constructors included), Allman-brace + expression-bodied members (C#), extends /
    base-list inheritance edges, control-flow phantom guards, Maven/Gradle test-layout
    and *Test.java / *Tests.cs role detection, and pom.xml / build.gradle / .csproj
    package boundaries. Verified on square/javapoet (497 symbols, 0 phantoms, 0.7s) and
    restsharp/RestSharp (1,542 symbols, Allman style, 0.9s). Method-dispatch recall
    (obj.Method()) stays precision-gated as in the JS regex tier — a tree-sitter tier
    for Java/C# is the next increment.

Added (recall ceiling + ambient loop)

  • Tree-sitter tier default-on when web-tree-sitter is installed (--engine regex
    opts out; absent dependency degrades to regex byte-identically). Class-field arrow
    methods survive the AST handoff.
  • Barrels are dependents (the measured recall gap): export { X } from edges the
    barrel's <module> to the resolved symbol; export * from chains resolve
    transitively AND edge the barrel to the target module. Oracle A/B moved from
    recall 0.94 to 1.00 (precision 0.94 vs grep 0.87) on both the fixed and a
    fresh-seeded 30-task sample.
  • Ambient loop: the pre-edit hook now injects the ~1KB explain card (identity, top
    callers, tests) instead of a pointer — blast radius arrives with zero agent
    discipline; the MCP server auto-refreshes a stale graph inline (~1s incremental,
    throttled, CODEWEB_NO_AUTOREFRESH=1 opts out) before structural queries, and
    per-DIRECTORY mtime stamps make brand-new files trip the staleness check (per-file
    stamps cannot see a file that didn't exist).

Added (the proof, the surfaces, the last query family)

  • codeweb bench (scripts/bench.mjs, npm run bench): the oracle A/B packaged as a
    one-command benchmark on YOUR repo — context cost per dependents task + blast-radius cost
    always; recall/precision graded by the TypeScript LanguageService when typescript is
    resolvable; ripgrep optional. The engine moved verbatim into scripts/lib/bench-core.mjs
    (the paper experiment is now a thin wrapper over it — reproduction against the committed
    canonical run is byte-identical), so published numbers and user-generated numbers can
    never measure different things.
  • The gate now posts its review: ci-gate --md renders the structural delta (blocking
    regressions, new cycles/duplications, symbols that lost all callers, renames-not-churn)
    as a budgeted digest and the codeweb gate workflow posts/updates it as a sticky PR
    comment on pass AND fail — visible where reviewers already look, verdict unchanged.
  • Editor CodeLens (editor/vscode-codeweb): zero-dependency VS Code extension showing
    N callers · blast M above every mapped symbol from the nearest .codeweb/graph.json
    (identical semantics to codeweb_callers/codeweb_impact), click-through to
    report.html#s=<id>.
  • codeweb_find — concept search (23rd MCP tool + scripts/find.mjs): free text
    ("where is retry handled?") → ranked symbols, deterministically — camelCase/snake_case
    token match with light stemming over identifiers/files/domains, weighted by exports,
    role (tests only when asked for), and fan-in. Served in-process from the cached graph,
    budgeted, staleness-annotated. Closes the last gap: every other query tool needs a name;
    this one turns an idea into the right starting symbol.

Research

  • Oracle A/B (paper/experiments/oracle-ab.mjs, results in
    paper/results/oracle-ab.json): dependents-discovery graded by the TypeScript
    compiler's own reference finder over 30 seeded vite symbols — codeweb recall 0.94 /
    precision 0.89 at 1/3 of an idealized grep's context cost (0.8KB vs 2.5KB per
    task); blast-radius ("what transitively breaks") in one ~1KB call vs a recursive
    grep loop's ~130KB (126× on the canonical run, simulated generously for grep). Mechanical and
    reproducible — complements (does not replace) the frozen frontier-agent pilot,
    whose run stays the evidence for agent-loop behavior (+0.27 recall, ~44% fewer
    tokens). The 6/30 under-recalled symbols are the known dispatch/re-export gap.