mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #746] analyze-javascript-application: zero output for minutes then generic unreadable_output failure on a 24 MB Electron ASAR (Obsidian 1.12.7) #331
Closed
opened 2026-10-15 18:24:00 +00:00 by bsakaguchi
·
4 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#331
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 @raphaelraphbone-jpg on GitHub (Oct 6, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/746
Originally assigned to: @N0zoM1z0, @kaoru0822-kitauji on GitHub.
Summary
rea analyze-javascript-applicationon Obsidian's application archive (obsidian.asar, 24,060,763 bytes, Obsidian 1.12.7) is completely silent — zero bytes on stdout and stderr — for minutes, then (on the current release) terminates with a generic typed error that names no cause:The same command against the 74 KB Electron loader archive (
app.asar) of the same app reaches a precise typed verdict (an integrity mismatch with logical path and both sha256 hashes) in seconds. On the large archive: no progress output at any point, and a final error that makes the failure undiagnosable without runningrea doctorand rea's own debug tooling.Observation windows: on rea-agents 3.2.1 the silence was still unbroken at ≥15 min (run 1) and ≥3 min (run 2, killed by operator), i.e. no terminal state was reached within those windows; on rea-agents 4.0.1 (current, 2/2 runs) the same command fails with
unreadable_outputat ~4.5–5 min.Environment
rea --versionverified) — runs 3–4/Applications/Obsidian.app/Contents/Resources/obsidian.asar— Obsidian 1.12.7, 24,060,763 bytes (size re-verified unchanged on 2026-10-06 after run 1)Reproduction
unreadable_outputblock above. The captured process logs are empty from offset 0 until the error appears (rules out an interactive prompt or swallowed progress output).unreadable_output, exit 1 (emitted before the 300 s harness cap; confirmed genuine exit, see run 4)unreadable_output, exit 1, under a 900 s cap — genuine terminal state, 2/2 reproducibleRuns 3–4 used identical commands/binary/payload; both produced the same error. The 900 s cap on run 4 exists to distinguish a genuine exit from a timeout kill and was never reached.
Controls (same host, same day)
Everything else tried completes in seconds:
inspect-managed-artifact, members, compareinspect-macho,inspect-signature,inspect-plistapp.asarreaches a typed terminal state in seconds on both 3.2.1 and 4.0.1 — same CLI path, same provider boot, precise diagnosis (next section).Contrast: the small loader archive gets a precise typed verdict in seconds
On 4.0.1 (and identically on 3.2.1 re-run the same day), the identical command form against the 74 KB loader archive exits quickly with a typed integrity error (exit code 1):
The calculated hash was independently confirmed with
shasum -a 256— the on-disk file genuinely differs from the archive's declared hash (plausibly an updater/packaging artifact; no tampering claim intended). That fail-closed verdict is expected behavior per #112's design and is not the subject of this report. It is included only as contrast: the same binary, on the tiny archive, produces a precise typed error naming the entry and both hashes within seconds — while the 24 MB archive yields minutes of silence and a cause-freeunreadable_output.Related
analyze_javascript_applicationon large JS trees fails fast (~121 s on 2.91 MB of JS) withRangeError: Invalid string lengthmasked asreason:"io", and its "Related: CLI output path" section documents the full-result print path throwing inJSON.stringifyon oversized envelopes. Interpretation only, not verified here: a 24 MB ASAR produces a semantic graph an order of magnitude beyond those sizes, andunreadable_outputis consistent with the giant-envelope/materialization class that #623 analyzes — but this report's evidence covers only the observed behavior, not the root cause.Impact
unreadable_output) names no subsystem, no artifact, no cause — the only suggested remedy is a non-specific "retry once, runrea doctor".Suggested direction (non-prescriptive)
unreadable_outputcarry its underlying cause (or a structured details payload), mirroring the masking-diagnosis in #623 — e.g. whether the analysis graph or its output serialization failed.Happy to provide: full captured process logs (empty from offset 0 until the terminal error, all four runs), exact npm prefix paths, per-run timestamps and cap settings, and the
shasumreceipt forbtime.node.Single-observation caveats
@gustavczar commented on GitHub (Oct 7, 2026):
Root cause candidate plus a minimal repro. On 4.1.0,
unreadable_outputnow carries adetails.reason, and that reason points at empty string literals.Same failure on Windows, with the reason exposed
obsidian.asar(27,477,966 bytes,Obsidian.exe1.14.4), Windows 11 x64, Node 22.23.2:details.reasonrea-agents@4.1.0(npm)Result schema rejected 2 issues at /identity/key (too_small)50787b2fMinimal repro: one empty string literal fails the whole analysis in seconds
Each case is a directory with
package.json={ "name": "r", "version": "1.0.0", "main": "main.js" }and a one-linemain.js:main.jsdetails.reasonfetch("");2 issues at /identity/key (too_small)const { BrowserWindow } = require("electron"); new BrowserWindow().loadURL("");2 issues at /identity/key (too_small)localStorage.getItem(""); localStorage.setItem("", "v");2 issues at /identity/key (too_small)const { ipcMain } = require("electron"); ipcMain.handle("", async () => 1);1 issue at /observations/0/label (too_small)const { ipcRenderer } = require("electron"); ipcRenderer.send("");1 issue at /observations/0/label (too_small)const { BrowserWindow } = require("electron"); new BrowserWindow().loadFile("");1 issue at /observations/0/label (too_small)const { contextBridge } = require("electron"); contextBridge.exposeInMainWorld("", {});1 issue at /observations/0/label (too_small)const x = require("");1 issue at /observations/0/label (too_small)import("").then(() => 0);1 issue at /observations/0/label (too_small)All 9 results are identical on
rea-agents@4.1.0, onmainat472b72a5, and on PR #764 (pr-764head). As a control, a 5-file Electron app usingipcMain.handle,ipcRenderer.invoke,contextBridge.exposeInMainWorld,loadFileandrequirewith non-empty literals returns Evidence on all three builds.The Obsidian signature (
2 issues at /identity/key) matches thefetch/loadURL/localStoragecases exactly. I did not confirm which literal in the minified bundle triggers it. A 24-27 MB real-world bundle containing at least one""in one of these positions is very likely, which would also explain why the run gets all the way through the graph before failing.Where it seems to come from
artifactLocalIdentity(sha256, namespace, key)(src/application/JavaScriptArtifactGraphContext.ts) passes the literal straight through askey. The output schema (applicationNodeIdentitySchema, variantartifact-local-key, insrc/domain/javascriptApplicationEvidenceSchemas.ts) requires a non-emptykey, and node and observation labels are likewise required to be non-empty. So a legal empty literal produces a node that the result validator rejects, and the whole result is discarded asunreadable_output.PR #764 fixes the same class of bug for empty property keys in the semantic graph (
{'': 'HOME'}), but these producers (Electron boundary / findings / module relationships) are separate and still fail on that branch.Possible directions, in case they help:
"", the same way #764 displays the empty property slot; ordetailsso the failure points at the offending source.@raphaelraphbone-jpg commented on GitHub (Oct 7, 2026):
Confirming the analysis independently on macOS — and noting this class is now fixed and released.
Independent confirmation (macOS 15.7.7 arm64, Node v26.8.1,
rea-agents@4.1.0): all 9 minimal cases from the table reproduce with identicaldetails.reasonstrings — fetch/loadURL/localStorage →2 issues at /identity/key (too_small), the other six →1 issue at /observations/0/label (too_small)— each failing in seconds. Non-empty controls (fetch/localStorage/4-file Electron app) return Evidence. The original case in this issue is ours (obsidian.asar, 24,060,763 bytes, Obsidian 1.12.7): on 4.1.0 it now fails withResult schema rejected 2 issues at /identity/key (too_small)— the fetch/loadURL/localStorage class; on 4.0.1 the same input produced only the silent genericunreadable_output, so #749's diagnostics are what made this root-cause hunt possible.Fix status, verified from source and now in the 5.0.0 release: rebuilt from current main (
ef1a0cc6):fetch("")andipcMain.handle("")both return full Evidence with the exact empty value preserved (key: "", observation labelnull,""display in the semantic graph) — consistent with the #839 seam-normalization series and theJavaScriptApplicationEmptyLiteralstest suite covering all nine positions;fetch(""),ipcMain.handle(""), and the non-empty Electron controls also pass on the publishedrea-agents@5.0.0.As reinforcement of the "at minimum" ask above: a
details.reasonthat also names the offending node kind and module path would turn the next hunt like this into a five-minute one.Thanks @gustavczar — the minimal repro turned full verification into a ten-minute job.
@N0zoM1z0 commented on GitHub (Oct 8, 2026):
Merged in #1055 at
b9fb43883570bef7cb29fd16f27c25d5a7e5bb54after self-review and all 22 CI jobs passed, including Linux x64/arm64, macOS Intel/arm64 and Windows package lanes, plus the separate real JavaScript recovery check.The official Obsidian 1.12.7 ASAR (24,060,763 bytes, SHA-256
2b2483b2e1246772e0d25367ec055cbc5047ea2f0091b667c35656678f86d712) now completes through the full JSONL CLI path under a 1.5 GiB heap and two CPU affinity: 162.3 s on Linux and 185.9 s using the installed package on Windows. Peak analysis-process RSS was approximately 1.58 GiB and 1.39 GiB respectively. Complete output was independently streamed through a JSON parser; graph IDs and all counts match across those platforms. Full shipped Notion also passes. Existing semantic coverage remains partial under the existing node budget, and the target code is never executed.The change projects semantics file by file, indexes source-range relationships, avoids rejected-node and duplicate-payload allocations, and emits per-file progress with cancellation checks between files. Measurements, complete-result parity and the original macOS coverage limitation are recorded in #1055. This is a source-main fix; no new npm release was published by this work. The independent large MCP serialization failure remains tracked in #1053, with result-view work in #1050.
@raphaelraphbone-jpg commented on GitHub (Oct 8, 2026):
Closing the loop from our side: we re-ran the #746 input on the released npm build and can confirm the fix end to end.
Input identity: the ASAR on our host hashes to
2b2483b2e1246772e0d25367ec055cbc5047ea2f0091b667c35656678f86d712— matching the official-release digest recorded above, which also resolves the byte-identity caveat in the measurement notes: the #746 report came from this same official file.Result on macOS 15.7.7 arm64, Node v26.8.1,
rea-agents@6.0.0(npm), default old-space heap, no flags beyond--format jsonl:rea analyze-javascript-application obsidian.asar --format jsonl→ exit 0, complete single-record JSONL in 86 s wall, 429,165,788 bytes ≈ 409.2 MiB, consistent with your streamed-output size. Not 1:1 comparable to your two-CPU / below-normal-priority / 1.5 GiB-heap timings (stock all-core M-series, ~4.1 GB default heap, no overrides) — but the salient point is that it completes at default settings where pre-#1055 builds exceeded a ~4.13 GB default heap with no payload.jag_node_d0ce3cd4041ac78e7a978721b3bda854f8f6e7878b65f8b8cc46e25633d2aa41; semantic graphjsrg_5d00550732f58d166315a5192273f4b5c77915fa8fab2c32ca9e99c8cf05d3c4; inventory manifestagm_972efa6b98e133664d362a80346f2cd234dc9ef2f1ce69f5ebeca3383092b246; inventory graph sha256dea61728f592c171c228f694d644b73e0cac06453818044464529c427e455b17.36sources, sequences 1–44, terminal marker), and semantic coverage remains partial under the node budget exactly as documented.Thread history for completeness: this same input exited
unreadable_outputon 4.1.0 (empty-literal schema void — our earlier comment) and OOM'd past Node's ~4.13 GB default old-space heap on pre-#1055 main with no result payload. On 6.0.0 it completes on default heap out of the box.Thanks — verified as described on macOS arm64. Watching #1053 (large MCP serialization) and #1050 (result view).