Complete rebrand from Apoklisis to Patherly

- Update all frontend branding (title, headers, login/register pages)
- Update documentation (CLAUDE-SETUP, CURRENT-STATE, PROGRESS, LESSONS-LEARNED)
- Update backend scripts and test configuration
- Fix emoji encoding in seed scripts for Windows compatibility
- Sync seed user credentials between seed_data.py and seed_trees.py
- Update database references to patherly/patherly_test

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Michael Chihlas
2026-01-31 21:55:55 -05:00
parent 06cc83e3fe
commit 2421f10dbd
16 changed files with 60 additions and 60 deletions

View File

@@ -1 +1 @@
# Apoklisis scripts package
# Patherly scripts package

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python3
"""
Seed data script for Apoklisis decision trees.
Seed data script for Patherly decision trees.
This script creates example troubleshooting trees in the database.
Run from the backend directory with: python -m scripts.seed_data
@@ -276,7 +276,7 @@ def get_password_reset_tree() -> dict[str, Any]:
{
"id": "resolution_success",
"type": "solution",
"title": " Password Reset Complete",
"title": "[OK] Password Reset Complete",
"description": "User has successfully logged in with their new password.\n\n**Final Steps:**\n1. Confirm user was prompted to change their password\n2. Verify user successfully set a new personal password\n3. Document the resolution in the ticket\n4. Close the ticket as 'Resolved'\n\n**Resolution Indicators:**\n- User confirms successful login\n- Account shows updated 'Last Logon' timestamp\n- No subsequent lockouts or reset requests"
}
]
@@ -386,7 +386,7 @@ async def create_tree(client: httpx.AsyncClient, token: str, tree_data: dict) ->
existing_trees = list_response.json()
for tree in existing_trees:
if tree["name"] == tree_data["name"]:
print(f" ⏭️ Tree '{tree_data['name']}' already exists (ID: {tree['id']})")
print(f" [SKIP] Tree '{tree_data['name']}' already exists (ID: {tree['id']})")
return tree
# Create the tree
@@ -400,13 +400,13 @@ async def create_tree(client: httpx.AsyncClient, token: str, tree_data: dict) ->
raise Exception(f"Failed to create tree '{tree_data['name']}': {response.text}")
tree = response.json()
print(f" Created tree '{tree_data['name']}' (ID: {tree['id']})")
print(f" [OK] Created tree '{tree_data['name']}' (ID: {tree['id']})")
return tree
async def seed_database():
"""Main seeding function."""
print("\n🌱 Apoklisis Database Seeder")
print("\n[*] Patherly Database Seeder")
print("=" * 50)
async with httpx.AsyncClient(timeout=30.0) as client:
@@ -414,25 +414,25 @@ async def seed_database():
try:
health_check = await client.get(f"{API_BASE_URL.replace('/api/v1', '')}/health")
except httpx.ConnectError:
print("\n Error: Cannot connect to API server")
print("\n[ERROR] Error: Cannot connect to API server")
print(f" Make sure the server is running at {API_BASE_URL}")
print(" Run: uvicorn app.main:app --reload")
return False
# Get or create admin user
print("\n📋 Setting up seed user...")
print("\n[1/2] Setting up seed user...")
try:
token, user_info = await get_or_create_admin_user(client)
if user_info.get("exists"):
print(" Using existing seed admin user")
print(" [OK] Using existing seed admin user")
else:
print(f" Created seed admin user: {SEED_USER['email']}")
print(f" [OK] Created seed admin user: {SEED_USER['email']}")
except Exception as e:
print(f" Failed to setup seed user: {e}")
print(f" [ERROR] Failed to setup seed user: {e}")
return False
# Create trees
print("\n🌳 Creating decision trees...")
print("\n[2/2] Creating decision trees...")
trees_to_create = [
get_password_reset_tree(),
@@ -445,11 +445,11 @@ async def seed_database():
tree = await create_tree(client, token, tree_data)
created_trees.append(tree)
except Exception as e:
print(f" Failed to create '{tree_data['name']}': {e}")
print(f" [ERROR] Failed to create '{tree_data['name']}': {e}")
# Summary
print("\n" + "=" * 50)
print(f" Seeding complete! Created {len(created_trees)} trees.")
print(f"[OK] Seeding complete! Created {len(created_trees)} trees.")
print("\nCreated trees:")
for tree in created_trees:
print(f" - {tree['name']} ({tree['category']})")
@@ -458,7 +458,7 @@ async def seed_database():
def main():
parser = argparse.ArgumentParser(description="Seed the Apoklisis database with example trees")
parser = argparse.ArgumentParser(description="Seed the Patherly database with example trees")
parser.add_argument("--direct", action="store_true", help="Insert directly to database (not implemented)")
args = parser.parse_args()

View File

@@ -2,7 +2,7 @@
"""
Comprehensive MSP/SMB Troubleshooting Decision Trees Seed Script.
This script populates Apoklisis with realistic troubleshooting decision trees
This script populates Patherly with realistic troubleshooting decision trees
covering common Tier 1, Tier 2, and Tier 3 support scenarios.
Run from the backend directory with: python -m scripts.seed_trees
@@ -23,8 +23,8 @@ API_BASE_URL = "http://localhost:8000/api/v1"
# Default admin user for seeding
SEED_USER = {
"email": "seed.admin@example.com",
"password": "SeedAdmin2024!Secure",
"name": "Seed Administrator",
"password": "SeedAdmin123!",
"name": "Seed Admin",
"role": "admin"
}
@@ -3374,7 +3374,7 @@ async def create_tree(client: httpx.AsyncClient, token: str, tree_data: dict) ->
async def seed_database():
"""Main seeding function."""
print("\n" + "=" * 60)
print(" APOKLISIS - MSP/SMB Troubleshooting Trees Seeder")
print(" PATHERLY - MSP/SMB Troubleshooting Trees Seeder")
print("=" * 60)
async with httpx.AsyncClient(timeout=60.0) as client:
@@ -3453,7 +3453,7 @@ async def seed_database():
def main():
parser = argparse.ArgumentParser(
description="Seed the Apoklisis database with MSP/SMB troubleshooting trees"
description="Seed the Patherly database with MSP/SMB troubleshooting trees"
)
parser.add_argument(
"--api-url",