From e6fa8ef8a694fe626397826610c75d5b066d6c84 Mon Sep 17 00:00:00 2001 From: Bruno Deanoz Date: Tue, 23 Jun 2026 14:40:47 +0200 Subject: [PATCH] docs: restore completed sections in CLAUDE.md, fix numbering Keep [x] items as context for future sessions. Added new done items (text selection, ChatInput capsule, visual refresh). Fixed section numbering 1-8. Updated media cache to reflect custom disk cache. --- CLAUDE.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 6df8c25..336a398 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -370,7 +370,7 @@ All committed on `main`. Compile-verified on Mac (`./gradlew :app:compileDebugKo ### 1. Remaining visual/UX gaps (daily-drive blockers) -These are what separate "prototype" from "daily-driver": +All done: - [x] **Markdown rendering during streaming** — all regex patterns pre-compiled as top-level constants, `remember(text)` memoization. Verified performant - [x] **Code block copy button** — tap-to-copy on fenced code blocks (clipboard + haptic feedback) @@ -379,9 +379,15 @@ These are what separate "prototype" from "daily-driver": - [x] **Link rendering** — clickable via `ClickableText` + `ACTION_VIEW`, opens browser on tap - [x] **Strikethrough** — `~~text~~` rendered with line-through + dimmed alpha - [x] **Task lists** — `- [ ]` / `- [x]` with Check/Square icons in accent color +- [x] **Text selection** — `SelectionContainer` on user + assistant messages, long-press to select/copy/share +- [x] **Single-row ChatInput** — Gemini-style capsule (64dp, pill shape), mode pills inside card via tune icon +- [x] **New Chat button** — PenLine icon in top bar +- [x] **Visual refresh** — W300 typography, larger headings, message animations, richer themes/blobs, semantic colors, custom 1.0px icons, glass-lens app icon ### 2. Conversation management from the app +All done: + - [x] **Conversation rename/delete** from the sidebar — 3-dot menu on each chat, `PATCH`/`DELETE /api/v1/conversations/[id]` - [x] **Conversation pin/unpin** from the sidebar — `PATCH { pinned }`, star icon for pinned items - [x] **In-app unlock for locked conversations** — BiometricPrompt with CryptoObject (AES key in TEE/StrongBox), hardware-enforced biometric auth → server unlock token via `POST /api/v1/auth/unlock` → fetch messages with `X-Unlock-Token` header. Auto-lock on background. Fallback to direct unlock if biometrics unavailable @@ -443,7 +449,7 @@ The web's call mode (`use-call-mode.ts`, `call-view.tsx`) is the reference imple - [ ] **Stale-check enforcement** — use `cachedAt` to trigger background refresh when older than N minutes - [ ] **Offline-queue for sends** — queue messages locally, send when network returns (needs conflict resolution) - [ ] **Incremental sync** — only fetch changed conversations (needs server-side `since` parameter) -- [ ] **Media cache** — cache images/files locally (Coil or custom disk cache) +- [x] **Media cache** — `NetworkImageCache` with file-based disk cache (`cacheDir/img`), 32MB size-based memory LRU, shared `KaizenApi.imageClient` - [ ] **Full-text search** — FTS4/FTS5 over cached messages (Room supports this natively) - [ ] **Attachment queries** — "show me all chats with images/PDFs" via Room DB