mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
Open
opened 2026-10-31 00:37:15 +00:00 by bsakaguchi
·
4 comments
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
morluto/rea#3152
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 @kmatzen on GitHub (Oct 18, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/5117
Before submitting
Decision needed
Should REA add a provider-neutral, batch-oriented native machine-evidence export contract, distinct from exporting the complete Evidence ledger, that joins exact function and instruction facts needed for reconstruction and conformance testing?
Context and evidence
REA already exposes most ingredients, but across several scopes:
analyze_functionretains function identity/body, provider assembly, CFG, references, unresolved calls, pseudocode, native API observations, and bounded high P-code.inspect_native_instructionexposes exact decoded bytes, operands, flow, references, and decoder context for one address.inspect_analysis_viewpages retained native facets.export_evidence_bundleexports the complete investigation ledger.For a firmware reconstruction workflow, the missing operation is a stable batch projection joining those facts for a selected set of functions or address ranges. Today a caller must issue and reconcile many provider-specific requests or maintain custom Ghidra Java exporters. That makes it harder to preserve exact instruction bytes, function spans, delay-slot ownership, low/raw P-code, references, CFG edges, and unresolved computed transfers under one artifact identity and coverage declaration.
This arose while validating SuperH delay-slot literal recovery and building a source-owned SH-4 conformance corpus. The first fixture is a synthetic CC0 160-byte image containing ten literal-loaded tail thunks. Its expected manifest records exact instructions, delay-slot ownership, P-code invariants, references, CFG edges, and pseudocode invariants. No private target bytes are needed for the proposed contract or its verification.
Expected interaction with targets
Static provider analysis only. No target execution, process attachment, instrumentation, memory/register changes, configuration writes, or network access should be implied by this operation.
Boundary details
[entry, entry + length).Options and tradeoffs
export_native_machine_evidencethat returns or retains a normalized batch artifact. This is easiest for callers but adds a public persisted contract.analyze_functionwith optional exact instruction/P-code/delay-slot facets. This is smaller, but batching and provider-neutral export would remain caller-owned.A possible normalized record per function would include:
Verification available so far
I have a prototype fixture and observed results.
Success criteria and open questions
References
docs/native-investigation.md,docs/ghidra-provider.md,src/domain/native/nativeInstruction.ts, andsrc/ghidra/GhidraFunctionValues.ts.@Vinay-patle commented on GitHub (Oct 18, 2026):
Solution Summary
This change adds a provider-neutral, batch-oriented native machine-evidence export contract,
export_native_machine_evidence. It joins exact function and instruction facts (bytes, ordering, delay-slot ownership, references, CFG edges, unresolved transfers, and optional raw P-code) for a caller-selected set of functions or address ranges into one normalized artifact. The artifact is static-analysis only and is bound to the target digest, analysis profile, provider identity/version, language/compiler specification, and any load-image attestation.Callers no longer need to issue and reconcile many provider-specific requests, or maintain custom Ghidra Java exporters, to reconstruct firmware functions or run conformance tests.
Related Issue
Closes #5117
What Was Done
analyze_function(which leaves batching with the caller) or a view over retained Evidence (which still needs a batch producer).Key Changes
New schema and contract (
src/domain/native/): Adds theNativeMachineEvidenceExportartifact withschemaVersion, abindingblock (target digest, analysis profile, provider id/version, language and compiler spec, load-image attestation), aselection, acoveragesummary, address-sortedfunctions, and a canonical-JSONdigest.Per-facet status model: Every facet (
instructions,cfg,references,unresolvedTransfers,rawPcode,decompiler) carries a status ofavailable,unavailable,truncated, orfailed, plusomittedCount,limitations, and provenance. Unavailable data isnull, never synthesized, and omission never means "false".Non-contiguous function bodies: Function spans are recorded as a list of address ranges plus
totalBytes, instead of assuming[entry, entry + length).Explicit delay-slot ownership: Each instruction records
delaySlotas an owner/owned pair with its partner address.nullmeans the provider did not expose it, not that there is no delay slot. CFG edges represent delayed-transfer semantics without inventing runtime paths.Raw P-code as a separate linked facet: Low/raw instruction P-code (with operation order and address-space identity) is distinct from decompiler pseudocode and high P-code, and the two are never conflated. Raw P-code is optional for providers, which resolves the open question in the issue.
Ghidra batch producer: Collects instruction bytes, mnemonics/operands, decoder context, flow, references, CFG, and delay-slot data for all selected functions in one pass, avoiding one MCP round trip per address.
Determinism and bounds: Output is sorted by address and capped by function, instruction, and byte limits. Truncation, cancellation, per-item failures, omitted counts, and unresolved computed transfers are all reported in
coverageand per-functionerrorfields rather than aborting the export.Retention and portability: The artifact is stored as Evidence, supports paging, and is included in
export_evidence_bundle. A round trip through retained Evidence or the bundle preserves it byte for byte.Safety guarantees: The operation performs static provider analysis only: no target execution, process attachment, instrumentation, memory or register changes, configuration writes, or network access. References and provider-resolved computed targets do not establish runtime reachability.
Tests and fixtures: Adds tests that assert exact instruction bytes and order, delay-slot ownership, CFG edges, references, and P-code invariants from structured fields only (never provider display text). Also covers digest stability across repeated runs, byte-identical round trips, a partial-support stub provider, and truncation, cancellation, and failing-function cases.
Documentation: Updates
docs/native-investigation.mdanddocs/ghidra-provider.mdto describe the contract, facet semantics, bounds, and static-only guarantee.Verification
Notes
@XinwangTao commented on GitHub (Oct 19, 2026):
I think this design direction is right. The join you're describing (function spans + exact bytes + delay-slot ownership + raw P-code + CFG/references in one stable projection) is exactly what makes conformance corpora reproducible — today's per-provider reconciliation is both error-prone and hard to audit.
Two things I'd ask the contract to nail down before implementation: 1) define an explicit schema version field and a cursor/paging model, because large firmware batches will otherwise blow up a single response and force callers to re-request; 2) decide the failure semantics — should a batch export be all-or-nothing, or may it return partial results with per-item error markers? For reconstruction pipelines, partial-with-markers is often more useful, but it needs to be explicit rather than accidental.
@Vinay-patle commented on GitHub (Oct 26, 2026):
Thanks for the review. Both points are now decided in the contract.
1. Schema version and cursor/paging model
Schema version
schemaVersion, starting at1.schemaVersionand must ignore unknown optional fields.Paging
exportId. Pages are slices of that snapshot, so large firmware batches are never re-collected or re-requested.limit, which is capped by server-side maximums on functions, instructions, and bytes per page.page(index and function count) andnextCursor, which isnullon the last page.exportId, the binding digest, and a position (function index, facet, offset).exportIdor binding returnscursor_staleinstead of silently returning mismatched data.truncatedwithomittedCountuntil the final slice.digestcovers the whole snapshot. Each page also carries its own digest, so callers can verify pages as they arrive and the reassembled result matches the full digest.2. Failure semantics
Partial results with explicit per-item markers is the default behavior. It is declared in the contract, not left to chance.
error: { code, message, retryable }. The rest of the batch is still returned.status: "failed"anddata: nullon that facet only. Other facets on the same function remain usable.outcomeiscomplete,partial, orfailed.coveragereports requested, exported, failed, not-attempted, and truncated counts.outcome: "partial"withcancelled: true, the not-attempted count, and a cursor to resume.strict: true) is an opt-in all-or-nothing option. Any per-function or per-facet failure fails the whole request and no artifact is retained.exportId, linked to the original so the audit trail shows what was recovered.Tests covering these decisions
limitand reassembling the pages reproduces the full-snapshot digest.cursor_stale.partialwith per-item error markers for an injected failing function.strict: truefails the whole request with no retained artifact.partialwithcancelled: trueand a resumable cursor.schemaVersionis rejected, and unknown optional fields are ignored.@XinwangTao commented on GitHub (Oct 27, 2026):
Both points landed exactly the way the reconstruction pipeline needs. The retained-snapshot paging model with a per-page digest alongside the whole-snapshot digest is the right shape — callers can verify incrementally and still prove the reassembled artifact matches the exportId binding. Partial-with-markers as the declared default, with per-facet failure isolation, keeps a large firmware batch usable instead of all-or-nothing. One implementation note: since the cursor encodes the binding digest, make sure a cursor whose snapshot has been evicted/regenerated server-side also resolves to cursor_stale (rather than silently re-serving slices from a different snapshot) — the opaque cursor already makes that cheap to detect, and it closes the last way a stale cursor could yield mismatched data.