mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 07:47:29 +00:00
[GH-ISSUE #8085] [Bug] A repeated rea decompile with the same --snapshot runs Ghidra again instead of replaying #4669
Closed
opened 2026-10-31 00:52:15 +00:00 by bsakaguchi
·
2 comments
No Branch/Tag specified
main
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/procedure-reference-stacked
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#4669
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 @Entrpi on GitHub (Oct 30, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/8085
Before submitting
Area
CLI
Observed behavior
A repeated
rea decompile --procedure mainwith the same--snapshottakes as long as the first run, although the snapshot holds the first run's Evidence. A repeatedrea analyzereplays from the same snapshot in under a second.rea decompile hello --procedure main --provider ghidrarea analyze hello --provider ghidraAll decompile runs return the same
evidence_id, and so do both analyze runs.Reproduction
Ran once; each command was repeated as shown in the table.
Expected behavior
The second
decompilereplays the saved result, as the secondanalyzedoes.docs/cli.md, "Save and reuse analysis snapshots": "REA reuses an exact result when the target bytes, operation, parameters, provider and settings match", and "An exact CLI cache hit is normally read before starting a provider process."Impact and scope
Each repeated decompile pays the full Ghidra start-up and analysis again. On this 17 KB test binary that is about 7 s per query; on firmware-sized images it is the whole analysis time. Results stay correct. Only
decompilewith--procedurewas tested; other operations were not.REA version
Source revision
317bf3fe2(main, 30 Oct 2026), built withnpm run build:cached.Runtime and platform
Node.js 24.22.1; Debian GNU/Linux 13 (trixie), x86_64, in an LXC container; Ghidra 12.1.4 PUBLIC; OpenJDK 21.
Target and artifact context
x86-64 ELF executable (PIE,
ET_DYN, with DWARF), 17,064 bytes, built by Debian clang 19.1.7 from the two-function source above.Interface
CLI
Earliest failure stage
Unknown
Relevant output or evidence
Wall-clock times from bash
time. After the four queries,snap.json(63,659 bytes) contains the decompile entry: the operation appears in itsentriesand the first run'sevidence_idin its Evidence bundle. The decompile Evidence records onlyparameters: {"procedure": "main"}.Typed outcome or recovery expected
A cache hit, as for
analyze, without starting Ghidra.Analysis or suspected cause
Not established. Hypothesis, not checked against the source: the CLI resolves a
--procedurename through the provider before it looks for an exact cache hit, so the provider starts even when the snapshot holds the result. Decompiling by address was not tested.Additional context
NOT_ENOUGH_INFO for a last known good version: this was first noticed on 28 Oct with a fork build of an ESP-IDF Xtensa app (
--procedure app_main), and reproduced here onmain.Current Ghidra document and source controls
On REA
d7df9df33plus the unrelated draft #8867, real Ghidra 12.1.4/JDK 21 on macOS arm64 was exercised through stdio MCP in both schema profiles. For a fresh imported program, repeatedprocedure_pseudo_codewithoutdocumentdid not report replay and produced no snapshot entry for that request. Selecting the actuallist_documentsresult caused the second call to replay; its snapshot entry also replayed after reopening. The one-shotdecompileCLI does not advertise a document selector. These are separate controls from the original Linux CLI timing and do not establish a new end-to-end timing.Source inspection shows document-scoped calls without a document are excluded by
isSourceEvidenceRetainable/isSnapshotCacheable; this is a different mechanism from the original issue's hypothesis that name resolution starts the provider before lookup. A saved-project control with a synthetic historical source did not replay even with an explicit document because its source-bearing execution is excluded by a separate fail-closed rule; see #8869. The owned target and saved project's descriptor hashes were unchanged.cc @gensokyo-dev @kaoru0822-kitauji @N0zoM1z0
@xu91102 commented on GitHub (Oct 30, 2026):
I reproduced this on fresh main
317bf3fe235e655b2d752d3be261cc0da7d00f2bbefore making any product changes, using the real compiled public CLI, official Ghidra 12.1.4 (native decompiler built from the same release for macOS arm64), JDK 21, and an owned two-function Mach-O compiled withclang -O1 -g. The target was analyzed, never executed.With the same target,
_mainselector and snapshot, the first/repeateddecompilecalls both exited 0, returned the same Evidence ID, and each started a Java provider process: 10.39 s / 10.24 s.analyzeon the same snapshot was a positive control: 12.16 s initially / 3.26 s repeated, with no observed Java process on the replay. These are local wall times, not a general performance guarantee or model-token measurement.The saved snapshot contains the
procedure_pseudo_codeEvidence with{procedure: "_main"}, but no corresponding provider or workflow cache entry; thebinary_overviewcontrol has its workflow entry. Source tracing points to documentless provider-cache admission rather than a failed decompilation. A one-shot CLI target binding needs to be distinguished from a persistent session's implicit document, while preserving ordinary session/export retention bounds, exact target/profile/selector matching, live-result exclusions, and Windows native-source admission.I checked the actual relevant production changes in #2025/#3531/#1948/#7486: companion/profile identity, persistent Ghidra project storage, and target-language admission respectively, rather than this missing exact one-shot result binding. I have not run their heads. No fix has been implemented yet; the baseline outputs, snapshot, target digest and process-observation records are retained locally.
Update: the fix is now published as Draft #8089 at
f4a622c2b1833a1ae286159b9cc8f02be8990a6d(base317bf3fe). The shared snapshot owner admits only the exact explicit one-shot Ghidra pseudocode context; persistent implicit-document and export policies remain unchanged. Real same-input controls now replay identical Evidence without observed Java startup, with legacy migration and target/selector refusal controls preserved. Final focused/README validation is 172 distinct passes and 2 existing Windows skips; check/docs/discovery/package/pack and frozen independent Standards/Spec reviews pass. Dedicated installed-package Ghidra, Windows/Linux Ghidra and full agent/model workflows are not run. Upstream CI is separate and still being followed. Human readiness declarations remain unchecked on the Draft. No issue-close or foreign-PR mutation was made.@bonro commented on GitHub (Oct 30, 2026):
We offer the full series of GPT models at 0.2x official pricing and the full series of Claude models at 0.3x official pricing, available now at lanmu1313.top.