Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bcf20c4
feat(bot-mode): add automatic Group Chat continuity
dokterdok Sep 2, 2026
ad1ced2
fix(bot-mode): harden automatic Group Chat continuity
dokterdok Sep 2, 2026
71aeecb
fix(bot-mode): preserve hosted members across Desktop reconnects
dokterdok Sep 3, 2026
937a49b
fix(bot-mode): avoid false offline warnings for hosted groups
dokterdok Sep 3, 2026
1d17e75
fix(bot-mode): preserve hosted speaker identity through replay
dokterdok Sep 3, 2026
888a4bb
fix(bot-mode): keep hosted history consistent after reconnect
dokterdok Sep 3, 2026
9c21941
fix(bot-mode): keep classic chats usable during host discovery
dokterdok Sep 3, 2026
95cc573
test(bot-mode): finish deferred dialog cleanup before teardown
dokterdok Sep 3, 2026
a1d5e48
fix(bot-mode): harden Desktop group lifecycle and messaging continuity
dokterdok Sep 5, 2026
62b14e7
fix(bot-mode): complete unattended group setup and recovery
dokterdok Sep 6, 2026
e2b8640
test(bot-mode): match the clarified reconnect message
dokterdok Sep 6, 2026
7be8ce2
merge(desktop): reconcile continuity with pinned main
dokterdok Sep 8, 2026
5e928f7
merge(desktop): reconcile continuity with gateway runtime
dokterdok Sep 14, 2026
68f92bb
fix(desktop): bind shared-remote dispatch to its primary owner
dokterdok Sep 15, 2026
0c19759
fix(desktop): add durable profile route leases
dokterdok Sep 21, 2026
e2bfdfa
fix(desktop): snapshot leased route before async acquisition
dokterdok Sep 22, 2026
8f0cec3
fix(desktop): order classic group entries monotonically
dokterdok Sep 22, 2026
7b25b34
fix(desktop): isolate cancellation ownership
dokterdok Sep 22, 2026
b0157bd
fix(desktop): cover recovered and renamed cancellation lower-first
dokterdok Sep 22, 2026
6d9efec
fix(desktop): preserve recovered queue ownership until settlement
dokterdok Sep 22, 2026
937b087
fix(desktop): retain Stop and replacement isolation in queue closure
dokterdok Sep 22, 2026
f3c6728
fix(desktop): keep same-thread pending claimants independent
dokterdok Sep 22, 2026
967cc64
docs(desktop): record independent queue ownership acceptance
dokterdok Sep 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
"@icons-pack/react-simple-icons": "13.11.1",
"@lezer/highlight": "1.2.3",
"@nanostores/react": "1.1.0",
"@noble/hashes": "2.2.0",
"@nous-research/ui": "0.18.2",
"@streamdown/code": "1.1.1",
"@streamdown/math": "1.0.2",
Expand Down
32 changes: 32 additions & 0 deletions apps/desktop/scripts/delivery/97846/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# #97846 dependent Desktop cancellation correction

This directory keeps the #97846-owned correction for Desktop Group Chat cancellation when the affected queue/runtime context is supplied by the already-public composition inputs.

## Dependency boundary

`desktop-cancellation-dependent-overlay.patch` is an exact six-path contextual Git patch. Its preimage is the runtime/lower composition **before any Files changes**:

- preimage tree: `e76b349554ed86a02f2470c31d3912fcd9b5b332`
- corrected lower-only tree: `12f75525101c8b0e533fa204914ec53d1435dd71`
- patch SHA-256: `59f066c0141cd3faa0a5ce3b35107d35820a79e5c1976d12bf1a3f2994f4c713`
- patch size: 47,702 bytes, 1,079 lines

Apply with `git apply --index` after composing the pinned runtime/lower inputs and **before** the Files owner/dependent overlays. The executable recipe in `apps/desktop/scripts/delivery/104199/compose.sh` verifies the preimage, digest and corrected lower tree. There is no production dependency on Files: this patch includes only the dependent cancellation/identity behavior and its regressions, not a runtime-owned whole source body. Three lines of context anchor test hunks instead of relying on offsets from a different composition.

## Owned behavior

- Bind an in-flight queue item to its exact command fence and thread.
- Remove a lease-lost pending item without mutating an unrelated active room epoch, turn, or session.
- On active lease loss, interrupt only the session scoped to that active item’s thread while preserving later local work.
- Make explicit Stop derive its target from the live queue item, not `latestActivity.thread`; retain the bare member-key fallback only for rooms with no thread-scoped session keys.
- Reject retired queue bindings while preserving identity across a room rename.
- Register existing-message recovery in that same queue so recovered work has the same active command/thread/session ownership as fresh work.
- Keep a reclaimed command pending while its cancelled predecessor unwinds, independent of the room's presentation `running` flag. Remove its exact pending item before releasing its fence; discard expired items before activation, rebind surviving items to the current epoch, and clear running state when the active item exits early.
- Keep local-reply and mailbox-claim queue entries distinct even on the same thread: local replies coalesce by thread, mailbox work only by fence generation. Lease loss removes only its claimant; explicit Stop cancels every queued claimant, without losing a local reply or allowing an erased claimant to requeue.
- Follow in-flight commands by stable room identity across rename, rechecking descriptor authority and permanently rejecting removed/replaced bindings. Resolve cancellation, settlement and persistence against the current name; dispose the binding when execution settles.

The patch also carries focused mailbox, Stop, session-migration, rename, retirement, and view-authority regressions for these behaviors. Recovery tests hold the cancelled backend across a new claim, check later activation, abort-driven removal and silent lease expiry, preserve unrelated queued work, and prove a fresh claim remains usable. A separate recovery case starts while an unrelated thread is active. Active recovery also exercises lease loss and UI Stop against the exact recovered backend session. Rename tests exercise lease loss, UI Stop, mailbox Stop and successful settlement.

## Lower-first verification

The corrected lower-only state passed 21 focused cases (99 excluded by name filter), all three Desktop TypeScript projects and changed-source ESLint with zero warnings. This includes two same-thread owner-collision regressions that failed on the previous representation, four queue-overlap cases and the prior recovery/rename/isolation controls. Reproduce with `DESKTOP_FILES_VERIFY=lower` using the existing #104199 recipe. `focused` composes Files afterward and runs the same affected-path checks plus renderer build. The recipe README records executed results and scope. Independent source/composition review accepted the owner-distinct correction at lower tree `12f75525101c8b0e533fa204914ec53d1435dd71` and composed tree `f86ea20723955476e1d94297fe0a334ab9199dba`, including both same-thread enqueue orders, recovery/rename continuity and exact Stop/lease-loss ownership. This is not native Desktop or hosted-CI acceptance.
Loading