mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
Closed
opened 2026-10-31 01:05:25 +00:00 by bsakaguchi
·
0 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#5282
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?
📋 Pull Request Information
Original PR: https://github.com/morluto/rea/pull/2505
Author: @NIU-123370
Created: 10/13/2026
Status: ✅ Merged
Merged: 10/13/2026
Merged by: @morluto
Base:
main← Head:feat/recorded-crash-aarch64📝 Commits (6)
6055dc2feat(recorded-crash): decode AArch64 core register notes34dfab1fix(recorded-crash): bind the core header check and Evidence CPU to the profile39c82c1test(recorded-crash): fold the AArch64 provider case into the scenario table4f55897chore(ci): merge current main verification fixes88dc16cdocs(recorded-crash): advertise AArch64 target support7fea123docs(recorded-crash): distinguish architecture register layouts📊 Changes
13 files changed (+532 additions, -90 deletions)
View changed files
📝
bridge/pwntools/recorded_crash_impl.py(+31 -10)📝
docs/recorded-crashes.md(+8 -4)📝
src/application/binaryDiagnostics/RecordedCrashService.test.ts(+23 -0)📝
src/application/binaryDiagnostics/RecordedCrashService.ts(+4 -1)📝
src/contracts/native/binaryDiagnosticsToolContracts.ts(+1 -1)📝
src/domain/native/recordedCrash.test.ts(+94 -1)📝
src/domain/native/recordedCrash.ts(+97 -6)➕
src/native/pwntools/RecordedCrashSourceBindings.test.ts(+135 -0)📝
src/native/pwntools/RecordedCrashSourceBindings.ts(+14 -11)📝
src/native/pwntools/RecordedCrashStructureBindings.ts(+7 -2)📝
tests/boundary/binaryDiagnostics/RecordedCrashStructureBindings.test.ts(+34 -0)📝
tests/boundary/binaryDiagnostics/recordedCrashProvider.test.ts(+18 -5)📝
tests/fixtures/binaryDiagnostics/recordedCrash.ts(+66 -49)📄 Description
Summary
inspect_recorded_crashonly ever admitted ELF64 x86-64 cores: the bridge refused every othere_machineand the domain schema pinnedarchitectureto a single literal, so a legitimately recorded Linux AArch64 crash could not be inspected at all.This adds the AArch64 profile from unchanged pwntools 4.15.0 structures — no locally re-declared ABI — and turns the previously amd64-only constants into one owned profile table.
Fixes #2353
ABI facts, measured not assumed
Read directly out of
pwnlib/elf/datatypes.pyfrom the officialpwntools-4.15.0wheel viactypes:e_machineelf_prstatussizepr_regoffsetpr_cursig/pr_pid0x150)c_uint640x188)c_uint64(x0…x30,sp,pc,pstate)The AArch64 register order is
user_regs_struct_aarch64._fields_order, which is the order the bridge already uses to emit registers, so the domain list and the bridge cannot drift silently. The amd64 list in the domain file was verified the same way (it matches_fields_exactly), which is also what proves the existing profile was not accidentally reinterpreted here.What changed
src/domain/native/recordedCrash.ts— one owned profile tableRECORDED_LINUX_CORE_PROFILES(machine id, register order, register width, register offset, PRSTATUS size) plusRECORDED_LINUX_CORE_ARCHITECTURES.architecturebecomesz.enumover that list, and thread validation now checks each register name, count and width against the reported architecture's profile instead of a hardcoded amd64 list.bridge/pwntools/recorded_crash_impl.py—CORE_MACHINES = (62, 183); the profile selectself_prstatus_aarch64/user_regs_struct_aarch64and thearchitecturelabel. Truncation messages name the selected profile. Theunsupported-targetrefusal now reports the observede_machineinstead of only saying "requires x86-64".src/native/pwntools/RecordedCrashSourceBindings.ts— register source offsets and the minimum descriptor length now come from the same profile table, so a 34-register/392-byte AArch64 thread is bound slot by slot exactly like amd64's 27/336.tests/fixtures/binaryDiagnostics/recordedCrash.ts— the source-owned fixtures derive note, owner and descriptor ranges from the profile (identical bytes to today for x86-64:0x80/0x8c/0x94,0x164,0x150) and now stamp the matchinge_machine.docs/recorded-crashes.md— states both profiles and that any other machine is refused before note interpretation.Verification
Real decode, run locally. I assembled the decoder's actual dependencies and ran the repo's
recorded_crash_impl.pyunchanged against crafted cores:architecture = aarch64-little-endian, 34 registers namedx0…x30, sp, pc, pstate, every reported register offset equal todescriptor + 112 + index*8, all values round-tripped, PID and cursor signal recovered frompr_pid@32/pr_cursig@12, and the SIGSEGV fault address decoded fromNT_SIGINFO.x86_64-little-endian, same offsets.format: Linux AArch64 NT_PRSTATUS descriptor is truncated.e_machine = 243(RISC-V) →unsupported-targetnaming the observed machine.Honest limits of that harness:
pyelftools 0.33is the real package andpwnlib/elf/datatypes.pyis the verbatim file from the official 4.15.0 wheel, butunicorn 2.1.2is satisfied by a metadata stub because no macOS arm64 wheel builds here — the recorded-crash path never imports unicorn, only the version preflight reads it. The harness lives in/tmpand is not part of the commit. If you want it in-repo I will add it as aunittestthat skips when pwntools 4.15.0 is not importable, sotest:pythonstays green without the dependency.TypeScript. New
src/native/pwntools/RecordedCrashSourceBindings.test.ts(7 cases) binds every register for both profiles, pins each profile's numbers against the ABI table above rather than only using them consistently, asserts the crafted core'se_machineequals its profile's machine, and rejects: a register bound one slot off, a descriptor shorter than the profile size, an amd64 name inside an AArch64 window, and a reported PID that differs from the source bytes.src/domain/native/recordedCrash.test.tsgains 6 cases: the full AArch64 window accepted, its note ranges inside the segment, and rejection of an amd64 name, the amd64 count, a 4-byte register source, and an architecture outside the profiles.vitest --project domain --project services --project adapterstsc --noEmit -p tsconfig.jsonoxfmt --checknpx knipoxlintorigin/mainfor the same filesThe provider suite for this lane (
tests/boundary/binaryDiagnostics/recordedCrashProvider.test.ts, 34 cases) isrunIf(linux && x64)and the adapter itself refuses non-Linux hosts, so to check my fixture rewrite I temporarily bypassed both gates, ran all 34 green, then reverted both. The committed diff contains no bypass;git difffor that test file is empty.npx vitest --project boundaryon this machine shows 8 failures in four files (setupSkill, twoinspector/javascriptRuntime*,nativeDmgArtifactReader). None of them read recorded-crash code, and on untouchedorigin/mainat the same commit the same four files fail 14 cases — after normalizing names, my failure set is a strict subset with zero cases unique to this diff. So these are macOS host/pre-existing failures, not regressions here.Mutation arms (each run, each killed)
machine not in CORE_MACHINES→machine != 62prstatusBytes: 392→336registerOffset: 112→120Deliberately not in this PR
docs/recorded-crashes.md's "Bounds and verification" paragraph is untouched on purpose: my own #2486 rewrites that exact paragraph, and editing it twice would guarantee a conflict between the two PRs.real-recorded-crash.ymllane builds its fixture withgcconubuntu-24.04, so it can only ever produce x86-64 cores; an AArch64 recording needs an arm64 runner or qemu and is a CI decision, not a decoder change. The acceptance criteria here are met with profile-bound synthetic bytes plus the real decode above.Collision surface
I indexed the changed files of all 202 open PRs earlier in this session: all seven files this PR touches were free of any in-flight PR. That index is a snapshot, so a rebase before merge is still worth doing; the branch is currently rebased onto
c74142e6with one commit.Base:
c74142e6. Head: 3 commits, 12 files, +529 −88. Trunk has moved 58 commits since that base andgit log HEAD..origin/main -- <these twelve paths>returns 0 hits (positive control: the same command finds 3 hits for a file trunk did change), so nothing has been rewritten under this branch. The round-1 files (RecordedCrashStructureBindings.ts,RecordedCrashService.tsand its test) were not in the 202-PR index above, so that snapshot does not cover them; a re-scan or rebase before merge is still worth doing.Review round 1 (Greptile P1 ×2)
Both findings were correct: the AArch64 profile reached the bridge and the domain, but two downstream consumers still pinned amd64, so nothing actually arrived. Fixed in the second commit.
src/native/pwntools/RecordedCrashStructureBindings.tsheader.readUInt16LE(18) !== 62, soPwntoolsRecordedCrashProviderrefused an AArch64 core before the widened register checks ranRECORDED_LINUX_CORE_PROFILES[report.architecture].machinesrc/application/binaryDiagnostics/RecordedCrashService.tsarchitecture: "x86_64"on every created EvidenceRECORDED_LINUX_CORE_PROFILES[value.architecture].evidenceArchitecturesrc/domain/native/recordedCrash.tsevidenceArchitecture: BinaryArchitecture(x86_64/arm64)New cases: each profile is admitted by its own
e_machineand rejected when the header carries the other profile's machine; created Evidence is pinned per profile; andsuccess-aarch64runs an AArch64 core through the full provider pipeline as a row of the existing scenario table.Mutation arms (each run, then reverted from backup and
cmp-verified)6262or183regardless of the reported profile"x86_64"armsuccess-aarch64fails withReported core structure differs from its original ELF/note headers.How the host-gated provider case was executed here
tests/boundary/binaryDiagnostics/recordedCrashProvider.test.tsis.runIf(process.platform === "linux" && process.arch === "x64")andPwntoolsDecoderrefuses any other host, so all 35 of its cases skip on macOS. To run them I temporarily (1) turned that host check intoif (false)and (2) set the test file'shostconstant totrue, ran the file — 35 passed / 0 failed — then restored both files from backup and re-verified withcmpplusgrep -c= 0 for each marker. The bridge is stubbed by the test's own launcher, so no pwntools/Python executed in that experiment; the Linux CI lane still covers the real decode.Local gates for this commit
tsc --noEmitclean.oxfmt --checkclean on all six changed files.oxlinton those six: 0 errors, 4 warnings — the same four warnings as at6055dc26, verified by linting both trees, so no new warning is introduced. Platform-independent selection: structure bindings 8,RecordedCrashService12, domain 29, source bindings 8 passed; the MCP + CLI-cleanup + stage-retirement selection passed 11 with 35 skipped (only the host-gated provider file).Static checks round (jscpd)
34dfab14failed one CI lane:Static checks→ stepRun npm run check:ci→jscpd, withERROR: jscpd found too many duplicates (3.0%) over threshold (3.0%)— 2368 files, 1484 clones, 3.01% duplicatedlines against a 3.0% budget. The clone was mine: the standalone AArch64 case restated that file's own bridge stub
(
recordedCrashProvider.test.tslines 91:68–101:14 ↔ 153:5–163:14 and 109:20–121:28 ↔ 169:35–181:28).39c82c17drops the second copy and makessuccess-aarch64a row of the scenario table that already drives a replythrough the structure, source and register bindings, so the assertion set is the same one its sibling scenarios in that table run,
plus
expect(result.value.architecture).toBe(architecture).Measured locally with
npm run jscpdon the same.jscpd.json:6055dc26= 1429 clones / 2.98%,34dfab14= 1431clones / 2.99%,
39c82c17= 1429 clones / 2.98% — back on the baseline the previously-green commit sat at, andjscpd:detailsno longer lists this file. Local totals differ slightly from CI's (CI counts generated files too), sothe claim is the delta, not the absolute.
tsc --noEmit,oxfmt --checkand the platform-independent suites areunchanged by this commit.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.