mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #8274] [Design] Make real Ghidra and Kuna workflow regressions a visible CI gate #6518
Open
opened 2026-11-01 21:11:51 +00:00 by bsakaguchi
·
14 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#6518
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/8274
Before submitting
Decision needed
What real-provider CLI/MCP regression workflows should run as a reliable, explicitly reported Ghidra/Kuna gate for relevant changes, and which heavier cases belong in scheduled or manual qualification?
Context and evidence
At source revision
e6d061897, the testing guide already prioritizes public real-provider workflows, then production-boundary integration and producer goldens.verify:ghidraandverify:kunaexist and have meaningful real-provider checks. In the inspected workflows, normal CI conditionally calls the verified Ghidra bridge compilation/probe workflow; the separate real Windows Ghidra workflow isrepository_dispatchonly. I found no CI workflow invocation of the POSIX host-nativeverify:ghidraorverify:kunascripts. This is a workflow/source observation, not proof that nobody runs those scripts elsewhere.The distinction matters for observed regressions:
Expected interaction with targets
Read source-owned fixtures, launch caller-supplied or CI-provisioned analysis tools, and write owned temporary projects/caches; no target execution is required for these examples.
Boundary details (optional)
Distinguish required, optional, skipped, unavailable and failed lanes in the check result. Pin or verify provider and JDK versions, clean owned resources, preserve caller-owned artifacts, and avoid treating fake providers as real-provider proof. Keep existing authority boundaries and do not commit binary/project artifacts. Test goals should be selected from analyst workflows and independent expected facts, not raw API coverage.
Options and tradeoffs
Evaluate a bounded Linux real Ghidra/Kuna public-workflow smoke gate for relevant PRs plus broader scheduled/manual cross-format and lifecycle qualification. Establish install/licensing and hosted-runner availability before prescribing a required gate. Maintain failure-path integration tests and producer goldens where real tools cannot reliably trigger the condition. Existing focused tests may be removed only after a stronger check retains their distinct failure coverage.
Verification available so far
I have a prototype or observed results.
Success criteria and open questions
NOT_ENOUGH_INFOfor CI cost and availability today.References
Related implementation issues: #8172, #8238, #8226, #8225, #8169. This is a testing-gate and scenario-selection discussion; it does not propose resolving those behavior contracts by assertion alone.
@morluto commented on GitHub (Oct 31, 2026):
Upstream harness is a separate testing layer
I built
decomp_test_dbgfrom the exact upstreamv1.986source tag (cb2279cab17fb8be9b7b005c3df9955eea78b551) and used it with the installed Kuna 1.986testwrapper, that tag's test corpus, and the release-extracted SLEIGH tree. Three selected XML cases (forloop1,bitfields,ccmp) produced 36/36 passing data assertions. A deliberately impossible, temporary baseline made the same wrapper exit 1 withPARITY FAILand the missing sentinel inregressed; the JSON's inner harnessreturncoderemained 0 because the harness itself passed. No baseline was rewritten.The wrapper warned that the two executables are different builds: release CLI version
1.986versus source-built debug harness version0.1.0; both reported source fingerprintde15b95c1300618b. The harness runs its own linked engine, so this is a selected upstream source-built-engine test and a CLI wrapper/exit-status control, not proof that REA or the installed release's decompiler engine passed these cases. It also does not cover REA Evidence, session lifecycle, or public CLI/MCP integration. The released package did not include this separate harness.For the proposed REA gate, upstream tests can complement but cannot replace a real public REA workflow against the provisioned provider. If an upstream
testwrapper is ever used in automation, check its process exit status as well as the JSON fields; the deliberately failed baseline demonstrates why the nested harness return code alone is insufficient. This was one local bounded check, not a CI cost measurement or a proposal to run the complete upstream suite.@morluto commented on GitHub (Oct 31, 2026):
Dependent-function cache control with real Ghidra
On REA
b43c329df779708e43ae297f498a844e45d9c923/ Ghidra 12.1.4, I exercised a source-owned arm64 Mach-O where_evaluatecalls_adjust, and_adjustreads_global_count. A real MCP session first requested both functions' pseudocode and the caller's complete dossier twice. After an ephemeral rename of_adjusttoaudit_cached_callee, the next caller pseudocode and caller dossier showed the new callee name. After renaming the data label toaudit_cached_global, the next callee pseudocode showed the new global name. The same address-only call graph remained unchanged, as expected for name-only edits. The original retained caller dossier remained retrievable and still showed the old name as historical Evidence. All calls and close succeeded; the target hash was unchanged and it was not executed.This is a positive cross-function cache-invalidation control, not evidence of a stale-result bug or of general concurrency/alias handling. The existing real-provider verifier already primes inventories before a same-function edit and checks the edited dossier; a future workflow regression could additionally assert dependent caller/callee renderings and retained historical Evidence without replacing those checks. The session snapshot remains a distinct immutable feature; this test did not save one after editing. No timing or autonomous-agent behavior was measured.
@morluto commented on GitHub (Oct 31, 2026):
A real-provider test-gap control for #8277, without changing the suite:
The existing host-native Ghidra verifier's
verifyUnresolvedCallEvidenceis meaningful E2E coverage: it checks a function-pointer parameter with no reported target and expects partial coverage, an unresolved call, and an unknown path. I compiled the repository's actualtests/conformance/ghidra/inventory.con macOS arm64 and exercised that assertion subset through real Ghidra 12.1.4/REA stdio MCP. It passed: one unresolved call, partial coverage,goal_status: unknown, and a residual unknown. This was the assertion subset, not a run of the complete verifier.I then built a separate x86-64 ELF containing both a call through an unknown function argument and the writable-slot sequence from #8277. On the same binary and Ghidra session, the targetless argument call gave the same partial/unknown result, while the call with one reported
resolved-indirectcandidate returned complete coverage andnot_reachedfor the distinct target written into the slot. Both fixtures' digests stayed unchanged; neither was executed. The difference is not evidence that testing was absent: the existing test selects the targetless case and does not exercise this resolved-candidate-plus-other-possible-target shape.A regression for the second shape needs its own oracle: retain the reported candidate while ensuring an unproven alternative is not ruled out. It should not blindly assert that a resolved candidate belongs in the existing
unresolved_callsarray, whose semantics may differ. A real public-workflow fixture can provide the independent slot/write/control facts; controlled boundary tests can cover cases a real provider cannot reliably reproduce. No CI execution or cross-platform coverage is claimed by this control.@morluto commented on GitHub (Oct 31, 2026):
Another concrete real-provider coverage distinction, following Kuna #1349 and REA #8328:
stripleft only__mh_execute_headerin the export list. Separately, defaultstripon a source-owned dylib removed conventional symbols while keeping its function and data export-trie names. In real current-main MCP/Kuna tests on the original dylib and the copies stripped with defaultstripandstrip -N, all three exposed the same function address and address-selected pseudocode; the exact export name resolved only on the original, whileinspect_machoreported it on all three. The first exploratory name query omitted the leading underscore and failed even on the original; the corrected comparison used the exact export spelling.macho_stripped_main.pyintentionally clears the export trie for itsLC_MAINrecovery test. That fixture serves a different purpose from a retained-export test; this observation does not establish the full upstream test inventory.A useful additional regression would exercise a tool-produced stripped dylib with function and data exports, independently inspect its export trie, and check name-to-address handoff and callable-versus-data uncertainty through the public workflow. A no-export stripped control remains valuable. This was a targeted real MCP comparison, not a rerun of the entire verifier or CI, and no target was executed.
@morluto commented on GitHub (Oct 31, 2026):
On current main
60149282fcfc05ac32fbc94434c107710120da6f, I locally applied open PR #8258's exact two files and ran the real host-native Ghidra verifier: it passed on macOS arm64 / Ghidra 12.1.4 / JDK 21 with explicitJAVA_HOME, reporting four fixture variants, 433 successful and 52 rejected boundary calls,cleanup:complete, and verified no remaining descendants. This is an actual combined-tree run, not hosted CI. Main without #8258 previously failed the comparison input allowance (#8172); the JDK discovery issue #8171 is separate.The passing lane is meaningful but its oracle does not establish the two currently reproduced properties:
scripts/lib/native-value-e2e.mjschecks the shape of each node'sevidence_idand looks up three top-level records in the bundle, but it does not resolve all per-node/procedure/edge IDs after warm snapshot replay. The real warm test in #8282 finds both procedure IDs missing offline.A useful real public-workflow regression should check both positive and negative controls and actual Evidence closure, rather than only an ID regex or only targetless callbacks. The current conditional
ghidra_bridgeCI job does compile against a pinned SDK and runs real focused ARM/Thumb and decode probes; I did not find the full POSIXverify:ghidraorverify:kunacommands invoked by the checked workflow sources. The separate Windows lane is dispatch-triggered. This source inspection is not evidence about any external/private CI or manual runs.@morluto commented on GitHub (Oct 31, 2026):
A further real-provider lane now has a complete local control: on main
60149282,npm run verify:ghidra:swiftpassed on macOS arm64 with Swift 6.3.2, Ghidra 12.1.4 and explicit JDK 21. Its report covered debug and without-dSYM Swift inventories and the source-owned string-literal and unresolved-jump fixtures; verifier lineage reported no descendants. This is one host and is not a hosted-CI pass. The earlier compilation failure is fixed by merged #8325; full details: #8188.A source search of
.github/workflowsandscripts/cifor the literalverify:ghidra:swift/verify-real-ghidra-swiftfound no named invocation on this revision. That is a limited configuration observation, not proof about external CI or dynamically generated commands. It may be useful when deciding which real-provider lanes are visible as gates.@morluto commented on GitHub (Oct 31, 2026):
A concrete example of why a passing real-provider lane is not, by itself, an independent correctness oracle:
On current REA main
60149282,npm run verify:kunapassed with real Kuna 1.986 on its source-owned symbolized/stripped fixture and reported complete cleanup and no remaining verifier descendants. I separately rebuilt its exact fixture source, verified it is byte-for-byte the same source text as the current script, and inspected its Mach-O instructions withotool. FourBLsites inmainwere at0x100000540,0x10000054c,0x100000558, and0x100000568on this build.For each site, direct Kuna
xrefs --to <site>reported adataedge from the site to itself, and real REA/Kuna MCP returned that same source address. REA/Ghidrainspect_native_instructiondecoded each as a direct call to a different destination, and Ghidra xrefs to each site returned no reference. This matches the independently investigated upstream issue Kuna #1334; it is not a claim that self-references are always wrong. The rebuilt fixture SHA-256 was unchanged and it was never executed.Source inspection explains the gap for this case: the current real lane checks that expected code entries are present and verifies incoming references to those function entries. Its native-xref comparison checks REA's projection against the same Kuna producer, not a separately established reference oracle. It does not query the four instruction addresses as targets, so producer and adapter can agree on an erroneous self-edge without failing that check. This is a scope of the exercised test, not evidence that the lane has no value or no independent checks elsewhere.
A targeted public-workflow regression can include known call-site xref negatives and a legitimate self-address positive control, while keeping REA-to-provider projection checks and the existing lifecycle coverage. The tested binary is a separate rebuild of identical fixture source, not the ephemeral binary retained from the verifier run; exact addresses are build-specific. One host/release is not a prevalence measurement.
@morluto commented on GitHub (Oct 31, 2026):
Another concrete test-selection example: #8349 reproduces real Ghidra decompile-directory profile and layout mismatch errors via MCP/CLI. The safety boundary works and output files are preserved, but the generic recovery does not identify the mismatch. On current main, the 59-test source suite and the selected CLI/MCP boundary suites all pass; the existing mismatch assertion checks only that the fixture-provider rejection says
does not match, while the CLI test uses fake Kuna for successful resume. Checked real-provider verifier sources have nodecompile_allinvocation.A public workflow regression should start with a real export, assert a matching resume, induce a different known profile or layout, check both the intact outputs and the agent-facing error/recovery, and include malformed-journal handling. Profile differences and session edits are distinct: the mixed-state Ghidra example in #8260 intentionally stays within one profile and should not be silently rewritten. This is a proposed test after the behavior contract is settled, not an assertion that a new required CI lane is currently affordable.
@morluto commented on GitHub (Oct 31, 2026):
A concrete real-provider regression candidate: #8362 reproduces a two-hop direct static call path that REA/Kuna 1.986 reports as
not_reachedwith complete coverage, even though explicit Kuna disassembly and Ghidra identify the missing edge. Both MCP output schema profiles reproduce it; an ordinary direct-call positive control succeeds. The existingverifyKunaReferenceschecks an ordinary expected caller and reached path; that check has a useful oracle but does not exercise this section/inventory boundary.Proposed test after settling the coverage contract: a source-built fixture with the two-hop path, an ordinary direct positive and unrelated control, and an assertion on the resulting uncertainty or recovered evidence through the public workflow. This is evidence for scenario selection, not proof that any existing CI lane ran or failed on this fixture.
@morluto commented on GitHub (Oct 31, 2026):
Positive real-provider workflow evidence for test selection: on REA
d54a4661da20382ad8456564a08569fdd24131c5/ Ghidra 12.1.4, I compared public MCPsearch_bytesagainst an independent byte-array oracle on an unexecuted 59-byte x86-64 raw fixture. Twelve bounded cases matched exactly, including overlapping matches split across pages, whole-byte wildcards, partial masks, wildcard-plus-mask, excluded and included end boundaries, an absent pattern, and first/last-byte matches. The 12 cases used 39 search calls; all returned addresses mapped to the expected source offsets. Calls used the full advertised SDK output schema. A separate public CLI masked-wildcard query matched the same oracle; target SHA-256add538a96842a7f77d0f9993d540f4aba9a92e48e452dbf20ca1596f6ce5f94bwas unchanged.The existing real raw verifier already checks a 1,005-match continuation, one partial mask and overlapping matches in a single page. This additional run checks overlap across page boundaries and combined mask/wildcard semantics against an independent finite oracle. It is evidence that these cases worked on this provider/host, not a found bug or architecture-wide proof. If a regression is added to a provider gate, the small fixture and oracle could be adapted without replacing existing malformed-input and lifecycle coverage; no new repository test has been committed in this check.
@morluto commented on GitHub (Oct 31, 2026):
Another real-provider example for this testing discussion: #8374 found that Ghidra
search_stringsandsearch_proceduresdropped facts present on the corresponding list rows, andtrace_featureconsequently lost them. The existing host-native verifier did exercise real Ghidra search, but its long-literal assertion explicitly expected an{address,value}row; the simulated adapter fixtures likewise encoded the unqualified shape. That is a case where an existing E2E check alone was not a sufficient oracle.Draft PR #8376 adds a real public-MCP check that compares the exact list row with the search row and trace match for a string, internal function, external function and an available thunk. Against base
d54a4661the check failed at the first missing string qualification; with the change it passed all four in the tested macOS arm64 fixture. The updated full host-native Ghidra lane passed on the PR commit with the separate #8172 retained-Evidence verifier workaround applied in an isolated checkout: debug, stripped, type-layout and jump-table fixtures, 441 successful and 52 rejected boundary calls, and complete cleanup. The regular unmodified-base lane still stops at #8172. No target was executed.This suggests selecting cross-workflow invariants and negative controls for the real-provider gate, rather than treating tool invocation or a captured old output shape as sufficient. The case is one host/provider and does not replace malformed-output, cancellation or cleanup tests, nor establish a CI runtime budget.
@morluto commented on GitHub (Nov 1, 2026):
Selection completeness control for the real Kuna lane
I compared the selection behavior with REA's current real-provider verifier, using clean main
6e9ee97a, verified Kuna 1.986 on macOS arm64, and an owned x86-64 ELF target pair.verify-real-kuna.mjs --targets <dir> --functions sequence,rea_missing_selectionexited 1 before running the fixture lane, reported the missing function, and reported cleanup complete with verified process lineage and no remaining descendants. The same command with--functions sequencepassed the complete lane: source-owned Mach-O fixture, its stripped copy, the caller-supplied ELF, and its stripped copy, with cleanup complete and no remaining descendants. The targets were statically analyzed, not executed.This is a useful negative/positive real-lane control for this one selection boundary. REA does not invoke
kuna testin the searched source, scripts, workflows and non-generated docs; its verifier has its own explicit check that every requested function was found somewhere among caller targets. That global check does not claim every named function occurs in every target. The upstream test wrapper's different partial-selection behavior is tracked separately in Noelo-Lab/kuna#1375; the two test suites exercise different engines and contracts.@morluto commented on GitHub (Nov 1, 2026):
Real-provider test-selection control for #8171: on main
6e9ee97a, withJAVA_HOMEunset and JDK 21 onPATH, the real Ghidra 12.1.4 COM verifier completed its public CLI/stdio MCP workflow with unchanged fixture and complete cleanup. The general verifier previously failed with that setup because its direct launcher lost the inspected JDK; a deliberately invalid explicitJAVA_HOMEwas separately rejected despite the valid PATH JDK. Details and the proposed full-lane regression are in #8171. A green real-provider lane therefore cannot establish another lane’s setup handoff; this is one host, and the general lane also needs the independent #8172 fix before a full completion assertion.@morluto commented on GitHub (Nov 1, 2026):
Distinguish real-provider workflow checks from agent-routing evaluation
Source check on REA main
6e9ee97a: the existingnativeProviderScenariois a useful open/close and missing-provider routing/cleanup check. It explicitly setsrequiresEvidence: false, accepts the documentedprovider_unavailableoutcome, and does not grade free-form answer correctness. The client verification guide likewise says it does not establish real native-engine analysis. This is a documented scope boundary, not a false pass against its current contract.One possible additional, opt-in scenario is a real Ghidra or Kuna investigation on a source-owned target with independently established facts and a bounded counterexample, checking the agent's actual selected tools, source citations, unknowns, and cleanup. Keep unavailable providers reported as skipped/unavailable rather than a successful engine evaluation, and preserve the existing no-provider routing scenario. Establish credentials, cost, host/provider availability, grading and authorization before making it a gate. The scripted provider workflows and prompt comparison in #8435 did not measure autonomous selection; no real-agent evaluation was run for this observation.