mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #5759] [Bug] Rizin debugger TTY preflight errors omit the rejected field and failure reason #3501
Closed
opened 2026-10-31 00:41:12 +00:00 by bsakaguchi
·
2 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#3501
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 @coygeek on GitHub (Oct 21, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/5759
Before submitting
Area
Native analysis or decompilation
Observed behavior
On Linux,
debug-with-rizinand MCPstart_rizin_debug_sessionreject a missing terminal path,/dev/null, and a regular file with the same genericinvalid_requestresponse. It omits the rejectedinferior_ttyfield, selected path, and known failure reason, then tells the caller to correct listed fields although none are listed. An independent verifier reproduced each selection once through CLI and once through a real stdio MCP server. All CLI calls exited 1; all MCP calls returnedisError: true. Rejection occurs before Rizin launches.Reproduction
The verifier executed this block from a built source checkout on Linux with GCC, Node.js, and Rizin on PATH, using disposable fixture/profile directories:
For MCP, the verifier called
start_rizin_debug_sessionon a fresh stdio server withpathset to the generated executable's absolute path andinferior_ttyset to each of the same three values. The projected error was equivalent inside the different CLI/MCP response envelopes.Expected behavior
Keep unsuitable selections rejected while identifying the selected terminal argument/path and preserving a meaningful cause and correction. A missing path and an existing non-TTY require different corrective actions. No particular replacement error code or object shape is required.
Source-derived contract:
AGENTS.md, Product and Authority, requires preserving caller-selected paths; Architecture and Cleanup requires preserving meaningful failure reasons.docs/reverse-engineering-tools.md:46-48andsrc/contracts/rizinDebugToolContracts.ts:22-30establish the explicit Linux TTY requirement. References are at the baseline below.Impact and scope
P2: this bounded diagnostic/recovery defect prevents callers from distinguishing a stale terminal path from a non-TTY selection using the response. All three rejected inputs reproduced through both interfaces; correct rejection remains intact. No security boundary or target-execution failure is claimed. The demonstrated workaround is independent existence/open/isatty inspection and selection of a fresh PTY. Character-device status alone is insufficient:
/dev/nullis a character device but is not a TTY. Permission-denial inputs were not tested.REA version
rea-agents6.7.0, source commit9d8e7803326a382cbbb3ffdb900f5e93e5442d68, built runtime. Rechecked current main by fetchingorigin/mainatd0067ba34a39ea47dd7e11bb2e6169bc0938cc3f: no intervening commits changed the cited contract, TTY preflight, CLI/MCP registration, or error core/presentation/projection files. No additional runtime rerun on main was performed.Runtime and platform
Reproduction: Node.js v24.22.0; Debian 12 Linux amd64 container under emulation; Rizin 0.9.1; GCC 12.2.0. No platform gate was overridden. Submission host only:
node --versionv26.12.0;sw_vers -productVersion27.0.1;uname -marm64. The Linux result is not a claim of macOS debugger support.Target and artifact context
Self-built ELF64 executable from the one-line C program above. TTY selections: an absent path,
/dev/null, and that regular executable file. REA used isolated HOME/XDG/temporary directories and silent logging. Direct static Rizin inspection of the executable succeeded.Interface
CLI
Earliest failure stage
Setup or provider admission
Relevant output or evidence
All three CLI selections produced this identical stdout with exit 1 and empty stderr:
There are no
details, field issues, selected terminal path, or underlying reason. The MCP calls returned the same error undererrorin text content withisError: true.Independent filesystem/terminal checks observed ENOENT for the missing path and
isatty=falsefor both existing non-TTY selections. A fresh PTY hadisatty=trueand passed REA's preflight: an intentionally nonexistent provider then reached spawn and returned its ENOENT reason. Evidence provenance: observed; local verification: independently reproduced.Typed outcome or recovery expected
Retain a typed rejection that names
inferior_tty, preserves its selected path, distinguishes missing-path from non-terminal causes, and explains how to correct that selection. Keep/dev/nullrejected. A fresh live PTY should continue to pass preflight and reach provider spawn; successful live debugging requires a separate working-ptrace control.Analysis or suspected cause
Source-derived reasoning:
src/cli/reverseEngineeringCommands.ts:330-375andsrc/server/registerRizinDebugTools.ts:32-69sharesrc/rizin/RizinDebugSessionManager.ts:320-357. Its realpath/open/isatty/stat catch wraps the failure inAnalysisInputErrorwith onlycause.src/domain/analysisErrorCore.ts:65-79defaults field issues to empty;src/domain/analysisErrorPresentation.ts:133-134,253-257supplies generic input advice;src/domain/analysisErrorProjection.ts:332-345emits input details only for populated issues. The producer has the meaningful cause, but the public projection loses it. The documented generic fallback does not supply those runtime facts.Additional context
Prepared with AI assistance and independently verified. Related #5401 concerns objdump target-file acquisition diagnostics in a different producer; this report covers Rizin debugger terminal admission and its CLI/MCP restoration signal. #5099 concerns GDB verification revocation after read-only queries; #5090 concerns Rizin cleanup exit status. They do not cover this preflight response.
Direct Rizin debugging with production startup arguments emitted ptrace register I/O errors under emulation. A successful live REA session executing
iIwas therefore not established; the verified diagnostic loss precedes provider spawn. NOT_ENOUGH_INFO: last known good version and introducing commit. No fix or restoration is claimed.@XinwangTao commented on GitHub (Oct 21, 2026):
This matches the pattern in #5401/#5099/#5090 — a single generic invalid_request that names no field makes the three cases indistinguishable from the caller's side. Agree the rejection itself should stay; what's missing is attribution and cause. Since the TTY requirement is explicit in the rizin tool contract (inferior_tty must be an existing TTY), the preflight already has everything needed to say which condition failed: nonexistent path, exists-but-not-a-TTY (including /dev/null — character device but not a TTY), or permission. Emitting the evaluated path plus the specific condition and its standard corrective action would let CLI and MCP callers fix the selection without an external isatty probe. Also worth keeping the "correct the listed fields" wording only when it actually lists the fields.
@morluto commented on GitHub (Oct 23, 2026):
Resolved by
github.com/morluto/rea@171b33b2c4. Selected TTY validation returns field/path and physical failure before Rizin spawn. The moved regression is owned by the existing provider-boundary project and actually executes. Validation:tests/boundary/providers/RizinDebugSessionAdmission.test.tspassed in the recorded round2/3 execution; this review did not rerun tests. Coverage is limited to the cited control; no broader real-provider, Windows or performance claim.