mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #1384] [Bug] inspect_web_page rejects every target on Chromium 150: Page.getFrameTree reports the opaque placeholder URL #478
Closed
opened 2026-10-15 18:25:24 +00:00 by bsakaguchi
·
5 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#478
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 @BaaRai on GitHub (Oct 10, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/1384
Problem
On Chromium 150.0.7871.181 (current Kali/Debian build),
npm run verify:browserfails at the first discovery gate:The main frame's URL read from
Page.getFrameTreeis no longer the real URL: Chromium 150 reports the opaque placeholder":"(withsecurityOrigin: "://"and emptydomainAndRegistry) for a committed, fully loaded same-origin page, so the origin allowlist check fails for every target andinspect_web_pagerejects pages it is explicitly allowed to observe.Protocol evidence
Same page (
http://127.0.0.1:PORT/app?probe=1, committed,mimeType: text/html,loaderIdpresent), headless Chromium 150.0.7871.181, one flat CDP session:Page.getFrameTreemain frame":"(masked placeholder)Page.getNavigationHistory[""]Target.getTargetInfo/jsonendpointSo the endpoint/target layer still knows the URL; the frame-tree layer masks it. I found no public CDP changelog or Chromium issue documenting this change yet, so it may be fresh, possibly a regression.
Affected surfaces (all consumers of frame URLs)
src/browser/CdpWebMcpDiscovery.ts: the initial and finalallowedSanitizedUrl(mainFrameUrl(frameTree), origins)gates (lines ~63 and ~338) fail immediately.src/browser/CdpCaptureDocuments.ts:captureFramesfilters every frame throughallowedSanitizedUrl(frame.url, ...), so frame scoping and evidence attribution degrade to excluded/unknown for all frames, not just the main one.src/browser/CdpAuthorizedMainFrame.tsand the page-capture flow consume the same frame-tree URLs.In other words this is not only the discovery gate: even with the gate bypassed, captures on Chromium 150 would filter every frame as origin-unknown.
Reproduction
REA_BROWSER_EXECUTABLE=/usr/bin/chromium REA_BROWSER_NO_SANDBOX=true npm run verify:browseron Linux x64 with Chromium 150.0.7871.181: fails atinspect_web_page target_not_allowedbefore any navigation assertions.--remote-debugging-port=0, create a target against a local 127.0.0.1 server, attach,Page.enable, then the four sources in the table above). Happy to share the probe script.Possible directions
":"placeholder) as "unknown, not disallowed", and recover the authoritative URL fromTarget.getTargetInfoor the already-discovered endpoint target, keeping the allowlist enforced against that recovered URL.I can implement whichever direction you prefer; direction 1 plus 2 looks mechanical from the current call sites, but the truthful-vs-excluded semantics for masked frame URLs is a design call that belongs to you.
@CassieFox23 commented on GitHub (Oct 10, 2026):
TL;DR: It did not reproduce on full Chromium 154 (BSD-3-Clause) in
--headless=newmode. Your report is on 150, so that is still open.Edit: added the Chromium license.
What ran:
/usr/bin/chromium-browser.--headless=new, sandbox on.Page.getFrameTreemain framePage.getFrameTreechild framesecurityOriginhttp://127.0.0.1:PORTPage.getNavigationHistoryTarget.getTargetInfo/json/listI did not see the
":"placeholder.I also ran the
reaCLI from main (08ec2bf8).inspect-web-pagepassed. It listed all frames with real URLs.The
headless_shellbuild of 154 gave the same clean result.The open difference is 150 versus 154. It may be a bug that 154 fixed. It may also be specific to the Debian or Kali build.
I looked upstream too. I found no Chromium bug for this. The CDP schema for
Page.Framehas not changed this year.I did not run
npm run verify:browserhere.Test setup
🤖 Generated with Claude Code (Opus 5.5) 🦊
@CassieFox23 commented on GitHub (Oct 10, 2026):
TL;DR: One more check. REA's own browser test passes on Chromium 154 (BSD-3-Clause). So 154 does not show this bug for me.
Edit: added the Chromium license.
I ran
npm run verify:browseron main (08ec2bf8).REA_BROWSER_EXECUTABLE=/usr/bin/chromium-browser."verified": true.target_not_allowedanywhere in the log.One tip for anyone else who runs it. Keep
TMPDIRshort. My first try used a long temp path. Chromium then aborted with "Socket path too long". That was my setup, not REA.The open question is still 150 versus 154. It could also be the Debian or Kali build.
Test setup
🤖 Generated with Claude Code (Opus 5.5) 🦊
@BaaRai commented on GitHub (Oct 10, 2026):
Update with a fuller root-cause matrix and a working fix branch for the gating surfaces.
The mask is not a 150-only regression and not the Debian/Kali build: it is the official Google builds. Same flat CDP session, same local page,
--headless=new:":""://"[""]":""://"[""]""(empty string)"://"[""]So 154 still masks in the official builds, just with a different placeholder, and the sandbox flag makes no difference (probed both ways). Whatever distinguishes the Fedora package from the Google builds also exists in both 150 and 154. Unmodified main fails
verify:browseron official CfT 154 exactly like on 150. Beyond the frame tree, the same masking hitsDOMSnapshot(documents carry no documentURL) and the storage agents:DOMStorage.getDOMStorageItemsrejects with -32000 "Frame not found for the given storage id",IndexedDB.requestDatabaseNameswith -32000 "No document for given frame found",CacheStorage.requestCacheNameswith -32602 "No frame found for given storage key", and the deeper fingerprint probes never respond at all.Fix branch:
fix/cdp-masked-main-frame-urlon my fork (commit23744663). Design: whenever a frame-tree URL carries no URL evidence at all (":","", unparseable), scope resolution falls back to the target URL thatauthorizeCdpTargetalready gated the attach on; a parsed but out-of-scope origin still rejects, and parseable non-HTTP pages such asabout:blankkeep their existing wait semantics. Applied to: the discovery gates (initial and final),authorizedMainFrame(all three call sites), the root frame incaptureFrames, the attached/completed main-frame URLs, and the leading DOM document incaptureDom. Storage probes now disclose browser-side command rejections as limitations (matching the sibling IndexedDB/CacheStorage semantics) and skip the fingerprint probes once their own discovery was unavailable, which also removes the stall. No behavior change when the frame tree reports real URLs.Where it stands on official CfT 154: the lane went from failing on the first
inspect_web_pagecall to running the whole pipeline and now failing atReal Chrome script metadata was missing(the script capture surfaces, and presumably resources, filter by masked URLs the same way). Finishing those is mechanical per surface, or a unified authorized-origin resolution pass if you prefer that shape; happy to complete it either way on your call.@CassieFox23 commented on GitHub (Oct 10, 2026):
TL;DR: Google's own test build of 154 shows real URLs on my box. So the mask is not the build alone. Something else on the machine turns it on.
I got the same version you named. It is Google's official Chrome for Testing build, 154.0.8037.57. I ran our probe on it. Then I ran
npm run verify:browserfrom main.verify:browserBoth builds report the same source revision. The CI lane also uses a Google build. It is Google Chrome 154.0.8037.97. Other PRs pass
verify:browserthere today.No flag brought the mask back. I tried these on both builds:
So I don't know what turns it on for you. It is not the build by itself. It may be something about the box. Could you share how you start the browser? The full command line would help. So would the user it runs as. Any browser policy files would help too.
I also tested PR #1411. Its latest head,
08a6aab5, passesverify:browseron the Fedora build here. The head before it passed on both builds. The details are on the PR.Not run:
Thanks, BaaRai, for the full table. It made this easy to check.
Flags tried
Each row ran on both builds. Every row showed real URLs.
--headless=new --enable-automation--headless=new--headless=new --no-sandbox--headless=old--headless--headless=new --disable-site-isolation-trials--headless=new --site-per-process--headless=new --disable-field-trial-configThe probe also passes
--no-first-run --no-default-browser-check --disable-background-networking --disable-component-update --disable-syncand its own profile folder. The Fedora rows used the bare binary, not the wrapper script.154 took
--headless=old. I did not check that it changed mode.Raw output
Google test build,
--headless=new:Both builds report revision
73c14f62.The CI image is ubuntu-24.04
20261004.327. Its readme lists Google Chrome 154.0.8037.97. A passing run on it (38016194351) ends with"browser":"Chrome/154.0.8037.97"and"verified":true.Commands
The test build came from the official known-good versions list, linux64 zip. It ran from a temp folder. I deleted it after.
Test setup
7aa4d768🤖 Generated with Claude Code (Opus 5.5) 🦊
@BaaRai commented on GitHub (Oct 10, 2026):
You were right to push on this, and the official-builds claim in my matrix was wrong. Same version, same revision as your runs, clean on your box, masked on mine. It is the machine, and I found the switch tonight.
It is the session bus. Bisecting my shell environment variable by variable against the same CfT 154 binary and flags:
Nothing is being masked. The page never loads. With the bus reachable, the page reports from inside itself: readyState "complete", location.href "about:blank", empty body text. A --log-net-log capture of the startup contains zero URL requests and zero proxy events. The startup navigation is simply never issued.
The machine detail: this box runs WSL with an XFCE desktop session, so /run/user/1000/bus is live and gnome-keyring is on it, but the login keyring is locked, no PAM unlock ever happened for it. Headless Chrome reaches the keyring during profile startup, the daemon creates an unlock prompt, and a prompt that can never be answered headless means startup never finishes. The daemon's object tree now literally lists one pending prompt object per probe run (p1..p9, one for each time I launched a "masked" probe). Chrome's stderr only shows an unrelated NetworkManager query failing, which is why nothing pointed at the keyring until the bisect.
That explains every observation, including why we saw different things:
Fix. Verification browsers never need a real keyring, so the lanes should not depend on desktop keyring state: PR #1432 passes --password-store=basic in both raw launchers and documents the failure mode. Proof from this box: main plus that one flag runs the complete verify:browser green, "browser": "Chrome/154.0.8037.57", "verified": true, zero target_not_allowed.
PR #1411 is withdrawn and I am closing it. Its fallbacks made the lane appear to work by authorizing capture of a page that had not loaded, using the attach-authorized target URL as a stand-in. That is fail-open against exactly this failure mode. REA failing closed here was the correct behavior; the defect was in my browser launch environment all along. Thanks for the push, the revision comparison is what sent me bisecting the environment instead of the binaries.