[R1a] Reconcile duplicate submissions and lost VoiceClaw responses without blind redispatch
- Dominant language
- TypeScript
- Stars
- 22.5k
- Forks
- 3.1k
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 715
Description
## Outcome
Repeated finalized input and retry after response loss cannot silently start duplicate native work within the declared R1a recovery window.
## Scope and ownership
R1a follow-up on v1, outside R0 attachment acceptance. Main's existing active-admission duplicate rejection is reference behavior; it does not establish v1 recovery or global idempotency.
Proposed owner: NemoClaw request/receipt owner and VoiceClaw retry/delivery owner.
This ticket records requested work. New product boundaries and supported combinations require the owning maintainer decision; no existing proposal is declared accepted here.
## Work
- Define stable request/idempotency identity, same-body retry and conflicting-body behavior, retention and expiry.
- Add the bounded receipt/status or equivalent reconciliation mechanism needed to recover acceptance/result information after a lost response.
- Exercise loss before dispatch, after native acceptance and before terminal delivery; distinguish known failure, known acceptance/completion and unresolved outcome.
- A fresh connection credential or runtime restart is not proof that an earlier command never ran. Keep command identity stable and reconcile against NemoClaw-owned receipts.
- Map the same outcomes through VoiceClaw's client interface and document the recovery action once the bounded window is unavailable.
## Acceptance
- [ ] Repeating the same commandId and body returns the established receipt/result and does not invoke native work again. A different body with that ID conflicts.
- [ ] A lost response can be reconciled within the agreed window without submitting another task.
- [ ] Conflicting request reuse is rejected; uncertain or expired recovery is explicitly reported without blind resubmission.
- [ ] Fault tests observe actual invocation counts and correlation on both sides.
- [ ] Restart-durable task recovery is not claimed; that remains R2.
## Dependencies
Related R0 epic: [#11746](https://github.com/NVIDIA/NemoClaw/issues/11746). This follow-up is outside R0 completion.
VoiceClaw counterpart: [VoiceClaw #7](https://gitlab-master.nvidia.com/jarvis/voice-claw/-/issues/7).
Blocked by:
- [#11753: [R1a] Define and implement correlated VoiceClaw submission receipts and speech/detail results](https://github.com/NVIDIA/NemoClaw/issues/11753)
## Category
Feature
Contributor guide
Research direction
Start by reading blocked issue #11753 and the linked VoiceClaw counterpart to understand the receipt and result interfaces before defining the recovery boundaries. Done means the agreed identity, reconciliation window, conflict handling, expiry behavior, and fault tests cover loss before dispatch, after acceptance, and before terminal delivery without blind resubmission.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend-api-design, distributed-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100