mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #8330] [Bug] Procedure search omits secondary names accepted by exact lookup #6548
Closed
opened 2026-11-01 21:12:08 +00:00 by bsakaguchi
·
7 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#6548
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 31, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/8330
Originally assigned to: @kaoru0822-kitauji on GitHub.
Before submitting
Area
Native analysis or decompilation
Observed behavior
With a source-built ELF and real Kuna 1.986,
search_procedures({pattern:"audit_transform"})returned[], althoughprocedure_address({procedure:"audit_transform"})reported two matching entries. A unique alias showed the same mismatch: search forsub_1334returned[], while exact procedure lookup resolved it to0x1334. Literal and regex search both missed the shared alias. Primary-name searches found the two procedures.Reproduction
On a macOS arm64 host with clang and lld, build a disposable x86-64 shared object:
Use version script
AUDIT_1 { global: audit_transform; local: *; }; AUDIT_2 { global: audit_transform; } AUDIT_1;,clang -target x86_64-unknown-linux-gnu -c versions.s -o versions.o, andld.lld -shared --version-script=versions.map versions.o -o libversions.so. Open it in stdio MCP withopen_binary({path,provider_id:"kuna"}), then call the searches and lookups above. Directkuna functions libversions.so --jsonreported primary namesaudit_v1/audit_v2andaudit_transformamong both entries' aliases. Exact addresses may depend on the linker. A fresh cache and connection reproduced the result.Expected behavior
The advertised
search_procedurescontract says it searches every analyzed procedure name and results are complete. Decide whether resolvable provider aliases belong in that search, and make the returned coverage and documentation accurate. If aliases are included, retain which name matched, avoid collapsing different entries with the same alias, and preserve their primary names and addresses. Do not infer that every alias is a separate procedure.Impact and scope
An agent relying on a negative search cannot discover a name that REA's exact lookup accepts; the inventory output used here does not expose those aliases. Exact lookup of the shared alias correctly refuses ambiguity and gives both addresses; selecting an address decompiled the intended distinct bodies. This is a single source-built ELF on one host and one Kuna release; other providers, formats, CLI and autonomous agents were not checked for this particular behavior.
REA version
a989c0e458c91af177e097abd7be0fd021b0401dRuntime and platform
Node 24.22.1, macOS 26.3 arm64, Kuna 1.986, stdio MCP compact schema profile.
Target and artifact context
Source-built x86-64 ELF shared object; SHA-256
32b6615f3ff75eb25ae9b26bee9cc43f94f5d55896aa69dc670de2c47dca64c6. The static analysis did not execute or modify it.Interface
MCP
Earliest failure stage
Native analysis or reconstruction
Relevant output or evidence
list_proceduresreturnedaudit_v1at0x1334andaudit_v2at0x133a; name search returned an empty array for the alias. Exact shared-name lookup returnedaudit_transform names 2 Kuna entries (0x1334, 0x133a); select one by address.inspect_native_exportsindependently returned twoaudit_transformrows with versionsAUDIT_1andAUDIT_2at those source ELF values. That format evidence is separate from provider inventory and does not prove runtime binding.Analysis or suspected cause
Source-derived explanation at this revision:
KunaSessionClient.#procedureListfilters each inventory row's primaryname; its#indexindexes bothnameandaliasesfor exact selection. Direct Kuna JSON exposes the aliases, so this reproduction concerns REA's search projection, not a request for an upstream Kuna fix.Additional context
Related to candidate name and address handoff in #8183 and cross-image selection in #8221. Suggested validation: real-provider MCP search and exact lookup for unique and shared aliases; negative and primary-name controls; regex and literal search; document omission and duplicate semantics; preserve adapter-specific coverage and avoid implying that all provider names are executable or exhaustive.
@gensokyo-dev @kaoru0822-kitauji @N0zoM1z0
Real-provider control of PR #8520
On exact PR head
c37e216f95b3fbc90ed2785c05c1c24e377995fd, real Kuna 1.988 and Ghidra 12.1.4/JDK 21 were exercised through SDK stdio MCP on a source-built x86-64 ELF withaudit_primaryandaudit_aliasat the same entry and a direct caller. In both full and compact profiles, literal and anchored case-sensitive regex searches returned one procedure for each name. Kuna choseaudit_primaryas its primary and returnedmatched_aliases: [audit_alias]for the alias search; Ghidra choseaudit_aliasas primary and returnedmatched_aliases: [audit_primary]for the other search. Exact lookup of either name selected the same provider entry; a negative search returned no rows.trace_featurefor the previously missing secondary name included the procedure and its references for both providers. Kuna retained one owner-unavailable unknown; Ghidra resolved the direct caller and also returned other static references. Successful responses validated against the fetched advertised output schemas using Ajv 2020 with strict and format checks disabled. The fixture SHA-25601edfcb21b1bd4cd1f2c92ecf7dedfd1b9f3828c7d6a5185fef25a8e088e8f9eremained unchanged; it was not executed. This is a one-host, one-fixture control; the separate shared-alias and offline controls below cover a different fixture. A separate namespace control is recorded below; performance and cancellation were not covered.Shared-alias and offline handoff control
At the same #8520 head, real Kuna 1.988 and Ghidra 12.1.4 MCP in both compact and full profiles analyzed a separate x86-64 ELF where
audit_transformnames two versioned entries andaudit_callercalls each. Literal and anchored case-sensitive regex searches returned two distinct entries with either provider. Kuna returned primary namesaudit_v1andaudit_v2, each withmatched_aliases: [audit_transform]; Ghidra returnedaudit_transformas each primary name. Exact lookup refused the shared name and supplied both candidate addresses.trace_featureretained both procedures; Kuna reported two references and two owner-unavailable unknowns, while Ghidra returned four static references and no residual unknowns.A summary search followed by the selected
matched_aliasespage was exported, imported into a fresh target-free MCP server, and reproduced the same normalized page for each provider and schema profile. Successful responses validated against the fetched advertised schemas using Ajv 2020 with strict and format checks disabled. The fixture SHA-2561f158b0ea39494fcd3424844a1b02511325c567e073fbc0ed045e0bef5f0abfeand exported bundle bytes remained unchanged; the target was not executed. The first test-harness run encountered an Ajv duplicate schema ID during reconnection, and an initial retry encountered an existing output file; a corrected harness with fresh validator instances and new bundle paths completed all four cases. This is one host and one fixture, not general provider completeness or runtime binding verification.Real namespace and leaf-name control
On the same #8520 head and real Ghidra 12.1.4/JDK 21, a source-built macOS arm64 fixture with C++ ABI symbols for
alpha::same,beta::same, andouter::inner::sameproduced three distinct Ghidra procedure entries. Exact lookupsamerefused ambiguity and listed all three addresses; anchored regex search^same$returned all three qualified primary names in both full and compact MCP profiles. Each qualified lookup and each returned-address decompilation succeeded. On the separate #8509 baseline7f344af1aa0a78fd4e331dbbc9c30d38e4cfb796, the same Ghidra search returned no rows while exactsamelookup was ambiguous.Real Kuna 1.988 on the same fixture did not accept
sameas an exact selector, and its anchored^same$returned no rows in either version; its literalsamesearch found the three qualified primary names, and each qualified exact lookup succeeded. This is an observed provider-specific selection rule, not evidence that Kuna promised leaf-name lookup. Successful output validated against the fetched advertised schemas using Ajv 2020 with strict and formats disabled. The fixture SHA-256ca042de0b9835367a14718854e861df275bfbd075570d9ca48d97dafd4c3165dwas unchanged and it was never executed. One generated Mach-O and host do not establish general namespace or demangler coverage.@morluto commented on GitHub (Oct 31, 2026):
Effect on a composed analyst workflow
I added an actual source-authored caller to the same versioned ELF fixture. Independent
llvm-objdumpshowed direct calls at0x1348→0x133cand0x134d→0x1342. Real REAa989c0e/ Kuna 1.986 MCP returned:procedure_address("sub_133c")→0x133c, butsearch_procedures("sub_133c")→[].trace_feature({query:"sub_133c"})succeeded withmatches:[],references:[],truncated:falseandresidual_unknowns:[]. Its limitations warn that Kuna string scanning is incomplete, but do not state that procedure aliases were excluded.xrefs("0x133c")andprocedure_callers("0x133c")both returned0x1348;trace_call_path(0x1348,0x133c)reached it. Exact-address selection is a working manual alternative for this fixture, subject to the reported reference-coverage limitations.trace_feature({query:"audit_v1"}), the primary name for the same entry, found a procedure and reference but then failed on Kuna's unavailableresolve_containing_procedure(#8288). The missing alias avoids that step; it is not evidence that the primary-name workflow succeeds.The source-export alias
audit_transformis shared by two entries: exact lookup reported both as ambiguous, buttrace_featurereturned two matching strings and no procedure matches or references, again with no residual unknowns. It did not claim those strings were procedures. Real CLIrea trace ... --provider kuna --format jsonreproduced the same alias outcomes and the primary-name failure. This is one static controlled fixture, not evidence of runtime execution or general reference completeness. Target SHA-2561f158b0ea39494fcd3424844a1b02511325c567e073fbc0ed045e0bef5f0abfewas unchanged; no target was executed.A useful regression should check both the primitive search and its composed/CLI consumer, including unique and shared aliases. Preserving partial matches when containment is unavailable is the separate #8288 decision; avoid turning an unobserved alias into a definitive absence.
@morluto commented on GitHub (Oct 31, 2026):
Existing checks and a proposed regression
Source inspection at
a989c0e: the public real-provider laneverify-real-kuna.mjsasserts that known function addresses appear inlist_procedures, then exercises references and pseudocode by address. It does not callsearch_proceduresortrace_featurein that script. The selected simulated-inventory testkunaProvider.test.tssearches primary names and separately tests duplicate primary-name rejection; it does not compare alias search with exact alias lookup. These observations concern those checks, not every test in the repository. No test suite was run for this source review.Proposed higher-level regression: use a source-owned binary for which the real provider reports a unique alias and a shared alias, verify exact lookup and search against that same provider inventory, then exercise the public feature trace or assert an explicit partial result when containment is unavailable. Include an independently known call site, a primary-name control, both search modes, and CLI/MCP where supported. Keep duplicate-entry ambiguity and provider-reference limitations explicit. The calling fixture in the preceding comment supplies an observed example, but its exact generated alias addresses are linker-dependent.
@morluto commented on GitHub (Oct 31, 2026):
Same-address exported names: Ghidra and Kuna
A separate source-owned x86-64 ELF has two defined, global function symbols,
audit_primaryandaudit_alias, at the same entry. A caller directly calls that entry;llvm-readelfandllvm-objdumpindependently show both symbols and the call. The providers chose different primary names, exposing the same task-level gap without relying on Kuna's generatedsub_alias.On REA
a989c0e/ Ghidra 12.1.4 through MCP:list_proceduresidentified the function at0x1012a0asaudit_alias;list_namesalso containedaudit_primaryat the same address as an imported, non-primary label.procedure_address("audit_primary")resolved0x1012a0, andfind_xrefs_to_name("audit_primary")resolved it and included the direct call site0x1012a6(as well as other reference sites).search_procedures("audit_primary")returned[].trace_feature("audit_primary")succeeded with two matching string observations, no procedure matches or references,truncated:falseand no residual unknowns. The corresponding trace for Ghidra's primaryaudit_aliasincluded the function and the caller. Realrea trace ... --provider ghidra --format jsonreproduced both results.On the same binary, direct Kuna 1.986 listed
audit_primaryas the primary name andaudit_aliasas an alias at its source coordinate0x12a0. REA/Kuna exact lookup accepted both; search and the procedure portion oftrace_featureomittedaudit_alias.find_xrefs_to_namewas unavailable for that provider. The source-derived Ghidra boundary mirrors the earlier Kuna analysis:searchmatches primary procedure inventory values, whileresolveProcedurealso checks symbols at exact function entries. Interior labels are deliberately excluded from that selector.This is one controlled fixture, not a runtime or broad-coverage claim; the target was not executed or changed (SHA-256
01edfcb21b1bd4cd1f2c92ecf7dedfd1b9f3828c7d6a5185fef25a8e088e8f9e). A solution should preserve the selected matching spelling, primary/secondary provenance and same-address identity; arbitrary data or interior labels must not become procedures merely because they have names. For exact Ghidra names the existing name-to-xrefs workflow is a working alternative; a broad discovery query has different needs. I broadened this issue's title to reflect both reproduced providers.@morluto commented on GitHub (Oct 31, 2026):
Evidence handoff control on that same Ghidra fixture:
procedure_pseudo_code("audit_primary")succeeded and rendered the primary function nameaudit_alias.analyze_function(detail:"summary")succeeded for each spelling and reported the same canonical entry0x1012a0and primary name. Their retained parent Evidence records had distinct IDs and preserved the respective requested spellings in theirparameters; both summary views remained available after bundle export and import into a fresh server with no binary open. The target and bundle hashes were unchanged.Thus exact selection and retained request provenance are useful existing building blocks for this case; the gap is discovering and carrying a matching secondary name into the feature workflow. This control does not prove two arbitrary names identify the same function or that every Ghidra symbol at a function entry has the same semantics.
@morluto commented on GitHub (Oct 31, 2026):
Shipped Mach-O and the provider boundary
A separately built arm64 Mach-O has two exported names at
0x2c0and two local names at0x2c8. With REAa989c0e/ Ghidra 12.1.4,list_namesretained both names at each entry; exactprocedure_addressresolved all four, butsearch_proceduresreturned only the respective primary function names. This extends the search discrepancy in this issue beyond the earlier ELF control.With Kuna 1.986, exact lookups of the other two names failed because direct Kuna itself did not include them in its inventory. REA
inspect_machoindependently returned both exported names at0x2c0(with source inventory marked non-exhaustive), and the caller could explicitly select that address. The local pair is not exposed by that export inventory. This producer-side loss is separate from REA search filtering aliases that Kuna actually reports; filed Kuna #1357. A solution here should not assume an omitted name exists in a provider inventory or promote arbitrary export/data labels to functions.A shipped Homebrew Brotli 1.2.0 arm64 library provides a realistic control:
nm -nmreports non-external_PrepareH40and_PrepareH41at0x3a04c. Ghidra exact lookup accepted both, but its search forPrepareH4reported only the primary_PrepareH41at that address. Kuna's own inventory and exact lookup omitted_PrepareH40, while decompilation by address worked. The fixture and shipped library hashes remained unchanged and neither was executed. This is a bounded witness, not an estimate of prevalence or autonomous-agent behavior.@morluto commented on GitHub (Oct 31, 2026):
Bounded recovery on the shipped Brotli example
The exact-name case has a short existing Ghidra path:
procedure_address("_PrepareH40")returned0x3a04c, andlist_names({address:"0x3a04c"})returned both_PrepareH40(imported non-primary label) and_PrepareH41(primary function) with their symbol metadata.find_xrefs_to_name("_PrepareH40")also resolved the exact name.address_name(0x3a04c)returned only the primary spelling, as designed.For the partial query
PrepareH4,search_proceduresfound other primary names but omitted_PrepareH40;find_xrefs_to_name("PrepareH4")returnedname_not_foundbecause it is an exact-name workflow.list_names(detail:"summary")retained 7,086 Ghidra-reported rows with discovery coverage unknown. Itsnative-inventoryview supports field selection and paging but rejected anamesfilter as an unknown argument. Paging with 64 rows found both same-address names on page 93 (source indices 5913/5914); a single request for all 7,086 rows also succeeded. These are call/row counts for one manually selected library, not latency, token-cost or autonomous-agent measurements. Page exhaustion does not establish that the provider discovered every symbol.This suggests a bounded name-search or retained-inventory filtering question in addition to exact lookup. Any solution should preserve every matching label's type, primary status, source and address, and avoid turning arbitrary labels into procedures. It should also keep the selected provider and its discovery limitations explicit; Kuna's separate missing-source-name issue is Kuna #1357. Target hash
32e38a8ab06c8770ea4bfaf11ea324d7bcb6fe5f07eaff9d6260f93984ee6729was unchanged, and the library was not executed.@morluto commented on GitHub (Oct 31, 2026):
A narrowly scoped unmerged experiment on REA main
60149282tests one possible shape: for Kunasearch_proceduresonly, match the primary name and each distinct provider alias, returning a row for each matched name/address; leavelist_proceduresunchanged. This is not a complete fix or a proposal to treat aliases as separate procedures.Real Kuna 1.986 MCP, on the same-entry ELF from the earlier comment: a regex matching both names returned two rows with one address (primary and alias), while a negative control remained empty and the procedure listing stayed unchanged. On the separate versioned ELF, literal and regex searches returned both addresses for the shared alias; the unique generated alias returned its single address. Exact shared-name lookup continued to reject ambiguity with both choices. No Ghidra changes were made. A row containing only
valueandaddressdoes not independently identify the canonical name, so this experiment does not settle the contract requested above.The interaction with #8288 matters: on each ELF with a caller, the baseline alias feature trace missed the procedure and returned a successful result; the experiment found it, then the composed
trace_featurefailed at Kuna's unsupportedresolve_containing_procedureand did not return the found matches. In a separate no-caller ELF, direct xrefs to the aliased entry were empty and the experimentaltrace_featuresuccessfully returned both procedure-name rows at the same address. This shows that alias discovery alone is not sufficient for a useful traced result when a reference requires containment; it does not establish a general rule about all providers or inputs.The experiment used a temporary worktree and real public MCP workflows, not simulated provider output. All three target digests were unchanged; none were executed. The changed code and captures were not submitted as a fix. Related partial-results discussion: https://github.com/morluto/rea/issues/8288.