P1: source-confirmed task-list durability gap
Pinned main 2a85749f4dab8f0ef56650e43bf96781dc18d0ec (tree 06f47fe73789bbae0d91464160b1648709879aa8). This is a source-path finding, not a new runtime observation.
Task-list create persists registration metadata (kind/id/name/topic/role), while add/claim/complete mutate the in-memory replica and publish deltas best-effort. TaskListStorage exists in src/crdt/persistence.rs but has no production caller. Startup src/server/crdt_subscriptions.rs:657-707 recreates/joins a fresh list; src/lib.rs:13676-13775 starts from TaskList::new and relies on peer sync. With no live holder retaining task state, the list cannot recover its content.
Existing tests/crdt_subscription_persistence.rs:61-66,176-267 keeps Alice authoritative while Bob restarts, so it proves registration/replication recovery rather than all-holder or standalone disk durability. Accepted ADR-0023 context explicitly lists CRDT task lists among state kept across daemon restarts. The API local-commit response does not disclose that this task replica is volatile.
Next: one deterministic no-network regression through actual create/mutate/rehydrate and query paths, using a fresh state and the same data directory with no surviving replica. Preserve task IDs, title, claim/provenance, order and version material; corrupt/truncated persistence must not silently install empty state. Then review persistence acknowledgement/failure semantics and every local mutation/admitted remote merge/startup path before implementation. No new architecture decision is accepted by filing this issue.
Operational owner: Codex/Sol for regression and design; Claude and OMP review before merge. This is separate from #321, #461 and #531. No issue closure or recovery acceptance is claimed.
P1: source-confirmed task-list durability gap
Pinned main
2a85749f4dab8f0ef56650e43bf96781dc18d0ec(tree06f47fe73789bbae0d91464160b1648709879aa8). This is a source-path finding, not a new runtime observation.Task-list create persists registration metadata (kind/id/name/topic/role), while add/claim/complete mutate the in-memory replica and publish deltas best-effort.
TaskListStorageexists insrc/crdt/persistence.rsbut has no production caller. Startupsrc/server/crdt_subscriptions.rs:657-707recreates/joins a fresh list;src/lib.rs:13676-13775starts fromTaskList::newand relies on peer sync. With no live holder retaining task state, the list cannot recover its content.Existing
tests/crdt_subscription_persistence.rs:61-66,176-267keeps Alice authoritative while Bob restarts, so it proves registration/replication recovery rather than all-holder or standalone disk durability. Accepted ADR-0023 context explicitly lists CRDT task lists among state kept across daemon restarts. The API local-commit response does not disclose that this task replica is volatile.Next: one deterministic no-network regression through actual create/mutate/rehydrate and query paths, using a fresh state and the same data directory with no surviving replica. Preserve task IDs, title, claim/provenance, order and version material; corrupt/truncated persistence must not silently install empty state. Then review persistence acknowledgement/failure semantics and every local mutation/admitted remote merge/startup path before implementation. No new architecture decision is accepted by filing this issue.
Operational owner: Codex/Sol for regression and design; Claude and OMP review before merge. This is separate from #321, #461 and #531. No issue closure or recovery acceptance is claimed.