mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #7955] [Roadmap] Embedded firmware: make REA work on the devices around us #4654
Open
opened 2026-10-31 00:52:01 +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#4654
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Entrpi on GitHub (Oct 29, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/7955
Before submitting
Decision needed
Morluto's video shows the REA mech as it fights a TV monster that has microphone tentacles. It is a cartoon, but it points at a real question: what do the devices around us record, and where do they send it? A TV is one device. Many devices around it run on microcontrollers: voice remotes, Bluetooth microphones and earbuds, smart plugs, sensors and wearables. Their firmware usually arrives as a flash dump or a vendor update file, not as an ELF build.
On
main, REA cannot take most of that firmware to readable code. Of the 26 embedded platforms in PlatformIO's top 30, four now get verified code analysis onmain, all of them only partly. #8229 brought it to their RISC-V ELF builds. The open and queued PRs below bring that number to 19 platforms, five of them only partly. This roadmap is the work it takes for REA to read firmware across that landscape.Platforms this roadmap covers, and common devices that they power:
mainIn the last column, a PR number marks an open PR: #1922 belongs to another contributor, and the others are mine. Items without a number are queued on my fork, and "Next" items are planned but not built.
What I ask. Thank you for merging #7481–#7485 and #8227–#8230. Eight PRs are open, all ready for review, and none has conflicts with
main. They are in the order that unblocks the most queued work:compare_artifactscompares eachformat_metadatakindesp_restart()for flash code of ESP32-C6, H2 and H21 builds, and of H4 with #8401. ESP-IDF 5.5.2's C5 and C61 builds, which reserve the code twice, are refused until a policy covers them.verify-real-ghidra-noreturnruns all 63 probe checks again; onmainit stops after 43.If you prefer to absorb a PR yourselves, as with #7498 and #7869, that works for me. If you want a PR split, or the stages in a different order, tell me here.
Context and evidence
How each PR is built:
The work, stage by stage
Each stage lists what is done, open or queued, then what comes next. Items run when their prerequisites are met, not in stage order. Sizes are XS to L.
1. Recognize and unpack.
2. Locate the code.
3. Load.
4. Analyze.
ilp32(#8229).ilp32f(#8401), ESP-IDF flash code in Ghidra's default address space (#8464, for #8461) and the host no-return verifier's probe (#8462).5. Enrich.
6. Workflows.
Across all stages: a firmware corpus.
Next after the queue. These are work items, not single PRs:
F1, F2 and D6 start as design issues. Stage 1 items run alongside whenever foundation decisions stall.
Platform details: PlatformIO's top 10, the platforms beyond them, and where reach is highest
PlatformIO's top 10, by its search index on 29 Oct. Below 9th, its package records order some platforms differently.
mainespressif32ilp32ELF (#8229), which accepts ESP-IDF 5.5's C-series and H2 builds, with flash code in a Ghidra overlay (#8461); Xtensa ELF refusedilp32f(#8401); flash code at its ELF address (#8464)atmelavr.eepespressif8266ststm32.binnativeteensynordicnrf52.zipread as a plain ZIPraspberrypi.bin(#7951), with the vector table after boot2 on RP2040atmelsam.binrenesas-ra.bin"ELF unverified" means that Ghidra loads Cortex-M ELF with its automatic
ARM:LE:32:v8, and no lane verifies the result. "Raw dumps decoded in ARM state" is #5744: the entry doubles as the base, and Thumb code decodes as ARM.Beyond the top 10, from PlatformIO's ranks 11–30, from Git-installed platforms and from outside PlatformIO:
Cortex-M:
Their code needs only #7951 and the M-profile lane. Their gaps are containers and vendor facts: MCUboot, Nordic DFU packages, Silicon Labs GBL, TI OAD, boot headers, NXP LPC's checksum in vector slot 7, and CubeCell's
.cyacd.MIPS and Arm Linux routers: 73% of the 2,235 devices in OpenWrt's hardware table are MIPS.
mainhas the Binwalk and Unblob route, uImage, FIT images (#7771) and the MIPS lanes. Next: the 32-bit Arm Linux lane (#1922).Tuya-style modules: LibreTiny (rank 14) covers Beken ARMv5TE, Realtek Cortex-M and Bouffalo RISC-V. Next: ARMv5TE raw images, Beken RBL inventory and caller-declared flash layouts.
D6's Harvard targets:
atmelmegaavr(11) andlgt8f(19) beside AVR,intel_mcs51(12), and Microchip PIC, PIC24 and dsPIC.RISC-V: the
ilp32lane (#8229) takessifive(15),chipsalliance(21),nuclei(29) and ESP32-C2, C5, C61 and H2, when their builds recordTag_RISCV_archand use only extensions that Ghidra supports. With #8464, ESP-IDF 5.5.2's C5 and C61 builds, which reserve flash code twice, are refused until a policy covers that layout (#8461). Most CH32V boards, GD32VW553 andkendryte210(30, RV64lp64f) stay refused for now.MSP430 (20): header-only admission, then a lane.
Out of reach for now:
Host platforms (16, 23 and 25) are outside this work.
Where reach is highest. These groups come from the signals below:
The signals, read on 29 Oct:
They measure attention or support, not how often analysts meet a device. They also undercount automotive and industrial parts. Two better measures come next. One classifies REA's own firmware issues by artifact and by the first stage that blocked them. The other is the corpus baseline.
The four queued branches, in the order I plan to open them
#8227–#8230 merged on 31 Oct. On 1 Nov #8395 (the shared positional reader), #8464 (ESP-IDF flash code) and #8462 (the no-return verifier's probe) opened, and they and #8401 (RISC-V ilp32f) became ready for review. Each queued branch waits until the PR that it builds on merges.
Alongside these:
My fork's
embedded-integrationbranch mergesmainwith all of them, so conflicts between them show up before any PR opens.Decisions this work waits on, each with a proposed answer
Each decision already has a proposed answer in its own thread, so a confirmation or a redirect there is enough.
xtensain three closed output enums.ARM.attributesownerExpected interaction with targets
Read existing files or captured data
Boundary details (optional)
Static analysis inside existing boundaries. Ghidra and Rizin run as they do today, and no target code runs.
Device access (read-only acquisition, remote debugging) starts as design issues, and is built only after a scope decision.
Options and tradeoffs
Verification available so far
I have a prototype or observed results
Success criteria and open questions
References
#32, #1922, #3483, #3615, #4245, #4246, #4927, #5744, #7136, #7234, #7477, #7478, #7490 (fixed by #7823), #7678 (done in #7869), #7679, #7680, #8461, #8462, #8463, #8464, NationalSecurityAgency/ghidra#8848
@Entrpi commented on GitHub (Oct 30, 2026):
@morluto @gensokyo-dev
Morluto's TV video shows why this work matters. A TV is one device, and many devices around it run on microcontrollers whose firmware REA cannot read yet. I rewrote the roadmap above so that it starts from those devices.
Eight PRs are open, which is the limit for one contributor, and eleven more wait on my fork. Five of the open PRs are small and independent: #7483 (+36), #7485 (+62), #7482 (+107), #7481 (+250) and #7484 (+262). Can you review these five first? Each merge frees a slot for the next branch. If you prefer to absorb, close or split a PR, tell me which one.
@Entrpi commented on GitHub (Oct 31, 2026):
Roadmap updated. Thank you for merging #7481–#7485. Eight PRs are open again, which is the limit for one contributor, and six more wait on my fork. Each merge frees a slot for the next one. All eight are ready for review. The smallest is a test fix that makes
verify:ghidra:mipspass onmainagain:mainagain, so it can catch regressions again.The feature PRs, in the order that unblocks the most queued work:
compare_artifactscompares eachformat_metadatakindIf you prefer to absorb a PR yourselves, as with #7498 and #7869, that works for me. If you want a PR split, or the stages in a different order, tell me here.
@Entrpi commented on GitHub (Nov 1, 2026):
Roadmap updated. Thank you for merging #8227–#8230. None of the six open PRs has conflicts with
main. Four are ready for review: #7486, #7951, #7487 and #8231. Two new drafts follow the merged work: #8401 (RISC-V ilp32f) and #8395 (one shared reader behind the ESP, Godot PCK and Node SEA readers).@Entrpi commented on GitHub (Nov 2, 2026):
Roadmap updated. All eight open PRs are ready for review, and none has conflicts with
main. Thank you for marking #8401 ready. New since my last comment:.flash.textwith a NOBITS section, so Ghidra 12.1.4 loads that code into an overlay that its DWARF import does not reach. #8464 moves the code into the default address space before analysis. Imported signatures of DWARF-described flash functions go from 6 to 278 of 278 in an ESP32-H4 build (with #8401) and from 18 to 549 of 549 in a C6 build, and pseudocode ends atesp_restart(). ESP-IDF 5.5.2's C5 and C61 builds reserve the code twice and are refused for now; #8461 has the scope questions.verify-real-ghidra-noreturnruns all 63 probe checks again; onmainit stops after 43.LITBASE(USE_ABSOLUTE_LITERALS=1), because Ghidra 12.1.4 decodes every L32R as PC-relative. #7487's title now marks one breaking change: process capture rejects aPATHsearch that meets an error such asELOOPorEIObefore its match, because a native search can stop there.mainfor its move of the lane docs todocs/testing-lanes.md, and #7951 and #8464 re-pinned profile digests for #8531 and #8520. Their test shards and static checks fail only wheremain's do today, which #8592 and #8596 fix. On my fork's integration branch, which mergesmainwith all eight PRs and the queued branches, the full test run on Linux fails only on those same tests.