mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #4893] 6.5.0: analyze-javascript-application reports application coverage "partial" (no limits) for any ordinary minified bundle; 6.1.0 reported "complete" for the same input #3037
Open
opened 2026-10-31 00:35:16 +00:00 by bsakaguchi
·
9 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#3037
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 @yemudo on GitHub (Oct 17, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4893
Versions: rea-agents 6.5.0 (regression) vs rea-agents 6.1.0 (last known-good for this case). Linux x64, Node 22,
CLI route
analyze-javascript-application <dir> --json, defaults plus--max-heap-mb 5120 --analysis-timeout-ms 300000.Summary: Since the new call/endpoint classification landed, any production-minified JavaScript bundle makes
normalized_result.graph.coverage.status= "partial" withtruncated: falseandlimits: [], even when every fileparses (statistics: parse_failures=0, parsed_javascript_files == inputs) and no resource limit fires. 6.1.0 returns
"complete" for the same input. Consumers that treat application coverage as a completeness signal (as the docs suggest)
now cannot distinguish "analyzer skipped something" from "the input is minified".
Minimal reproduction (public bytes only):
any production-minified library file reproduces it)
parse_failures=0, parsed_javascript_files=1.
6.1.0: graph.coverage = {status:"complete", truncated:false, omitted_count:0, limits:[]} for the same tree.
Where the behaviour comes from (read from the installed 6.5.0 dist):
parse_status: parserErrors > 0 || accumulator.unknownFindings > 0 ? "partial" : "complete". The formula is the same in 6.1.0, but 6.5.0 addsdist/domain/javascript/javascriptStaticAnalysisCalls.js (not present in 6.1.0), which increments
accumulator.unknownFindingsfor unresolvable call/endpoint targets. A minified bundle always contains thousands ofthese (ambiguous-target / dynamic-call style unknowns), so
parse_statusbecomes "partial" although the parsecompleted — the field now conflates "parsed, with unclassifiable findings" with "incomplete parse".
(
javascriptAnalysisCoverage) stamps every observation from such a filepartial([], null).graphCoverage()'sunknownGapincludes
partialJavaScript = files.some(parse_status === "partial"), and at :138 returnspartialApplicationCoverage([], null): application-level "partial" with no limit entry explaining why.Net effect: there is no CLI option that yields "complete" for minified input — heap/timeout are not the binding
constraint (no limits fire), and source selection only narrows scope. Expected: either
parse_statusshould stay"complete" when the parse succeeded and only finding classification is ambiguous (track that in the unknowns frontier,
which already exists), or
unknownGapshould not treat it as an application-coverage gap, or the partial should carrya named limit so consumers can tell this case apart.
Separate schema note:
graph.coverage.omitted_countchanged from0(6.1.0) tonull(6.5.0) for the no-omissioncase. Guards written as
omitted_count != 0now false-fail on complete results too. If intentional, a release-notesmention would help.
Happy to provide the full JSON of the react-dom reproduction from both versions on request.
@Varshith-Kali commented on GitHub (Oct 17, 2026):
Reproducible analysis — this looks like a regression from the call/endpoint classification change in 6.5.0: classification unknowns now feed
parse_status, which then stamps per-observationpartialand rolls up into application coverage "partial" with no named limit, even when every file parsed cleanly (parse_failures = 0).I would like to take this on: separate "parse completed" from "classification ambiguous" (either stop counting call/endpoint unknowns into
parse_status, or exclude classification-only partial from thegraphCoveragerollup with a named limit entry so consumers can tell the cases apart), plus pin theomitted_count0-vs-null contract. Happy to have a maintainer point me at the preferred shape before I open the PR.@mertkayacs commented on GitHub (Oct 17, 2026):
I traced where the unknown comes from on a module with no Electron surface. It is the Electron wrapped-call-path expansion in
electronWrappedCallPaths.ts, which runs on every module: the probe forcontextBridge.exposeInIsolatedWorldevaluates the callee of every call without a literal first argument, and seeded walks evaluate the bodies they reach. Any read the symbolic resolver cannot settle sets itsunresolvedflag, and that becomes one unknown finding for the file, which is what flipsparse_statusand then graph coverage.Since
b8fab7429the resolver treats a read that precedes its initializer in source order as unresolved ("initializer not available at this read"). Instrumenting it onreact-dom-client.production.js(react-dom 19.2.0) shows every unresolved read is a hoisted function reading a module-levelvarinitialized later:scheduleTimeout,cancelTimeout,scheduleMicrotask,listener,discreteReplayableEvents. Every production bundle has that shape, which matches "any ordinary minified bundle".The walk can only emit Electron call paths, and the resolver can only reach an Electron value through a require or import of the Electron module, so on a module without one the unknown describes nothing the analysis could have found. https://github.com/morluto/rea/pull/4915 runs the expansion only for modules that reference Electron. On the trigger module and on the react-dom file the static analysis then reports
parse_status: "complete"; Electron modules keep their current unknowns. Theomitted_countnote is separate and untouched.@XinwangTao commented on GitHub (Oct 18, 2026):
Confirmed regression with a clear root cause: the new calls analysis folds unresolvable call-target unknowns into the same
unknownFindingscounter that gates parse_status, so "parsed but with unclassifiable findings" and "incomplete parse" become indistinguishable. That's exactly the kind of conflation that breaks downstream consumers using coverage as a completeness signal.Agree with the suggested directions — my preference would be keeping parse_status semantic ("complete" when parse_failures=0 and parsing itself finished) and tracking ambiguous call targets separately in the unknowns frontier, so application coverage only degrades for genuine parse incompleteness or fired limits. The partial-with-no-limit shape (partialJavaScript → unknownGap with empty limits) is the worst outcome for consumers: no actionable reason to investigate.
The omitted_count 0→null change deserves a release note at minimum; ideally keep 0 for the no-omission case since
omitted_count != 0guards are a natural way to consume it.@Varshith-Kali commented on GitHub (Oct 18, 2026):
Update: #4915 is now open with an active fix for this same regression, and it is already picking up review feedback — I will step back from the claim above to avoid duplicate effort. Happy to help review or test #4915 if that is useful.
@yemudo commented on GitHub (Oct 18, 2026):
Tested
rea-agents-6.6.0(tag compiled from source; there is no npm package or release asset yet) against the same production React bundle set and the same settings we used for 6.5.0 and 6.1.0. Counts only, no bundle content:sw.js)So 6.6.0 does not fix this issue, and for us it is worse than 6.5.0: both application bundles are now skipped (
skipped_javascript_files: 2). #4915 is not in the 6.6.0 tag. We stay pinned to 6.1.0 and will retest when #4915 is merged and a package is published. Happy to run #4915 against our bundles if that helps.@mertkayacs commented on GitHub (Oct 18, 2026):
Thanks for the 6.6.0 numbers. What you see there has a different cause from this issue. 6.6.0 ships #3852, which reports a file that exhausts the worker heap during static analysis as
parse_status: "skipped"with a named limit; 6.5.0 left such files inventoried but unparsed. The heap exhaustion itself on React renderer bundles is a regression from #4243 (merged after 6.5.0) and is tracked in #4348, with the alias-cycle case fixed on main as91a863c73(adapted from #4349) and #4363, #4364 and #4716 open for the returned-reference expansion. Your two application bundles would be useful evidence there, the sizes and the exact limit entries in particular.#4915 changes how call-path unknowns are attributed and leaves resource limits alone, so it will not change which files 6.6.0 skips. If you run it against your set,
sw.jsis the file whereparse_statusshould go from partial to complete; the two skipped bundles need #4348 first.@XinwangTao commented on GitHub (Oct 18, 2026):
Agreed with the separation: the 6.6.0 skips are the heap regression (#4243/#4348) and #4915 only changes how call-path unknowns are attributed, so neither fix masks the other — that makes it easy for consumers to know which coverage drop to investigate. Also +1 on the schema note: the omitted_count 0→null change should either stay 0 for the no-omission case or be called out in release notes, since omitted_count != 0 is a natural guard for downstream code.
@yemudo commented on GitHub (Oct 18, 2026):
Thanks for the explanation. We re-ran with
rea-agents-6.7.0(tag compiled from source) on the same production React build, same settings as before (node heap 5 GB,--max-heap-mb 5120,--analysis-timeout-ms 300000). Counts and sizes only, as you asked for #4348:sw.jsjavascript_analysis_worker_heap_limit_bytes=5393874944andjavascript_analysis_worker_timeout_ms=300000.We stay on 6.1.0 and will retest when #4348 and #4915 are in a published release. Happy to test a branch build of either fix against these bundles.
@mertkayacs commented on GitHub (Oct 18, 2026):
Thanks, that is the data #4348 needs; the two limit entries and the 395 KB case in particular are worth pasting there. I will ping you here when #4915 is on main so you can retest sw.js.