Repository navigation
v2.13.0
·
112 commits
to develop
since this release
Immutable
release. Only release title and notes can be modified.
- 2.12.0 was not published to npm; 2.13.0 contains its changes too.
Added
- Rule-based verdict in ASD-STE100 on the dashboard and the site. Each agent run gets
headline.verdict: BENEFICIAL, NO CLEAR EFFECT or SUBOPTIMAL per arm vs vanilla, from success change, uncached saved % and its spread, cost saved % and wall time change. SUBOPTIMAL: success drops by more than 5 pp, tokens increase in every repeat, or more than 25 % slower. Fewer than 3 repeats mark the verdict "indicative". Fixed templates make short sentences, e.g. "With guidance, code-context decreases the token use by 28 %." The dashboard shows a chip on the latest cards and a Verdict section in the run detail; the site shows a verdict card, the label in the history and per group on private-suite cards. Older runs and summaries get the verdict computed from the same fields, so no published file changes. Private summaries carryverdictper run and group; the shape check accepts only the text the rule makes from the block's numbers. Rule and constants:scripts/bench/lib/verdict.mts, documented in BENCHMARK-GUIDE.md "Verdict rule". (#156) - Private suite runs in the local dashboard.
CODE_CONTEXT_BENCH_PRIVATE_DIRS(path list of suite dirs or theirdata/dirs) merges private runs into the Benchmark page with a private chip and the suite alias, plus an All / Public / Private filter./api/bench/run/:id?suite=pNserves them under the same id, index and realpath rules, per dir. The files are read from disk only and sent nowhere. (#154) bench:publish --private-summary <suite-dir> [--runs id,id]publishes a redacted summary. Schemaccc-bench-private-summary/1holds only the suite alias, scope counts, and per run and per group: success, uncached tokens per session and per PASS, cost, wall time, uncached saved % with min–max spread and cost saved %. A guard refuses the summary on any suite name, path, commit, task id, prompt token, answer item, hash, absolute path or secret, and names only the JSON path. Onlydata/private/<alias-slug>.jsonanddata/private/index.jsonare written, through the usual temp worktree;--dry-runprints the summary. Full private runs stay refused. New optional suite fields:alias,groups,tasks[].group,groupByPrefix,publicTaskIds. The site shows each summary as a "Real-world private suite" card with the caption that task texts and code are private. (#154)bench:live --suite <dir>runs private suites from outside the repository. A suite (suite.json, schemaccc-bench-suite/1, plusanswers.json) pins local git clones by commit; each session workspace comes fromgit archive, so the clone's working tree is never read. New checkerspath-setandsymbol-setcompare the answer with the suite's answer key. Results go to<dir>/data/. A private suite refuses a--data-dirinside the repository, its run JSON carriessuite.private: true, andbench:publishrefuses such runs. Withredact(default for private suites), the run JSON stores tasks by id and sha256 only.npm run bench:suite-check -- <dir>validates a suite and builds and indexes one workspace without a model. (#149)- PHP in the code index.
.phpfiles get exports with one-line signatures and lines (class incl. abstract/final/readonly, interface, trait, enum, top-level function and const; short name inexports.name, namespace-qualified name inexports.description),uselines inimport_lines, and dependency edges fromuse(grouped, aliased,use function,use const),extends,implements, traituseand class names in code. Names resolve through the nearestcomposer.jsonPSR-4 maps (autoloadandautoload-dev, also in a subdirectory), then through the indexed declarations; same-namespace classes resolve withoutuse. Vendor namespaces are external packages, not edges. Comments, strings, heredoc/nowdoc and inline HTML (Blade) never create exports or edges.find_symbolandwho_importsalso take a qualified name (App\Models\User). A synthetic 1,501-file PHP tree indexes in about 0.8 s. (#148)
Fixed
- tsconfig/jsconfig path aliases make import-graph edges.
import … from "@/lib/x"(andbaseUrlimports such ascomponents/Button) now resolve through the nearesttsconfig.json/jsconfig.json, itsextendschain (relative andnode_modulespackage configs) and, for Vite-style solution configs, thereferencesentry whoseincludecovers the file.pathsfollow TypeScript's rules (exact key, then longest*prefix, targets in order, relative tobaseUrlor the defining config); files probe like relative imports, incl..d.tsand.js→.ts.who_imports,exports_in,get_file_contextandsearch_filessee the new edges, and resolved aliases leaveExternal packages. Configs are parsed with comments and trailing commas by a linear scanner, capped at 1 MB, and cached per index run. On a 475-file Vite React SPA: 952 of 952 alias imports resolve, edges 179 → 1,094. A 6,000-file synthetic tree indexes in ~3.1 s instead of ~2.5 s (27,119 edges instead of 8,872). Viteresolve.aliasis not read. Re-index to get the edges. (#151) bench:livetimeouts end a session at the limit. The deadline runs on the wall clock, and SIGTERM then SIGKILL reach the agent's whole process tree; the runner no longer waits on output pipes a leftover process holds. A timed-out session keeps its partial usage. Root cause of the ~900 s sessions: the Mac idle-slept on battery, and the old monotonic timer stopped in sleep. The runner now holdscaffeinate -ion macOS. (#146)
Changed
- The benchmark page opens with one simple table for the latest run. The dashboard and the site show one row per model (GLM, Opus, DeepSeek) with the verdict chip, success, tokens, cost, speed and repeats in plain words ("25 % less", "23 % faster"), a caption and one result sentence per model. All other views move into one collapsed "Show details" block. (#160)
- The lowest benchmark verdict is SUBOPTIMAL, and few repeats can show it. The verdict code and label change from HARMFUL to SUBOPTIMAL; the text says "Result: code-context is suboptimal for these tasks." With fewer than 3 repeats, a token increase of 10 % or more gives SUBOPTIMAL (indicative), e.g. "The token use increases by 12 % in 1 repeat." The dashboard, the site, the index builder and the private-summary check read a stored HARMFUL verdict as SUBOPTIMAL. (#158)
bench:liveretries a failed session once. A provider error, 0 model calls or a machine sleep during the session gets one retry with a fresh workspace and HOME; the run notes list every retry. The run is void only when the retry fails too. A timeout with model calls stays a model FAIL. (#146)