mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #3876] [Bug] decode-interface-builder silently rounds keyed-plist integers above 2^53 #1495
Closed
opened 2026-10-16 21:06:10 +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#1495
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 15, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/3876
Before submitting
Area
Evidence, artifacts, or reconstruction
Observed behavior
rea decode-interface-builderrounds keyed-plist integers outside JavaScript's exact integer range and reports the rounded value as a complete, untruncated decode. A nib attribute stored as9007199254740993is returned as9007199254740992witharchive_decodemarked complete and no precision-loss limitation, whilerea inspect-keyed-archiveon the same file keeps the exact digits.In both XML and binary encodings, the graph reports
largeas9007199254740992,truncated: false, andarchive_decodewithstatus: "complete". All four commands exit successfully. The result's limitations contain only the four general notices about recognized fields, target-action selectors, geometry, and private archive classes; none mentions numeric precision.inspect-keyed-archiveon the same file returns{"$plist_type":"integer","decimal":"9007199254740993"}.Reproduction
Contents/Resources/Main.nibis an XML keyed archive with one integer attribute9007199254740993. The copied/usr/bin/trueonly satisfies app-target admission; REA does not execute it.Expected behavior
The Interface Builder graph either keeps the archived integer's exact digits (for example with the exact-decimal form
inspect-keyed-archivealready uses) or discloses that the value lost precision, instead of reporting a rounded number as a complete decode.AGENTS.mdasks REA to preserve local evidence and metadata, and to preserve source values and explicit unknowns when normalization loses information.Impact and scope
Static UI graph Evidence carries an incorrect numeric value for valid keyed-plist integers above 2^53 while claiming a complete decode; the demonstrated scope is one synthetic UIView archive in each plist encoding, and prevalence in shipped apps was not measured.
Workaround: available.
rea inspect-keyed-archiveon the affected archive preserved this field's exact value and object index in the same reproduction.Reporter's impact estimate: P2 (supported).
REA version
6.5.0, built from source at main commit
034342ba28(latest npm release is 6.5.0)Runtime and platform
Node.js v26.10.0; macOS 27.0.1 arm64
Target and artifact context
Apple app bundle with an XML or binary NSKeyedArchiver nib
Interface
CLI
Earliest failure stage
Native analysis or reconstruction
Relevant output or evidence
decode_interface_builderdecodes keyed property lists into an object graph)rea decode-interface-builderon the fixture above for XML and binary plists, compared withrea inspect-keyed-archiveon the same fileSource-derived reasoning (not runtime-verified beyond the output above):
src/artifacts/apple/InterfaceBuilderAnalysis.ts:138-144callsdecodePlist, whose implementation at lines 703-725 passesparseBinaryorparseXmlPropertyListoutput throughprojectPlistValue; the ordinary-number branch atsrc/domain/apple/plistValue.ts:62keeps the already rounded number, and the attributes reach the graph atsrc/domain/apple/interfaceBuilderGraph.ts:117-120. Unlikesrc/artifacts/apple/KeyedArchiveReader.ts:86-111, this path does not apply original-byte number metadata orcreatePlistNumberProjection.Typed outcome or recovery expected
The Interface Builder graph should carry the integer's exact decimal digits, or mark the attribute and archive_decode coverage as precision-limited, rather than a rounded number with complete coverage.
Restoration check:
On the fixture above,
rea decode-interface-builder Precision.app --jsoncurrently reports"large":9007199254740992with completearchive_decodecoverage in both plist encodings. After a fix, the same command reports the value9007199254740993exactly, or marks it as precision-limited in the attribute or coverage. Control:rea inspect-keyed-archive Precision.app Contents/Resources/Main.nib --jsoncontinues to report"decimal":"9007199254740993", and a safe integer such as42continues to decode as the plain number42.Analysis or suspected cause
Source-derived: src/artifacts/apple/InterfaceBuilderAnalysis.ts:703-725 decodes plists through projectPlistValue, whose number branch at src/domain/apple/plistValue.ts:62 keeps the rounded JavaScript number; src/artifacts/apple/KeyedArchiveReader.ts:86-111 applies original-byte number metadata and createPlistNumberProjection, which this path skips.
Additional context
Related open #3373 covers hexadecimal XML integers (
0x2A) becoming zero ininspect-keyed-archive. This report concerns decimal integers indecode-interface-builder, reproduces with binary plists too, and usesinspect-keyed-archiveas the passing control.This report came from AI-assisted source review with local reproduction where stated above; the evidence labels distinguish observed runs from source-only reasoning.
@xu91102 commented on GitHub (Oct 15, 2026):
Reproduced on current main
933f216698fc7162c234e22fefe97315faa80676with Node 24.18.0 on macOS arm64, before making a fix. Both XML and binary keyed.nibfixtures containing the integer9007199254740993produce the numeric attribute9007199254740992through the productiondecode-interface-builder --jsoncommand, with complete archive coverage. The corresponding value42remains correct in both formats. The same large fixtures retain exact decimal text throughinspect-keyed-archive; the earliercf0a38abuild also reproduced the rounding through actual stdio MCP.I am preparing a focused correction using the existing plist literal/projection owner rather than another decoder. It will preserve UID/object identities and safe-number controls, and keep ambiguous integer/real provenance explicit. No fix or PR has been published yet. Searches for this issue and the relevant plist/Interface Builder terms found no existing PR covering this numeric projection gap.
Verified fix published (2026-10-15)
The fix is committed and normally pushed to the fork commit on
codex/interface-builder-plist-integers. The reviewed fix is now published as Draft PR #3972. Final-commit CI 38693920240 has completed successfully; the final result is recorded below.Validation: 16 distinct files, 176 tests passed and one existing ibtool conditional skip; check (six tasks plus module/architecture guards), documentation (six tasks plus five conformance tests), test discovery, actual CLI and stdio MCP parity, and independent Standards/Spec review passed on the frozen commit. Safe values and graph/source identities remain covered; ambiguous values remain explicit. Normal commit/pre-push hooks preserved the reviewed bytes.
Local execution was macOS arm64 / Node 24.18.0. Windows/Linux/native execution and upstream CI are not claimed; no performance or token-cost improvement is claimed. A single ordinary Draft creation attempt for the first prepared fix was rejected by GitHub with
xu91102 does not have the correct permissions to execute CreatePullRequest; the reason remains unknown. No alternate account or creation route was tried.Publication update: after the maintainer closed earlier proposals #2060 and #3297 as covered on main, a fresh rebuilt-main CLI reproduction and duplicate check still confirmed this issue. The ordinary fork-to-upstream Draft creation succeeded: https://github.com/morluto/rea/pull/3972. The earlier creation denial remains historical evidence; its cause was not established.
Final-head CI result (2026-10-15)
PR #3972, head
2db05f4befc5710475eae4e3643475a636a179bc: CI 38693920240 attempt1 completed SUCCESS. Complete raw logs (2,180,985 bytes) and synthetic checkout parents were checked. The portable report aggregates source plus five shards: 15,214 passed / 135 skipped; it is not an additional execution. The fix-specific owner and public CLI regression files actually ran and passed. Linux x64 package baseline succeeded; Windows execution and real Apple E2E lanes were skipped. Local independent review, remote review, CI and human readiness remain separate.@morluto commented on GitHub (Oct 16, 2026):
Fixed on
mainin 2202e3f0b. Interface Builder projection restores byte-derived exact plist integers after graph classification without changing reference identity.Public CLI controls cover XML/binary large integers, safe values, collisions and incomplete metadata.
Hosted main CI is still pending; this closure is based on the implemented fix and the scoped regression evidence.