mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #6289] [Bug] Distinct localStorage code units receive the same digest and scenarios compare unchanged #3803
Closed
opened 2026-10-31 00:44:13 +00:00 by bsakaguchi
·
1 comment
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#3803
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 22, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/6289
Before submitting
Area
Evidence, artifacts, or reconstruction
Observed behavior
capture_browser_scenariogives distinct localStorage code units the same value digest, socompare_web_capturesreports complete aligned captures as unchanged. The page reported distinct UTF-16 code-unit arrays[55296],[65533], and[55297]for\ud800,\ufffd, and\ud801. The page URL, HTML, ready condition, key name and capture selection were identical. Each final storage artifact was captured withvalue_state: "hashed", and every capture was equality-eligible.All three values received the same
value_sha256:The actual registered comparison tool returned:
All four pairs aligned both steps without failures. The third pair used a separate browser capture of the same value. Comparing the retained normalized captures showed only elapsed-time/duration differences between the colliding values; the ordinary-text controls additionally differed only in the final storage value digest. Thus the failure occurs before comparison can recover the actual distinct stored values.
Reproduction
tests/boundary/mcp/storageSurrogates.repro.test.ts. It serves one loopback page, seeds one localStorage entry, waits for the page to POST its readback code units, calls the actual registered MCP tools with advertised output-schema validation, and closes its resources.SCENARIO_BROWSERto the absolute executable path of that headless browser, then run this focused command from the checkout root:One focused run of this exact test content, under a temporary test filename, reproduced both false-equivalence pairs. Six browser captures and four comparisons completed. The command exited 1 because the two changed-value expectations received
unchanged; the readback, cleanup, completeness and control assertions passed.Expected behavior
Complete, aligned scenario captures whose observed localStorage value changed must expose the storage difference rather than prove equivalence. The scenario comparison documentation expressly includes storage artifacts and returns changed or unknown artifact records, and the registered tool contract promises every artifact-level difference. These requests use supported literal storage values, matching browser/origin/step context and complete selected coverage, with no declared secrets or caller normalization. If a value cannot be represented faithfully for comparison, its uncertainty must prevent a definite unchanged result. The separately captured identical-value control must remain unchanged, and the ordinary-text control must remain changed.
Impact and scope
P2 (supported): this bounded localStorage input class produces false equality in recorded scenario evidence, concealing an observed state difference. No downstream severe harm or population frequency was measured. Runtime proof covers launch-mode localStorage only; sessionStorage, cookies, external-connect mode and other browser/runtime versions were not exercised. Workaround status is unverified: making a caller-owned page render or POST its code units is a verification aid, not proof of a practical workaround for arbitrary applications. Existing captured digests do not retain the distinction.
REA version
Source commit
4a4bbab3c3(main)Runtime and platform
Node.js v26.12.1; macOS 27.0.1 arm64; Chromium headless shell 153.0.8010.12; locked playwright-core 1.58.2 and Vitest 5.0.3. The repository pins Node 24.18.0; the reproduction used the stated different version.
Target and artifact context
One owned loopback HTTP fixture page, a provider-owned headless browser profile per capture, and one literal localStorage value. No external application or service was contacted.
Interface
MCP
Earliest failure stage
Capture or observation
Relevant output or evidence
Typed outcome or recovery expected
Repeat the same registered capture-to-comparison workflow. Both distinct code-unit pairs must cease reporting definite unchanged storage: distinguish the values and report the storage change, or explicitly preserve unsupported/unknown comparability. Keep the separate identical-value pair unchanged and
text-aversustext-bchanged with a storage difference. Preserve declared-secret redaction semantics; no specific string encoding, passive-capture output change or ordinary valid-string digest change is prescribed. The controls in this report do not establish those unexecuted secret/passive checks.Analysis or suspected cause
Source-derived reasoning: the active storage producer hashes a JavaScript string through Node's default UTF-8 conversion. Unpaired surrogate code units collapse to replacement-character bytes before hashing. The active scenario comparator then compares the storage artifact that contains the already-collided digest. This is a lossy encoding collision before hashing, not a cryptographic SHA-256 collision. The passive comparison consumer is a different path and was not exercised.
Additional context
Read-only searches covered open/closed issues and PRs with six keyword sets, including
localStorage surrogate fingerprint,scenario storage fingerprint collision,compare web scenarios Unicode,surrogate storage,BrowserScenarioSecrets, andstorage fingerprint Unicode. No duplicate was found. Related #3879 concerns passive script source comparison; #2554 concerns missing IndexedDB values and false completeness; #1591 and PR #1590 concern secret redaction; PR #1579 concerns initial seeding; #2169 concerns mismatched event-family coverage; #1608 and PR #1611 concern escaped secret redaction. None describes this active localStorage fingerprint collision.Current-main freshness was checked by fetching and inspecting source drift without changing the tested checkout. Fetched main was
002e1b68c66a243948fdca57ac416cfaec617315; relevant drift only replaces a history length numeric schema in commit7590b50801553ca443922b1fb48e168334f8cc5d. The affected hashing and active comparison logic are unchanged. Runtime reproduction was performed on the stated baseline, not fetched main.The browser and loopback page were real. The unrelated binary-session fixture permits server construction but performs no binary operation; browser capture, storage seeding, Playwright, hashing, comparison and MCP transport were not mocked. Both exercised tools used their actual advertised output schemas. All six captures reported
terminated-owned-process; awaited resource cleanup completed, the test runner exited, the isolated temporary directory was empty, and the checkout was clean after removing the temporary test. This report was prepared with AI-assisted independent source review and local reproduction.@gongfpp commented on GitHub (Oct 22, 2026):
I would like to work on a focused fix for the active-scenario storage fingerprint producer and its comparison boundary, with regression coverage through the registered MCP tools and a real owned loopback Chromium fixture. The current UTF-8 conversion loses unpaired UTF-16 code units before hashing. I plan to preserve ordinary-string digests and declared-secret redaction, distinguish malformed code-unit sequences without cross-encoding aliasing, and explicitly account for legacy captures whose lost information cannot be reconstructed (rather than treating an encoding/version difference as a target change). No new provider, execution authority, passive-capture behavior, or secret-pattern inference is intended. I have not found a directly overlapping public PR; #5035 appears to address ordering, not this producer collision. Is anyone already addressing this, or is there a preferred compatibility policy? This is a coordination note, not a claim of assignment or scope approval; any PR will remain draft pending the human owner’s review.