OMG page:
- Form now has "Fill from project" dropdown that auto-fills name/client/job#
from any cc-dashboard project (projects loaded in parallel on mount)
- Job # placeholder updated to show numeric format
DevOps Work Items:
- Count "19" moved into the section heading next to "Work Items" title
- DataTable toolbar (separate row with count+filter) hidden via showToolbar=false
- DataTable: add showToolbar prop (default true) to control toolbar visibility
ADO sync:
- Fetch all fields from ADO API (fields=None) to capture custom fields
including "OMG Deliverable Number" in fields_json
- Expose fields_json in AzureWorkItemOut schema for frontend inspection
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wrap 'Mark done', 'Edit project', 'Generate AI summary' buttons and inline-editable OMG spans with Tooltip component; replace priority dot title attr in KanbanCard; also adds focus-visible ring to 'Mark done' button.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace inline 'Drop here' placeholder in KanbanColumn with EmptyState component, remove title attr in favour of aria-label on add-task button, add focus-visible ring.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace window.confirm with ConfirmDialog for block delete, upgrade view/week-length toggles to SegmentedControl, swap inline SVG nav arrows for lucide ChevronLeft/Right with ghost icon Button, add focus-visible ring to planner toggle.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove Planka: docker-compose services, apache /board/ proxy, env vars, custom CSS dir
- Add Kanban board at /tasks: 4 columns (To Do / Doing / Testing / Done),
native HTML5 drag-and-drop, card modal (TaskForm reuse), per-column "+" button
- Add 'testing' status to Task model validator and frontend union type
- Add GET /api/tasks/{id} endpoint (was missing, frontend already called it)
- Enrich DevOps clone: live-fetches description, AC, assignee, iteration,
comments and attachments from ADO; renders as Markdown in task.notes
- Add /omg page: standalone project/client/job# registry with inline editing
and create/edit/delete dialog; backed by new omg_entries table (migration 0008)
- Add omg router to main.py; add OMG + Tasks to sidebar and router
- Fix dead /planner link on Dashboard -> /tasks
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Sidebar: white background, orange gradient logo, orange active pill
- TopBar: glassmorphism (white/80 + backdrop-blur-xl)
- AppLayout: warm gradient background mesh
- DataTable: new reusable component with column sort, filter, resize
- DevopsView: rebuilt with DataTable; connection shows "all assigned work items"
- ADO work item URLs: use org-level URL (no project in path)
- CalendarBlock: planned blocks show task title instead of project name
- Reports export: replaced <a download> with fetch+blob to send JWT auth header
- Sidebar Tasks: fixed path /board/ (trailing slash for Apache ProxyPass)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Backend TaskOut doesn't include tags field; TaskCard.vue read
task.tags.length causing TypeError on undefined. Making tags optional
in the Task type and using optional chaining is the correct fix since
the tags feature is unused (always empty).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sidebar is always dark regardless of app theme. text-foreground resolves
to dark color in light theme, making nav items invisible on dark sidebar.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Calendar: popover now shows Edit/Delete buttons for planned blocks; Edit pre-populates TaskForm; Delete calls deleteBlock API + removes from store. Sessions show read-only label. CalendarView handles ?date= query param from Dashboard chart click.
- Projects: grid/list view toggle with localStorage persistence
- Project detail: Daily Breakdown section (per-day hours + sessions, clickable → filtered view); always-visible 'All time' link; sessions not double-sliced (backend limit bumped 50→200); date-filtered view shows full summaries without line-clamp
- Planner: fixed mount race — onMounted now calls fetchForDate(today) instead of fetchAll()
- DevOps: inline connect form on /devops when not connected; form extracted to DevopsConnectForm.vue shared with Settings
- Reports: added break-words, pre-wrap and overflow-x: auto on prose pre/code blocks to prevent text overflow
- Sidebar: increased text contrast (text-foreground/60 for inactive items, text-foreground/40 for icons)
- Dashboard: KpiCard supports 'to' prop via RouterLink; Projects count + Top Project KPIs link to /projects; Projects list rows link to project detail; Hours by Day bars click → /calendar?date=
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- TaskForm: add start_time/end_time fields; on save emits optional
block payload so PlannerView creates a PlannedBlock automatically
- PlannerView: handleSave accepts block param, calls createBlock after
task creation when time is provided
- CalendarBlock: planned blocks with task_id get draggable="true" +
@dragstart emitting blockDragStart event
- CalendarGrid: forward blockDragStart to useCalendarDnD
- useCalendarDnD: onBlockDragStart stores block_id + duration in
dataTransfer; onDrop handles both move-existing-block and
create-new-block paths
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Phase 1 — Contract bugs:
- Add progress_pct/budget_hours to ProjectHours schema and compute from ProjectBudget
- Add hours/pct to ToolUsage schema, compute in project_detail endpoint
- Fix ProjectDetailView to use correct nested data shape (data.project.*, data.sessions, etc.)
- Fix GenerateReportIn: rename field date → period_date; update reports router
- Fix tasks list date filter: use Query(alias='date') instead of positional arg
- Fix AzureIntegration/AzureWorkItem types: org→organization, id type, ado_id, sync_enabled
- Fix devops API payload and SettingsView to use organization field
- Fix TaskForm ADO work item selector to use wi.ado_id for display, wi.id for value
- Add light theme CSS variables in :root, keep dark in .dark class
- Remove hardcoded class='dark' from HTML, add theme persistence script
- TopBar: persist dark/light to localStorage on toggle
- DashboardView: switch monthly() → timeline() endpoint for charts
- DOW endpoint: add from/to date range filtering
Phase 2 — Planner:
- Add projects API endpoint and Pinia store
- Add project picker to TaskForm
- Fix ADO work item display (#ado_id not #id)
Phase 3 — Calendar:
- getWeekDays() accepts weekLength 5|7 parameter
- Calendar store: add weekLength ref, setWeekLength(), update fetchCurrentView range
- CalendarToolbar: add 5d/7d toggle buttons; fix dateLabel to use days[days.length-1]
- CalendarView: clicking session block navigates to project-detail/:id/:date
- project-detail route: add optional :date? param; ProjectDetailView filters by date
- DnD resize: send start_at alongside end_at (PlannedBlockIn requires both fields)
Phase 4 — AI session summaries:
- Add ai_title/ai_result columns to Session model
- Alembic migration 0006 for new columns
- New ai_session_summary service using Claude Haiku
- Session summarize endpoint: POST /api/dashboard/sessions/{id}/summarize
- Scheduler job: summarize sessions without ai_title every 10 minutes
- SessionOut schema: add ai_title/ai_result fields
- ProjectDetailView: show ai_title as primary, ai_result as subtitle; sparkle button to generate
Phase 5 — Expanded AI assistant:
- Add 14 new tools: list/create/update/delete/complete tasks, prioritize_day,
schedule_task, auto_schedule_day, list_projects, list/delete manual entries,
generate_report, search_sessions, list_work_items
- Import PlannedBlock and AzureWorkItem in assistant service
- Update SYSTEM_PROMPT to describe full agent capabilities
- Agentic loop: 5 → 10 rounds max
- AssistantWidget: add tool labels for all new tools, update quick hints
New files: DevopsView.vue, projects store/API, ai_session_summary.py, migration 0006
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Design:
- Replace purple SaaS theme with operational dark navy (#0b1020) + cyan (#57c7ff)
- Satoshi + JetBrains Mono fonts via CSS @import
- KpiCard: hero variant for Total Hours, tabular-nums for all values
- Sidebar: cyan active state instead of amber, dimmer inactive icons
- Dashboard: skeleton loading states for all charts, polished empty states
- TopBar: cyan user avatar consistent with sidebar
Fixes:
- Live Feed: SSE URL was /api/events/stream (wrong) → /api/events; pass JWT as ?token= query param
- Dashboard: default preset changed to 'today' instead of '30d'
- index.html: Cache-Control: no-cache to prevent stale asset issues
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- TaskForm: change project_id/azure_work_item_id form state from null to undefined
- CalendarView/PlannerView: accept TaskCreatePayload | TaskUpdatePayload from @save emit
- Rebuild: web assets with AssistantWidget included
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Full Vue 3 + Vite + TypeScript + Tailwind SPA replacing the vanilla JS static frontend.
Includes router, Pinia stores (auth/tasks/calendar/devops), axios API client with all
endpoints, UI components (Button/Card/Dialog/Badge/Input/etc), calendar grid with
lane-packing algorithm and DnD support, SSE live feed, and all 11 views.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>