Skip to content

SigMap 8.82.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 23:21
· 57 commits to main since this release
780b156

Minor. The third-party benchmark grows from 128 questions over 25 repositories to 208 over 35, the gates print an exact paired test beside every won/lost count, and a head-to-head harness against two code-graph tools exists, unpublished (#984, #972). Nothing SigMap ships changes: gen-context.js, src/ and packages/ are the v8.81.0 files apart from their version strings, and the npm package has the same 222 files. The third-party headline moves because the corpus grew and not because the ranker changed: 81 of 128 (63.3%, 95% interval 54.7–71.1%) to 116 of 208 (55.8%, 49.0–62.4%), with all 25 earlier repositories reproducing task for task. The re-recorded signal-arm report shows one thing the guide now says plainly: on hard body words read −1, so by the guide's own rule they would not be a default (the flag stays on; the call is the maintainer's).

Added

  • The gates print an exact paired test beside every won/lost count (#984) — scripts/lib/paired-test.mjs computes the exact two-sided sign test (McNemar's exact test) on the tasks that changed hit status. benchmark:xrepo now prints against the baseline (compared, new, won, lost, p and a plain-words verdict; vsBaseline in --json), and --signals on the xrepo and retrieval gates and the signal arms of benchmark:honest print it under each arm that changed a task. Report-only: no floor or no-regress rule changed. Fewer than six changed tasks can never be decisive, and the output says so. Test: paired-test.test.js (16 cases, a 19-mutant sweep of the test and its wiring caught in full, the arithmetic checked against integer binomials for every count up to 40 each).
  • The third-party corpus (xrepo) grows to 208 questions over 35 repositories (#984) — adds Svelte, Fastify, FastAPI, dplyr, Akka, rust-analyzer, Abseil, Gson, GORM and Zod, eight questions each (Java, Scala, R and Svelte are new; JavaScript, Python, Rust, C++, Go and TypeScript gain a second repository), blind-labelled from git archive exports of the pinned commits and double-annotated by a second annotator who saw only the questions: 79 of 80 file sets matched exactly (122 of 125 since x084), none disjoint. The baseline is re-recorded with --save: 81/128 (63.3%, 54.7–71.1%) → 116/208 (55.8%, 49.0–62.4%), the interval 3 points narrower. All 25 earlier repositories reproduce exactly and none of their baseline entries changed; the drop is the ten new repositories (35 of 80), five of whose answers are absent from the zero-config index (Akka 2, rust-analyzer 3; a run indexes 786 of 4,623 and 700 of 2,266 files, cause not investigated). R leaves the known-gaps list of benchmarks/corpus-coverage.json (dplyr has eight labelled tasks). No ranker change. benchmarks/latest.json, the README and the compare page quote the new third-party figure (npm run metrics:sync); the signal-arm and sweep tables in the guide still describe the 83-task record.
  • A head-to-head harness against codebase-memory-mcp and code-review-graph (#972, PR #1023) — scripts/run-head-to-head.mjs runs SigMap and the two tools on the xrepo tasks with one file-level scorer (hit@5, MRR@10, Wilson 95%), resolving every ambiguity in the other tool's favour and reporting a task it has no nodes for apart from a miss. It is exploratory only: it refuses to run without --exploratory and --out, and refuses an --out under benchmarks/, so nothing is published until the run on the enlarged corpus. It is never a dependency: nothing is installed by npm install, nothing ships in the npm package, and a test fails if a rival enters package.json or benchmarks/ enters the package files. benchmarks/rivals.json pins each tool to an exact release and the SHA-256 of its artifact; the harness refuses to run one whose hash differs from the pin and from the release's own checksums.txt, and runs it with a scratch HOME and a minimal environment on a throwaway copy of each pinned clone. Method: benchmarks/HEAD_TO_HEAD.md. Test: head-to-head.test.js (21 cases; a sweep of 28 mutants of the harness is caught in full).

Changed

  • The signal-arm report is re-recorded on the 208-task corpus (#984) — npm run benchmark:signals at v8.81.0; the guide's signal table, bullets and body-words figures follow it, and a test holds them to it. The verdicts stand (centrality blend and surface enrichment deprecated, mined expansions and the call-graph boost opt-in, no import graph a configuration), and body words are worth −38 tasks when switched off on the third-party corpus (116 → 78 of 208, MRR 0.380 → 0.244; was −17 of 83). One thing it found, written into the guide instead of smoothed over: on hard the words now read −1 (they win 3 tasks and lose 4: h006, h031, h045, h064), so by the rule as written (no other corpus net-negative) they would not be a default. hard is 90 tasks scored against this repository and moves with every commit, the v8.74.0 tree read the same, the flag stays on and nothing in the code changed; the call is the maintainer's. The three sweeps stay dated experiments on the first 83 tasks and were not re-run.
  • Compare page: the codebase-memory-mcp column is re-read against its current README (2026-10-22); its "about 120× fewer tokens" headline is now described there as an earlier comparison.

Fixed

  • An intermittent CI failure in the live-overlay watcher test (#1021) — the Node 22 job of the v8.81.0 release PR failed once: the test read the regeneration count before the watcher had finished a regeneration. It now waits for the count, and a mutant that delays the telemetry write by 3 s is caught where the old test passed it by luck. Test-only; no shipped code changes.

Notes

  • A first run with python3 on PATH costs about 60% more CPU than v8.80.1's, measured after v8.81.0 shipped (#982) — Django 1.68 s to 2.7 s (median of five, same machine, same minute); the cache-off arm of v8.81.0 is as slow (2.87 s), so it is the Python AST tier extracting up to 200 signatures a file where it stopped at 30, and the index file written 56% larger, not the cache. Without python3 the first run is about 11% cheaper (1.74 s to 1.55 s). A re-run is unaffected (0.45–0.5 s). Not fixed.