docs: Reorganize project documentation
- Remove outdated documentation files - Add ARCHITECTURE.md and BACKLOG.md - Add docs/ folder - Update CURRENT-STATE.md Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
405
ARCHITECTURE.md
Normal file
405
ARCHITECTURE.md
Normal file
@@ -0,0 +1,405 @@
|
|||||||
|
# Patherly - Architecture & Overview
|
||||||
|
|
||||||
|
> **Purpose:** Core technical reference combining project vision and technical implementation.
|
||||||
|
> **Last Updated:** February 2, 2026
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
1. [Project Vision](#project-vision)
|
||||||
|
2. [Problem Statement](#problem-statement)
|
||||||
|
3. [Solution Overview](#solution-overview)
|
||||||
|
4. [Tech Stack](#tech-stack)
|
||||||
|
5. [System Architecture](#system-architecture)
|
||||||
|
6. [Database Schema](#database-schema)
|
||||||
|
7. [API Endpoints](#api-endpoints)
|
||||||
|
8. [Data Structures](#data-structures)
|
||||||
|
9. [Security](#security)
|
||||||
|
10. [Deployment](#deployment)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project Vision
|
||||||
|
|
||||||
|
A decision tree troubleshooting application designed for MSP engineers to transform diagnostic processes into clean, professional documentation automatically.
|
||||||
|
|
||||||
|
**Tagline:** "Take the path MOST traveled"
|
||||||
|
|
||||||
|
### Success Criteria
|
||||||
|
|
||||||
|
**3-Month Goal:** Michael uses this tool for 50% of his tickets
|
||||||
|
|
||||||
|
**Key Metrics:**
|
||||||
|
- Time saved per ticket
|
||||||
|
- Documentation quality improvement
|
||||||
|
- Reduction in "what did I do?" moments
|
||||||
|
- Team adoption rate
|
||||||
|
|
||||||
|
### Target Users
|
||||||
|
|
||||||
|
**Primary:** Senior Systems Engineers at MSPs managing Windows Server, Active Directory, Citrix, networking equipment
|
||||||
|
|
||||||
|
**Secondary:**
|
||||||
|
- Junior engineers needing guided troubleshooting
|
||||||
|
- Onsite technicians following remote engineer instructions
|
||||||
|
- MSP teams wanting standardized procedures
|
||||||
|
|
||||||
|
### Key Differentiators
|
||||||
|
|
||||||
|
1. **Automatic documentation generation** - No separate note-taking step
|
||||||
|
2. **On-the-fly customization** - Add custom branches when encountering edge cases
|
||||||
|
3. **Learning system** - Tracks common paths, suggests optimizations
|
||||||
|
4. **Automation integration** - Execute PowerShell/scripts directly from decision nodes
|
||||||
|
5. **Knowledge hub** - Links to documentation, KB articles, tutorials at each step
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Problem Statement
|
||||||
|
|
||||||
|
MSP engineers face constant context switching between diverse technical issues (file shares, server outages, VPN failures, Active Directory problems). Each context switch:
|
||||||
|
|
||||||
|
- Takes 15-25 minutes to regain full focus
|
||||||
|
- Creates cognitive overhead and attention residue
|
||||||
|
- Contributes to burnout (research-backed)
|
||||||
|
- Makes consistent documentation challenging
|
||||||
|
- Results in lost tribal knowledge
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Solution Overview
|
||||||
|
|
||||||
|
An intelligent decision tree system that:
|
||||||
|
|
||||||
|
- Guides engineers through proven troubleshooting paths
|
||||||
|
- Captures decisions and notes automatically
|
||||||
|
- Generates professional ticket documentation
|
||||||
|
- Builds institutional knowledge
|
||||||
|
- Reduces cognitive load during high-stress situations
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
### Frontend
|
||||||
|
| Component | Technology |
|
||||||
|
|-----------|------------|
|
||||||
|
| Framework | React 18 + Vite + TypeScript |
|
||||||
|
| Styling | Tailwind CSS |
|
||||||
|
| State Management | Zustand (with immer + zundo) |
|
||||||
|
| Routing | React Router v6 |
|
||||||
|
| API Client | Axios |
|
||||||
|
| Offline | Service Workers + IndexedDB (planned) |
|
||||||
|
|
||||||
|
### Backend
|
||||||
|
| Component | Technology |
|
||||||
|
|-----------|------------|
|
||||||
|
| Framework | Python FastAPI |
|
||||||
|
| ORM | SQLAlchemy 2.0 (async) |
|
||||||
|
| Validation | Pydantic |
|
||||||
|
| Auth | JWT (python-jose) + bcrypt |
|
||||||
|
| Migrations | Alembic |
|
||||||
|
|
||||||
|
### Database & Storage
|
||||||
|
| Component | Technology |
|
||||||
|
|-----------|------------|
|
||||||
|
| Database | PostgreSQL 16 |
|
||||||
|
| File Storage | S3-compatible (planned) |
|
||||||
|
| Development | Docker containers |
|
||||||
|
|
||||||
|
### Hosting
|
||||||
|
| Environment | Platform |
|
||||||
|
|-------------|----------|
|
||||||
|
| Development | Local (Vite + Uvicorn + Docker PostgreSQL) |
|
||||||
|
| Production | Railway Pro |
|
||||||
|
| Domain | patherly.com (api.patherly.com for backend) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## System Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ Frontend (React) │
|
||||||
|
│ - Tree Navigation UI │
|
||||||
|
│ - Tree Editor │
|
||||||
|
│ - Session Management │
|
||||||
|
│ - Export Functionality │
|
||||||
|
└─────────────────┬───────────────────────────────────┘
|
||||||
|
│ REST API (JSON)
|
||||||
|
┌─────────────────┴───────────────────────────────────┐
|
||||||
|
│ Backend (Python FastAPI) │
|
||||||
|
│ - Authentication & Authorization │
|
||||||
|
│ - Tree CRUD Operations │
|
||||||
|
│ - Session Tracking │
|
||||||
|
│ - Export Generation │
|
||||||
|
│ - File Upload/Storage (planned) │
|
||||||
|
└─────────────────┬───────────────────────────────────┘
|
||||||
|
│
|
||||||
|
┌─────────────────┴───────────────────────────────────┐
|
||||||
|
│ Database (PostgreSQL) │
|
||||||
|
│ - Trees (JSONB structure) │
|
||||||
|
│ - Sessions (path tracking) │
|
||||||
|
│ - Users & Teams │
|
||||||
|
│ - Attachments Metadata │
|
||||||
|
└──────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Database Schema
|
||||||
|
|
||||||
|
### Users Table
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE users (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
email VARCHAR(255) UNIQUE NOT NULL,
|
||||||
|
password_hash VARCHAR(255) NOT NULL,
|
||||||
|
name VARCHAR(255) NOT NULL,
|
||||||
|
role VARCHAR(50) NOT NULL DEFAULT 'engineer', -- admin, engineer, viewer
|
||||||
|
team_id UUID REFERENCES teams(id),
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
last_login TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Teams Table
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE teams (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
name VARCHAR(255) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Trees Table
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE trees (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
name VARCHAR(255) NOT NULL,
|
||||||
|
description TEXT,
|
||||||
|
category VARCHAR(100),
|
||||||
|
tree_structure JSONB NOT NULL,
|
||||||
|
author_id UUID REFERENCES users(id),
|
||||||
|
team_id UUID REFERENCES teams(id),
|
||||||
|
is_active BOOLEAN DEFAULT true,
|
||||||
|
version INTEGER DEFAULT 1,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
usage_count INTEGER DEFAULT 0
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_trees_category ON trees(category);
|
||||||
|
CREATE INDEX idx_trees_search ON trees USING gin(to_tsvector('english', name || ' ' || description));
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sessions Table
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE sessions (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
tree_id UUID REFERENCES trees(id),
|
||||||
|
user_id UUID REFERENCES users(id),
|
||||||
|
tree_snapshot JSONB NOT NULL,
|
||||||
|
path_taken JSONB NOT NULL,
|
||||||
|
decisions JSONB NOT NULL,
|
||||||
|
started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
completed_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
ticket_number VARCHAR(100),
|
||||||
|
client_name VARCHAR(255),
|
||||||
|
exported BOOLEAN DEFAULT false
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Attachments Table
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE attachments (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
session_id UUID REFERENCES sessions(id),
|
||||||
|
node_id VARCHAR(100),
|
||||||
|
file_name VARCHAR(255) NOT NULL,
|
||||||
|
file_type VARCHAR(50),
|
||||||
|
file_size INTEGER,
|
||||||
|
storage_path VARCHAR(500),
|
||||||
|
uploaded_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
| Method | Endpoint | Description |
|
||||||
|
|--------|----------|-------------|
|
||||||
|
| POST | `/api/v1/auth/register` | Register new user |
|
||||||
|
| POST | `/api/v1/auth/login` | Login (form data) |
|
||||||
|
| POST | `/api/v1/auth/login/json` | Login (JSON body) |
|
||||||
|
| POST | `/api/v1/auth/refresh` | Refresh access token |
|
||||||
|
| GET | `/api/v1/auth/me` | Get current user |
|
||||||
|
| POST | `/api/v1/auth/logout` | Logout |
|
||||||
|
|
||||||
|
### Trees
|
||||||
|
| Method | Endpoint | Description |
|
||||||
|
|--------|----------|-------------|
|
||||||
|
| GET | `/api/v1/trees` | List trees (paginated) |
|
||||||
|
| POST | `/api/v1/trees` | Create tree |
|
||||||
|
| GET | `/api/v1/trees/categories` | Get unique categories |
|
||||||
|
| GET | `/api/v1/trees/search` | Full-text search |
|
||||||
|
| GET | `/api/v1/trees/{id}` | Get tree by ID |
|
||||||
|
| PUT | `/api/v1/trees/{id}` | Update tree |
|
||||||
|
| DELETE | `/api/v1/trees/{id}` | Soft delete tree |
|
||||||
|
|
||||||
|
### Sessions
|
||||||
|
| Method | Endpoint | Description |
|
||||||
|
|--------|----------|-------------|
|
||||||
|
| GET | `/api/v1/sessions` | List user's sessions |
|
||||||
|
| POST | `/api/v1/sessions` | Start new session |
|
||||||
|
| GET | `/api/v1/sessions/{id}` | Get session |
|
||||||
|
| PUT | `/api/v1/sessions/{id}` | Update session |
|
||||||
|
| POST | `/api/v1/sessions/{id}/complete` | Mark complete |
|
||||||
|
| POST | `/api/v1/sessions/{id}/export` | Export (md/txt/html) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Data Structures
|
||||||
|
|
||||||
|
### Tree Structure (JSONB)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "root",
|
||||||
|
"type": "decision",
|
||||||
|
"question": "Can you ping the server?",
|
||||||
|
"help_text": "Run: ping servername",
|
||||||
|
"options": [
|
||||||
|
{ "label": "Yes", "value": "yes", "next_node_id": "node_2" },
|
||||||
|
{ "label": "No", "value": "no", "next_node_id": "node_network" }
|
||||||
|
],
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "node_2",
|
||||||
|
"type": "action",
|
||||||
|
"title": "Check service status",
|
||||||
|
"description": "Verify the service is running",
|
||||||
|
"commands": ["Get-Service -Name 'ServiceName'"],
|
||||||
|
"next_node_id": "node_3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "node_3",
|
||||||
|
"type": "solution",
|
||||||
|
"title": "Issue Resolved",
|
||||||
|
"description": "Service restarted successfully",
|
||||||
|
"resolution_steps": ["Document the fix", "Update ticket"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Session Decision (JSONB array item)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"node_id": "node_1",
|
||||||
|
"question": "Can you ping the VDA?",
|
||||||
|
"answer": "yes",
|
||||||
|
"notes": "Ping successful, 2ms response time",
|
||||||
|
"timestamp": "2026-01-22T14:31:00Z",
|
||||||
|
"attachments": []
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
- JWT tokens: 15-minute access, 7-day refresh
|
||||||
|
- Passwords: bcrypt with cost factor 12
|
||||||
|
- Role-based access: admin, engineer, viewer
|
||||||
|
|
||||||
|
### API Security
|
||||||
|
- CORS configured for frontend origins
|
||||||
|
- Rate limiting planned
|
||||||
|
- Input validation via Pydantic
|
||||||
|
- SQL injection prevention via SQLAlchemy ORM
|
||||||
|
|
||||||
|
### Data Protection
|
||||||
|
- HTTPS in production
|
||||||
|
- Timezone-aware timestamps (UTC storage)
|
||||||
|
- Soft deletes for trees (is_active flag)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
### Development Setup
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Terminal 1: Database
|
||||||
|
docker start patherly_postgres
|
||||||
|
|
||||||
|
# Terminal 2: Backend
|
||||||
|
cd backend
|
||||||
|
.\venv\Scripts\activate
|
||||||
|
uvicorn app.main:app --reload
|
||||||
|
|
||||||
|
# Terminal 3: Frontend
|
||||||
|
cd frontend
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### Production (Railway)
|
||||||
|
|
||||||
|
- **Database:** Railway managed PostgreSQL
|
||||||
|
- **Backend:** api.patherly.com
|
||||||
|
- **Frontend:** patherly.com
|
||||||
|
- **Environment:** PR environments for testing
|
||||||
|
|
||||||
|
### Key Configuration
|
||||||
|
|
||||||
|
```env
|
||||||
|
# Backend .env
|
||||||
|
DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/patherly
|
||||||
|
SECRET_KEY=your-secret-key
|
||||||
|
ALGORITHM=HS256
|
||||||
|
ACCESS_TOKEN_EXPIRE_MINUTES=15
|
||||||
|
|
||||||
|
# Frontend .env
|
||||||
|
VITE_API_URL=http://localhost:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
patherly/
|
||||||
|
├── backend/
|
||||||
|
│ ├── app/
|
||||||
|
│ │ ├── api/v1/endpoints/ # Route handlers
|
||||||
|
│ │ ├── core/ # Config, security, logging
|
||||||
|
│ │ ├── models/ # SQLAlchemy models
|
||||||
|
│ │ └── schemas/ # Pydantic schemas
|
||||||
|
│ ├── alembic/ # Migrations
|
||||||
|
│ ├── tests/ # pytest tests
|
||||||
|
│ └── scripts/ # Seed scripts
|
||||||
|
├── frontend/
|
||||||
|
│ ├── src/
|
||||||
|
│ │ ├── api/ # API client
|
||||||
|
│ │ ├── components/ # React components
|
||||||
|
│ │ ├── pages/ # Page components
|
||||||
|
│ │ └── store/ # Zustand stores
|
||||||
|
│ └── public/
|
||||||
|
└── docs/ # Documentation
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*For current project status, see [CURRENT-STATE.md](./CURRENT-STATE.md)*
|
||||||
|
*For development setup, see [QUICK-START.md](./QUICK-START.md)*
|
||||||
|
*For known issues, see [LESSONS-LEARNED.md](./LESSONS-LEARNED.md)*
|
||||||
455
BACKLOG.md
Normal file
455
BACKLOG.md
Normal file
@@ -0,0 +1,455 @@
|
|||||||
|
# Backlog - Future Features & Ideas
|
||||||
|
|
||||||
|
> **Purpose:** Long-term feature ideas, "what if" concepts, and parking lot items.
|
||||||
|
> **Note:** These are brainstorm items, not committed roadmap. Evaluate based on user demand and business impact.
|
||||||
|
> **Last Updated:** February 2, 2026
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
1. [Dynamic Script Generation](#dynamic-script-generation)
|
||||||
|
2. [Beyond Service Desk - Department Expansion](#beyond-service-desk---department-expansion)
|
||||||
|
3. [Tree Collaboration & Sharing](#tree-collaboration--sharing)
|
||||||
|
4. [Integration Ideas](#integration-ideas)
|
||||||
|
5. [Mobile & Accessibility](#mobile--accessibility)
|
||||||
|
6. [Gamification & Training](#gamification--training)
|
||||||
|
7. [Advanced Analytics](#advanced-analytics)
|
||||||
|
8. [AI-Powered Features](#ai-powered-features)
|
||||||
|
9. [Parking Lot - Quick Ideas](#parking-lot---quick-ideas)
|
||||||
|
10. [Long-Term Vision](#long-term-vision)
|
||||||
|
11. [Idea Evaluation Criteria](#idea-evaluation-criteria)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dynamic Script Generation
|
||||||
|
|
||||||
|
### Concept: Trees That Generate PowerShell Scripts
|
||||||
|
|
||||||
|
Instead of just guiding a tech through troubleshooting steps, trees could COLLECT information and OUTPUT executable scripts.
|
||||||
|
|
||||||
|
**Example Scenario: New User Onboarding**
|
||||||
|
|
||||||
|
A ticket comes in: "New hire starting Monday - John Smith, Marketing department"
|
||||||
|
|
||||||
|
Traditional approach:
|
||||||
|
1. Tech manually creates AD user
|
||||||
|
2. Tech looks up which groups Marketing needs
|
||||||
|
3. Tech adds user to groups one by one
|
||||||
|
4. Tech moves user to correct OU
|
||||||
|
5. Tech documents what they did
|
||||||
|
|
||||||
|
**Script Generation approach:**
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ NEW USER ONBOARDING TREE │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ Step 1: Enter user details │
|
||||||
|
│ First Name: [John_____________] │
|
||||||
|
│ Last Name: [Smith____________] │
|
||||||
|
│ Department: [Marketing________] ▼ │
|
||||||
|
│ │
|
||||||
|
│ Step 2: Select required groups (auto-suggested by dept) │
|
||||||
|
│ ☑ Domain Users │
|
||||||
|
│ ☑ Marketing-All │
|
||||||
|
│ ☑ SharePoint-Marketing │
|
||||||
|
│ │
|
||||||
|
│ Step 3: Confirm organizational unit │
|
||||||
|
│ OU Path: OU=Marketing,OU=Users,DC=contoso,DC=com │
|
||||||
|
│ │
|
||||||
|
│ [Generate Script] │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Generated Output:**
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# New User Creation Script
|
||||||
|
# Generated by Patherly - 2026-01-28 14:32
|
||||||
|
# Ticket: #12345
|
||||||
|
|
||||||
|
$Password = Read-Host -AsSecureString "Enter initial password"
|
||||||
|
New-ADUser -Name "John Smith" `
|
||||||
|
-GivenName "John" `
|
||||||
|
-Surname "Smith" `
|
||||||
|
-SamAccountName "jsmith" `
|
||||||
|
-UserPrincipalName "jsmith@contoso.com" `
|
||||||
|
-Path "OU=Marketing,OU=Users,DC=contoso,DC=com" `
|
||||||
|
-AccountPassword $Password `
|
||||||
|
-Enabled $true
|
||||||
|
|
||||||
|
# Add to groups
|
||||||
|
@("Domain Users", "Marketing-All", "SharePoint-Marketing") | ForEach-Object {
|
||||||
|
Add-ADGroupMember -Identity $_ -Members "jsmith"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Value Proposition:**
|
||||||
|
- Eliminates manual typing errors
|
||||||
|
- Ensures consistency across techs
|
||||||
|
- Auto-documents what was done
|
||||||
|
- Reduces training time for new hires
|
||||||
|
- Script can be reviewed before execution (safety)
|
||||||
|
|
||||||
|
### Other Script Generation Use Cases
|
||||||
|
|
||||||
|
| Use Case | Inputs Collected | Output |
|
||||||
|
|----------|------------------|--------|
|
||||||
|
| User Offboarding | Username, actions to take | Disable/remove script |
|
||||||
|
| Bulk Group Changes | User list, groups | Group membership script |
|
||||||
|
| Computer Setup | Name, department, user | Deployment script |
|
||||||
|
| Network Diagnostics | Issue description | Diagnostic collection script |
|
||||||
|
| M365 License Assignment | User, license type | PowerShell for M365 |
|
||||||
|
|
||||||
|
### Technical Considerations
|
||||||
|
|
||||||
|
**New Node Type: "Input Node"**
|
||||||
|
```typescript
|
||||||
|
interface InputNode {
|
||||||
|
type: 'input';
|
||||||
|
fields: InputField[];
|
||||||
|
validation?: ValidationRules;
|
||||||
|
next_node_id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface InputField {
|
||||||
|
name: string;
|
||||||
|
label: string;
|
||||||
|
type: 'text' | 'select' | 'multiselect' | 'checkbox' | 'number';
|
||||||
|
options?: string[];
|
||||||
|
variable_name: string; // used in script template
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**New Node Type: "Script Output Node"**
|
||||||
|
```typescript
|
||||||
|
interface ScriptOutputNode {
|
||||||
|
type: 'script_output';
|
||||||
|
script_template: string; // PowerShell with {{variable}} placeholders
|
||||||
|
language: 'powershell' | 'bash' | 'python';
|
||||||
|
documentation_template?: string;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Safety & Compliance Features
|
||||||
|
|
||||||
|
- **Script Review Mode:** Scripts NEVER auto-execute, always presented for review
|
||||||
|
- **Audit Trail:** Log which scripts were generated and by whom
|
||||||
|
- **Template Approval:** Senior engineers review templates before publishing
|
||||||
|
- **Environment Variables:** Store org-specific values (domain name, OU paths)
|
||||||
|
|
||||||
|
### Implementation Phases
|
||||||
|
|
||||||
|
1. **Phase 1:** Basic script output with variable substitution
|
||||||
|
2. **Phase 2:** Input collection nodes with validation
|
||||||
|
3. **Phase 3:** Smart defaults (department → group suggestions)
|
||||||
|
4. **Phase 4:** Direct execution capability (Enterprise, with approval workflows)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beyond Service Desk - Department Expansion
|
||||||
|
|
||||||
|
### Concept: Department-Specific Path Libraries
|
||||||
|
|
||||||
|
The "guided decision tree" concept applies to ANY process that benefits from consistency and documentation.
|
||||||
|
|
||||||
|
**Target Departments:**
|
||||||
|
|
||||||
|
| Department | Use Cases |
|
||||||
|
|------------|-----------|
|
||||||
|
| Service Desk | Troubleshooting (current focus) |
|
||||||
|
| Sales | Quoting, assessments, discovery |
|
||||||
|
| vCIO/Consulting | Policy creation, strategic planning |
|
||||||
|
| Onboarding | Client setup, documentation gathering |
|
||||||
|
| Finance | Contract review, billing disputes |
|
||||||
|
| HR | Employee onboarding, policy acknowledgment |
|
||||||
|
|
||||||
|
### vCIO / Consulting: Policy Builder
|
||||||
|
|
||||||
|
Guide clients through policy creation with smart templates and boilerplate language.
|
||||||
|
|
||||||
|
**Example: Acceptable Use Policy Builder**
|
||||||
|
|
||||||
|
User selects sections to include:
|
||||||
|
- ☑ Computer Use Policy
|
||||||
|
- ☑ Mobile Device Policy
|
||||||
|
- ☑ BYOD Policy
|
||||||
|
- ☑ AI Usage Policy
|
||||||
|
- ☑ Remote Work Policy
|
||||||
|
|
||||||
|
**Generated Output:** Complete, formatted policy document (Word/PDF) with:
|
||||||
|
- Professional boilerplate language
|
||||||
|
- Industry-specific compliance notes (HIPAA for healthcare, etc.)
|
||||||
|
- Signature/acknowledgment section
|
||||||
|
|
||||||
|
**Policy Types to Support:**
|
||||||
|
- Acceptable Use Policy (AUP)
|
||||||
|
- Information Security Policy
|
||||||
|
- Password Policy
|
||||||
|
- Data Classification Policy
|
||||||
|
- Incident Response Policy
|
||||||
|
- BYOD Policy
|
||||||
|
- AI/Generative AI Policy
|
||||||
|
|
||||||
|
**Value Proposition:**
|
||||||
|
- vCIOs generate client policies in minutes, not hours
|
||||||
|
- Consistent, professional output
|
||||||
|
- Industry-specific compliance built-in
|
||||||
|
- Upsell opportunity: "Policy Review" as a service
|
||||||
|
|
||||||
|
### Sales: Quote Builder & Assessment Paths
|
||||||
|
|
||||||
|
Guide sales reps through discovery with consistent methodology that surfaces upsell opportunities.
|
||||||
|
|
||||||
|
**Assessment Types:**
|
||||||
|
|
||||||
|
1. **Security Assessment** - Endpoint protection, MFA, training gaps
|
||||||
|
2. **Backup Assessment** - Frequency, retention, testing procedures
|
||||||
|
3. **Hardware Assessment** - Workstation age, server infrastructure, warranties
|
||||||
|
4. **Compliance Assessment** - HIPAA, PCI, documentation status
|
||||||
|
5. **Cloud Readiness Assessment** - Migration complexity, bandwidth needs
|
||||||
|
|
||||||
|
**Generated Outputs:**
|
||||||
|
- Gap Analysis Report (client-facing)
|
||||||
|
- Quote Worksheet (internal)
|
||||||
|
- Proposal Content (client-facing)
|
||||||
|
|
||||||
|
### Client Onboarding Paths
|
||||||
|
|
||||||
|
Structured onboarding ensuring nothing is missed:
|
||||||
|
- Contact gathering (technical, billing, decision makers)
|
||||||
|
- Credentials collection (secure vault integration)
|
||||||
|
- Documentation intake (passwords, network diagrams)
|
||||||
|
- Standards configuration (naming conventions, security policies)
|
||||||
|
- Tool deployment checklist
|
||||||
|
- Handoff to service desk
|
||||||
|
|
||||||
|
**Output:** Populated documentation templates, IT Glue/Hudu import-ready data
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tree Collaboration & Sharing
|
||||||
|
|
||||||
|
### Public Tree Gallery
|
||||||
|
|
||||||
|
- Users publish trees to community gallery
|
||||||
|
- Rating and review system
|
||||||
|
- "Verified" badge for quality trees
|
||||||
|
- Fork and customize
|
||||||
|
|
||||||
|
### Tree Marketplace
|
||||||
|
|
||||||
|
- Premium trees from experts
|
||||||
|
- Revenue share model (70/30)
|
||||||
|
- Subscription access to premium library
|
||||||
|
|
||||||
|
### Tree Inheritance
|
||||||
|
|
||||||
|
- Company-wide "official" trees
|
||||||
|
- Teams create local variations
|
||||||
|
- Changes can be proposed upstream
|
||||||
|
- Version control and diff viewing
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integration Ideas
|
||||||
|
|
||||||
|
### PSA Deep Integration
|
||||||
|
|
||||||
|
- Create ticket from tree resolution
|
||||||
|
- Auto-populate ticket fields from session
|
||||||
|
- Link session to existing ticket
|
||||||
|
- Pull ticket context into tree suggestions
|
||||||
|
|
||||||
|
**Target PSAs:** ConnectWise, Kaseya, Autotask, ServiceNow
|
||||||
|
|
||||||
|
### RMM Integration
|
||||||
|
|
||||||
|
- Pull device info into tree context
|
||||||
|
- "This computer has X installed, skip to step Y"
|
||||||
|
- Trigger RMM scripts from tree actions
|
||||||
|
- Asset-aware troubleshooting
|
||||||
|
|
||||||
|
**Target RMMs:** Datto, ConnectWise Automate, NinjaRMM
|
||||||
|
|
||||||
|
### Documentation Integration
|
||||||
|
|
||||||
|
- Link tree nodes to IT Glue/Hudu articles
|
||||||
|
- Auto-create documentation from resolved sessions
|
||||||
|
- Sync tree content with knowledge base
|
||||||
|
|
||||||
|
### Communication Integration
|
||||||
|
|
||||||
|
- Slack/Teams notifications for escalations
|
||||||
|
- Share session summary to channel
|
||||||
|
- Request help from team within tree
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mobile & Accessibility
|
||||||
|
|
||||||
|
### Mobile App (PWA Enhancement)
|
||||||
|
|
||||||
|
- Offline tree access
|
||||||
|
- Voice input for hands-free use
|
||||||
|
- Camera integration for error screenshots
|
||||||
|
- Push notifications for shared sessions
|
||||||
|
|
||||||
|
### Voice-Guided Mode
|
||||||
|
|
||||||
|
- Read steps aloud
|
||||||
|
- Voice commands to navigate
|
||||||
|
- Useful for field techs with hands busy
|
||||||
|
- Accessibility for vision-impaired users
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gamification & Training
|
||||||
|
|
||||||
|
### Tech Leaderboards
|
||||||
|
|
||||||
|
- Trees completed
|
||||||
|
- Resolution time improvements
|
||||||
|
- Contribution to tree improvements
|
||||||
|
- Points and badges
|
||||||
|
|
||||||
|
### Training Mode
|
||||||
|
|
||||||
|
- Practice trees without affecting stats
|
||||||
|
- Simulated scenarios
|
||||||
|
- Quiz mode with wrong-path feedback
|
||||||
|
- Certification preparation
|
||||||
|
|
||||||
|
### Onboarding Tracks
|
||||||
|
|
||||||
|
- Structured learning paths for new hires
|
||||||
|
- Progress tracking
|
||||||
|
- Manager visibility into training progress
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Advanced Analytics
|
||||||
|
|
||||||
|
### Predictive Issue Alerts
|
||||||
|
|
||||||
|
- "VPN issues spike on Mondays after updates"
|
||||||
|
- Proactive notifications to prepare
|
||||||
|
- Trend forecasting
|
||||||
|
|
||||||
|
### Cost Attribution
|
||||||
|
|
||||||
|
- Estimate time spent per issue type
|
||||||
|
- Calculate cost of common problems
|
||||||
|
- ROI justification for fixes
|
||||||
|
|
||||||
|
### Comparative Analytics
|
||||||
|
|
||||||
|
- Benchmark against anonymized industry data
|
||||||
|
- "Your password reset time is 20% faster than average"
|
||||||
|
- Identify improvement opportunities
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## AI-Powered Features
|
||||||
|
|
||||||
|
### Conversational Interface
|
||||||
|
|
||||||
|
- Chat with AI about an issue
|
||||||
|
- AI suggests relevant trees
|
||||||
|
- Natural language navigation
|
||||||
|
|
||||||
|
### Auto-Tree Generation
|
||||||
|
|
||||||
|
- Record a senior tech explaining a fix
|
||||||
|
- AI generates tree structure from transcript
|
||||||
|
- Review and publish
|
||||||
|
|
||||||
|
### Predictive Resolution
|
||||||
|
|
||||||
|
- AI predicts likely resolution before tree starts
|
||||||
|
- "Based on the description, this is probably X (85% confidence)"
|
||||||
|
- Option to jump to likely solution
|
||||||
|
|
||||||
|
### Import from Text/Documentation
|
||||||
|
|
||||||
|
- Paste existing runbook or documentation
|
||||||
|
- AI parses and creates tree structure
|
||||||
|
- Review and refine
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Parking Lot - Quick Ideas
|
||||||
|
|
||||||
|
*Quick-capture ideas to evaluate later:*
|
||||||
|
|
||||||
|
- [ ] Browser extension to capture screenshots into sessions
|
||||||
|
- [ ] QR codes on physical equipment linking to relevant trees
|
||||||
|
- [ ] Customer-facing trees (end-user self-service)
|
||||||
|
- [ ] Tree templates for common scenarios
|
||||||
|
- [ ] Scheduled tree reminders (monthly server maintenance checklist)
|
||||||
|
- [ ] Integration with monitoring tools (trigger tree from alert)
|
||||||
|
- [ ] Multi-language tree support
|
||||||
|
- [ ] Conditional logic based on time of day / day of week
|
||||||
|
- [ ] SLA timers visible during session
|
||||||
|
- [ ] Escalation workflows with approval chains
|
||||||
|
- [ ] Custom note formatting templates for different ticket systems
|
||||||
|
- [ ] "Options on the go" - select pre-made steps mid-tree and jump to relevant point
|
||||||
|
- [ ] Import plan function - write in text format and import as tree
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Long-Term Vision (Year 2+)
|
||||||
|
|
||||||
|
### Product Evolution
|
||||||
|
|
||||||
|
- Self-learning system (trees improve automatically based on usage)
|
||||||
|
- Voice-guided troubleshooting (hands-free operation)
|
||||||
|
- AR/VR support (on-site equipment identification)
|
||||||
|
- AI co-pilot (real-time suggestions during troubleshooting)
|
||||||
|
|
||||||
|
### Market Expansion
|
||||||
|
|
||||||
|
- Vertical-specific tree libraries (healthcare IT, financial services, education)
|
||||||
|
- Certification program for tree authors
|
||||||
|
- Professional services (custom tree development)
|
||||||
|
- Training and consultation services
|
||||||
|
|
||||||
|
### Platform Maturity
|
||||||
|
|
||||||
|
- 99.9% uptime SLA
|
||||||
|
- Global CDN deployment
|
||||||
|
- Advanced compliance (SOC 2, ISO 27001)
|
||||||
|
- Enterprise support tiers
|
||||||
|
- White-glove onboarding
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idea Evaluation Criteria
|
||||||
|
|
||||||
|
When evaluating which ideas to pursue:
|
||||||
|
|
||||||
|
| Criteria | Weight | Questions |
|
||||||
|
|----------|--------|-----------|
|
||||||
|
| User demand | High | Are users asking for this? |
|
||||||
|
| Revenue impact | High | Will this drive upgrades or reduce churn? |
|
||||||
|
| Differentiation | Medium | Does this set us apart from alternatives? |
|
||||||
|
| Development effort | Medium | How long to build MVP? |
|
||||||
|
| Maintenance burden | Medium | Ongoing cost to support? |
|
||||||
|
| Strategic fit | Medium | Does this align with our vision? |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## How to Add Ideas
|
||||||
|
|
||||||
|
When adding new ideas to this document:
|
||||||
|
|
||||||
|
1. **Describe the concept** - What is it? Why would users want it?
|
||||||
|
2. **Provide an example** - Concrete scenario showing the feature in action
|
||||||
|
3. **Note technical considerations** - What would need to change?
|
||||||
|
4. **Estimate complexity** - Simple / Medium / Complex
|
||||||
|
5. **Identify dependencies** - What needs to exist first?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*This is a living document. Add ideas freely, evaluate periodically, and move promising concepts to GitHub Issues when ready to implement.*
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> **Purpose:** Quick-reference file showing exactly where the project stands.
|
> **Purpose:** Quick-reference file showing exactly where the project stands.
|
||||||
> **For Claude Code:** Read this first to understand what's done and what's next.
|
> **For Claude Code:** Read this first to understand what's done and what's next.
|
||||||
> **Last Updated:** January 29, 2026
|
> **Last Updated:** February 2, 2026
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
414
docs/GITHUB-ISSUES-MIGRATION.md
Normal file
414
docs/GITHUB-ISSUES-MIGRATION.md
Normal file
@@ -0,0 +1,414 @@
|
|||||||
|
# GitHub Issues Migration Instructions
|
||||||
|
|
||||||
|
> **For Claude Code:** Use these instructions to set up GitHub Issues for Patherly
|
||||||
|
> **Repository:** github.com/patherly/patherly
|
||||||
|
> **Date:** February 2, 2026
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 1: Create Labels
|
||||||
|
|
||||||
|
Create the following labels in the repository:
|
||||||
|
|
||||||
|
| Label | Color (hex) | Description |
|
||||||
|
|-------|-------------|-------------|
|
||||||
|
| `bug` | `d73a4a` | Something isn't working |
|
||||||
|
| `feature` | `0e8a16` | New functionality |
|
||||||
|
| `enhancement` | `a2eeef` | Improvement to existing feature |
|
||||||
|
| `documentation` | `0075ca` | Documentation updates |
|
||||||
|
| `backend` | `7057ff` | FastAPI/Python work |
|
||||||
|
| `frontend` | `fbca04` | React work |
|
||||||
|
| `database` | `b60205` | PostgreSQL/schema changes |
|
||||||
|
| `priority: high` | `d93f0b` | Do this soon |
|
||||||
|
| `priority: medium` | `fbca04` | Important but not urgent |
|
||||||
|
| `priority: low` | `c5def5` | Nice to have |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 2: Create Milestones
|
||||||
|
|
||||||
|
| Milestone | Description | Due Date |
|
||||||
|
|-----------|-------------|----------|
|
||||||
|
| Phase 2 Completion | Tree editor polish, deployment | (leave open) |
|
||||||
|
| Phase 2.5 | Personal branching, step library | (leave open) |
|
||||||
|
| Backlog | Ideas not yet scheduled | (no due date) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 3: Create Issues
|
||||||
|
|
||||||
|
### Phase 2 Remaining (3 issues)
|
||||||
|
|
||||||
|
**Issue 1:**
|
||||||
|
- Title: Tree Editor Validation - required fields and orphan detection
|
||||||
|
- Labels: `feature`, `frontend`, `priority: high`
|
||||||
|
- Milestone: Phase 2 Completion
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Add validation to the tree editor:
|
||||||
|
- [ ] Required fields validation (name, at least one node)
|
||||||
|
- [ ] Orphan node detection (nodes not reachable from root)
|
||||||
|
- [ ] Circular reference detection
|
||||||
|
- [ ] Show validation errors before save
|
||||||
|
- [ ] Prevent save if validation fails
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 2:**
|
||||||
|
- Title: User Preferences - export format default setting
|
||||||
|
- Labels: `feature`, `frontend`, `priority: medium`
|
||||||
|
- Milestone: Phase 2 Completion
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Add export format preference to user settings:
|
||||||
|
- [ ] Add "Default Export Format" dropdown in settings (Markdown/Text/HTML)
|
||||||
|
- [ ] Persist preference in localStorage
|
||||||
|
- [ ] Use preference as default in export dialog
|
||||||
|
- [ ] Dark mode toggle already complete ✅
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 3:**
|
||||||
|
- Title: Deploy to Railway - CI/CD pipeline setup
|
||||||
|
- Labels: `feature`, `priority: high`
|
||||||
|
- Milestone: Phase 2 Completion
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Set up production deployment on Railway Pro:
|
||||||
|
- [ ] Configure Railway project with 3 services (PostgreSQL, backend, frontend)
|
||||||
|
- [ ] Set up environment variables
|
||||||
|
- [ ] Configure custom domains (patherly.com, api.patherly.com)
|
||||||
|
- [ ] Set up PR environments for testing
|
||||||
|
- [ ] Document deployment process
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 2.5 Features (15 issues)
|
||||||
|
|
||||||
|
**Issue 4:**
|
||||||
|
- Title: Step Categories - database table and seed data
|
||||||
|
- Labels: `feature`, `backend`, `database`, `priority: high`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create step_categories table for organizing the step library:
|
||||||
|
- [ ] Create Alembic migration for step_categories table
|
||||||
|
- [ ] Add SQLAlchemy model
|
||||||
|
- [ ] Seed default categories (Citrix/VDI, Active Directory, Microsoft 365, Networking, etc.)
|
||||||
|
- [ ] Create API endpoints for category CRUD (admin only)
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 5:**
|
||||||
|
- Title: Step Library - database schema and migrations
|
||||||
|
- Labels: `feature`, `backend`, `database`, `priority: high`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create step_library table for reusable troubleshooting steps:
|
||||||
|
- [ ] Create Alembic migration
|
||||||
|
- [ ] Add SQLAlchemy model with fields: title, step_type, content (JSONB), visibility, category_id, tags, ratings aggregates
|
||||||
|
- [ ] Add indexes for search and filtering
|
||||||
|
- [ ] Add step_ratings table for user ratings/reviews
|
||||||
|
- [ ] Add step_usage_log table for "Verified Use" tracking
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 6:**
|
||||||
|
- Title: Step Library - CRUD API endpoints
|
||||||
|
- Labels: `feature`, `backend`, `priority: high`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create API endpoints for step library:
|
||||||
|
- [ ] GET /api/v1/steps - List steps with filters (visibility, category, tags, rating)
|
||||||
|
- [ ] GET /api/v1/steps/{id} - Get step details
|
||||||
|
- [ ] POST /api/v1/steps - Create new step
|
||||||
|
- [ ] PUT /api/v1/steps/{id} - Update step
|
||||||
|
- [ ] DELETE /api/v1/steps/{id} - Soft delete
|
||||||
|
- [ ] GET /api/v1/steps/search - Full-text search
|
||||||
|
- [ ] GET /api/v1/steps/tags/popular - Popular tags
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 7:**
|
||||||
|
- Title: Step Library - rating and review system
|
||||||
|
- Labels: `feature`, `backend`, `priority: medium`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Implement step rating and review system:
|
||||||
|
- [ ] POST /api/v1/steps/{id}/rate - Rate a step (1-5 stars + optional review)
|
||||||
|
- [ ] PUT /api/v1/steps/{id}/rate - Update rating
|
||||||
|
- [ ] DELETE /api/v1/steps/{id}/rate - Remove rating
|
||||||
|
- [ ] POST /api/v1/steps/{id}/helpful - Vote helpful (yes/no)
|
||||||
|
- [ ] GET /api/v1/steps/{id}/reviews - Get reviews
|
||||||
|
- [ ] Track "Verified Use" when step is actually used in a session
|
||||||
|
- [ ] Calculate and update aggregated ratings on step_library table
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 8:**
|
||||||
|
- Title: Add Custom Step button in tree navigation
|
||||||
|
- Labels: `feature`, `frontend`, `priority: high`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Add ability to insert custom steps during active troubleshooting:
|
||||||
|
- [ ] Add "+ Add Custom Step" button at each decision node
|
||||||
|
- [ ] Button opens modal with two tabs: "Type My Own" and "Browse Library"
|
||||||
|
- [ ] Custom steps inserted into session only (not original tree)
|
||||||
|
- [ ] Visual indicator showing step is custom/user-added
|
||||||
|
- [ ] Custom steps included in session export
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 9:**
|
||||||
|
- Title: Custom step creation modal
|
||||||
|
- Labels: `feature`, `frontend`, `priority: high`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create modal for adding custom steps:
|
||||||
|
- [ ] Tab 1: "Type My Own" - form to create step (type, title, description, commands)
|
||||||
|
- [ ] Tab 2: "Browse Library" - search and select from step library
|
||||||
|
- [ ] Option to save custom step to personal library
|
||||||
|
- [ ] Validate step before insertion
|
||||||
|
- [ ] Insert step into current session
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 10:**
|
||||||
|
- Title: Step library browser component
|
||||||
|
- Labels: `feature`, `frontend`, `priority: medium`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create UI component for browsing step library:
|
||||||
|
- [ ] Search input with full-text search
|
||||||
|
- [ ] Category filter dropdown
|
||||||
|
- [ ] Tag filter (show popular tags as chips)
|
||||||
|
- [ ] Minimum rating filter
|
||||||
|
- [ ] Sort options (recent, popular, rating)
|
||||||
|
- [ ] Step cards showing title, type, rating, usage count
|
||||||
|
- [ ] Step preview/detail modal
|
||||||
|
- [ ] Insert button to add to session
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 11:**
|
||||||
|
- Title: User Trees - database schema
|
||||||
|
- Labels: `feature`, `backend`, `database`, `priority: medium`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create user_trees table for personal/forked trees:
|
||||||
|
- [ ] Create Alembic migration
|
||||||
|
- [ ] Fields: user_id, forked_from_tree_id, name, tree_content (JSONB), visibility, share_token
|
||||||
|
- [ ] Add session_custom_steps table to track custom steps per session
|
||||||
|
- [ ] Add indexes for user lookup and share token
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 12:**
|
||||||
|
- Title: Tree forking API endpoint
|
||||||
|
- Labels: `feature`, `backend`, `priority: medium`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create API for forking trees:
|
||||||
|
- [ ] POST /api/v1/user-trees/fork/{tree_id} - Fork an official tree
|
||||||
|
- [ ] Deep copy tree structure to user_trees
|
||||||
|
- [ ] Track lineage (forked_from_tree_id, forked_at_version)
|
||||||
|
- [ ] Increment fork_count on original tree
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 13:**
|
||||||
|
- Title: User Trees - CRUD endpoints
|
||||||
|
- Labels: `feature`, `backend`, `priority: medium`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create API endpoints for user tree management:
|
||||||
|
- [ ] GET /api/v1/user-trees - List user's custom trees
|
||||||
|
- [ ] GET /api/v1/user-trees/{id} - Get custom tree
|
||||||
|
- [ ] POST /api/v1/user-trees - Create new custom tree
|
||||||
|
- [ ] PUT /api/v1/user-trees/{id} - Update custom tree
|
||||||
|
- [ ] DELETE /api/v1/user-trees/{id} - Soft delete
|
||||||
|
- [ ] PUT /api/v1/user-trees/{id}/share - Update sharing settings
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 14:**
|
||||||
|
- Title: My Trees dashboard page
|
||||||
|
- Labels: `feature`, `frontend`, `priority: medium`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Create "My Trees" page for managing personal trees:
|
||||||
|
- [ ] List user's forked/custom trees
|
||||||
|
- [ ] Show original tree reference (if forked)
|
||||||
|
- [ ] Last used date, usage count
|
||||||
|
- [ ] Quick actions: start session, edit, share, delete
|
||||||
|
- [ ] Fork button on tree detail view
|
||||||
|
- [ ] Notification when original tree updated (basic)
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 15:**
|
||||||
|
- Title: Tree sharing via link
|
||||||
|
- Labels: `feature`, `frontend`, `backend`, `priority: medium`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Allow sharing trees via link:
|
||||||
|
- [ ] Generate unique share token for tree
|
||||||
|
- [ ] GET /api/v1/shared/{share_token} - Access shared tree (no auth required)
|
||||||
|
- [ ] Share modal with visibility options (private, link, team, public)
|
||||||
|
- [ ] Copy link button
|
||||||
|
- [ ] Option to allow/disallow forking
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 16:**
|
||||||
|
- Title: Save session as custom tree
|
||||||
|
- Labels: `feature`, `frontend`, `backend`, `priority: low`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
After completing a session with custom steps, offer to save as tree:
|
||||||
|
- [ ] POST /api/v1/sessions/{id}/save-as-tree endpoint
|
||||||
|
- [ ] Prompt user after session completion (if custom steps were added)
|
||||||
|
- [ ] Create user_tree from session path + custom steps
|
||||||
|
- [ ] Allow user to name and edit before saving
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 17:**
|
||||||
|
- Title: Admin - category management UI
|
||||||
|
- Labels: `feature`, `frontend`, `priority: low`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Admin interface for managing step categories:
|
||||||
|
- [ ] List categories with step counts
|
||||||
|
- [ ] Create new category
|
||||||
|
- [ ] Edit category name/description
|
||||||
|
- [ ] Archive category (soft delete)
|
||||||
|
- [ ] Reorder categories (display_order)
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 18:**
|
||||||
|
- Title: Rate/review modal after using a step
|
||||||
|
- Labels: `feature`, `frontend`, `priority: low`
|
||||||
|
- Milestone: Phase 2.5
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
Prompt users to rate steps after using them:
|
||||||
|
- [ ] After session completion, show steps used from library
|
||||||
|
- [ ] Rating modal with 1-5 stars
|
||||||
|
- [ ] Optional written review (max 500 chars)
|
||||||
|
- [ ] "Was this helpful?" quick vote
|
||||||
|
- [ ] Mark rating as "Verified Use"
|
||||||
|
|
||||||
|
Reference: PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Known Bugs (create as closed issues for history)
|
||||||
|
|
||||||
|
**Issue 19:**
|
||||||
|
- Title: [FIXED] DateTime timezone handling causing Internal Server Errors
|
||||||
|
- Labels: `bug`, `backend`
|
||||||
|
- State: CLOSED
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
**Problem:** Mixing timezone-aware and timezone-naive datetime objects caused errors in session completion.
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
- Updated all SQLAlchemy models to use `DateTime(timezone=True)`
|
||||||
|
- Changed all default datetime factories to `lambda: datetime.now(timezone.utc)`
|
||||||
|
|
||||||
|
**Files affected:** All models with timestamp fields
|
||||||
|
|
||||||
|
Fixed: January 28, 2026
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 20:**
|
||||||
|
- Title: [FIXED] bcrypt/passlib version compatibility
|
||||||
|
- Labels: `bug`, `backend`
|
||||||
|
- State: CLOSED
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
**Problem:** Password hashing failed with newer bcrypt versions.
|
||||||
|
|
||||||
|
**Solution:** Pin bcrypt version in requirements.txt:
|
||||||
|
- bcrypt==4.0.1
|
||||||
|
- passlib[bcrypt]==1.7.4
|
||||||
|
|
||||||
|
Fixed: January 2026
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 21:**
|
||||||
|
- Title: [FIXED] Email validation rejecting .local domains
|
||||||
|
- Labels: `bug`, `backend`
|
||||||
|
- State: CLOSED
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
**Problem:** Seed script failed with email validation error when using `.local` TLD.
|
||||||
|
|
||||||
|
**Cause:** email-validator library correctly rejects `.local` as reserved per RFC 6761.
|
||||||
|
|
||||||
|
**Solution:** Use standard domains like `example.com` for seed/test users.
|
||||||
|
|
||||||
|
Fixed: January 29, 2026
|
||||||
|
```
|
||||||
|
|
||||||
|
**Issue 22:**
|
||||||
|
- Title: [FIXED] httpx not installed for seed scripts
|
||||||
|
- Labels: `bug`, `backend`
|
||||||
|
- State: CLOSED
|
||||||
|
- Body:
|
||||||
|
```
|
||||||
|
**Problem:** Running seed_trees.py failed with ModuleNotFoundError for httpx.
|
||||||
|
|
||||||
|
**Solution:** Install httpx before running seed scripts:
|
||||||
|
```
|
||||||
|
pip install httpx
|
||||||
|
```
|
||||||
|
|
||||||
|
Fixed: January 29, 2026
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 4: Verify
|
||||||
|
|
||||||
|
After creating all issues:
|
||||||
|
1. Check that labels appear correctly
|
||||||
|
2. Check that milestones have correct issues assigned
|
||||||
|
3. Verify closed issues show in closed state
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Issues 4-18 are Phase 2.5 features from PHASE-2.5-PERSONAL-BRANCHING.md
|
||||||
|
- Issues 19-22 are historical bugs documented in LESSONS-LEARNED.md (create as closed)
|
||||||
|
- Long-term feature ideas are in BACKLOG.md (not GitHub Issues yet)
|
||||||
Reference in New Issue
Block a user