mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #8238] [Bug] Ghidra batch naming changes winner when object keys are reordered #6505
Closed
opened 2026-11-01 21:11:45 +00:00 by bsakaguchi
·
4 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#6505
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 @morluto on GitHub (Oct 30, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/8238
Originally assigned to: @kaoru0822-kitauji on GitHub.
Before submitting
Area
Native analysis or decompilation
Observed behavior
For Ghidra
set_addresses_names, two JSONnamesobjects containing the same address-to-name pairs but in opposite key order produced different persistent-in-session edits when the two addresses requested the same name. Exported Evidence retained the actual per-address success booleans and distinct IDs, but its canonicalizedparameters.nameswas identical in both bundles and did not retain the applied order.Reproduction
On the same self-built arm64 Mach-O, start two independent fresh REA/Ghidra MCP sessions. Both addresses below are mapped and
read_bytessucceeds.{"names":{"0x100004000":"shared_batch_name","0x100004008":"shared_batch_name"}}. The result reports first addresstrue, secondfalse;address_nameconfirms the first owns the name and the second keeps_message.true, firstfalse; readback confirms the reversed owner.parameters.namescontain identical sorted pairs, while their distinct result maps record opposite successes. A retry of the failed address with a different name succeeds in each session. Requesting the already-owned name throughset_address_namereturnsfalsewithout a specific reason.Ghidra independently applies addresses and correctly reports partial success; the issue is that object-member order is not represented as an explicit caller choice while it determines which edit wins. The executable SHA-256 remained unchanged and the target was not executed. REA source
53a4ab78451a0654e9c3beb3d43a5e371a288fcc, Node 24.22.1, macOS 26.3 arm64, Ghidra 12.1.4. This is one controlled pair, not a claim about every namespace or provider.Expected behavior
Define reproducible semantics for conflicting requested names independent of JSON object serialization order, or accept an explicitly ordered request and preserve that order in Evidence. Rejecting conflicting destinations before applying any conflicting items is one option; whichever behavior is selected, preserve independent nonconflicting successes, per-address results and the existing namespace/ownership rules. Do not infer an intended winner from sorted addresses or silently move another address's label.
Impact and scope
Reordered equivalent input maps can mutate different session labels. Successful/failed status is recorded, so this is not a claim that the result Evidence concealed the actual winner. A consumer cannot reconstruct the original execution order from the canonical parameters alone. The name conflict was authored intentionally to test this boundary; no autonomous-agent frequency or Windows/Hopper behavior was measured.
REA version
53a4ab78451a0654e9c3beb3d43a5e371a288fccRuntime and platform
Node 24.22.1; macOS 26.3 arm64; Ghidra 12.1.4.
Target and artifact context
Self-built arm64 Mach-O, SHA-256
ffad1b70c6a5a7ef3f7c3f59126be516520210777d949b35e97c9067f272aa2d.Interface
MCP
Earliest failure stage
Native analysis or reconstruction
Relevant output or evidence
{ "0x100004000": true, "0x100004008": false }.{ "0x100004000": false, "0x100004008": true }.Typed outcome or recovery expected
Make conflicts and their outcomes explicit without dropping valid nonconflicting edits or treating request order as implicit intent. Verify alias spellings that resolve to one address, same-name collisions, swaps, existing unselected owners, invalid/missing addresses and canonical Evidence replay.
Analysis or suspected cause
The input model is an address-to-name object, while the bridge executes stateful per-address transactions in incoming object iteration order. This explains the observed order dependence; the right public contract needs a deliberate decision, including compatibility with Hopper's separately documented batch rules.
Additional context
#1634 introduced Ghidra batch naming with per-address failure; #6405 concerns durable annotation export/replay. Last known good version: NOT_ENOUGH_INFO.
@morluto commented on GitHub (Oct 30, 2026):
A TypeScript MCP SDK 2.3.1 validation control called the real Ghidra
set_addresses_nameswith a successful function edit, an unmapped address and a successful data edit. After listing the scoped catalog, the client explicitly supplied the advertised tool definition tocallTool; the partial Boolean result passed output-schema validation under both full and compact output-schema profiles. A mixedbatch_decompileresult and a retained graph page also passed in those sessions. This is a positive schema-compatibility observation, not a change to the order-dependent mutation behavior reported above.A separate deliberately incompatible client-side schema was rejected for a successful call, confirming that SDK validation was active; tool-level errors are skipped by SDK validation. This covers these cases only, not all tool outputs or agent hosts. The target digest was unchanged.
@morluto commented on GitHub (Oct 31, 2026):
Looping in @gensokyo-dev @kaoru0822-kitauji @N0zoM1z0 for visibility on the Ghidra, Kuna, and REA tool-design investigation.
@morluto commented on GitHub (Oct 31, 2026):
Additional real Ghidra 12.1.4 MCP controls on REA main
e6d061897, using four fresh sessions on the same unexecuted Mach-O. I first named address Aaudit_alphaand Baudit_beta, with readback confirming both. Then:audit_beta, B →audit_gammaaudit_alpha, Baudit_gammaaudit_beta, Baudit_gammaaudit_beta, B →audit_alphaThe first mapping requests distinct destination names: it is still order-dependent because moving B can free the name requested for A. In the A-first session, a later explicit single-address retry of A succeeded after B had moved. This is a controlled state-dependent observation, not a general recommendation to retry mutating requests. The swap control also does not establish that swapping should be implicit or atomic.
Consequently, rejecting only duplicate names within the requested values would not resolve all order-dependent batches. Any chosen semantics need to account for existing owners and dependencies, while preserving partial-result truth and caller intent. All sessions closed and the input digest stayed unchanged. This is one Ghidra/macOS fixture, not Hopper or Windows coverage.
@morluto commented on GitHub (Oct 31, 2026):
Real-provider follow-up for merged #8306: on REA
7c9ed94259fef560fdbec0c9b640348c5d54c391, macOS arm64, Node 24.22.1 and Ghidra 12.1.4, I ranverifyGhidraNamespaceAnnotationsthrough an actual stdio MCP client against its freshly compiled source-owned fixture. Its 220 recorded calls passed, including the function and label controls for competing names, swaps and selected/unselected holders in both JSON member orders, individual readbacks, an explicit later transfer, case variants, equal leaf names in different namespaces, and an independent CLI session. The harness checked advertised schemas and validated successful structured results; the verifier itself checked its generated fixture's bytes were unchanged. No target was executed.A separate real MCP session on another source-owned fixture checked the same address specified as both
0x…andram:0x…: different requested names failed withconflicting_alias_namesin either order and left the original name; identical names succeeded. A mixed batch applied an independent valid edit while reportingunmapped_addressandinvalid_addresson the other keys. Readbacks agreed, and the target SHA-256 was unchanged. All edits were in fresh ephemeral Ghidra sessions.This is the namespace verifier and the stated alias/mixed controls, not a pass of the complete
verify:ghidralane or coverage of other hosts/providers. The separate lane blockers #8171 and #8172 are unchanged by this check.