mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #1462] [Bug] JavaScript analysis blocks MCP ping and cancellation during synchronous computation #497
Closed
opened 2026-10-15 18:25:35 +00:00 by bsakaguchi
·
10 comments
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
morluto/rea#497
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @N0zoM1z0 on GitHub (Oct 10, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/1462
Observed on current main
Main
c89c8f53187aac02e87f0ca11e3dd120b8c7efef, including merged #1390, #1433, #1437, #1445 and #1444, independently built with Node 24.18.0 and the pinned MCP SDK 2.3.1. Two CPUs, reduced priority, one heavy lane, guarded family memory. No native provider is required.A source-owned 67,469-byte application containing 1,200 ordinary exported functions still blocks the MCP control path during analysis. After warming discovery/output validators, aborting the ordinary call at 200 ms ends the client wait at 201.5 ms, but a ping sent immediately after abort waits a further 786.3 ms. Earlier frozen main
e09cfe9bmeasured 929.8 ms; the reviewed #1444 head measured 800.0 ms. These are individual observations, not percentile guarantees.Cancellation eventually takes effect correctly in these runs:
get_evidence_bundlecontains zero records, a subsequent small application analysis succeeds on the same connection, close succeeds, and target bytes are unchanged. Thus this issue concerns responsiveness while computation is running; these observations do not establish a late retained-Evidence or cleanup leak. The SDK labels explicit signal abortsREQUEST_TIMEOUTwith messageAbortError: This operation was aborted; the probe records the actual abort signal instead of interpreting that code as a provider deadline.The same final #1444 runtime on a real Notion ASAR produced a 17,742-ms maximum ping wait during a successful 87,763-ms analysis. Frozen latest main
e09cfe9bmeasured 18,172 ms/95,577 ms, with exact same Evidence and input SHA-256. That workflow uses an explicit 210-second request deadline and preserves complete retained Evidence when the ordinary full response exceeds the SDK receive budget. Completion and typed response-budget recovery do not satisfy the responsiveness part of #1065.Minimal public MCP reproduction
Run from a built repository with the pinned Node/dependencies. Create a temporary application and warm the ordinary SDK client before timing the analysis:
The owned latest-main fixture source SHA-256 is
1c6cafcaa7221e56ae3c61c90129192ff4be4baebe34e310b57e9d7283ad7711. Keep client/server timers separate; progress notifications are coalesced, so an individual first-file notification is not guaranteed.Owning regions and expected outcome
Source inspection identifies synchronous per-file work in
JavaScriptArtifactAnalysis.analyzeArtifactFile,JavaScriptSemanticGraphBuilder.projectFile, and the initial capture/normalization performed before cooperative graph-sealing steps. The real ASAR also pauses during semantic graph capture. Attribution of every pause is a follow-up; this issue does not assume one parser is the whole cause.Establish usable cancellation/control-path checkpoints or an owned execution boundary around those regions. Preserve source evidence, graph validation/ownership, deterministic identities, existing coverage/limits and cleanup guarantees. Validate busy-file cancellation and ping through the real CLI/stdio MCP flows, then rerun a real ASAR under the same CPU/memory constraints. Avoid addressing the delay with additional arbitrary traversal caps or discarded observations.
Refs #1065 (T2 responsiveness). #1401 is closed by #1390, and #1444 fixes a distinct repeated-write complexity problem; this residual survives both.
@CassieFox23 commented on GitHub (Oct 10, 2026):
TL;DR: I see the same thing on Linux. The abort ends the client wait at once. A ping sent then still waits for the block to end. At 1,200 functions that is about half a second here. It grows with the function count. Two open-source apps show pings stuck for 5 to 6 s.
I ran your repro shape on main
c89c8f53(your 1,200-function file, same SHA). The client aborts at 200 ms and sends one ping right away. Each cell is the median of 3 runs (6 for 1,200 on Node 24).Ping wait after the abort, ms:
Before and after #1444 (1,200 functions, Node 24, 3 interleaved runs each):
66863b60, just before #1444c89c8f53, mainSo #1444 does not change this case here.
Real apps, one full analysis with a ping every 250 ms (Node 24, 2 runs each):
My earlier T2 fixture now stops at 2,096 ms, down from 2,842 ms on
8550913c. Load, heap and priority differ, so I can't credit a code change. At 1,200 functions it blocks about 3.7 times longer than yours.Not run
Edit: results are in the follow-up, on a less busy machine. The real-app waits here ran high because the machine was busy. Still not run: the closed-source app, the #1444 head commit, Windows and macOS.
and the #1444 head commit.e09cfe9be09cfe9bran; the head commit did not.Before and after #1444 at other sizes, or on the real apps.The real apps on Node 22 and 26.A CPU profile of where the block sits.Thanks, N0zoM1z0, for the clear repro and the fixture SHA. It made the match easy to check.
Full abort table (median [min–max] of 3 runs, ms)
Times count from the tool call. "Server stop" is REA's own tool-done log line.
66863b60, Node 24REQUEST_TIMEOUTabort error, as you saw.status: errorfor every cancelled call.Real-app details
Launcher:
app.asar, 26,870,695 bytes, sha256595810df…5d83ad6f03, formatasar.Hermes Desktop:
vendor-react-C4pS_tun.jsfrom a v0.21.6 build, 258,268 bytes, sha2568e7a4c3b…0b7f93. It sits alone in a folder, formatdirectory. The tool rejects a bare.jspath.Evidence went out through
export_evidence_bundle. Launcher: 245,794,850 bytes,32d33aa4…both runs. Hermes: 44,944,475 bytes,d71721d3…both runs.Launcher stage starts, run 1, in ms:
The max ping went out at 27,801 ms and came back at the seal step.
Pings sent during semantic sealing came back in 81 ms at most.
Over 1 s: 31 and 37 of about 200 launcher pings. For Hermes: 19 and 18 of 36.
The server logged
okfor every app call. The reply was the typedresource_constraintnotice.The semantic seal stage is the longest gap, but pings stay fast there.
Peak memory for client and server together: about 2,340 MiB launcher, about 990 MiB Hermes.
How I measured
node --max-old-space-size=3072 scripts/rea.mjs mcp(4,096 for the real apps).binary_sessioncall, three pings.abort()with no reason at 200 ms, then one ping at once. Format left at the default, as in your repro.get_evidence_bundle, then a 3-function app analysis, then a ping and close.env -i, its own HOME and short TMPDIR,taskset -c 2,3,nice -n 10.Commands
Test setup
c89c8f53/66863b60, plus the 6.3.0 release🤖 Generated with Claude Code (Opus 5.5) 🦊
@N0zoM1z0 commented on GitHub (Oct 10, 2026):
Follow-up after merged #1457/#1460 on
b118f044(the probe build includes only documentation/comment changes from #1466): same 67,469-byte/1,200-function fixture and actual warmed SDK stdio flow still reproduce the control-path delay. Explicit abort at 203.8 ms ends the client wait at 205.2 ms; the subsequent ping waits 572.7 ms. Zero cancelled analysis records are retained; the same follow-up Evidence identity, successful close and unchanged source bytes are preserved. Guard exit 0, 811,786,240-byte peak sampled family RSS.This is a single narrow observation. The context-hash optimization can reduce computation, but the synchronous computation/capture path and this residual remain. No claim that the full ASAR or a response percentile is now fixed.
@N0zoM1z0 commented on GitHub (Oct 10, 2026):
Real full-ASAR follow-up through the rebuilt local integration
214ebf33: production sources/scripts/package are identical to main934ffd28after #1457/#1458 (the intervening #1469 is website-only). The actual pinned SDK stdio workflow still observes a 13,078 ms maximum ping wait. The supplied operation progress token, longer explicit client deadline and the successful complete analysis do not remove that control-path pause.Notion ASAR SHA-256 remains
97c41bc14fc0ea8c91cd34f502660963dfdf294d5eb35165ccac9d30963069d4; complete retained Evidence remains exactlyev_8b49aebfa361929c6c2b206271260bf2851a55e729884215b8f87fbb4ad8b490. The typed 10 MiB framing constraint returns that reference; real summary/module paging, feature trace, distinct-input validation, ping, close and expired-reference checks pass. Default discovery remains all 139 tools. Guard exit 0, 171.62-second whole harness, 1,897,279,488-byte peak sampled family RSS, input unchanged.Analysis measured 163.45 s in this observation. A frozen earlier-build control is being checked in the same current environment because wall-time variance is substantial; this value is not assigned causally to any one merge or presented as a throughput regression. The longest observed pause starts during per-file analysis/projection; later graph construction/capture/verification still has multi-second control waits. The residual requires actual usable scheduling/cancellation at those owning boundaries, preserving full validation, Evidence and lifecycle guarantees.
@N0zoM1z0 commented on GitHub (Oct 10, 2026):
Latest rebuilt main
7296f2b5(including #1474's explicit semantic representation change) still reproduces the small-source control delay with the unchanged 67,469-byte / 1,200-function fixture. Actual warmed default-SDK stdio: explicit abort at 203.86 ms ends the client wait at 204.91 ms; ping then waits 595.53 ms. Zero cancelled records are retained, the follow-up analysis/ping/close works, and source SHA-256 remains1c6cafcaa7221e56ae3c61c90129192ff4be4baebe34e310b57e9d7283ad7711. Guard exit 0, 7.23 s, 805,130,240-byte sampled peak family RSS.The follow-up Evidence ID changes with the documented #1474 relation/strict-schema change; the earlier exact-ID ASAR pair is explicitly frozen before that merge. This latest check proves the residual after payload cleanup without claiming that the full ASAR has been remeasured at
7296f2b5, or conflating immediate client abort with immediate server cancellation handling.@CassieFox23 commented on GitHub (Oct 10, 2026):
TL;DR: A CPU profile shows where the long app pause sits. On the launcher, the worst block (4.4 to 4.5 s) builds the whole app graph in one go, just after the last file. Main cuts the 1,200-function wait from 507 ms to 427 ms here, and #1444 changes nothing.
I tested main
cbcba290today. Its JavaScript code is the same as in your7296f2b5. The asar reader differs, from #1480. The two open-source apps are the Beyond All Reason launcher (MIT) and Hermes Desktop (MIT). The launcher's Flathub build is out under GPL-2.0-or-later, as its own metadata file says.Ping wait after the abort at 200 ms, in ms. Each cell is the median of 3 runs on main.
* At 300 the runs split in two: 13, 156 and 159 ms on Node 24, then 14, 16 and 160 ms on Node 26. The file block ends close to 200 ms, and a second block of about 170 ms follows. So the wait hangs on which side of that gap the abort lands.
1ec490f3has the same code asc89c8f53from my last post. It gives 507 ms now, and 517 ms then. So the drop to 427 ms on main comes from new code, not from the box. I did not bisect #1457, #1458 and #1474.7296f2b5. Here main gives 427 ms on Node 24. Last time it was 786 vs 517, so our boxes keep about the same ratio.Longest ping wait in one full app run, in seconds. Each cell shows two runs, with a ping every 250 ms.
1ec490f3runs that same code. Today it gives 5.2 / 4.8 and 4.2 / 4.2 s, and the launcher Evidence bytes match. So the gap comes from the busier box back then.Where the event loop stops, on main with Node 24. A timer in the server logs each gap. The CPU profile shows what runs in it. Times are in seconds, with two launcher runs.
Still not run
439bc1a5.Thanks, N0zoM1z0, for the full-app numbers. They showed me where to point the profiler.
By commit, Node 24
Ping wait after the abort, ms, median of 3:
e09cfe9b66863b60, before #14441ec490f3, #1444cbcba290, mainLongest ping wait in a full app run, s, two runs:
e09cfe9b66863b601ec490f3cbcba290Profile detail
How I measured:
--cpu-prof, sampling every 1 ms.Measured: gap start and end, ping times, samples per function, and when each progress note came in. Inferred: which REA step a function belongs to, and the file name below.
Launcher run 1, gaps over 600 ms, in ms from the call:
jimp/browser/lib/jimp.js(588,235 bytes) at that spot, so I think that is the file. REA did not name it.Self time in the 4.45 s app graph gap:
dist/domain/canonicalDigest.jszod/v4/core/schemas.jshash@babel/parserbuildJavaScriptArtifactGraphInput2,576 ms. Under it,addJavaScriptModuleRelationshipstakes 1,546 ms, mostlyaddExportRelationship.createJavaScriptApplicationGraphtakes 1,613 ms. Its own doc comment says it clones and checks in one go.digestCanonicalValuesits under both, for 1,691 ms.Self time in the 2.6 s file gap:
javascriptSemanticTraversal.jsjavascriptSemanticAnalysis.jsjavascriptSemanticProjection.js@babel/parserYour 1,200 file, abort at 200 ms, three runs with the profiler on:
index.js.canonicalizetakes 16%.canonicalDigest.jstakes 11%.Hermes chunk: one gap of 3,887 ms for its one file. In that gap, zod takes 12% and
canonicalDigest.js11%. Thencanonicalizetakes 10%, and the Babel parser 3%.At 300 functions, main's file gap ran from 13 to 206 ms. The app graph gap ran from 206 to 378 ms. On
66863b60the file gap ran to 233 ms, so a 200 ms abort always landed inside it.The profiler cost little here. With it, the launcher's longest ping was 4.37 / 4.32 s. Without it, the same was 4.46 / 4.14 s.
Full abort table (median [min–max] of 3 runs, ms)
Times count from the tool call. "Server stop" is REA's own tool-done log line.
e09cfe9b, 300e09cfe9b, 1,200e09cfe9b, 2,40066863b60, 30066863b60, 1,20066863b60, 2,4001ec490f3, 3001ec490f3, 1,2001ec490f3, 2,400Real-app details
app.asar, 26,870,695 bytes, sha256595810df…5d83ad6f03, formatasar.vendor-react-C4pS_tun.js, 258,268 bytes, sha2568e7a4c3b…0b7f93. It sits alone in a folder, formatdirectory.okfor every app call. The reply was the typedresource_constraintnotice.ce9edf38…, the same in all 6 runs. On the three older trees it is 245,794,850 bytes,32d33aa4…, as in my last post.How I measured
node --max-old-space-size=3072 scripts/rea.mjs mcp, or 4,096 for the apps.abort(), as in your repro, and no other pings.env -i, its own HOME and temp folder,taskset -c 2,3andnice -n 10.Commands
Test setup
cbcba290, pluse09cfe9b,66863b60and1ec490f3🤖 Generated with Claude Code (Opus 5.5) 🦊
@N0zoM1z0 commented on GitHub (Oct 10, 2026):
#1525 is now merged as
5fdb0636b4734cabfa3147e8fcc94976c3bd8aa4; this is a measured partial improvement, and #1462 remains open.Independent paired default-SDK stdio MCP runs on the same full ASAR (SHA-256
97c41bc14fc0ea8c91cd34f502660963dfdf294d5eb35165ccac9d30963069d4) preserved the complete Evidence IDev_fbe07b5de34746c9191fadb98a2bf6a33d00c9073baa690c75db5c4df3618d98and passed retained summary/module page/trace, close/expiry, ping and input-identity checks.46c9cba0Separately, after warming SDK schema preparation and aborting a 1,200-function analysis at 200 ms, the first subsequent ping waited 1,175.40 ms on the control and 131.40 ms on the candidate. Both runs retained no cancelled-analysis Evidence, accepted a later small analysis and closed cleanly.
These are single paired observations, not throughput or percentile claims. Single analyzer stages still run synchronously; the remaining 9.7-second wait rules out calling this a full responsiveness/cancellation fix. A roughly 1.43-second wait also occurred after the last semantic-sealing progress notification; that notification establishes an observed phase marker, not a CPU-stack attribution. Next work must address the remaining blocking stages and validation/normalization, while preserving exact evidence and lifecycle behavior.
An additional bounded-input receiver-expansion failure is tracked separately in #1538, with public CLI/stdio MCP reproduction and a focused fix under verification. It is not the private exit-134 failure in #1387.
@kaoru0822-kitauji commented on GitHub (Oct 10, 2026):
Status update from the REA side, on an M-series Mac with Node 26, measured in-process with a 1 ms event-loop gap monitor around
reconstructJavaScriptArtifact. Absolute times will differ on your constrained Linux setup; the ratios should carry over.Merged: #1525.
1c6cafca…7711), the worst ping after abort fell from 286 ms to 56 ms here. N0zoM1z0 independently measured 1,175 ms to 131 ms on the Linux setup.In review: #1542, for the remaining single-stage blocks on very large files.
analyzeParsedJavaScriptSemanticsnow yields between its phases and its eight derived collectors. On Obsidian's 3.7 MBapp.jsthat stage was one 5.8 s step.app.js.obsidian.asar(23 MB): the longest block falls from 5,355 ms to 907 ms, and total time goes from 40.6 s to 39.5 s.mainon five inputs, including that ASAR.What remains after #1542: blocks of up to about 0.9 s here. Each is a single AST traversal inside one analyzer: member mutations ~1.0 s, fingerprints ~1.0 s, static analysis ~1.0 s and open-receiver classification ~0.6 s on
app.js. Splitting those needs a stepwisetraverseJavaScriptAstthreaded through those collectors, which I'm looking at next.If you can rerun the Notion ASAR and the Beyond All Reason launcher and Hermes cases on #1542's head, the before/after ping-wait profile would be the most useful confirmation.
@kaoru0822-kitauji commented on GitHub (Oct 10, 2026):
#1542 is merged. The next step, #1545, splits the largest remaining single AST traversals (member mutations with their fixpoint, static source analysis, function fingerprints) using a stepwise
traverseJavaScriptAst. Results are unchanged: graph IDs and complete result digests matchmain.On Obsidian
obsidian.asaragainst currentmain(two runs each, M-series Mac):Remaining blocks after that are about 0.5–0.75 s: smaller synchronous traversals (definitions, open receivers, references, data-effect helpers), Babel's unsplittable parse, and what look like GC pauses on a heap of about 1.6 GB. Rerunning your constrained Linux probes on #1545's head would show whether those residuals matter on slower hosts.
@N0zoM1z0 commented on GitHub (Oct 10, 2026):
Independent constrained Linux x64 review of final author head
fe5650bd57ccbaf75f8311047e811207695ead42, integrated with main539a0f95as4e507f29:npm run check:fastpassed.ev_fbe07b5de34746c9191fadb98a2bf6a33d00c9073baa690c75db5c4df3618d98on unchanged input SHA-25697c41bc14fc0ea8c91cd34f502660963dfdf294d5eb35165ccac9d30963069d4. Each passed retained summary/module-page/feature trace, identity rejection, ping, close and expired-reference checks.Node 24.18.0; CPU affinity 13/15 verified on actual child processes; one heavy lane at a time; each process family remained below the unchanged 2304 MiB budget (peaks 1,829,740,544–1,881,440,256 bytes). These are two observations per revision, not a latency percentile or general throughput claim. The initially apparent 20% slowdown was not stable: the repeated main control was slower than both candidate runs. Candidate control waits stayed under a second in these two runs, while main's observed maximum varied considerably.
Warmed-SDK 1,200-function cancellation at about 200 ms also passed on both revisions: the following ping waited 17.96 ms on main and 36.11 ms on the candidate, cancelled analyses retained zero Evidence, subsequent small analysis and cleanup succeeded. This is correctness/recovery evidence, not an improvement claim for that small cancellation fixture.
This is a useful partial #1462 improvement. Remaining synchronous passes/parsing and unsampled stalls are not ruled out; #1462 should stay open. No real Hopper/Ghidra verification was performed for this JavaScript-only change.
@N0zoM1z0 commented on GitHub (Oct 10, 2026):
#1557 merged as
8c47a9ce, final heada310f190, all20 checks passed. Definition gathering, open/Electron receiver classification and lexical-reference traversal now yield through the shared analysis checkpoints. Post-current-main integration:162 tests and30 complete-IR digest comparisons passed; real121-file ASAR retains the exact original complete Evidence ID, including typed oversized-response recovery and lifecycle checks. Real warmed SDK cancellation produces zero partial Evidence and allows subsequent analysis/ping/cleanup.This does not close #1462: parsing and other semantic collectors still have long steps. The separate large public Bun module memory failure has been reproduced on exact merged main and tracked in #1563; adding yield points alone does not provide bounded allocation or containment of a V8 fatal OOM.