rea/scripts/lib
xeropresence 66c21572de
fix(bun): report the real runtime and enforce worker memory budgets on Windows (#1730)
* fix(bun): report the real runtime and enforce worker memory budgets on Windows

Under Bun, REA recorded Node/V8 identity it did not observe and its JavaScript helper processes ran without a memory bound, because Bun ignores the V8 heap flags REA passes. Source-map trace Evidence claimed runtime node-v8 with Bun's synthetic V8 heap limit (the decoder then rejected that limit, so trace_web_source_location always failed), analysis resource failures reported heap limits Bun does not enforce, the HAR decoder claimed a fixed 192 MiB heap, and doctor reported Bun's Node.js compatibility version as the Node version.

Identify the runtime once from process.versions. Source-map reports record id bun with the Bun and Node.js compatibility versions and a null v8_heap_limit_bytes; the decoder checks the heap budget only for V8 reports and rejects a report from a runtime other than the launching one. The analysis worker reports a null heap limit under Bun, HAR limitations and failures omit heap sizes under Bun, and the doctor node check reports Bun and passes when its Node.js compatibility version is supported.

On Windows under Bun, each helper's owned Job Object now carries a commit limit of its heap budget plus a measured 512 MiB Bun runtime reserve (704 MiB for the codec and HAR decoder, 1536 MiB for the default analyzer). The native addon accepts an optional page-aligned job memory limit on process_spawn, verifies it by readback, associates a private completion port before the child is created, and reports a sticky memoryLimitReached and peak job commit on each poll; inspect reports jobMemoryLimit. A requested limit with an artifact lacking the control refuses the launch, and non-Windows launchers refuse a limit.

Reaching the limit is classified by the job notification rather than Bun's exit status: the analyzer fails the current source with a memory resource failure reporting worker_process_memory_limit_bytes, the codec returns a memory resource failure, and the HAR decoder returns its memory failure with process_memory_limit_bytes. Bun source-map Evidence records process_memory_limit_bytes, verified against the launcher. Node.js launches and outputs are unchanged.

* fix(windows): drain memory notifications after observing exit

---------

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
2026-10-11 19:20:00 +08:00
..
artifact-e2e.mjs perf(ci): share bytecode across fresh Apple artifact subprocesses 2026-10-11 19:11:16 +08:00
browser-capture-metadata-budget-e2e.mjs fix(browser): bound script metadata and preserve omissions 2026-10-09 06:32:10 +08:00
browser-dom-destinations-e2e.mjs refactor!: enforce canonical evidence and provider boundaries 2026-10-09 20:18:52 +08:00
browser-module-e2e.mjs refactor!: enforce canonical evidence and provider boundaries 2026-10-09 20:18:52 +08:00
browser-nested-source-map-e2e.mjs fix(browser): compose nested source-map column offsets (#1109) 2026-10-09 02:01:29 +08:00
browser-network-assertions.mjs feat(browser): capture correlated network content and lifecycle evidence (#797) 2026-10-07 04:35:49 +08:00
browser-network-e2e.mjs refactor!: enforce canonical evidence and provider boundaries 2026-10-09 20:18:52 +08:00
browser-popup-e2e.mjs refactor!: enforce canonical evidence and provider boundaries 2026-10-09 20:18:52 +08:00
browser-runtime-e2e.mjs fix(ci): allow browser runtime action transport latency 2026-10-11 11:45:46 +08:00
browser-runtime-fixture-lifecycle.mjs fix(browser): bypass desktop keyrings in verification fixtures 2026-10-11 07:30:25 +08:00
browser-runtime-selector-e2e.mjs feat(browser): attribute native execution and listener sources (#917) 2026-10-07 21:45:07 +08:00
browser-runtime-termination-e2e.mjs feat(browser): attribute native execution and listener sources (#917) 2026-10-07 21:45:07 +08:00
browser-runtime-world-e2e.mjs feat(browser): attribute native execution and listener sources (#917) 2026-10-07 21:45:07 +08:00
browser-scenario-environment-e2e.mjs fix(browser): release attached viewport overrides without resizing the external page 2026-10-10 02:33:56 +08:00
browser-scenario-storage-e2e.mjs fix(ci): close speculative browser fixture connections 2026-10-11 11:05:08 +08:00
browser-scenario-verifier.mjs fix(browser): retain scenario observations across failures 2026-10-09 22:46:08 +08:00
browser-screenshot-e2e.mjs fix(mcp): deliver typed errors without invalid structured output (#1277) 2026-10-09 13:54:32 +00:00
browser-script-export-assertions.mjs refactor(javascript): group domain semantics and contracts (#907) 2026-10-07 17:16:58 +08:00
browser-script-export-e2e.mjs refactor!: enforce canonical evidence and provider boundaries 2026-10-09 20:18:52 +08:00
browser-source-map-e2e.mjs refactor!: enforce canonical evidence and provider boundaries 2026-10-09 20:18:52 +08:00
browser-verifier-assertions.mjs fix(browser)!: preserve WebSocket connections and comparable payload coverage 2026-10-11 09:43:25 +08:00
catalog-builders.mjs feat(apktool): decode Android resource tables through a caller-supplied launcher (#1556) 2026-10-10 23:04:12 +08:00
catalog-cli.d.mts refactor(catalog): import CLI metadata from its owner 2026-10-10 00:49:14 +08:00
catalog-cli.mjs refactor(adapters): split oversized provider workflows 2026-07-18 05:49:14 +00:00
catalog-core.mjs feat(apktool): decode Android resource tables through a caller-supplied launcher (#1556) 2026-10-10 23:04:12 +08:00
conformance-fixtures.d.mts test(conformance): remove fixture generator test option 2026-09-29 18:00:47 +08:00
conformance-fixtures.mjs test(conformance): remove fixture generator test option 2026-09-29 18:00:47 +08:00
development-tests.d.mts build: separate runtime artifacts and supervise command ownership 2026-10-09 20:11:17 +08:00
development-tests.mjs build: separate runtime artifacts and supervise command ownership 2026-10-09 20:11:17 +08:00
docs-facts.d.mts docs: clarify onboarding and align provider guidance (#745) 2026-10-06 22:57:36 +08:00
docs-facts.mjs fix(docs): validate translated README website destinations 2026-10-11 17:24:46 +08:00
elf-section-name-fixtures.mjs feat(native): inspect offline ELF layout through pwntools (#1037) 2026-10-08 14:22:08 +08:00
format-generated-file.mjs chore: migrate formatting to Oxfmt (#615) 2026-10-06 01:59:19 +08:00
generated-file.d.mts build: add canonical product catalog and docs drift checks 2026-07-15 17:43:52 +08:00
generated-file.mjs fix(build): clarify generated-file check hint and drop redundant catalog step (#998) 2026-10-08 00:21:39 +08:00
ghidra-reference-snapshot-e2e.mjs fix(targets): cancel resolution before provider admission 2026-10-10 00:35:17 +08:00
javascript-application-analysis.mjs fix(artifacts)!: retain cleanup owners through client shutdown 2026-10-11 04:43:02 +08:00
large-result-mcp.mjs fix(mcp): retain complete application results across response limits 2026-10-08 23:46:02 +08:00
mcp-startup-probe.d.mts perf(mcp): reduce cold-start work 2026-07-26 15:02:58 +00:00
mcp-startup-probe.mjs perf(mcp): reduce cold-start work 2026-07-26 15:02:58 +00:00
mcp-verifier-results.mjs fix(mcp): deliver typed errors without invalid structured output (#1277) 2026-10-09 13:54:32 +00:00
module-boundaries.d.mts refactor(process): separate capture implementation from analyst workflows (#988) 2026-10-08 00:46:21 +08:00
module-boundaries.mjs build: separate runtime artifacts and supervise command ownership 2026-10-09 20:11:17 +08:00
native-value-e2e.mjs test(ghidra): preserve Node heap options in adapter verification (#1550) 2026-10-10 20:27:45 +08:00
product-catalog.d.mts refactor(catalog): import CLI metadata from its owner 2026-10-10 00:49:14 +08:00
product-catalog.mjs refactor(catalog): import CLI metadata from its owner 2026-10-10 00:49:14 +08:00
real-ghidra-address-boundaries.mjs fix(ghidra): reject conflicting address aliases in batches 2026-10-11 09:35:22 +08:00
real-ghidra-batch-identity.mjs fix(native): distinguish batch selectors from resolved entries 2026-10-09 19:09:30 +08:00
real-ghidra-boundaries.mjs fix(ghidra): qualify defined-string search coverage 2026-10-11 08:51:02 +08:00
real-ghidra-compact-references.mjs fix(native): preserve compact reference provenance (#1438) 2026-10-10 21:39:28 +08:00
real-ghidra-entry-aliases.mjs test(ghidra): preserve metadata in interior-label fixture 2026-10-11 06:10:10 +08:00
real-ghidra-instruction-flow.mjs fix(ghidra): preserve decoded return flow evidence 2026-10-09 18:53:28 +08:00
real-ghidra-large-results.mjs fix(ghidra): expose terminal-call boundary assumptions 2026-10-11 09:08:01 +08:00
real-ghidra-namespace-annotations.mjs fix(ghidra): reject address names owned by another symbol 2026-10-11 07:35:48 +08:00
real-ghidra-snapshot-lifecycle.mjs fix(mcp): deliver typed errors without invalid structured output (#1277) 2026-10-09 13:54:32 +00:00
real-ghidra-target-admission.mjs fix(ghidra): preserve source failures and snapshot ownership 2026-10-09 05:10:36 +08:00
real-hopper-boundaries.mjs fix: reuse validators for identical output schemas 2026-10-10 19:29:16 +08:00
real-hopper-cleanup.d.mts fix(hopper): verify lease cleanup and repair the macOS test lane (#1111) 2026-10-09 02:41:34 +08:00
real-hopper-cleanup.mjs fix(hopper): verify lease cleanup and repair the macOS test lane (#1111) 2026-10-09 02:41:34 +08:00
real-hopper-cli-selectors.mjs fix(cli): accept exact native names through explicit selectors 2026-10-09 05:46:16 +08:00
real-hopper-exhaustive-search.d.mts refactor: return complete tool results inline 2026-09-29 07:08:46 +08:00
real-hopper-exhaustive-search.mjs refactor: return complete tool results inline 2026-09-29 07:08:46 +08:00
real-hopper-fixture.d.mts test(hopper): add semantic runtime conformance 2026-07-18 04:50:23 +00:00
real-hopper-fixture.mjs fix(hopper): preserve typed string values and verify real searches 2026-10-09 05:12:36 +08:00
real-hopper-function-basics.mjs refactor!: enforce canonical evidence and provider boundaries 2026-10-09 20:18:52 +08:00
real-hopper-inventory.mjs refactor: remove forwarding exports and redundant aliases 2026-10-09 22:46:09 +08:00
real-hopper-navigation.mjs fix(hopper): probe interior navigation from multi-byte instructions (#1285) 2026-10-10 06:07:01 +08:00
real-hopper-search.mjs fix(hopper)!: isolate regex matching from the native API thread 2026-10-09 05:12:36 +08:00
real-hopper-selection.mjs refactor: remove forwarding exports and redundant aliases 2026-10-09 22:46:09 +08:00
real-hopper-semantic.d.mts test(hopper): add semantic runtime conformance 2026-07-18 04:50:23 +00:00
real-hopper-semantic.mjs fix(contracts)!: require observed provider output metadata 2026-10-10 03:52:13 +08:00
real-hopper-session-isolation.mjs fix(hopper): reserve Linux demo application before launch (#1158) 2026-10-09 10:14:25 +08:00
real-hopper-source-binding.mjs fix(hopper): bind file mappings to verified source bytes 2026-10-09 06:13:41 +08:00
real-hopper-workflows.mjs test(hopper): cover real boundary failures and CLI parity 2026-10-09 02:44:28 +08:00
recorded-core-fixtures.py feat(native): inspect recorded crashes through pwntools and pwndbg (#1054) 2026-10-08 16:50:31 +08:00
release-checkpoint.mjs fix(release): publish reviewed release PR merges 2026-10-09 08:44:47 +08:00
release-notes-github.mjs feat(release): add contributor-aware release notes workflow 2026-10-11 10:19:16 +08:00
release-notes-publication.mjs feat(release): add contributor-aware release notes workflow 2026-10-11 10:19:16 +08:00
release-notes.mjs fix(release): avoid duplicated contributor thanks 2026-10-11 11:49:49 +08:00
test-discovery.d.mts refactor: add incremental capability migration safeguards (#819) 2026-10-07 10:56:06 +08:00
test-discovery.mjs refactor: add incremental capability migration safeguards (#819) 2026-10-07 10:56:06 +08:00
unrelated-hopper-sentinel.mjs fix(process): protect unrelated Hopper during cleanup 2026-07-22 14:04:00 +00:00
verifier-run.d.mts refactor: return complete analysis results inline 2026-09-29 08:07:24 +08:00
verifier-run.mjs feat(ghidra): enable Windows x64 read-only analysis (#699) 2026-10-06 16:53:33 +08:00
verify-package-core.mjs test(package): share validated native dossier fixtures 2026-10-10 04:02:40 +08:00
windows-job-memory-limit.mjs fix(bun): report the real runtime and enforce worker memory budgets on Windows (#1730) 2026-10-11 19:20:00 +08:00
windows-protocol-input.mjs fix(bun): report the real runtime and enforce worker memory budgets on Windows (#1730) 2026-10-11 19:20:00 +08:00