210d310fb2ce45d35f43ac40733439269eee17ed
Adds the backing store for the FlowPilot unified session surface, per the FLOWPILOT-MIGRATION.md Phase 1 deliverable. Descends from production head 074 (add_network_diagrams_table). New tables (all tenant-scoped, all RLS-enabled + forced): - session_facts — "What we know" facts. source_ref is a polymorphic pointer to a task-lane item inside ai_sessions.pending_task_lane (no DB-level FK; integrity enforced at service layer per Section 4.2 of the design doc). Soft-delete via deleted_at; active-facts partial index excludes deleted rows. - session_suggested_fixes — AI-proposed resolutions. One active per session at a time (supersession tracked via superseded_at; partial index on (session_id) WHERE superseded_at IS NULL powers the "find active fix" query). - draft_templates — scripts pending post-resolve templatization. Partial index on (account_id) WHERE status='pending' supports the "N scripts ready to review" Script Library badge. - account_settings — new per-account table with JSONB preferences grab-bag. Rows created lazily on first write; get_setting returns default when no row exists. Column additions on ai_sessions: - resolution_note_markdown / posted_at / external_id - escalation_package_markdown / posted_at / external_id - state_version (INTEGER NOT NULL DEFAULT 0) — incremented atomically by any write that invalidates the resolution note preview cache per Section 5.5. Phase 3 consumes this. Column additions on script_templates: - source_session_id, source_user_id, source_ticket_ref — powers the "generated from CW #X · resolved by Y · used N times" provenance chip in the Script Library. RLS pattern matches the repo convention (074 / network_diagrams is the nearest template): ENABLE + FORCE, USING + WITH CHECK on `account_id = app.current_account_id`. Downgrade is reversible — drops in the inverse order of creation so FK dependencies unwind. No runtime verification from code-server; migration apply + downgrade will be verified on the new dev environment per the standing deferral. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix: replace all remaining old brand tokens (text-brand-dark, border-brand-border, bg-white opacity)
ResolutionFlow
Stop writing ticket notes. Start generating them.
ResolutionFlow is an AI-powered troubleshooting platform for MSP professionals. Engineers follow guided flows while an AI copilot assists — and documentation writes itself as a byproduct of the work.
Production: resolutionflow.com
Quick Start
# Prerequisites: Docker, Python 3.11+, Node.js 20+
# Start PostgreSQL
docker start patherly_postgres
# Backend
cd backend
source venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reload
# Frontend (separate terminal)
cd frontend
npm install
npm run dev
- Frontend: http://localhost:5173
- Backend API: http://localhost:8000
- API Docs: http://localhost:8000/api/docs
See DEV-ENV.md for full environment setup (devserver, Docker, CORS).
Features
FlowPilot AI Copilot
Like having a senior engineer on every call. FlowPilot guides troubleshooting decisions, suggests next steps with context-aware intelligence, and automatically captures documentation as a byproduct of the session.
- Confidence-tiered model routing (fast responses for simple steps, deeper reasoning for complex decisions)
- AI-generated ticket summaries and session documentation
- Standalone assistant chat with RAG for open-ended troubleshooting
- Knowledge Flywheel: AI analyzes completed sessions and proposes new flows automatically
Guided Flows
- Troubleshooting Flows — Decision trees with branching paths for diagnosing issues
- Procedural Flows (Projects) — Step-by-step checklists for onboarding, migrations, deployments
- Maintenance Flows — Scheduled recurring tasks with batch execution across multiple targets
- Visual Flow Editor with drag-and-drop canvas, undo/redo, markdown support
- AI Flow Builder — describe what you need, get a complete flow generated
Auto-Documentation
Every session generates timestamped, detailed notes formatted for your PSA. Engineers never write another ticket note.
- Export to Markdown, plain text, or HTML
- Sensitive data redaction
- One-click push to ConnectWise PSA tickets
ConnectWise PSA Integration
- Post session documentation directly to ConnectWise tickets as internal notes
- Pull ticket details and client context into FlowPilot sessions
- Member mapping between ResolutionFlow and ConnectWise users
- Credentials encrypted at rest (Fernet), stored per-team
Team & Knowledge Management
- Role-based access (super_admin, team_admin, engineer, viewer)
- Shared flow library with categories, tags, folders, full-text search
- Step Library — reusable troubleshooting steps with ratings and reviews
- Session sharing via link (authenticated and public views)
- Escalation workflow with AI-enhanced briefing packages
- Flow proposals from AI analysis (review queue for team leads)
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript, Vite, Tailwind CSS v4 |
| State | Zustand (immer + zundo for undo/redo) |
| Routing | React Router v7 |
| Canvas | @xyflow/react (React Flow) + dagre |
| Backend | Python FastAPI, async SQLAlchemy 2.0 + asyncpg |
| Database | PostgreSQL 16 |
| Migrations | Alembic (75+ migrations) |
| Auth | JWT (python-jose) + bcrypt, refresh token rotation |
| AI | Anthropic Claude API (tiered model routing) |
| Embeddings | Voyage AI (semantic search) |
| Scheduling | APScheduler 3.x (async) |
| Analytics | PostHog |
| Hosting | Railway (auto-deploy on push to main) |
Project Structure
patherly/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI entry point
│ │ ├── api/endpoints/ # Route handlers (35+ endpoints)
│ │ ├── core/ # Config, database, permissions, security
│ │ ├── models/ # SQLAlchemy models
│ │ ├── schemas/ # Pydantic schemas
│ │ └── services/psa/ # PSA provider abstraction layer
│ ├── alembic/ # Database migrations
│ └── tests/ # Integration tests (100+)
├── frontend/
│ ├── src/
│ │ ├── components/ # UI components by domain
│ │ ├── pages/ # Page components
│ │ ├── store/ # Zustand stores
│ │ └── types/ # TypeScript interfaces
├── docs/ # Design docs, plans, ConnectWise reference
├── brand-assets/ # SVGs, brand guide
├── CLAUDE.md # AI assistant project context
├── CURRENT-STATE.md # Detailed feature status
└── CHANGELOG.md # Release history
Running Tests
# Backend integration tests
cd backend
pytest --override-ini="addopts="
# Frontend build (stricter than tsc --noEmit)
cd frontend
npm run build
Documentation
| Document | Purpose |
|---|---|
| CLAUDE.md | Full project context for AI-assisted development |
| CURRENT-STATE.md | Detailed feature status |
| 03-DEVELOPMENT-ROADMAP.md | Development roadmap |
| UI-DESIGN-SYSTEM.md | Design system (Slate & Ice) |
| DEV-ENV.md | Development environment setup |
| CHANGELOG.md | Release history |
License
Proprietary. All rights reserved.
Description
Troubleshooting decision tree application for MSP engineers - automatically generates professional documentation from guided diagnostic workflows
Languages
Python
54.7%
TypeScript
43.5%
HTML
1.1%
CSS
0.6%