mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 07:47:29 +00:00
[GH-ISSUE #8226] [Bug] Batch decompilation loses per-function provider failure associations #6500
Closed
opened 2026-11-01 21:11:42 +00:00 by bsakaguchi
·
7 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#6500
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/8226
Originally assigned to: @kaoru0822-kitauji on GitHub.
Before submitting
Area
Native analysis or decompilation
Observed behavior
A mixed
batch_decompilereports the selected function whose Kuna project export failed asunreadable_output, with advice to runrea doctorand reasonprovider returned empty pseudocode. The actual worker-stall limitation is retained only at the batch Evidence level, without an item association. A batch-only Evidence export contained the composed batch record and no per-function provider records or Evidence links in this test.Reproduction
stall:0x100000410and a one-second watchdog fordecompile-projectwith two jobs. REA creates a project export with that entry failed and other entries successful. This instrumentation forces the condition; it is not a claim of a natural stall.batch_decompilewithaddresses: ["0x100000430", "0x100000410", "0x100000400"]. The first entry succeeds, the stalled entry reportsunreadable_output, and the last entry is an invalid procedure selector. Counts and ordering are correct.evidence_linksarray. In a separate run, callingprocedure_pseudo_codefor the failed address produced a separate Evidence record with null result and the watchdog limitation attached to its procedure parameter.The batch-only run reproduced the mixed result in a second MCP session. NOT_ENOUGH_INFO: a standalone public fixture and test wrapper are not attached, and natural failure frequency is unknown.
Expected behavior
A caller should be able to determine which selected item carries a provider's per-function failure or caveat, and should not receive doctor guidance as the sole item-level explanation for a known watchdog failure. Preserve provider facts and uncertainty; distinguish empty pseudocode with an unknown reason from a provider-reported failure. Consider associating the observation and its limitations with the item or retaining inspectable linked Evidence, while keeping the aggregate limitations and ordered partial results.
Impact and scope
The provider reason survives in the batch as a whole, but its item association is not retained in the tested bundle. The single-item call recovers the association at the cost of another provider query. I did not test multiple different provider failures, Ghidra, CLI batch entry points, or an autonomous agent; their behavior and practical incidence remain unknown. The source binary was not executed and its SHA-256 was unchanged.
REA version
Source revision
53a4ab78451a0654e9c3beb3d43a5e371a288fcc.Runtime and platform
Node 24.22.1; macOS 26.3 arm64; Kuna 1.986 via an explicitly instrumented test wrapper.
Target and artifact context
Self-built arm64 Mach-O; target SHA-256
ffad1b70c6a5a7ef3f7c3f59126be516520210777d949b35e97c9067f272aa2d.Interface
MCP
Earliest failure stage
Transport or result projection
Relevant output or evidence
For the failed entry,
status: "error",code: "unreadable_output",details.reason: "provider returned empty pseudocode"; the batch's limitations separately stateKuna could not decompile this function: worker stalled past the per-function watchdog (1s); the worker was killed.evidence_links: []in the batch-only exported record.The directory-export verification already notes that batch output does not retain per-function caveat associations.
Typed outcome or recovery expected
Preserve the per-item provider observation and its recovery-relevant limitation or an explicit link to it, without claiming the provider failure is retryable unless known. A precise representation and bounded large-batch behavior need design and verification.
Analysis or suspected cause
Source-derived:
#batchPseudocodereceives the simplified result and maps null toAnalysisOutputError;executeComposedWorkflowaggregates successful source limitations by provider and operation. A fix should address the owning observation boundary instead of parsing text in the adapter.Additional context
Related #8167 concerns explicit recovery from a cached partial Kuna project, and #8181 concerns an omitted batch selection; neither describes per-item association in this batch result. Last known good version: NOT_ENOUGH_INFO.
@morluto commented on GitHub (Oct 30, 2026):
A real Ghidra 12.1.4 control on macOS arm64 gives a different outcome from the Kuna null-result case. With an owned 2,000-branch Mach-O and a one-second
ghidra.decompile_timeout_seconds, an MCP batch selected a fast function, the slow function, and the fast function again. It returned orderedok,provider_timeout,okitems with counts 2/1. The timeout item itself retainedretryable: true, the effective setting and specificupdate_analysis_settingsguidance. This timeout was a real configured deadline, not the Kuna injected worker stall.After setting the runtime deadline to 60 seconds, a second batch successfully decompiled the slow and fast functions in the same session. A prior fast-function rename and comment still appeared in its pseudocode. The target digest was unchanged. This is a useful existing recovery path and does not reproduce the missing failure association for typed Ghidra timeouts; it does not establish the behavior of null or other Ghidra outcomes, or of other providers.
The first batch's exported bundle retained the timeout within its item; its composed record had no Evidence links. The successful retry's slow pseudocode was 265,016 characters, and the full SDK response serialized to 576,454 bytes including both text and structured representations. This is one unusually large fixture and a response-byte observation, not a model-token or host-display measurement. The existing tool description already advises selected small batches and explains that complete bodies are retained. No throughput or general timeout-frequency claim is made.
@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):
An additional real Kuna 1.986 control on main
e6d061897exercises a null project result without an injected watchdog failure. The source-owned x86-64 ELF deliberately declaresfalse_funcas a function symbol whose bytes are in non-executable data; this is an adversarial fixture, not evidence of natural frequency or runtime behavior. A completed serial Kuna project export lists the entry but provides no body.A mixed MCP
batch_decompileselectedfalse_func, a separately discovered code entry, and an unknown address. The respective outcomes wereunreadable_outputwith doctor advice, success, and invalid selector. The batch-wide limitations included Kuna's explanation that this inventory entry has no exported body, but the first item did not associate it with the entry. A separateprocedure_pseudo_code(false_func)returned null with that same limitation on its own Evidence. This is a different provider outcome from the earlier injected worker stall; neither should be relabeled as the other or as proof of runtime behavior.On the same fixture, real Ghidra's batch returned pseudocode for both selected entries and an error for the invalid address; independent memory and instruction observations in #8168 show why a pseudocode answer alone does not establish executable code. The target digest was unchanged. This control supports distinguishing an observed no-body outcome from unreadable provider output and preserving its item association, while leaving the underlying inventory classification to #8168.
@morluto commented on GitHub (Oct 31, 2026):
An uninstrumented cold-versus-warm batch on a second source-owned Mach-O reproduces the no-body limitation association and generic item-level error; the cold batch also accepts the data symbol as pseudocode before export completes. Details and control: https://github.com/morluto/rea/issues/8168#issuecomment-6542191887.
@morluto commented on GitHub (Oct 31, 2026):
TypeScript SDK mixed-item contract control
I checked a different mixed batch against the live full and compact MCP output-schema profiles on REA
b43c329df779708e43ae297f498a844e45d9c923. A TypeScript MCP SDK 2.3.1 client explicitly supplied each tool definition returned bytools/listtocallTool, activating its output-schema validator. With real Ghidra 12.1.4 and Kuna 1.986 on a self-built arm64 Mach-O containing overloaded functions, all four provider/profile combinations returned normally: five ordered inputs yieldedok, error, ok, ok, error, with three successes and two failures. The successful result was accepted by each advertised schema; the target hash stayed unchanged and it was not executed.As a separate tool-error control, the same client received normal
isErrorresults forfind_xrefs_to_name(ambiguous input on Ghidra and unavailable general name inventory on Kuna). The installed SDK skips output-schema validation forisErrorresponses; their receipt is not proof those errors validate against a success schema. This control exercises ambiguity and a missing selector, not the intentionally stalled Kuna project failure in this issue, and does not establish that schema validation catches the semantic loss of per-item provider limitations described above.@morluto commented on GitHub (Oct 31, 2026):
Real-provider follow-up for merged #8323 on REA
2d5dec26c31662764c9adfe3ff996174901b8d49, Kuna 1.986, Ghidra 12.1.4 and the previously reported source-owned x86-64 ELF fixture. Real Kuna MCP batch[false_func, 0x1401, 0xdeadbeef]returned error/ok/error in order. The null-pseudocode item now reportedcapability_unavailable,provider returned null pseudocode, and its own provider caveat that this inventory entry has no exported body; it no longer directed the caller torea doctor. A separate single-function request confirmed null and the same caveat. The complete batch Evidence survived export and target-free import exactly. SDK validation against the compact advertised success schema passed.As a separate provider control, real Ghidra returned pseudocode for both selected entries and an error for the invalid address. This is a provider-observation difference, not proof that either provider's function classification is correct. The fixture hash was unchanged and it was not executed. This run used the natural null fixture; the earlier watchdog failure was injected and was not rerun here.
@morluto commented on GitHub (Oct 31, 2026):
Additional real-Kuna control after #8323, on REA
2d5dec26c31662764c9adfe3ff996174901b8d49and Kuna 1.986: the previously captured deliberately injected per-function worker-stall export now produces a batch with one successful neighbor, the stalled item, and an invalid selector. The stalled item's ownlimitationsinclude the exact one-second watchdog failure; its error iscapability_unavailable/provider returned null pseudocode, and it no longer recommendsrea doctor. A separate single-function query from that cache returns null with the same caveat. Both the batch and its item caveat survived export and import into a fresh server unchanged, and the SDK validated the compact success schema.In a separate server using the explicitly selected previously prepared clean cache, the same target, provider profile and selectors yielded a body for the formerly stalled function; the valid neighbor still succeeded and the invalid selector still failed. The target hash was unchanged and it was not executed. The watchdog fault was injected by a test-only wrapper, so this is not a natural timeout-rate measurement or a demonstration of automatic recovery. #8167 remains the recovery discussion.