mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #4978] [Bug] XML plist data bytes diverge from native CFPropertyList decoding #3079
Closed
opened 2026-10-31 00:36:12 +00:00 by bsakaguchi
·
2 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#3079
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 @xu91102 on GitHub (Oct 18, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4978
Before submitting
Area
Evidence, artifacts, or reconstruction
Observed behavior
On main
b83b9caf4a5f0241a5fd370792f1aed1bffbb2cf, the built publicinspect-keyed-archiveCLI interprets XML<data>differently from Apple's native property-list reader:plutilbinary conversion, read with PythonplistlibAQID010203AQID(correct)A Q I Dplus newline010203AQID(correct)AQIAQI=(0102)AQ!ID010203artifact_operation_failedApple accepts the last two spellings; this is not a claim that they are canonical RFC Base64. REA currently reports bytes the native reader does not produce, or refuses a natively readable archive. Each listed call was executed once against an independent immutable input. All original input SHA-256 values stayed unchanged.
Reproduction
Save the following XML as
selected.plist, changing only the text inside<data>for the four rows above:Run
node scripts/rea.mjs inspect-keyed-archive selected.plist --jsonfrom the built checkout. Independently runplutil -convert binary1 -o native.bplist -- selected.plist, then readplistlib.load(open('native.bplist', 'rb'))['$objects'][1]in Python. Native conversion wrote a separate output file; it did not rewrite the selected source.Expected behavior
The XML data value and its native binary conversion should retain the same bytes. The existing keyed archive contract promises original serialized fields and typed data values. A decoder discrepancy must not become an incorrect
observedvalue.Impact and scope
Observed in two distinct data spellings, with two successful positive controls. This affects the shared XML value interpretation used by keyed archives; other consumers are source-derived scope and have not yet been exercised for this issue. No target code, provider engine, agent or model was run. MCP, Windows/Linux, full application workflows and performance are NOT RUN. Last known good version: NOT_ENOUGH_INFO.
REA version
Source main
b83b9caf4a5f0241a5fd370792f1aed1bffbb2cf, freshly compiled locally.Runtime and platform
Node 24.18.0, macOS arm64; native
/usr/bin/plutil, independent Pythonplistlibbinary readback.Target and artifact context
Synthetic XML Foundation keyed archive, no executable target.
Interface
CLI
Earliest failure stage
Native analysis or reconstruction: XML property-list value decoding.
Analysis
The shared data branch uses WHATWG
atob. Apple's CoreFoundation data parser skips non-alphabet characters and emits only completed quartets; that explains both measured differences. The native conversions above are the runtime oracle; the historical Apple source is supporting analysis, not a claim about this macOS build's exact implementation.Actual related production diffs were read: #4047/#4054 concern real character data, #4908 concerns non-finite real identity, and #841/#899 concern typed scalar/graph projection. They do not repair the data Base64 owner. This is separate from #4852's deferred mixed numeric fallback contract; no numeric behavior change is proposed. Additional rejected CDATA/comment probes are preserved locally as negative diagnostics and are not counted as natively accepted data spellings or a separate contribution.
This initial report was filed before the local implementation experiment. No commit, fork push or upstream PR has been created for this issue.
Follow-up: local experiment held after same-core PR appeared (2026-10-18)
A subsequent uncommitted local experiment on the original
b83b9caf4a5f0241a5fd370792f1aed1bffbb2cfbaseline completed 237 distinct focused/README tests, 32 actual installed-package CLI calls and six feature MCP tool requests. Those results apply only to that frozen experiment. Independent Standards/Spec review was interrupted and did not produce reports; this is not a reviewed or delivered fix. Complete agent/model workflows, Windows/Linux and performance remain NOT RUN.A fresh duplicate check then found #4981 by @avichal-08. I read its complete three-file production/test diff: it replaces
atobin the shared XML data value owner with CoreFoundation-style skip-nonalphabet/completed-quartet decoding for the sameAQIandAQ!IDobservations. This is the same root cause despite a different implementation, so my six-file local experiment is now read-only HOLD, with no commit, fork push, upstream PR or CI. It will not be repackaged around entity text, CDATA/comments, newline normalization or lifecycle remainder scope.At this readback, #4981 is OPEN and not merged, and this issue is still OPEN. I have not executed its head and do not claim that it covers all local experimental cases. Adoption of my local source or author credit is NOT_ESTABLISHED. The earlier reproduction and all RED/HARNESS records remain preserved; no maintainer or human readiness is inferred.
Main follow-up (2026-10-19)
Maintainer @morluto fixed this root on main in cee95b2ae6a19122de95103b2d23bc6f8c9c4428, adapting #4981 and explicitly crediting its author @avichal-08. This issue was closed on 2026-10-18 at 18:28:39 UTC. #4981 was subsequently closed without merge at 18:46:20 UTC. I read the actual eight-file main commit patch; the shared XML source owner now binds raw data spans to validated DOM nodes before entity/line normalization, while a shared quartet grammar sizes and materializes the output.
My uncommitted six-file local experiment remains read-only HOLD. I have no upstream PR, commit, fork push, CI or established source-adoption/author-credit claim for this issue, and will not repackage remaining cases. I have not executed this merged main commit's plist-specific acceptance; the maintainer's reported checks and measurements are not my runs, and the earlier local 237 tests/32 installed CLI calls/six MCP requests do not transfer to main. The interrupted independent reviews remain NOT_RUN. No issue-close call or reply to another contributor was made by me.
@XinwangTao commented on GitHub (Oct 18, 2026):
Confirmed — the atob-vs-CoreFoundation divergence is real and this report nails it: atob tolerates "AQI" by padding it to "AQI=" while CoreFoundation only emits complete quartets, and "AQ!ID" is rejected by atob but accepted by CF's skip-non-alphabet behavior. Two details worth keeping in the #4981 fix: (1) CoreFoundation's skips are not limited to whitespace — any non-alphabet character (like "!") is dropped, so the decoder should implement drop-then-quartet rather than approximate atob's permissiveness; (2) keep the raw text visible in the Evidence alongside the decoded bytes for auditing, since skip-based decoding is inherently lossy about what was originally in the file. Also +1 on treating the native reader as the runtime oracle — behavior parity with plutil beats RFC purity when the whole ecosystem treats it as ground truth.
@morluto commented on GitHub (Oct 18, 2026):
Fixed on main in cee95b2ae. Reviewed and adapted PR #4981 at
4cf6cac14a656c37c20dcf4a0baa0e3e75be510d, crediting @avichal-08. The quartet decoder fixes the two reported spellings, but a DOM-only value has already lost raw entity spelling and some line endings. Native controls also show that non-ASCII and child markup must fail, and<data/>differs from explicit empty<data></data>. A candidate that simply replacesatobleaves those owner-boundary discrepancies.The structural fix binds validated raw spans to the exact DOM nodes at the XML source owner. The existing depth walk records spans and error reasons; it finishes before data output allocation. Value decoding asks that owner for the data fact, without serializing XML or reinterpreting expanded text. One quartet grammar handles exact output sizing and materialization, including padding resets, so malformed-but-accepted ASCII cannot cause a slack buffer plus copy. Strict XML well-formedness remains the admission policy. Other scalar compatibility policies, including the separately reported #4852 behavior, are not claimed fixed.
Executed evidence under Node 24.18.0/macOS: original source selection 2 failed / 98 passed; expanded unchanged-main selection 29 failed / 98 passed; the PR production patch applied to frozen current main on that expanded set 23 failed / 104 passed. Public unchanged-main CLI/MCP selection: original 2 failed / 7 passed, expanded 5 failed / 7 passed. Candidate: 178 source tests in nine files and 54 compiled public/provider tests in five files passed, including actual macOS plist reads and typed CLI/stdio-MCP malformed-data errors. Original archive bytes/digests remain checked. Full
npm run check,npm run docs:check(five checks), and independent final source reviews passed. Small authored nativeplutilcontrols and pinned CoreFoundation source establish the literal semantics; no target or deep-provider execution. Linux/Windows and complete model/agent workflows remain unverified.Twelve completed public CLI tasks compared frozen main with the candidate. Canonical complete normalized result/source digest and reply estimate (588 cl100k tokens) agree; warm medians: elapsed 0.4341 → 0.4614 s, CPU 0.6450 → 0.6637 s, sampled family RSS 353.6 → 353.9 MB. Incomplete data is corrected and its complete reply estimate changes 589 → 592 tokens. Two alternating warm repeats/build plus separate first processes, no true cold-cache or statistical speed claim; whole-agent/catalog/MCP, large-input and failure costs remain unmeasured. No performance improvement claimed.
No directly related source-representation cleanup remains identified by this review. Broader scalar validity and native-format parity remain tracked separately. DeepWiki/Context7 findings were checked against installed xmldom 0.9.12, the actual native controls, and CoreFoundation commit
384ff680be7c7445fee6ce0c55e9ae11a46e07c5rather than treated as runtime evidence.