mirror of
https://github.com/PerpetualSoftware/pad.git
synced 2026-09-21 01:53:33 +00:00
998716ae49
* feat: unified item timeline with comment-on-update, threading, and reactions (IDEA-115) Replace the separate Comments section and Version History modal on the item detail page with a single chronological timeline that interleaves comments, activities, and content versions. Key changes: - Add --comment flag to `pad item update` so agents/users can explain status changes inline (creates a comment linked to the activity) - Add threaded replies (parent_id on comments) with inline reply UI - Add emoji reactions on comments (new comment_reactions table) - New /timeline API endpoint merges comments, activities, and versions server-side with dedup and collapsing of rapid edits - New Svelte timeline components: ItemTimeline, TimelineCommentCard, TimelineActivityCard, TimelineVersionCard, ReactionPicker - Remove Implementation Notes and Decision Log inputs from web UI - Update skill docs to encourage --comment on status changes * fix: address review findings for PR #54 (iteration 1) - Use ListItemVersions instead of ListVersions in timeline endpoint so item content history renders correctly - Add workspace validation to reply and reaction handlers to prevent cross-workspace comment mutation - Raise activity cap from 500 to 10000 to avoid silently truncating long timelines - Fix toggleReaction to always POST (idempotent) instead of incorrectly matching other users' reactions for DELETE - Await onReply promise before clearing draft to prevent duplicate submissions and lost drafts on failure - Register reaction_added/reaction_removed in SSE ITEM_EVENTS so reactions from other sessions appear in real-time Co-Authored-By: Claude <noreply@anthropic.com> * fix: address review findings for PR #54 (iteration 2) - Fix nil pointer dereference in timeline handler when item not found - Store empty string instead of NULL for reaction user_id so UNIQUE constraint works correctly in SQLite - Add workspace validation to handleDeleteComment (cross-workspace deletion was possible) - Fix SKILL.md duplicate numbering (4. appeared twice) - Remove || true debug artifacts from reaction conditionals - Replace SvelteMap with plain Map in non-reactive groupReactions - Use != null checks for timeline API params to handle offset=0 - Log warning on comment creation failure during item update Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
24 lines
973 B
SQL
24 lines
973 B
SQL
-- Timeline: link comments to activities, threading, and reactions
|
|
|
|
-- Link comments to the activity that triggered them (e.g. status-change comments)
|
|
ALTER TABLE comments ADD COLUMN activity_id TEXT REFERENCES activities(id);
|
|
|
|
-- Threading: allow comments to be replies to other comments
|
|
ALTER TABLE comments ADD COLUMN parent_id TEXT REFERENCES comments(id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_comments_parent ON comments(parent_id);
|
|
CREATE INDEX IF NOT EXISTS idx_comments_activity ON comments(activity_id);
|
|
|
|
-- Emoji reactions on comments
|
|
CREATE TABLE IF NOT EXISTS comment_reactions (
|
|
id TEXT PRIMARY KEY,
|
|
comment_id TEXT NOT NULL REFERENCES comments(id) ON DELETE CASCADE,
|
|
user_id TEXT REFERENCES users(id),
|
|
actor TEXT NOT NULL DEFAULT 'user',
|
|
emoji TEXT NOT NULL,
|
|
created_at TEXT NOT NULL,
|
|
UNIQUE(comment_id, user_id, emoji)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_comment_reactions_comment ON comment_reactions(comment_id);
|