- Add autolink Jinja2 filter to detect URLs and make them clickable
- Add link picker dropdown to insert existing link URLs into list item content
- Add inline edit with link picker on each list item row
- Apply autolink filter on list detail and focus available list items
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Display-only row numbers (1, 2, 3...) scoped per domain group.
Numbers update instantly on drag-and-drop reorder via JS renumber.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Focus query now excludes soft-deleted tasks and list items.
Task delete redirects to /tasks instead of back to the (now deleted)
task's edit page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Task detail page gets a Delete button in the header bar (matching
all other entity detail pages). Task edit form gets a Delete button
below the form. Both use confirmation dialog via data-confirm.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Domain headers are now clickable to expand/collapse their item rows,
with a chevron indicator and item count badge. State persists via
localStorage, matching the sidebar toggle pattern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add HTML5 drag-and-drop within domain groups on the focus page.
Items can be dragged to reorder within their domain; cross-domain
drag is prevented. Uses hidden form POST (no fetch/XHR). Arrow
buttons kept as fallback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Items without a project or area were missing group headers, causing them
to appear under the previous project's group visually.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add list_item_id column to daily_focus (task_id now nullable, CHECK constraint ensures exactly one)
- Remove LIMIT 50 + [:15] slice — show up to 200 items with "show more" at 25
- Add text search (ILIKE) for filtering available items
- Add tab strip to switch between Tasks and List Items sources
- Toggle syncs list_item completed status alongside task status
- Graceful [Deleted] fallback for removed source items
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add word-break/overflow-wrap to .detail-body so long text wraps
properly, and add right margin inside the preview card for balanced
spacing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove card-style spacing (margin, border-radius, background) from capture-item and focus-item
- Use border-bottom pattern matching list-row for uniform density
- Wrap capture and focus items in .card containers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Reduce capture-item, files table, date group labels to 6px 12px padding
- Set font-size 0.80rem on capture-text, file table cells
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add generic move_in_order() to BaseRepository for reorder support
- Add reusable reorder_arrows.html partial with grip dot handles
- Add reorder routes to all 9 list routers (tasks, notes, links, contacts, meetings, decisions, appointments, lists, focus)
- Compact row padding (6px 12px, gap 8px) on .list-row and .focus-item
- Reduce font size to 0.80rem on row titles, sidebar nav, domain tree
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add tsvector full-text search, type filter (image/document/text/
spreadsheet/archive), tag filter dropdown, and pagination (50/page).
Replace folder button bar with compact dropdown. All filters combine
and carry through sort and pagination links.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace flat folder button bar with compact dropdown select.
Add sortable columns (path, name, date) to file list table.
Restore soft-deleted files on sync when file still on disk.
Serve text file previews with white background.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add up/down arrow buttons to reorder links within a folder, with lazy
sort_order initialization. Add dropdown to move existing links into the
current folder.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add quick capture input to topbar (desktop: inline 250px, mobile: full-width
with submit button) that POSTs to /capture/add with redirect back to current page
- Fix mobile bottom bar: 5 items (Dashboard, Focus, Tasks, Capture, More),
nowrap/overflow:hidden to prevent multi-line wrapping
- Rebuild mobile More panel as 3-column grid overlay (z-index 998/999/1000 stack)
with backdrop dismiss, 8 items: Calendar, Notes, Meetings, Decisions, Contacts,
Processes, Weblinks, Admin
- Add file seed fixture and registry mapping to eliminate 4 test skips
- Add time_budgets form factory patterns to fix 2 test failures
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Convert to 7 entity types: task, note, project, list item, contact, decision, weblink
- Each conversion has a dedicated form page with pre-filled fields and context selectors
- Multi-line paste creates batch with shared import_batch_id and undo button
- 3-tab filtering: Inbox (unprocessed), Processed (with conversion links), All
- Context pre-fill: optional area/project selectors on capture form
- Processed items show type badge and link to converted entity
- Sidebar badge count for unprocessed items already working
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5-item fixed bottom bar (Dashboard, Focus, Tasks, Calendar, More)
visible only on mobile (<768px). "More" opens a slide-up panel
with links to Notes, Meetings, Decisions, Contacts, Weblinks, Admin.
Active page highlighted with accent color. Desktop unaffected.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix seed data to match actual DB schemas (capture.processed, daily_focus.completed, weblinks junction table)
- Add date/datetime coercion in BaseRepository for asyncpg compatibility
- Add UUID validation in BaseRepository.get() to prevent DataError on invalid UUIDs
- Fix focus.py and time_tracking.py date string handling for asyncpg
- Fix test ordering (action before delete) and skip destructive admin actions
- Fix form_factory FK resolution for flat UUID strings
- Fix route_report.py to use get_route_registry(app)
- Add asyncio_default_test_loop_scope=session to pytest.ini
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>