systemap

Reference

Benchmarks

bench/table.py writes this document from bench/results.jsonl. Do not edit the generated document. Change the generator instead. Each repository and mode has one row for its latest run.

bench/run.sh executes the documented headless procedure. The session's result event gives the model, turns, minutes, and dollars. After the session, the harness executes systemap check and systemap judgement --strict. Their results use the check and judgement columns.

The run column shows whether the session completed without intervention or stopped at its limit. The skill first column shows whether the first tool call used the systemap skill. The procedure specifies this first call.

The experiment recorded two acceptance limits before implementation:

Four of the six first maps cost less than 0.15 dollars per module. The other two cost 0.159 and 0.177. The maintenance runs cost 2.31, 4.39, and 2.50 dollars. They used 51, 63, and 46 turns. All three exceeded both maintenance limits.

The 15-turn limit used an incorrect two-step assumption. The maintenance procedure executes delta, refresh, check, and judgement. The experiment did not change either limit after the results.

The maintenance runs used the reverse comparison direction. Each run reverted a merged pull request but kept the map unchanged. Thus, the map contained claims for removed code structure. The report used the identifiers entry vanished, interface vanished, and evidence lost.

The workflow from init uses the forward direction, from the pull-request base to its head. That comparison can print new crossing import. The test suite includes both directions. The table's turns and dollars are from the reverse runs.

repository mode modules systemap model turns minutes dollars dollars per module check judgement run skill first date
a 144-module service (private) first-map 144 0.8.0 claude-opus-5[1m] 155 31.9 25.49 0.177 clean clean finished yes 2026-08-26
https://github.com/0xfauzi/kstrl first-map 111 0.9.0 claude-opus-5[1m] 112 34.1 17.61 0.159 clean clean finished yes 2026-08-26
https://github.com/0xfauzi/kstrl maintenance, small (PR 237, 8 files) 111 0.11.0 claude-opus-5[1m] 51 6.4 2.31 - clean clean finished yes 2026-08-26
https://github.com/0xfauzi/kstrl maintenance, medium (PR 213, 17 files) 111 0.11.0 claude-opus-5[1m] 63 11.3 4.39 - clean clean finished yes 2026-08-26
https://github.com/0xfauzi/kstrl maintenance, large (PR 184, 20 files) 111 0.11.0 claude-opus-5[1m] 46 5.8 2.5 - clean clean finished yes 2026-08-26
https://github.com/Textualize/rich first-map 103 0.9.0 claude-opus-5[1m] 118 26.7 14.37 0.14 clean clean finished yes 2026-08-26
https://github.com/httpie/cli first-map 78 1.2.0 claude-sonnet-5-5 50 4.7 1.14 0.015 clean clean finished yes 2026-10-11
https://github.com/httpie/cli first-map-jev 78 1.1.0 claude-opus-5[1m] 54 5.5 3.61 0.046 clean clean finished yes 2026-09-19
https://github.com/mealie-recipes/mealie first-map 460 0.11.0 claude-opus-5[1m] 167 32.9 23.76 0.052 clean clean finished yes 2026-08-26
https://github.com/paperless-ngx/paperless-ngx first-map 341 0.9.0 claude-opus-5[1m] 151 36 24.24 0.071 clean clean finished yes 2026-08-26
https://github.com/python-poetry/poetry first-map 192 0.9.0 claude-opus-5[1m] 174 35.9 20.82 0.108 clean clean finished yes 2026-08-26

Decision provider measurements

A decision provider answers the semantic questions of systemap audit and the other decision commands. This section gives the current measurements of these questions. bench/jev/README.md gives the method, the acceptance value, the commands, and the full output.

All rows come from Python repositories: 5 development maps and 3 holdout maps. The development maps give each threshold. The holdout maps do not. No TypeScript row set is available. Thus no result applies to TypeScript.

"Caught" is the fraction of incorrect claims below the threshold. "Flagged" is the fraction of correct claims below the threshold.

