commits
Corrected comment namespace from app.diffdown.comment to com.diffdown.comment
Skip steps already applied via WS while the POST was inflight.
Copy updates to landing and about pages
Adds a full comment system using ATProto as storage backend:
- Comments stored as separate app.diffdown.comment records on user's PDS
- Threading via replyTo (full AT URI) with root/reply grouping
- Comment marks in ProseMirror editor (yellow highlight on anchored text)
- Resolve/reopen toggle; resolved comments lose their highlight
- Comments sorted by document position
- Real-time sync via WebSocket broadcast (comments_updated message)
- Comments sidebar with toggle button in toolbar
- Collaborators can comment on shared documents
- Fix duplicate renderCommentThreads declaration (caused editor crash)
- Fix reply button: stop click propagation, bypass openCommentForm, set
dummy pendingCommentRange so submitComment proceeds
- Fix reply AT URI map key mismatch: key replies by rkey not full AT URI
- Fix resolve 404: use rootComment.id (ATProto rkey) not threadId
- Fix highlight removal on resolve: reanchorCommentMarks now clears all
marks then re-adds only unresolved ones
- Sort comment threads by document position (top-to-bottom)
- Broadcast comments_updated WS message on create/update for live sync
- Add Comments toggle button to toolbar
- Move comment-form outside editor-page div to fix z-index stacking
- Change "Resolved" resolve button label to "Reopen"
- Inherit threadId in replies; fix reply form positioning
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Comments are now stored as an array inside the com.diffdown.document
ATProto record on the owner's PDS, making documents fully self-contained
and portable.
Changes:
- Add EmbeddedComment type and Comments field to Document model
- Remove old com.diffdown.comment per-record approach
- CommentCreate/CommentList do read-modify-write on owner's document
- Comment sidebar shown for owners and collaborators
- Paragraph click in rich editor shows a comment button
- ownerDID threaded through comment API calls for collaborator access
- Clicking a comment scrolls to and highlights the target paragraph
(Web Animations API, yellow outline pulse)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Store the ?next= param through the OAuth round-trip via the session
so collaborators land on their invite URL after signing in.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Drop email, password, name, avatar_url, oauth columns from User;
users table now has only id and did
- Remove email/password login and registration routes and handlers
- Remove GetUserByEmail, GetUserByOAuth, UpdateUserPassword from db
- Simplify CreateUser / scanUser to match the new schema
- Update ATProto callback to create minimal User{DID: sub}
- Fix nav to use UserHandle (resolved from DID doc) instead of User.Name
- Point login buttons to /auth/atproto instead of /auth/login
- Add migration 007 for the simplified users table
- About page content and style tweaks
- Landing page gap tweak
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix handle display in navbar: resolve handle from DID document
(alsoKnownAs field) instead of calling app.bsky.actor.getProfile
against the PDS, which doesn't serve AppView queries
- Fix avatar fetch: call public.api.bsky.app AppView instead of the
user's PDS for app.bsky.actor.getProfile
- Pass handle and avatar to collaboration presence: shown as tooltip
and avatar image on presence dots, falling back to colored circle
when no avatar is available
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a full comment system using ATProto as storage backend:
- Comments stored as separate app.diffdown.comment records on user's PDS
- Threading via replyTo (full AT URI) with root/reply grouping
- Comment marks in ProseMirror editor (yellow highlight on anchored text)
- Resolve/reopen toggle; resolved comments lose their highlight
- Comments sorted by document position
- Real-time sync via WebSocket broadcast (comments_updated message)
- Comments sidebar with toggle button in toolbar
- Collaborators can comment on shared documents
- Fix duplicate renderCommentThreads declaration (caused editor crash)
- Fix reply button: stop click propagation, bypass openCommentForm, set
dummy pendingCommentRange so submitComment proceeds
- Fix reply AT URI map key mismatch: key replies by rkey not full AT URI
- Fix resolve 404: use rootComment.id (ATProto rkey) not threadId
- Fix highlight removal on resolve: reanchorCommentMarks now clears all
marks then re-adds only unresolved ones
- Sort comment threads by document position (top-to-bottom)
- Broadcast comments_updated WS message on create/update for live sync
- Add Comments toggle button to toolbar
- Move comment-form outside editor-page div to fix z-index stacking
- Change "Resolved" resolve button label to "Reopen"
- Inherit threadId in replies; fix reply form positioning
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Comments are now stored as an array inside the com.diffdown.document
ATProto record on the owner's PDS, making documents fully self-contained
and portable.
Changes:
- Add EmbeddedComment type and Comments field to Document model
- Remove old com.diffdown.comment per-record approach
- CommentCreate/CommentList do read-modify-write on owner's document
- Comment sidebar shown for owners and collaborators
- Paragraph click in rich editor shows a comment button
- ownerDID threaded through comment API calls for collaborator access
- Clicking a comment scrolls to and highlights the target paragraph
(Web Animations API, yellow outline pulse)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Drop email, password, name, avatar_url, oauth columns from User;
users table now has only id and did
- Remove email/password login and registration routes and handlers
- Remove GetUserByEmail, GetUserByOAuth, UpdateUserPassword from db
- Simplify CreateUser / scanUser to match the new schema
- Update ATProto callback to create minimal User{DID: sub}
- Fix nav to use UserHandle (resolved from DID doc) instead of User.Name
- Point login buttons to /auth/atproto instead of /auth/login
- Add migration 007 for the simplified users table
- About page content and style tweaks
- Landing page gap tweak
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix handle display in navbar: resolve handle from DID document
(alsoKnownAs field) instead of calling app.bsky.actor.getProfile
against the PDS, which doesn't serve AppView queries
- Fix avatar fetch: call public.api.bsky.app AppView instead of the
user's PDS for app.bsky.actor.getProfile
- Pass handle and avatar to collaboration presence: shown as tooltip
and avatar image on presence dots, falling back to colored circle
when no avatar is available
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>