mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #4709] [Bug] Electron inspection retains an out-of-range DOM parent without reporting invalid evidence #2458
Closed
opened 2026-10-17 21:05:00 +00:00 by bsakaguchi
·
3 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#2458
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 @coygeek on GitHub (Oct 17, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4709
Before submitting
Area
Process capture or runtime observation
Observed behavior
inspect-electron-pagereturns three DOM nodes with the lastparent_indexequal to99999and no DOMinvalid_protocol_valueexclusion when a loopback stand-in supplies an otherwise alignedDOMSnapshot.captureSnapshotreply. The same public CLI behavior reproduced twice in each tested build. Both controls per build changed only that integer to1and retained the correct relationship. No real Electron or Chromium producer emitting this reply was established.Reproduction
.nvmrcNode version andpackageManagernpm version, runnpm ci, thennpm run build:cached. Both installation and build were executed for this report.tests/parent-index-probe.test.ts. It uses the repository's loopback HTTP/WebSocket CDP fixture and the public CLI; it does not call the DOM normalizer directly.parent-index-probe.config.mjsat the checkout root.Expected behavior
Normalized DOM structure should retain usable relationships and explicit uncertainty. An index outside the document cannot identify a parent in that document. Return explicit incomplete DOM coverage or a typed failure for this malformed evidence while preserving valid facts and their identities. This follows the documented normalized DOM/completeness contract and the repository guidance for unknown boundary values; it does not assume a conforming browser emits this reply.
Impact and scope
The observed impact is a false retained DOM relationship with no invalid-DOM exclusion, in two of two deliberately malformed replies per build. All four valid controls passed. Occurrence on conforming producers, normal-browser frequency, and downstream harm remain unknown. No real browser/application was launched or attached, and no target JavaScript or security-boundary behavior was exercised.
REA version
Fresh
mainbuild at5b243993872c2bcc70cb00060ffb79b347321370and a separate newly installed latest npm packagerea-agents@6.5.0. Both CLIs reported6.5.0.Runtime and platform
Node v24.18.0 and npm 11.16.0, matching the source toolchain pins; Darwin arm64; locked Vitest 5.0.3. Installation, build, test runner, and CLI calls used an isolated HOME. Each CLI call received only PATH, HOME, and NO_COLOR.
Target and artifact context
One disposable regular local HTML file and one selected page with three aligned nodes, empty attribute lists, and valid string-table references. Only the last
parentIndexchanges from1to99999. The stand-in speaks real loopback HTTP/WebSocket transport and closes after each call; each child HOME and HTML file is removed afterward.Interface
CLI
Earliest failure stage
Capture or observation
Relevant output or evidence
AGENTS.md:19,31requires identity, omission, uncertainty, partial facts, and meaningful boundary failures to be preserved;docs/electron-observation.md:57-59describes normalized DOM structure and explicit completeness.src/browser/CdpElectronInspection.ts:353-372projects the parent,src/browser/CdpCaptureDocuments.ts:423-456,691-700admits the aligned safe-integer arrays, andsrc/domain/javascript/electronObservation.ts:88-100accepts the projected integer without an upper bound.Each build produced both summaries twice. All eight CLI calls exited successfully with empty stderr. Each focused one-test run passed its reproduction assertions.
The CLI call in every case was
node <entry> inspect-electron-page <loopback-endpoint> electron-page --observation-ms 0 --json. MCP was not executed. These observations establish malformed-reply handling, not real-browser conformance or incidence.Typed outcome or recovery expected
Repeat the same malformed and valid captures. Restoration requires that
99999no longer appear as a valid retained relationship and that malformed DOM evidence produce explicit incomplete coverage or a typed failure. Preserve identities of any other retained facts. The valid controls must still retain three nodes with the lastparent_indexequal to1and no invalid-DOM exclusion.Analysis or suspected cause
Source-derived reasoning: the shared parser preserves numeric-array positions and accepts the out-of-range value as a safe integer. The Electron projection adds that value to the document's retained base index. The output schema checks only the integer lower bound. The separate web DOM capture loop has an upper-bound check, but Electron does not use that loop. This fixture requires no array compaction.
Additional context
Related closed #2553 concerns malformed entries shifting facts between nodes. Its identified fix adds DOM bounds checks in web capture; its Electron change concerns frame admission. Closed #3379, delivered by merged #3901, concerns missing or malformed collection arrays and adds shared array admission. The aligned safe integer used here survives that admission. Inspected closed, unmerged #3125 and open #4040 concern capture uncertainty/frame ancestry and capture fidelity/frame generations respectively; neither changes this Electron DOM parent projection. A fresh all-state issue and PR search found no exact report or proposed fix for this retained out-of-range integer.
@morluto commented on GitHub (Oct 17, 2026):
Published
70de70210on main.Root cause: Electron independently coerced missing/bad string and numeric fields to empty strings, zero or root parents, and did not check retained parent applicability. Its retained-node counter would also renumber later documents after omissions.
Structural fix: one snapshot owner decodes aligned columns, names, values, attributes and parent facts. It rejects out-of-range, self and cyclic parent facts, preserves source positions and independently unknown fields, and returns tagged row-admission results. Web/Electron consume those facts; SVG namespace interpretation consumes decoded names/attributes rather than reparsing string indexes. Removed superseded array, integer, string, attribute-resolution and duplicate-name helpers. Electron document offsets now count source slots, so omitted rows cannot change later identities. Valid empty-value sentinels, UTF-8 byte lengths, caller scope and other retained facts are preserved. Invalid required rows are omitted with explicit completeness coverage.
Executed validation: baseline compiled public CLI matrix had 4 failures / 1 valid control passing (out-of-range parent, self-parent, cycle, unresolved name before a second document). Final focused run: 103 checks across five files, including 15 owner controls, 56 URL/SVG controls and 5 compiled public CLI controls. The existing namespace capacity control completed in under a second. Final built CLI controls passed again, and all 5 passed after rebase. Late cancellation during final detach retained the completed observation (1 passed /20 skipped). check:fast, docs:check (5 checks), commit and push hooks passed. Initial fixture setup/table-parameter mistakes were corrected before the cited baseline/final results.
Research: Context7 DOMSnapshot guidance checked against the protocol definition: node fields are parallel arrays, parents refer to node positions, names/values refer to the shared string table, and attributes are flattened name/value references. Earlier DeepWiki research lacked detailed DOMSnapshot context; it was not used to infer extra protocol guarantees. Forward acyclic relationships remain accepted; no undocumented preorder constraint or count cap was added.
Controlled cost scope: completed production web DOM projection of 303 valid nodes; baseline79d2b7189, candidate before rebase. All six complete replies byte-identical, 9118 raw cl100k tokens each.
First processes separate from two alternating warm repeats; no true cold-cache or performance improvement claim. wait4 CPU and sampled PPID-family RSS can miss transients. Full Electron/public CLI/MCP/agent schema-retry, attribute-heavy and large-snapshot costs unmeasured. Decoded facts are retained per document; no universal memory reduction claim. Heavy AST/profiling work stayed stopped.
Scope: fake loopback CDP producers and generated local files with real compiled CLI/transport; no real Chromium/Electron, Windows or malformed-reply MCP qualification. Rebase included independent script-resource reconciliation, ADB, JavaScript and native plist work; affected DOM source/test hashes unchanged. Owned comparison worktree verified clean/inactive and removed normally.
Remaining audit: other CDP collection/scalar policies and broader provider/session lifecycles are not established by these checks. Existing XML/HTML document-kind inference and live namespace behavior retain their prior qualification limits; this change does not claim complete protocol conformance.
@XinwangTao commented on GitHub (Oct 17, 2026):
Good structural fix — a single snapshot owner that decodes aligned columns and rejects out-of-range, self, and cyclic parent facts is much safer than each provider independently coercing bad fields. Two follow-ups worth considering: first, since Web and Electron now share admission, document the
parent_indexcontract (0..count-1, plus a designated root sentinel) at the protocol definition so future providers know the boundary before writing a converter; second, add a regression that feeds the exact loopback reply withparent_index=99999alongside a self-cycle and a renumbered-retained-node case, to pin the tagged row-admission behavior so the counter can never silently renumber later documents again.@coygeek commented on GitHub (Oct 18, 2026):
Closing as addressed on
mainby 70de70210. The shared DOM snapshot admission now rejects out-of-range, self and cyclic parent facts, records invalid DOM completeness, and preserves source node identities across omissions and documents. I verified the committed source and regression coverage; I have not rerun the runtime reproduction.