Repository navigation
Description
Parent: #2048 (ID Zettelkasten design). Phase 3 — depends on #3814 (stable note identity/revision graph) and Drew's explicit answer to Q2 on #2048 (shared-write authority).
Bridge the existing live ProseMirror session to durable note revisions. Key sessions by stable note ID rather than filename; keep live steps/cursors as transient transport; on save/checkpoint publish a signed immutable revision with the current note ID and parent head(s). A stale/offline edit must not overwrite another writer: retain concurrent heads and require an explicit merge revision. Do not make one web process's in-memory collaboration state the replicated source of truth.
Gate: before implementing any shared-write authorization, re-read #2048 Q2. Use the selected policy; if Drew has not answered, park without changing authorization behavior. Do not infer write permission from friendly-name resolution or the reader's writer-set projection. No cross-store resolver work (that remains #2259).
Acceptance:
- Reopening a note by stable ID recovers its latest known revision and history across server restart/replica sync.
- A normal live session can checkpoint to a signed revision; ephemeral steps/cursors are not emitted as permanent events.
- Concurrent/offline sessions create separate heads; an explicit merge names its parents; no last-writer-wins data loss.
- The chosen group/write policy is tested at the boundary and is separate from viewer-specific visibility.
- Existing filename-based document editing remains compatible during migration; tests cover old and new paths.
Activity
developing-today commentedon Nov 1, 2026
CODE-1554
dezren39 commentedon Nov 1, 2026
agent-note:v1 — queued, parent #2048 phase 3; queue task 5826, dedupe
repo-health:v1:fix:developing-today/code:issue:3819. Resume only after #3814 lands and Drew answers shared-write authority Q2 on #2048; then persist signed checkpoints and explicit concurrent merges. Filed by repo-worker-code, OpenChamber scheduled lane, 2026-11-01T16:54Z.dezren39 commentedon Nov 1, 2026
🤖 Agent note · parked — claimed early; both start gates in the packet are unmet
Writemembers with visibility handled separately by the id: design: writer-set + view-projection spec for pkgs/id — representation, set-change semantics, discovery query (from #2030) #2238 projection (recommended), (b) a new per-note ACL/owner model, or (c) any group member. The latest comment on id: design: Zettelkasten layer — multiplayer docs/wiki on ID #2048 is the task 5733 routing note (2026-11-01T16:55Z); no answer from Drew appears there or on this issue. This task's acceptance requires shared-write authorization to follow Drew's explicit answer — proceeding on the recommendation alone would pre-empt a product authority decision that is genuinely Drew's.dezren39 commentedon Nov 1, 2026
🤖 Agent note · parked
45 remaining items
dezren39 commentedon Nov 3, 2026
agent-note:v1 — state: blocked (task 5826, OpenChamber scheduled lane)
dezren39 commentedon Nov 3, 2026
agent-note:v1 — state: blocked (task 5826, OpenChamber scheduled lane; evidence correction)
dezren39 commentedon Nov 4, 2026
agent-note:v1 — gate update (triage task 6823)
dezren39 commentedon Nov 4, 2026
Gate update: Q3 read-authority is DECIDED — this issue's read-policy gate is cleared (2026-11-04)
Drew's ruling on design #2048 question Q3 (main chat, 2026-11-04 ~10:32 CST), verbatim:
What this means for this phase: read access defaults to public read; the owner can scope/grant read to any number of groups or users (arbitrary ACL, not a single fixed group); the public default yields to a user's own default or the server config default. Default resolution order: object setting → user default → server config default → public. Enforce and test this read policy at the event/blob gates per this issue's acceptance criteria.
Full ruling comment: #5535 (comment) (also cross-referenced on design issue #2048). Note this settles Q3 (read) only; Q2 shared-write authority was already ruled on 2026-11-03.
developing-today commentedon Nov 7, 2026
🤖 Agent note · gate cleared — unblocked (label repair)
user/escalated+status/blocked+queue/blockedlabels were never updated after the Q3 ruling landed — stale state, repaired here: this issue is claimable again (queue/queued + status/needs-triage). Phase 1 (id: build: stable note identity and revision graph #3814) and Phase 2 (id: build: local topic links and backlink projection #3816) are CLOSED/merged, so its dependencies are met.