Commit Graph

307 Commits

Author SHA1 Message Date
chihlasm
bee8c80ea4 feat: add invite token handling to survey page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:56:15 -05:00
chihlasm
74e1dcfccf feat: add admin survey invite CRUD endpoints
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:54:13 -05:00
chihlasm
db4d1ada05 feat: add survey invite email template
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:52:47 -05:00
chihlasm
a845f9db58 feat: add invite status check and token validation on submit
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:51:27 -05:00
chihlasm
bbc7c1b33c feat: add survey invite schemas and token field
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:43:04 -05:00
chihlasm
ca7ca65c25 feat: add survey_invites migration and invite_id FK
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:41:22 -05:00
chihlasm
56ae39ca01 feat: add SurveyInvite model
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:39:29 -05:00
chihlasm
9bb69254df docs: add survey invite tracking design and implementation plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:33:17 -05:00
chihlasm
4d2c4930fd feat: Slate & Ice Modern aesthetic redesign (#94)
* chore: update Google Fonts to Bricolage Grotesque, IBM Plex Sans, JetBrains Mono

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: update Tailwind config to Slate & Ice theme colors and fonts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: update CSS variables and glass-card utilities for Slate & Ice theme

- Replace all color variables with Slate & Ice palette
- Add glass system vars (--glass-bg, --glass-blur, --shadow-float)
- Replace legacy glass-card with new variable-driven glass classes
- Add breatheGlow, bellWobble, slideDown, fadeInRight keyframes
- Update font references to IBM Plex Sans and Bricolage Grotesque

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: recolor BrandLogo to cyan gradient, split BrandWordmark for gradient Flow text

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: update TopBar with glassmorphism backdrop and cyan accent styling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: update Sidebar with glassmorphism backdrop

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add ambient atmosphere gradient orbs behind app shell

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: update QuickStats and SessionsPanel with glass-card styling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add WeeklyCalendar, QuickActions, OpenSessions, RecentActivity dashboard components

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: redesign dashboard layout with calendar, open sessions, and glass-card panels

New layout: greeting → calendar+actions → sessions+stats → activity
Replaces old QuickStats and SessionsPanel with new dashboard components

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: replace remaining purple hex references with ice-cyan accent

Sweep of hardcoded purple hex values (#818cf8, #6366f1) replaced with
new cyan accent (#06b6d4) in QuickActions, RecentActivity, QuickLaunch,
and SVG brand assets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update CLAUDE.md branding and design system for Slate & Ice Modern

Updated Last Updated date, branding section (fonts, colors, glass
utilities, atmosphere orbs), component styling rules, and Design System
section to reflect the new ice-cyan glassmorphism theme.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add Slate & Ice Modern design doc and implementation plan

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: redesign login page with Slate & Ice Modern design system

Apply glassmorphism styling, atmosphere orbs, branded wordmark, and
consistent design tokens to match the updated app shell aesthetic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: raise TopBar z-index so profile dropdown renders above main content

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add AI assistant with in-session copilot and standalone chat with RAG

Implements three-phase AI assistant feature:
- Phase 0: RAG infrastructure with pgvector embeddings, Voyage AI integration,
  tree chunking service, and semantic search over team's flow library
- Phase 1: In-session copilot panel during flow navigation with contextual
  AI help, current step awareness, and suggested related flows
- Phase 2: Standalone AI chat page with persistent conversation history,
  pin/delete, and configurable retention policies (account-level)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add account management, email verification, AI fixes, and user guides

- Profile settings, account transfer, delete/leave account flows
- Email verification with JWT tokens and Resend integration
- AI assistant/copilot fixes: markdown rendering, shared RAG helpers,
  token tracking, input refocus, model_validate usage
- User guides hub + detail pages with 13 topic guides
- Sidebar and top bar navigation for guides

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: prevent stale chunk errors after deployments

- Set Cache-Control no-cache on index.html in nginx so browsers always
  fetch fresh chunk references after a deploy
- Auto-reload on chunk load failures (stale deploy detection) with
  loop prevention via sessionStorage
- Show friendly "App Updated" message if auto-reload doesn't resolve it

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add email verification toggle to admin settings

Adds platform-level toggle to enable/disable email verification.
When disabled, the verification banner is hidden and the send
endpoint returns 403.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:44:25 -05:00
chihlasm
554ad84d9e chore: add Docker dev files and ignore .sql database dumps
Added Dockerfile.dev for backend and frontend, docker-compose.dev.yml
for local development. Added *.sql to .gitignore to prevent accidental
commit of database dumps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 19:00:46 -05:00
chihlasm
e25f041332 docs: add Alembic sequential migration numbering rule to CLAUDE.md (#38)
Migrations must use sequential numbered prefixes (e.g., 040_desc.py) with
--rev-id flag. Never use auto-generated revision IDs. Updated both the
lessons learned section and the development commands.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:53:05 -05:00
chihlasm
9811c56280 docs: consolidate LESSONS-LEARNED.md into CLAUDE.md, single source of truth
Merged 8 unique lessons (#30-#37) from LESSONS-LEARNED.md into CLAUDE.md:
Alembic env.py imports, JSONB datetime serialization, export pipeline order,
Railway deployment gotchas, bcrypt pinning, email validator TLD, first admin
promotion. Deleted LESSONS-LEARNED.md and updated all references.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:51:43 -05:00
chihlasm
a1c9675be7 docs: add CI/CD gotchas and Linux venv path to CLAUDE.md
Added lessons learned: AI tests need ai_enabled mock in CI (#28),
ESLint no-unused-vars lacks argsIgnorePattern (#29). Added Linux venv
activation path and gh CLI commands for CI debugging.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:38:28 -05:00
chihlasm
f31058fc3f fix: resolve CI failures — ESLint unused vars and AI chat tests in CI
Frontend: suppress unused-vars ESLint errors for callback params in
MaintenanceFlowDetailPage and StepLibraryPage.

Backend: add autouse fixture to mock settings.ai_enabled=True in
test_ai_chat.py so tests pass in CI where no ANTHROPIC_API_KEY is set.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:21:48 -05:00
chihlasm
5b150e29e5 fix: correct entity name to ResolutionFlow LLC in license
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:05:07 -05:00
chihlasm
787456d9d4 chore: add proprietary license file
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:04:44 -05:00
chihlasm
9bef7e5814 docs: rewrite README to reflect current product state
Updated from planning-phase placeholder to accurate representation of
ResolutionFlow as a production SaaS product. Reflects all shipped features
(AI Flow Assist, procedural/maintenance flows, cross-references, session
sharing, export improvements), current tech stack, project structure, and
development setup instructions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 00:36:23 -05:00
chihlasm
459792019a docs: rewrite roadmap to reflect current state, add post-work checklist to CLAUDE.md
Rewrote 03-DEVELOPMENT-ROADMAP.md — replaced outdated week-by-week format with
phase-based structure reflecting actual project state. Integrated all 13 open
GitHub issues into appropriate phases. Added "After Completing Work" checklist
to CLAUDE.md coding standards and roadmap/issues to quick reference table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 00:30:13 -05:00
chihlasm
dfa05a9b25 feat: AI Chat Builder (Flow Assist) + cross-reference loop-back support
- AI conversational flow builder with interview phases (scoping, discovery, enrichment)
- Flow Assist sidebar nav, toolbar, chat panel, tree preview
- Cross-reference / loop-back support: nodes can reference any node in the tree
- Dashed purple arrows on canvas for cross-references
- Node picker dropdowns for action and decision forms
- Backend validator relaxed for cross-references
- AI system prompt updated for loop-back patterns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 20:43:48 -05:00
chihlasm
208807cf94 docs: add cross-reference / loop-back implementation plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 20:43:34 -05:00
chihlasm
01e7ad7578 feat: update AI system prompt to allow cross-reference loop-back patterns
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:55:05 -05:00
chihlasm
fc9e1e5f63 feat: add cross-reference node picker to decision option rows
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:50:28 -05:00
chihlasm
663919d928 feat: add node picker dropdown to action node form for cross-references
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:47:10 -05:00
chihlasm
b0347bacd4 feat: render cross-reference edges as dashed purple arrows on canvas
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:25:16 -05:00
chihlasm
ddf75df976 feat: change circular reference detection from error to warning — loops are intentional
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:21:11 -05:00
chihlasm
ce3ad44b7d feat: relax decision option validation — allow cross-references to any node in tree
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:18:02 -05:00
chihlasm
bd72f64030 docs: add cross-reference / loop-back design document
Design for allowing tree nodes to reference any node in the tree
(not just direct children), enabling loop-back patterns. Ghost
reference approach — no schema changes, SVG overlay arrows on
canvas, node picker + drag-to-link in editor.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:09:11 -05:00
chihlasm
b819236aa5 fix: replace Import button with "Save to Flow Library" and remove duplicate check
- After generation, toolbar shows "Save to Flow Library" button
  (replaces "Import to Editor")
- Button shows "Saving..." spinner state during API call
- Generate button shows animated spinner during generation
- Backend /import endpoint always creates a new Tree record
  (removed generated_tree_id idempotency check)
- Navigates to tree editor after successful save

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 15:08:58 -05:00
chihlasm
2196886cd2 feat: rename AI builder to "Flow Assist" and add sidebar nav item
- Rename all "Build with AI" labels to "Flow Assist"
- Update CreateFlowDropdown description to "AI-powered flow builder"
- Add Flow Assist nav item with Sparkles icon to sidebar (both
  expanded and collapsed states)
- Update AIFlowBuilderModal titles for consistency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 10:55:51 -05:00
chihlasm
1f404a20ca fix: handle truncated AI responses and relax progressive tree validation
- Strip unclosed [TREE_UPDATE] and [METADATA] blocks from display when
  response is truncated by max_tokens
- Increase send_message max_tokens from 2000 to 8000 to prevent
  truncation of large tree JSON
- Use lightweight validation for progressive tree updates (valid root
  node only) instead of strict 5-node minimum — strict validation
  still applies at final /generate step

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 10:38:22 -05:00
chihlasm
e79ffff1dc fix: address code review findings for AI chat builder
- C1: Fix race condition in handleReset — await abandonSession before
  starting new session to prevent store state corruption
- I1: Extract error messages from Axios response.data.detail instead of
  generic error.message — users now see helpful backend messages (quota
  limits, message caps, etc.)
- I2: Add isGenerating guard in generateTree store action to prevent
  concurrent generation requests on double-click
- I3: Add isResponding guard in sendMessage to prevent concurrent sends
- M5: Remove redundant type casts on flowType
- M6: Add rate limiter to DELETE /sessions/{id} for consistency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 08:53:54 -05:00
chihlasm
596153085a feat: add AI chat builder frontend — types, API client, store, components, page, routing
- TypeScript types for chat session, messages, and responses
- API client module with all 6 endpoints
- Zustand store with session management, message sending, tree generation, import, resume
- 7 chat components: ChatMessage, ChatInput, ChatPanel, PhaseIndicator, ChatToolbar, EmptyPreview, StaticTreePreview
- AIChatBuilderPage with split-panel layout (60% chat / 40% preview)
- Route at /ai/chat with lazy loading
- "Build with AI" button on TreeLibraryPage
- Session resume via URL search params

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 07:20:04 -05:00
chihlasm
0da67586da feat: add backend tests for AI chat builder + fix conversation_id FK issue
Tests cover session create, send message with tree update, get session,
abandon, 404 on missing session, and 503 when AI disabled.

Fixed: ai_usage.conversation_id has FK to ai_conversations, not
ai_chat_sessions. Chat builder now passes conversation_id=None and
tracks session reference in extra_data.chat_session_id.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 04:06:47 -05:00
chihlasm
ef96b1a12f feat: add AI chat builder endpoints and update quota service
6 endpoints: create session, send message, get session, generate tree,
import to editor, abandon. Quota service daily limit updated to include
chat builder generation types.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 03:54:08 -05:00
chihlasm
babfd0c6d9 feat: add generate_text method to AIProvider for non-JSON responses
The AI Chat Builder needs conversational text responses, not JSON-only.
Gemini's generate_json forces response_mime_type='application/json'
which is incompatible. The new generate_text method omits this constraint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 03:49:35 -05:00
chihlasm
b7e48fae0e feat: add AI chat builder service with system prompt and conversation loop
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 03:47:56 -05:00
chihlasm
5c67455190 feat: add Pydantic schemas for AI chat builder
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 03:44:01 -05:00
chihlasm
ccd178b02e feat: add ai_chat_sessions database model and migration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 03:42:10 -05:00
chihlasm
09c5d60067 docs: add AI Chat Builder implementation plan
14 tasks across 4 phases: backend foundation (model, schemas, service,
endpoints, tests), frontend chat UI (types, API client, store,
components, page), tree preview integration, and polish (session
resume, responsive layout).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 03:25:17 -05:00
chihlasm
6e19b99814 docs: add AI Chat Builder design document
Design for conversational AI flow builder that interviews users as a
senior MSP engineer to collaboratively build troubleshooting/procedural
flows. Coexists with existing wizard-based builder as a separate entry
point.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 03:17:21 -05:00
chihlasm
6fc76187c0 fix: add diagnostic logging and increase scaffold max_tokens to 2048
The "Unterminated string" JSON parse error is likely caused by Gemini
output truncation at 1024 tokens. Increases scaffold max_tokens to 2048
and adds logging for: raw response text, finish_reason (truncation
detection), and JSON parse failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 00:15:01 -05:00
chihlasm
957f13b993 fix: use correct google-genai async API and remove debug endpoint
The google-genai SDK uses `client.aio.models.generate_content()` for
async calls, not `client.models.generate_content_async()` which doesn't
exist. Also removes the temporary /ai/provider-debug endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 00:08:20 -05:00
chihlasm
dc68d992a4 debug: add temporary /ai/provider-debug endpoint
Shows which provider is selected and whether keys are loaded.
Remove after debugging the 502 on PR env.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 00:02:47 -05:00
chihlasm
0fb3126fd2 fix: add error logging and error type to AI builder 502 responses
The generic "AI provider error" message made debugging impossible.
Now logs the full exception traceback and includes the error class
name in the 502 response detail.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 23:49:07 -05:00
chihlasm
29dc95e920 feat: add AI auto-fix UI — types, API client, ValidationSummary button, review modal, and TreeEditorPage wiring
- New ai-fix.ts types for request/response
- fixTree() method on treesApi
- "Fix with AI" button in ValidationSummary (shows for fixable errors)
- AIFixReviewModal with per-fix apply/skip and apply-all
- TreeEditorPage orchestrates the fix flow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:29:53 -05:00
chihlasm
b3925150d7 feat: add POST /ai/fix-tree endpoint for AI-powered validation fixes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:25:38 -05:00
chihlasm
373736c594 feat: add AI fix service with prompt building and validation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:25:34 -05:00
chihlasm
5f8653e481 feat: add Pydantic schemas for AI fix-tree endpoint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:21:36 -05:00
chihlasm
eb7ea7ddd9 refactor: migrate AI tree generator to provider abstraction
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:20:48 -05:00
chihlasm
55be033ecb feat: add AI provider abstraction with Gemini and Anthropic support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:16:45 -05:00