Files
rea/experiments/analysis-efficiency/source-to-bundle.md
T
gensokyo-dev 0583fc69be perf(javascript): query selected source-to-bundle facts (#6128)
Select completed source-to-bundle mappings and candidates through the shared view owner, preserve reference-file provenance, and retain full Evidence. Reuse bounded JSON reading, heap admission, and cancellation before session writes.

Verified public Redux Toolkit source/map facts with an independent oracle, equivalent CLI/MCP workflows, focused negative controls, and complete CI/review. Historical paired SDK context estimates fall about 64%; timing/resource tradeoffs and final verification receipts are recorded without a general speedup or actual model-token claim.

Fixes #6112.
2026-10-21 18:45:50 +00:00

13 KiB
Raw Blame History

Selected source-to-bundle facts

Issue #6112. Baseline: main@aa51e4343963fdd0b97ec2ebdc3c41579fd9cb38. Measured implementation: the production-file SHA-256 manifest in source-to-bundle.json. These are working-tree measurements, not a claim that the baseline commit already contains the feature. The original cohort predates the CLI error-envelope and review guard fixes, pinned separately in the JSON. The CLI invalid-application output was restored exactly. Post-guard SDK tasks verified both output profiles before the later reference-file provenance fix. Final tasks preserve normalized comparison facts while full Evidence IDs now commit the selected file origin. Historical paired medians are not presented as new measurements of the later guard changes.

Analyst question and correctness

For src/createSlice.ts, src/createReducer.ts and src/query/core/buildThunks.ts, report source correspondence and candidate counts, then inspect the exact supporting candidate signals for the two split files. Keep the complete comparison available. This is static location correspondence; it does not establish behavioral equivalence or removal.

Public corpus: Redux Toolkit 2.2.7 npm tarball, 1,184,767 bytes; SHA-256 f2517c466b50424b661a27e48039f15db7783e5822f46b5c7d39f20104ac67a9. The published src/ and three root dist/ bundles/maps are copied byte-for-byte into separate roots, retaining the src/ and dist/ prefixes. No target code or package scripts execute. REA runs its own static analysis helpers.

An independent Python JSON/SHA-256/path oracle checks all 180 source-file hashes, 99 embedded source nodes and 210 candidate relations in every completed task. All 99 embedded source strings differ from the published source bytes; path correspondence must not become an exact-source or semantic-equivalence claim. The complete report has 33 split and 147 unknown rows. The selected files have 3, 3 and 0 candidates respectively. Selected mapping/candidate identities, original indices, signals, mapped flags and source coverage agree with the full retained comparison. Global classification runs before selection.

Completed-task costs

Linux, Node 24.18.0, one CPU, 4 GiB hard / 3 GiB early-stop process-family guard, 192-task ceiling and no swap. Six SDK tasks alternate complete/selected, selected/complete, complete/selected. Each starts a fresh server with an isolated HOME. OS page caches are warm/uncontrolled: these are process-cold observations, not OS-cold measurements. All six exit successfully, release their processes and record no OOM, resource stop or task-limit event.

Each task includes catalog discovery, application preparation, comparison and full Evidence export. Selected tasks additionally query candidate signals via inspect_analysis_view. Both cohorts use the existing explicit semantic-node cap of one because the question only needs source/map correspondence. This is not equivalent semantic-graph coverage; the omission metadata remains visible.

Whole task Existing full inline graph/report File graph + selected mappings/candidates
Input catalog, cl100k estimate 47,913 48,026
All call arguments, estimate 37,272 297
All MCP text replies, estimate 67,407 6,442
Total estimated context 152,592 54,765
Wall seconds, median 11.899 14.733
Process-family CPU seconds, median 11.551 14.377
Kernel process-family peak MiB, median 666.6 950.7
Comparison reply bytes, text + structured 427,799 13,199
Additional candidate reply bytes 0 19,393

Context estimates fall 64.1%, including the slightly larger catalog and extra call. Tokenizer: tiktoken==0.12.0, cl100k_base; one name/description/input-schema catalog plus every argument and MCP text reply. Output schemas, transport framing, model prompts/reasoning and actual billed usage are not included. There was no model invocation; these are not actual model token savings.

This workflow trades extra cold-client time/memory for substantially smaller context. Comparison itself takes approximately 206–216 ms before and 249–262 ms with file validation and selected delivery. The first candidate-view call takes 2.1–2.4 seconds. A separate calibration repeats the identical candidate query: 2,071 ms first, 72 ms second, with identical Evidence. This is consistent with one-time SDK validator work; it is not a general speedup or a server-only profile. No comparison cache was added: the measured matching computation is already small, and a file cache would need additional freshness/identity rules.

Reference import is a separate one-time public CLI step: 4.757 s wall, 4.603 s CPU, 365.6 MiB peak. Add that same preparation cost to either first task; download/extraction and compilation are excluded. An additional baseline with default semantic coverage retains 22,090 semantic nodes and exports 42,870,148 bytes; explicit cap one retains one and exports 2,896,937 bytes. All comparison facts agree after excluding expected Evidence lineage. Those single-run observations demonstrate question-specific existing task selection, not a new semantic-analysis optimization or equal-coverage performance claim.

Existing output-schema selection

A second six-task cohort explicitly selects the existing REA_MCP_OUTPUT_SCHEMA_PROFILE=off for both workflows, with baseline main@01788bac8. REA still validates successful results against the canonical contracts and returns complete structured content; clients do not receive output schemas to compile. This is an explicit caller configuration, not a new default. The independent oracle and selected/full fact checks pass in every run.

Whole task, output profile off Full graph/report Selected facts
Total estimated context 152,668 54,841
Wall seconds, median 11.597 10.890
Process-family CPU seconds, median 11.244 10.569
Kernel process-family peak MiB, median 628.7 626.0
Candidate query milliseconds not needed 18–21

The context reduction remains approximately 64%. Whole-task ranges overlap (complete 10.899–12.215 s; selected 10.802–11.196 s), so the apparent median improvement does not establish a stable speedup. Unlike the default full-output cohort, this configured workflow avoids the extra cold SDK validator cost and has similar task memory/time. Two initial pilot cases are excluded. All six observed runs, explicit configuration and implementation hashes are retained in source-to-bundle-output-off.json.

Existing CLI/code-composition control

The public CLI on the same saved application/reference produces complete Evidence identical to MCP (205,231 output bytes). The measured CLI comparison step is 2.842 s wall, 2.670 s CPU, 357.4 MiB process-family peak. A separate Python projection of the three rows already yields 22,108 bytes. A native agent can redirect full JSON to a file and select facts in code, so raw SDK savings do not establish savings over every native client. These byte sizes are not token counts; actual native-agent context and external projection CPU are unmeasured.

The new CLI reference-file form preserves the normalized facts and records its file origin. Its saved Evidence can be queried by inspect-analysis-view using the same source-to-bundle projector as MCP. The interface supplies reusable, authenticated facts and relationships instead of requiring each caller to maintain an ad-hoc projection.

Reproduce

Use pinned Node/npm, npm ci and npm run build:cached for baseline and feature worktrees. Install dependencies once per lockfile; do not run npm through a shared node_modules symlink. Run heavy steps serially with the checked-in resource guard. Set absolute paths for BASE_RUNTIME, FEATURE_RUNTIME and LAB.

curl -fL 'https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.7.tgz' -o /tmp/toolkit.tgz
python3 experiments/analysis-efficiency/source-to-bundle-prepare.py /tmp/toolkit.tgz "$LAB"
python3 experiments/analysis-efficiency/resource-run.py --observe-payload-exit -- \
  node "$BASE_RUNTIME/scripts/rea.mjs" import-reference-source "$LAB/reference" --json \
  > "$LAB/reference.json" 2> "$LAB/reference-import.log"

For each of the six ordered trials, use a new output directory; set RUNTIME to the baseline for MODE=complete, feature for MODE=selected. Capture both stdout and stderr in the adjacent .log so the resource receipt remains available.

python3 experiments/analysis-efficiency/resource-run.py --observe-payload-exit -- \
  node experiments/analysis-efficiency/source-to-bundle.mjs \
  --runtime "$RUNTIME" --corpus "$LAB" --reference "$LAB/reference.json" \
  --output "$LAB/paired-1-complete" --mode "$MODE" \
  > "$LAB/paired-1-complete.log" 2>&1
python3 experiments/analysis-efficiency/source-to-bundle-oracle.py \
  "$LAB/paired-1-complete" "$LAB/reference.json"
uv run --no-project --with tiktoken==0.12.0 python \
  experiments/analysis-efficiency/source-to-bundle-costs.py "$LAB"

Use a separate output name and --mode selected --warm-continuation for the validator calibration; exclude it from paired medians. For the configured cohort, add --output-profile off, use new off-paired-* directories and the 01788bac8 control, then run the cost reader with --pattern 'off-paired-*' --output "$LAB/costs-off.json". Retain the tarball, reference, transcripts, bundles, independent proofs and guard receipts locally. Never commit target binaries, dependency trees, credentials or generated builds.

Review guards and regression controls

The file reader admits JSON assembly; a shared application guard additionally reserves live heap headroom before schema validation clones data and computes the root commitment. Evidence-file and historical-graph readers use the same owner, with their original operation-specific diagnostics. Validation yields before checking a pending cancellation, including validation failures. MCP computes its selected view before yielding and committing any application source, comparison, residual unknown or view to the session.

Seven shared headroom/Evidence-reader tests pass. A separate 65-test focused run covers file cancellation, graph paths, actual SDK cancellation during validation and comparison, and cross-source pages with candidate counts 2/1/2. The latter checks original indices, totals and next offsets across boundaries and filters. All three new guard regressions fail in a negative control with those gates temporarily removed, then pass after restoration. Memory admission is an estimate; the reported hard process-family ceilings come from the experiment guard.

Post-guard public-package SDK tasks, before the later provenance fix, retained all 180 source-file / 99 embedded-node / 210 relation oracle checks and byte-identical complete comparison Evidence. Their receipts, source hashes and costs are under subsequent_review_guards in the main JSON; they are excluded from paired medians.

Reference-file provenance and cancellation attribution

The final file form records parameters.reference_source with kind: file, the exact caller requested_path and the reader's absolute selected path. The shared file owner supplies that path without a second interpretation; POSIX .. and symlink semantics remain intact. Identical graphs in different chosen files have the same normalized facts/mapping IDs and distinct Evidence IDs. Inline legacy Evidence remains identical. Actual public-package CLI file Evidence equals MCP file Evidence for the same origin; relative CLI paths also have maintained coverage.

Reader cancellation is reattributed to compare_source_to_bundle, preserving the original cause. Six MCP/profile/guard tests and 29 selected CLI/shared-JSON ownership tests pass. Removing provenance recording and cancellation attribution makes three tests fail as expected. Additional Evidence-reader/file cancellation checks pass. Final real-package tasks estimate 54,896 cl100k tokens in both output profiles, preserve all independent oracle facts, and retain the new provenance; these are additional verification runs, not new paired medians. The main JSON's subsequent_reference_provenance records final source hashes and receipts.