decision flow with Jev and the call_sites context (2026-10-13)

The question gets its source lines from the call_sites fact. The rows are 160 development rows and 96 holdout rows. The model was jev-1.13.0. The acceptance value: development caught 50% or more, a holdout catch rate 10 points or less from development, and 2 or fewer of 48 holdout claims flagged.

context threshold dev caught dev flagged holdout caught holdout flagged result
call_sites fact P < 0.2 48/80 (60.0%) 2/80 (2.5%) 25/48 (52.1%) 1/48 (2.1%) pass

The AUC was 0.904 on development and 0.936 on holdout. The cost was 256 requests and 279,288 input tokens. decision flow is not a default question of audit, because no TypeScript row set is available.

OpenAI Decisions (2026-10-13)

The model was gpt-6-luna. The rows are the Jev bench rows. A kind is available only if each holdout figure is 10 points or less from its development figure. The first measurement had 1,636 requests, with 0 errors and 0 refusals. They used 1,211,893 input tokens and cost 0.121 dollars.

kind threshold development holdout result
mis-fold P < 0.02 82.1% caught, 3.1% flagged 61.5% caught, 1.0% flagged fail
owner 0.99 or more 9.5% answered, 100% correct 4.7% answered, 100% correct pass
sentence P < 0.3 81.0% caught, 1.3% flagged 75.0% caught, 0.0% flagged pass
flow P < 0.02 33.8% caught, 2.5% flagged 37.5% caught, 6.2% flagged pass
governs 0.99 or more 19.8% found, 1.1% suggested 17.2% found, 6.0% suggested pass
plan cut 0.5 0.73 covered 0.39 covered fail
triage none 82.5% first 69.2% first fail

The flow row comes from a second measurement with the call_sites context. It used the 160 development rows and the 96 holdout rows of the Jev measurement above. On development, OpenAI caught 27 of 80 incorrect claims and flagged 2 of 80 correct claims. On holdout, it caught 18 of 48 and flagged 3 of 48. The AUC was 0.881 on development and 0.862 on holdout. The 256 requests had 0 errors and 0 refusals, and used 213,942 input tokens (0.021 dollars).

At P < 0.05, OpenAI flagged 4 of 80 correct development claims, more than the Jev budget of 2. Thus the rule selected P < 0.02. At its threshold, Jev caught 48 of 80 on the same rows.

Earlier measurements of the flow question

These figures are earlier measurements. The current figures above replace them.

The recorded figures of the first flow question used an earlier question and an earlier model. That question caught 53 of 80 (66%) on development and flagged 2 of 80. On holdout, it caught 26 of 48 (54%) and flagged 2 of 48. The catch rate changed by more than 10 points. Thus the flow question became opt-in.

On 2026-10-13, four context selectors were measured with jev-1.13.0 on the same rows:

context threshold dev caught dev flagged holdout caught holdout flagged result
base (earlier) P < 0.15 39/80 (48.8%) 1/80 (1.2%) 19/48 (39.6%) 1/48 (2.1%) fail
around P < 0.15 34/80 (42.5%) 1/80 (1.2%) 14/48 (29.2%) 1/48 (2.1%) fail
calls P < 0.2 48/80 (60.0%) 2/80 (2.5%) 26/48 (54.2%) 0/48 (0.0%) pass
targets P < 0.2 47/80 (58.8%) 2/80 (2.5%) 28/48 (58.3%) 0/48 (0.0%) pass

calls and targets used text patterns for Python and TypeScript syntax in shared code. Thus they did not go into systemap. The call_sites fact gives the targets lines from each language adapter.

The first OpenAI measurement used the base context. It selected P < 0.05 for the flow question. At that threshold, OpenAI caught 37 of 80 (46.2%) on development and flagged 2 of 80 (2.5%). On holdout, it caught 27 of 48 (56.2%) and flagged 4 of 48 (8.3%). The second OpenAI measurement above replaces these figures.