mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #5396] [Bug] Duplicate record_unknown calls are reported as retryable revision conflicts #3266
Closed
opened 2026-10-31 00:38:34 +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#3266
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 20, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/5396
Before submitting
Area
MCP or agent integration
Observed behavior
Repeating an explicit
record_unknownrequest in one stdio MCP session correctly rejects the duplicate, but reportsrevision_conflict,retryable: true, and “Refresh the current state and try again.” The request has no expected revision, and the retained identity has not changed. Both an unchanged request and a severity-only variant produced this diagnostic in an independent production-entry-point reproduction.Reproduction
Use the built source revision below and start
node scripts/rea.mjs --mcp. The independent verifier used isolated disposable HOME, XDG configuration/data/cache/state directories, configuration path, and temporary directory; no provider or binary was opened.Send these newline-delimited JSON-RPC messages through one server process. Wait for the initialize response before sending the notification and tool calls:
The creation succeeds at revision 1. Repeat the final message with a new JSON-RPC ID and
severitychanged tohigh; then repeat the original arguments unchanged with another ID. Both duplicates fail with the diagnostic below. These are the shortest creation/duplicate steps from the completed replay; no autonomous retry loop was run.Expected behavior
A duplicate should remain rejected while identifying the existing identity conflict and avoiding a retryable stale-revision diagnosis or an ineffective refresh-and-repeat instruction. A genuine stale
update_unknownrevision should remain retryable.src/contracts/sessionToolContracts.ts:145-153advertises deterministic duplicate rejection and exact expected-revision matching for updates; the livetools/listadvertisement matched.docs/mcp-contracts.md:81-87makes the canonical diagnostic the source of error code and recovery guidance.AGENTS.mdrequires preserving meaningful failure reasons. The replacement code and diagnostic structure are implementation choices.Impact and scope
Supported P2: MCP clients receive a false machine-readable retry signal for a deterministic rejection. Both duplicate variants failed in the completed replay. An actual downstream retry loop or exhausted retry budget was not observed; no data loss was observed.
Demonstrated workaround: inspect
details.reason, calllist_unknowns, and use a completeupdate_unknownwith the existing head's current revision when intending to change severity. That update succeeded at revision 2. Rejected writes preserved the original head. Other REA versions and native providers were not tested.REA version
6.7.0, reported by MCP initialize; source commit
074768901f3cdc8205b61773fb1faf6f6c7b3ca8.Runtime and platform
Node.js v26.12.0; darwin/arm64. No Hopper or Ghidra required.
Target and artifact context
Session-local residual-unknown registry, with no open binary, provider, database, or exported artifact.
Interface
MCP
Earliest failure stage
Transport or result projection
Relevant output or evidence
Both duplicate calls returned
isError: true, no success structured content, and this JSON in text content:The independent replay also exercised these controls through complete full-state
update_unknownrequests:contradictedtransition without contradicting evidence:execution_failure,retryable: false, reasoninvalid-transition, but the same state-changed message/remediation.evidence_integrity_mismatch,retryable: false, reasonintegrity, with that same message/remediation.expected_revision: 1update: genuinerevision_conflict,retryable: true, reasonrevision-conflict.Lists confirmed rejected writes did not advance the head. The server exited 0 with empty stderr. The transition/relationship cases are related message-projection evidence; only the duplicate incorrectly advertises retryability.
Typed outcome or recovery expected
A truthful non-retryable duplicate diagnostic; an achievable recovery action such as updating the existing head when appropriate. Preserve duplicate rejection, meaningful transition/integrity diagnostics, valid full-state updates, and the retryable diagnosis for genuinely stale revisions.
Analysis or suspected cause
Source-derived reasoning:
src/application/investigation/EvidenceLedger.ts:238-239rejects duplicate identity asalready-exists.src/domain/analysisErrorProjection.ts:194-202maps that reason torevision_conflict, and:573-580makes that code retryable.src/domain/analysisErrorPresentation.ts:272-275gives every unknown-registry reason except not-found the state-changed message; remediation falls back to that message.src/domain/residualUnknown.ts:23-40derives identity from normalized question, trimmed domain, scope digest, and optional comparison conclusion scope. The tested request has no open-target scope and omits comparison conclusion scope; severity does not change its identity.Additional context
Prepared with AI assistance and independently reproduced through the production MCP stdio entry point. The submission check fetched upstream main
d532b18123916a9e88f98c7880ba4f984e23d715; none of the cited contract/failure files changed after the tested baseline. No new runtime replay on that later revision is claimed.Related reports #3333, #719, and #3925 concern automatic workflow registration/replay collisions, where the requested operation should succeed. This report concerns correct rejection of an explicit duplicate with an incorrect recovery signal. #1724 concerns mutation Evidence content; #3005 concerns an update integrity failure. PRs #1869 and #4829 address other default recovery messages and do not resolve this duplicate projection.
@coygeek commented on GitHub (Oct 20, 2026):
Additional reproduced cases (same producing guard)
Reproduced through
node scripts/rea.mjs mcpat074768901f3cdc8205b61773fb1faf6f6c7b3ca8(MCP reports REA 6.7.0), in one initialized session with isolated disposable state and no open binary or provider.First create this unknown with a
tools/callrequest:Creation succeeds at revision 1.
Observed:
isError: true,error.code: "revision_conflict",error.category: "execution_failure",error.retryable: true, anderror.details: {"reason":"already-exists"}. The message and remediation still say to refresh state and try again.All three identical retries returned the fields above, with no
unknown_idanywhere in the tool result and no successstructuredContent. The whitespace variant also omitted it.list_unknownswith{}returned the single retained head at revision 1, including its existingunknown_id, providing a demonstrated recovery lookup for callers that did not retain the creation response. This is a recovery observation about the same diagnostic, not a separately established requirement that the error include the ID.Both cases share the duplicate ledger guard in
src/application/investigation/EvidenceLedger.ts:238-239and diagnostic projection insrc/domain/analysisErrorProjection.ts:194-202; normalization is insrc/domain/residualUnknown.ts:23-40.@CassieFox23 commented on GitHub (Oct 21, 2026):
Thanks, coygeek, for the JSON-RPC replay. From reading main at
01788bac8, not a run: still valid. The filesrc/application/investigation/EvidenceLedger.ts:237-238returnsUnknownRegistryError("already-exists")for a repeated identity. The filesrc/domain/analysisErrorProjection.ts:227-229maps both"revision-conflict"and"already-exists"torevision_conflict. The coderevision_conflictsits inRETRYABLE_CODESat lines 604-610. The refresh wording comes fromsrc/domain/analysisErrorPresentation.ts:285. A fix would give already-exists its own non-retryable code, or a details reason the caller can tell apart. Related: #3333 (closed) and #6106. Area: MCP session tools, error projection.🤖 Written with Claude Code (Fable 5.1, verified by Opus 5.5), posted with my OK 🦊
@morluto commented on GitHub (Oct 23, 2026):
Resolved on main in e713c7532. already-exists maps to nonretryable invalid_request and actionable duplicate recovery; revision-conflict remains retryable. The exact executed projector control covers both branches. Validation:
src/domain/analysisErrorProjection.test.ts— distinguishes deterministic duplicate identities from stale update revisions; recorded execution atb03a15e6d. All 68 projection cases passed within a group with unrelated failures; no fresh stdio MCP run. Existing registry producer reason is preserved through the shared projector.