# Milestones

## v1.3 Chat & PWA (Shipped: 2026-04-02)

**Phases completed:** 6 phases, 35 plans, 51 tasks

**Key accomplishments:**

- Four vitest test stub files (46 it.todo cases) establishing Wave 0 scaffolds for chat service, routes, markdown rendering, and keyboard input
- Two Drizzle tables (chat_conversations, chat_messages) with migration SQL, plus TypeScript interfaces and Zod validators exported from @paperclipai/shared
- One-liner:
- Express REST API for conversation+message CRUD with cursor pagination, soft-delete, auto-title, and updatedAt bumping
- One-liner:
- TanStack Query infinite-scroll chat UI: chatApi client, useChatConversations/useChatMessages hooks, ChatConversationList with IntersectionObserver, ChatMessageList with auto-scroll, and fully wired ChatPanel with two-path message send
- DB migration adding updated_at to chat_messages, ChatMessage type update, @tanstack/react-virtual install, 11-role agent-role-colors utility (THEME-03), cursor-blink CSS animation, and 7 Wave 0 test stubs
- `server/src/services/chat.ts`
- Agent identity bar with role-specific colors (THEME-03), agent selector dropdown (CHAT-08), and streaming cursor for visible agent identity on every assistant message (AGENT-04)
- Edit/retry/stop controls wired to ChatMessage — user messages get inline edit textarea, assistant messages get retry RefreshCw, stop button component ready for ChatPanel.
- Slash command routing table (5 commands, /search disabled) and agent @mention autocomplete popover — both standalone, wired into ChatInput in plan 05.
- `ui/src/components/ChatMessageList.tsx`
- One-liner:
- Extended chatService with addSystemMessage helper and messageType support, and added POST handoff and status-update routes that insert typed system messages and create issues from brainstormer specs.
- One-liner:
- ChatMessage.tsx:
- One-liner:
- Six service methods and six route handlers for full-text search (tsvector/ts_rank), bookmark toggle/list, conversation branching with message copy, and Markdown/JSON export with agent name resolution
- Six chatApi methods, two React Query hooks, and four components — search/bookmark/branch UI layer built independently from server routes, ready for wiring in Plan 03.
- One-liner:
- One-liner:
- Complete server-side file system: multipart upload with content-type validation, object-storage persistence, DB record creation, stream download with correct MIME headers, conversation file listing, and cross-conversation reference support.
- Drag-and-drop, clipboard paste, and file picker wired into ChatInput via ChatFileDropZone and useChatFileUpload with XHR progress tracking
- One-liner:
- One-liner:
- PATCH /files/:fileId/promote endpoint and ChatFileCard promote button with FolderUp icon wired to chatApi.promoteFile
- Git versioning layer added to file uploads: gitFileService wraps git CLI with safe execFile, every upload creates a commit, GET /files/:fileId/history exposes git log
- PLACEHOLDERS.md manifest service with addEntry/replaceEntry and POST /files/:fileId/replace endpoint wiring agent-generated uploads to per-project markdown manifests
- VoiceRecordButton with MediaRecorder API wired into ChatInput; POST /transcribe endpoint with whisper-cpp/openai-whisper cascade and graceful 503 fallback
- Cache-first service worker with nexus-v1 cache, push/notificationclick handlers, idb + web-push installed, and 14 Wave 0 test stubs for PWA hooks and PullToRefresh
- React.lazy code splitting for all 37 page components plus Vite manualChunks for react, react-dom, react-router-dom, @tanstack/react-query, react-markdown vendor bundles
- useMediaQuery
- PWA install prompt with iOS fallback, amber offline status banner, and IndexedDB message queue that auto-flushes on reconnection
- End-to-end web push notifications: PostgreSQL push_subscriptions table, VAPID server service, /api/push routes, SW pushManager subscription hook, and engagement-gated permission prompt

---

## v1.2.1 Universal Skill Management (Shipped: 2026-04-01)

**Phases completed:** 1 phases, 2 plans, 2 tasks

**Key accomplishments:**

- One-liner:
- Zone taxonomy (DISPLAY/CODE/STORED), commit-msg hook enforcing [nexus] prefix, and git rerere established as rebase safety infrastructure before any upstream files are modified

---
