mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
Open
opened 2026-10-31 01:13:03 +00:00 by bsakaguchi
·
0 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#6253
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?
📋 Pull Request Information
Original PR: https://github.com/morluto/rea/pull/4456
Author: @Pharox24
Created: 10/16/2026
Status: 🔄 Open
Base:
main← Head:fix/inspect-web-page-worker-network📝 Commits (10+)
546850afix(browser): record dedicated worker requests in page inspection4b894f0fix(browser): drain worker commands before the final page checkc0707bcfix(browser): bound, nest, and classify worker network observation080b7a2fix(browser): close worker admission before the final page check97a7b01fix(browser): report budget-omitted worker WebSockets in their sectionsa03fe17fix(browser): release refused workers and abandon detached body readsfb99ffffix(browser): bound worker releases and frames, report ID collisionsb0972bbfix(browser): spend worker budgets only on retained traffic553c221fix(browser): bound worker frame bytes and keep page events off worker recordsd01d8ebfix(browser): bound retained worker request bytes📊 Changes
14 files changed (+2533 additions, -45 deletions)
View changed files
📝
docs/browser-observation.md(+25 -0)📝
src/browser/CdpCaptureEventHandlers.ts(+37 -20)➕
src/browser/CdpCaptureEventHelpers.test.ts(+37 -0)📝
src/browser/CdpCaptureEventHelpers.ts(+14 -3)📝
src/browser/CdpCaptureEvents.ts(+7 -2)📝
src/browser/CdpPageCapture.ts(+90 -18)➕
src/browser/CdpPageCaptureWorkerNetwork.test.ts(+1003 -0)➕
src/browser/CdpPageCaptureWorkerNetwork.ts(+717 -0)📝
src/browser/CdpPageCaptureWorkers.ts(+4 -1)📝
src/browser/CdpSafeMetadata.ts(+33 -0)📝
tests/boundary/browser/cdpBrowserProvider.network.test.ts(+562 -1)📝
tests/fixtures/fakeCdpBrowser.ts(+1 -0)📝
tests/fixtures/fakeCdpBrowserResults.ts(+1 -0)📝
tests/fixtures/fakeCdpBrowserTypes.ts(+2 -0)📄 Description
Summary
inspect_web_page/rea inspect-web-page(andanalyze_web_bundle, which shares the capture) never recorded network requests made by the page's dedicated Web Workers, while still listing those workers as attached. An empty or page-onlynetwork.requestscould be read as "the app made no other requests". This PR observes dedicated-worker network activity during the existing observation window.Fixes #4425
Problem and expected behavior
Chrome reports a dedicated worker's requests on the worker target, not on the page target that created it.
capturePagesentNetwork.enableonly on the page session (src/browser/CdpPageCapture.ts,enableObservationDomains) and its event listener returned early for any othersessionId. Workers were only enumerated afterwards throughTarget.getTargets, whoseattachedflag reflects any attached client (for example an open DevTools window), not REA observing the worker.Expected (from the issue): worker requests appear in
normalized_result.network.requests, or coverage states explicitly that worker network activity was not observed.Change and scope
CdpWorkerNetworkObservation(src/browser/CdpPageCaptureWorkerNetwork.ts), owned by onecapturePagecall:Target.setAutoAttach { autoAttach: true, waitForDebuggerOnStart: false, flatten: true, filter: [{ type: "worker" }] }on the page session. Workers are never paused; existing workers attach immediately and new ones attach as they start.Networkon that worker session, then sends it the same non-pausingTarget.setAutoAttachso workers it starts are observed too. Workers on other origins are not enabled and are recorded asnetwork_requestsexclusions (disallowed_origin/unsupported_url/unattributed_origin, countnull).Network.*events from admitted worker sessions into the existingCdpCaptureEvents, so URL policy, redaction, body-shape rules and completeness accounting are unchanged.requestWillBeSent/webSocketCreated). Real Chrome announces a new worker's own script on the page session and completes it on the worker session withencodedDataLength: -1. Without this rule that completion was counted asinvalid_protocol_valueand markednetwork_requestsunavailable. With it, the page-owned record is unchanged from current behaviour.include_json_body_shapes) for worker requests are read from the worker session. If that worker has already detached (or detaches mid-read,-32001), the body is reported unavailable with a limitation instead of failing the capture.CDP_WORKER_NETWORK_LIMITS, matching the script metadata record bound). Omitted workers and requests count asresource_budget_exhausted, sonetwork_requestsis reported truncated; an omitted worker WebSocket counts underwebsocket_connectionsand markswebsocket_framestruncated. A whole unobserved worker (other origin, over the limit, unavailable auto-attach, or a live command rejection) is recorded under all three sections with an unknown count, and up to 256 refused sessions per capture, during the admission window, are released withTarget.detachFromTargetthrough their parent session; real Chrome keeps that worker running. Turning auto-attach off at capacity was rejected because real Chrome then also detaches admitted workers. Admitted workers retain at most 50,000 WebSocket frames, with later frames counted indropped_events. Only traffic the origin policy keeps counts toward the frame and request budgets, and withinclude_websocket_shapesworker frame payload is also capped at 8 MiB before shape inference. Worker request and WebSocket URLs, plus request bodies withinclude_json_body_shapes, are capped at 8 MiB before ingestion; a URL the origin policy rejects costs nothing, WebSocket URLs use the sameadmittedWebSocketUrlcheck as the WebSocket handler, and a request whose redirect hop is over budget stops receiving later events so hops cannot mix. Request bodies are charged only when they get a JSON shape, every hop of a chain the origin policy drops is refunded, and worker JSON response bodies are charged against their own 8 MiB budget before shape inference. Nested worker sessions record their parent, and a parent's detach aborts its descendants. Worker response MIME types and every header value metadata keeps are capped at 8 MiB before metadata parsing, request hops are charged for every string the record keeps (method, type, initiator and redirect details), the frame shape budget applies only to text frames, rejected request hops are refunded, and malformed body envelopes are left to the body parser uncharged. Workerattachedvalues come from aTarget.getTargetssnapshot taken before auto-attach, so REA's own attachment is not reported as target evidence. Page-session Network events are checked against worker request ownership before ingestion, so a page start on a worker-owned ID is reported rather than merged. A malformed attachment that still names a session is released. A worker request or WebSocket whose ID another session already owns is reported asinvalid_protocol_valuerather than merged or dropped silently.-32001session-not-found reply, counts as worker exit and stays under the existing attach-limitednetwork_requestscoverage. Any other rejection from a live worker records aprovider_unavailableexclusion. Chrome never answers a command pending on a session that detaches, so each worker's commands, including its JSON body reads, abort when its session detaches instead of waiting for the 20 s CDP deadline; an abandoned body read is reported as unavailable body coverage. Transport and cancellation failures still fail the capture (settle(), which runs before the final navigation and origin check and first closes worker admission, so a worker attaching during that check is not enabled), andclose()waits for issued worker commands before the page session is released.Target.setAutoAttach(-32601) keep page capture working and reportnetwork_requestsasprovider_unavailableplus the standard optional-command limitation.docs/browser-observation.mddocuments the coverage.Not included, intentionally:
workeronly).target_idfield. The issue suggests one, but it would change theWebPageInspectioncontract and generated catalog, so it is left for a separate decision.waitForDebuggerOnStart: true) to close the start-up race. That would give REA execution control over the target, so short-lived workers can be partially observed and the limitation says so.observe_web_session(navigation timeline only) and Electron inspection paths are unchanged.Contract and boundary impact
capturePageevent routing (src/browser/CdpPageCapture.ts, newsrc/browser/CdpPageCaptureWorkerNetwork.ts).inspect_web_pageboundary for the already-authorized page target; no new provider. Auto-attaching the page's own dedicated workers is a new CDP attachment, so maintainers may want to confirm it fits the current boundary.network.requestscan now include dedicated-worker requests, and one limitation string is added.Target.setAutoAttachwithflatten(current Chrome). If unsupported, the capture degrades toprovider_unavailablefor worker network. Source-derived, not run: a browser that ignoresfiltermay also auto-attach frames; those are neither enabled nor ingested.Network.enableandTarget.setAutoAttach, noRuntime/Debugger/Pagedomains, no pausing, no script evaluation. Auto-attached sessions are children of the page session REA already detaches, and the operation's socket is closed byCdpTargetSessionOwner.finish(source-derived).Expected effects:
Evidence and regression coverage
Tests added or updated:
tests/boundary/browser/cdpBrowserProvider.network.test.ts, newdedicated worker networkblocks (4 tests) through the realCdpBrowserProviderand the fake CDP WebSocket browser:Target.setAutoAttachparameters; the only worker-session command isNetwork.enable; a page-announced worker script completed on the worker session withencodedDataLength: -1keepsencoded_data_length: nulland does not marknetwork_requestsunavailable;sessionId;Target.setAutoAttachunsupported, soprovider_unavailableexclusion and limitation;Network.enablereply is still pending reportstarget_changed(added for the review finding below).Network.enable(-32601) reportsprovider_unavailable, while a gone session (-32001) does not;timeoutbeforea03fe17);dropped_events; page- and worker-owned request ID collisions reported; excluded-origin frames and requests do not spend the budgets; frame payload byte budget with shapes; page events on a worker-owned ID reported and kept off the worker record; malformed attachment with a session released; worker request bytes capped with excluded URLs keeping their reason; an over-budget redirect hop freezes the earlier hop; allowed worker WebSocket URLs count against the byte budget; dropped redirect chains refunded; non-JSON bodies not charged; nested commands abandoned on parent detach; worker JSON response shapes past 8 MiB omitted asresource_budget_exhausted(boundary test); expanding response metadata bounded; pre-attach workerattachedstate reported; rejected hops refunded; malformed body envelopes uncharged; long methods, initiator URLs, MIME types and kept header values charged; binary frames outside the shape budget; a JSON response stripped by the metadata budget recordsjson_body_shapesasresource_budget_exhausted(97144b7); base64 bodies sized from their text without decoding, and worker attachments without a target ID released as malformed (98ba117).src/browser/CdpCaptureEventHelpers.test.ts:decodeBase64canonical and non-canonical cases and a 12 MiB payload. The old grouped base64 pattern overflowed the stack on payloads of several megabytes, on the page path as well; it is replaced with an equivalent linear pattern.src/browser/CdpPageCaptureWorkerNetwork.test.ts: worker and worker-request budgets, each counting omitted items asresource_budget_exhaustedin the matching section, including an omitted WebSocket.tests/fixtures/fakeCdpBrowserResults.tsanswersTarget.setAutoAttachlike Chrome;holdReplyForin the fake lets a test record a command and send its reply itself.Base reproduction (executed): with only the test and fixture changes on base
c8848648, the new block fails (3 failed | 14 passed). The-1cross-session assertion was added after a real-Chrome run surfaced it, and it failed (1 failed | 16 passed) until the ownership rule was added. The navigation test returnedok: true(a mixed inspection) on546850aand passes after4b894f0movedsettle()ahead of the final page check.Real Chrome (executed): headless Chrome 155.0.8059.80, macOS, local
http://127.0.0.1page, 8 s window, built CLIrea inspect-web-page … --format json. The page fetches every second from the page, a long-lived blob worker, a same-origin script worker, and a new short-lived blob worker per round. Distinct markers recorded:unavailable_sectionsc8848648[][][]4b894f0, run 3[]For
c0707bcthe harness also starts a worker from another worker 1.5 s after load. Four consecutive runs recorded 8 page / 8 long-lived / 8 script / 8 short-lived / 8 nested-worker markers, each withunavailable_sections: []and nonetwork_requestsexclusions. Three further runs on080b7a2recorded the same (one run recorded 9 long-lived-worker markers), and three ona03fe17did too (one run recorded 7 short-lived-worker markers, the documented start-up race). Six runs onfb99fffrecorded 8 page / 8–9 long-lived / 8 script / 6–8 short-lived / 8 nested markers with nonetwork_requestsexclusions. Three back-to-back runs ofa03fe17under the same machine load recorded 7–8 short-lived markers. The change does not touch admitted-worker setup, so the short-lived spread is the start-up race under load. During this work one run failed withprovider_timeout: CDP command Target.setAutoAttach exceeded its 20000 ms response deadline. A raw CDP trace showed Chrome had detached that short-lived worker 14 ms after the command and never replied; the per-worker abort fixes it, and the boundary test above reproduces it.Run 2 missed one short-lived worker whose fetch ran before
Network.enablereached it; that is the documented start-up race.User-visible output: worker requests appear as ordinary
network.requestsentries. Measured JSON bytes, not tokens, for the same page and window:normalized_result14,463 to 33,773 bytes,network6,631 to 16,787 bytes (16 to 40 requests). The growth is the newly observed worker requests and their response metadata. Elapsed time was not separately measured; the fixed observation window dominates it.Representative entry from the real-Chrome run on this branch (run 1 in the table above): a request from the long-lived blob worker, now in
normalized_result.network.requests. Itsinitiator.urlis the worker's ownblob:script, so the record shows the request came from the worker:Limitation added to
normalized_result.limitationswhen auto-attach succeeds:Remaining proof gaps: Chrome on Linux/Windows, Edge, and other Chromium builds not run; service/shared workers out of scope; no per-request worker attribution; mid-read worker detach (
-32001) during a response-body read is source-derived, not exercised by a test; the 50,000 worker-request budget is exercised at the class level rather than through the WebSocket fake.For evidence-bearing changes:
Validation performed
npm run test:focused -- tests/boundary/browser/cdpBrowserProvider.network.test.ts src/browser/CdpPageCaptureWorkerNetwork.test.ts src/browser/CdpPageCaptureWorkers.test.ts: 47 passed (on599aa65). Full browser suite on63bdcaf: 943 passed, 6 skipped, 0 failed. Earlier, on599aa65, two load timeouts appeared while unrelated processes held the CPU; alternatingbrowserMcp.test.tsruns then took 16.6 s and 19.8 s against 17.9 s and a 20.2 s timeout on3892424. Real Chrome: pre-existing workers now reportattached: falseinstead of REA's owntrue.npm run test:focused --alltests/boundary/browser/*.test.ts,src/browser/*.test.ts,tests/boundary/cli/browserCli.test.ts,tests/boundary/mcp/browserMcp.test.ts: 906 passed, 6 skipped, 1 failed on080b7a2(905 / 1 failed onc0707bc). In both runs the failure wasbrowserMcp.test.ts > exposes CLI-equivalent Evidence results and session toolsreaching its 20 s timeout while unrelated processes held the CPU. Its time is dominated by the initialbinary_sessionstatus call, and browser calls finish in under 1 s. Alternating runs under the same load passed in 10.7 s and 11.5 s onc0707bcversus 12.1 s and 12.6 s on4b894f0. On080b7a2it passed alone in 19.5 s and 18.1 s under heavier load. On4b894f0the full run was 901 passed, 6 skipped. Earlier runs on546850asawhistoricalWebCapture.test.ts > excludes normalized HAR numbers through CLI and MCPtime out at 30 s under full parallel load. That HAR path does not use the CDP capture, and run alone it passes (7 passed).npm run check:fast: passed.npm run check: passed (architecture guards across 1456 source files).npm run docs:check: passed.npm run verify:test-discovery: discovered all 1417 test files exactly once (on080b7a2).Compatibility, safety, and release
Author readiness
Human owner: @Pharox24
Before merge
type(scope): outcome.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.