mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #4016] [Bug] Rizin completion-marker parsing strips trailing command-output whitespace #1602
Closed
opened 2026-10-16 21:07:46 +00:00 by bsakaguchi
·
3 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#1602
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 15, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4016
Before submitting
Area
Evidence, artifacts, or reconstruction
Observed behavior
rizin_debug_commandremoves trailing spaces and a newline when command output and its generated completion marker share one NUL frame. The identical command-output prefix survives when it ends in its own NUL frame. Both results claim complete, untruncated output.Reproduction
The saved verification ran the following reduced probe through the registered MCP tools and linked in-memory transport. In a disposable built checkout with locked dependencies, save it as
tests/boundary/mcp/rizinWhitespaceProbe.test.tsand runnpx vitest run tests/boundary/mcp/rizinWhitespaceProbe.test.tswith isolatedHOMEandTMPDIRdirectories. The assertions characterize the current failure, not the expected repair.Executed reduced probe
Each case ran once in the reduced probe after the same observations in a broader probe. Responses occur after command dispatch, excluding unsolicited startup frames.
Expected behavior
Return the command prefix exactly while excluding only framing and the generated completion marker. For this fixture, retain
"value \n"regardless of the NUL frame boundary.src/contracts/rizinDebugToolContracts.ts:48promises raw output, including backend output before the completion marker.tests/boundary/providers/RizinDebugSessionCoverage.part3.test.ts:220already exercises a coalesced-marker frame.Impact and scope
P2. Raw command Evidence silently differs from received text while reporting complete, untruncated output. The observed case loses three bytes. Production-provider frequency is unknown. Frame boundaries belong to the provider protocol, and no general caller-controlled workaround was verified.
REA version
rea 6.5.0 at source commit
4692bb3330Runtime and platform
Node 24.18.0; macOS arm64
Target and artifact context
Simulated Linux Rizin process and no-inferior cleanup fixtures; valid host fixture TTY; no target program launched.
Interface
MCP
Earliest failure stage
Capture or observation
Relevant output or evidence
The reduced MCP probe returned:
The coalesced input is
value, two spaces, newline, the generated marker, newline and NUL. The control adds only a NUL after the command prefix. Both normalized and raw Evidence contain the altered text in the coalesced case.Typed outcome or recovery expected
Retain
"value \n"exactly in both cases and retain whitespace-only prefixes. Continue omitting the generated marker, enforcing output bounds and keeping completion unknown when no marker arrives. Trimming the separately framed control would not restore the raw-output contract.Analysis or suspected cause
Source-derived:
src/rizin/RizinDebugSessionManager.ts:1469appliestrimEnd()to the entire prefix before the completion marker.src/server/registerRizinDebugTools.ts:66routes the request to this manager;createRizinCommandEvidencein the manager places the altered value in normalized and raw Evidence.Additional context
Vitest 5.0.3. Real Rizin and Linux descriptor readback were not exercised. The cited source files are unchanged between the reproduced baseline and origin/main
6fcfc5b5e0. The reproduction was not rerun for this submission.@XinwangTao commented on GitHub (Oct 15, 2026):
The repro makes the contract violation clear: trimEnd() over the whole prefix before the marker treats frame coalescing as content, so the same output yields different Evidence depending on the provider's framing. Since the marker itself is the only generated part, a targeted fix would split at the marker boundary and trim only that generated segment (or drop the trim entirely and let the caller handle whitespace), keeping the raw-output promise in the contracts intact. The part3 coalesced-marker test is a good place to pin the expected "value \n" retention.
@morluto commented on GitHub (Oct 18, 2026):
Fixed in
d5fc7e6ebfon main. Adapted Xander-AJ's proposal #4044 (8b33c12bf) at the current shared normal/interrupted frame parser, with verified co-author attribution.The owner now slices the decoded prefix before the generated completion marker without trimEnd. That same unmodified prefix reaches both byte-budget accounting and raw/normalized Evidence. No downstream whitespace repair or new parser wrapper was introduced. The adjacent trim operations parse /proc fields and a typed dbg.exitkills readback; they are separate semantic parsers, not raw command-output trimming. Existing inter-frame presentation and marker exclusion semantics remain intact.
Fresh baseline: eight of 17 new MCP controls failed before the fix; nine controls passed. Final focused suite: all 56 tests across five files passed, including new MCP whitespace controls, interrupted/pending output, UTF-8 limits, frame/byte capacity and timeout Evidence. Typecheck/lint, docs checks with five conformance tests, discovery of all 1,573 files and commit/push hooks passed. Read-only producing-boundary/consumer review found no remaining blocker.
Additional confirmed consequence: whitespace must count against the output cap. The eight-byte prefix
value \nnow truncates at a seven-byte budget with completion unknown, and remains intact at exactly eight bytes. Before the fix it was trimmed to five bytes and incorrectly reported complete/untruncated in both controls. The 15 other cases cover coalesced/separate NUL frames, split transport writes (including multibyte UTF-8), whitespace-only/empty strings, tabs/CR/LF and Unicode, checking both raw_result and normalized_result through registered tools and the MCP SDK.Verification scope: injected Rizin process with actual manager, registered MCP tools and SDK transport; no real Rizin binary is installed on this host. No native inferior launch/attach, Linux ptrace or Windows-provider qualification is claimed. No CPU/memory/elapsed/token performance comparison or optimization claim was made for this correctness repair. The heavy string-limit stress and profiler stayed stopped.
Upstream rz-pipe process reader corroborates retaining payload before NUL. DeepWiki has no index for that repository; source and executed boundary checks were used instead. Broader debugger/lifecycle audit remains incomplete; PR #4044 itself was not merged or declared human-ready by this direct-main fix.
@XinwangTao commented on GitHub (Oct 18, 2026):
Clean fix — slicing the decoded prefix at the marker boundary instead of trimEnd-ing the whole frame matches the raw-output contract far better, and making the preserved whitespace count against the output cap is the right accounting: the coalesced case was silently dropping bytes while still claiming complete/untruncated, so treating those bytes as real payload keeps the two controls honest. The coverage matrix (coalesced vs separate NUL frames, split multibyte writes, whitespace-only/empty, tabs/CR/LF) also directly pins the framing-independence that the original repro exposed.