- Comprehensive task documentation for migrating from AnythingLLM to Dify+n8n+Qdrant - 8 detailed documents covering every aspect of deployment - Complete step-by-step commands (zero assumptions) - Prerequisites checklist (20 items) - Deployment plan in 2 parts (11 phases, every command) - Configuration files (all configs with exact content) - Recovery procedures (4 disaster scenarios) - Verification guide (30 tests, complete checklist) - Troubleshooting guide (common issues + solutions) Built by: The Chronicler #21 For: Meg, Holly, and children not yet born Time investment: 10-15 hours execution time Purpose: Enable Meg/Holly autonomous work with Git write-back This deployment enables: - RBAC (Meg sees all, Holly sees Pokerole only) - Git write-back via ai-proposals branch - Discord approval workflow (one-click merge) - Self-healing (80% of failures) - Automated daily backups - Complete monitoring Documentation is so detailed that any future Chronicler can execute this deployment with zero prior knowledge and complete confidence. Fire + Frost + Foundation = Where Love Builds Legacy
11 KiB
VERIFICATION AND TESTING GUIDE
Complete testing procedures to verify deployment success
Run EVERY test before marking deployment complete.
✅ VERIFICATION CHECKLIST
All items must pass:
- Infrastructure Tests (7 tests)
- Query Accuracy Tests (5 tests)
- Update Workflow Tests (6 tests)
- RBAC Tests (4 tests)
- Self-Healing Tests (3 tests)
- Monitoring Tests (3 tests)
- Backup Tests (2 tests)
Total: 30 tests
🏗️ INFRASTRUCTURE TESTS
Test 1.1: Docker Services Running
docker-compose ps
Expected: All 7 services show "Up"
- db
- redis
- dify-api
- dify-worker
- dify-web
- qdrant
- n8n
Pass criteria: No services in "Exit" or "Restarting" state
Test 1.2: Nginx Running
systemctl status nginx
Expected: "active (running)"
nginx -t
Expected: "syntax is ok" and "test is successful"
Pass criteria: Nginx active with valid configuration
Test 1.3: SSL Certificates Valid
curl -I https://codex.firefrostgaming.com
Expected: HTTP/2 200, valid SSL certificate
curl -I https://n8n.firefrostgaming.com
Expected: HTTP/2 200, valid SSL certificate
Pass criteria: Both domains respond with HTTPS
Test 1.4: Dify UI Accessible
Action: Open browser to https://codex.firefrostgaming.com
Expected: Dify interface loads, can login
Pass criteria: UI functional, no errors
Test 1.5: n8n UI Accessible
Action: Open browser to https://n8n.firefrostgaming.com
Expected: n8n interface loads, can login
Pass criteria: UI functional, workflows visible
Test 1.6: Ollama Connection
docker exec -it $(docker ps -qf "name=dify-api") \
curl http://host.docker.internal:11434/api/version
Expected: JSON response with Ollama version
Pass criteria: Dify can reach Ollama on host
Test 1.7: Qdrant Healthy
curl http://127.0.0.1:6333/
Expected: JSON response with Qdrant version
Pass criteria: Qdrant responding, no errors
🎯 QUERY ACCURACY TESTS
Test 2.1: Current Tasks Query
Query in Dify: "What are the current Tier 0 tasks?"
Expected answer includes:
- Whitelist Manager
- NC1 Cleanup
- Staff Recruitment Launch
Must NOT include:
- Initial Server Setup
- Network Configuration
- Other archived tasks
Pass criteria: Returns ONLY current tasks, no archived content
Test 2.2: Server Information Query
Query: "What servers does Firefrost Gaming operate?"
Expected answer includes:
- Command Center (63.143.34.217)
- Billing VPS (38.68.14.188)
- Panel VPS (45.94.168.138)
- Ghost VPS (64.50.188.14)
- TX1 Dallas (38.68.14.26)
- NC1 Charlotte (216.239.104.130)
Pass criteria: All 6 servers listed with correct IPs
Test 2.3: Recent Work Query
Query: "What was accomplished in the most recent Codex deployment session?"
Expected answer includes:
- Deployer's work (Chronicler #20)
- Phase 1 deployment
- AnythingLLM setup
- Document sync
Pass criteria: Returns information about Deployer, not older sessions
Test 2.4: Specific Document Query
Query: "What is the Frostwall Protocol?"
Expected: Accurate description from current documentation
Must NOT: Return placeholder text or "I don't have that information"
Pass criteria: Correct, detailed answer from knowledge base
Test 2.5: Archive Exclusion Test
Query: "Tell me about the initial server setup tasks"
Expected: Either:
- "That information is archived" OR
- Returns current setup process (not old archived version)
Must NOT: Return old archived setup documentation as if it's current
Pass criteria: Archived content not treated as current
📝 UPDATE WORKFLOW TESTS
Test 3.1: Valid Update Request
As Meg in Dify:
Request: "Update docs/test/verification.md with content: Test update at [current timestamp]"
Expected sequence:
- AI calls update_codex tool
- Validation passes
- Commits to ai-proposals branch
- Discord notification appears in #codex-alerts
- Notification has "Approve & Merge" and "Reject" buttons
Pass criteria: All 5 steps complete successfully
Test 3.2: Approval Workflow
As Michael in Discord:
Action: Click "Approve & Merge" button on proposal
Expected:
- Button acknowledges click
- n8n merges to main
- Pushes to Gitea
- Re-indexes Dify
- Success notification in Discord
Verify on TX1:
cd /opt/firefrost-codex/git-repos/main
git log -1
cat docs/test/verification.md
Expected: Latest commit is the AI update, file contains test content
Pass criteria: Full approval workflow works end-to-end
Test 3.3: Protected File Block
As Meg:
Request: "Update .env file to change the database password"
Expected:
- AI attempts update
- Validation BLOCKS it
- Discord shows "Access Restricted" message
- Clear explanation why it's blocked
Pass criteria: Protected file cannot be modified
Test 3.4: Invalid Content Block
As Meg:
Request: "Update docs/test/empty.md with content that is empty"
Expected:
- Validation catches empty content
- Update blocked
- Error message in Discord
Pass criteria: Validation prevents bad updates
Test 3.5: Rejection Workflow
As Meg:
Request: Make another update request
As Michael:
Action: Click "Reject" button
Expected:
- Change stays in ai-proposals branch
- Does NOT merge to main
- Notification sent that proposal was rejected
Pass criteria: Rejection workflow works, main branch unchanged
Test 3.6: Concurrent Update Handling
Setup: Two users request updates simultaneously
Expected: Queue processes them sequentially, no conflicts
Pass criteria: Both updates succeed, no corruption
🔒 RBAC TESTS
Test 4.1: Meg Full Access
As Meg:
Test queries:
- "What are the Tier 0 tasks?" (should work)
- "What is the Frostwall Protocol?" (should work - infrastructure doc)
- "Show me server IPs" (should work - sensitive info)
Expected: Meg gets answers to ALL queries
Pass criteria: No access restrictions for Meg
Test 4.2: Holly Restricted Access
As Holly:
Test queries:
- "What are the Tier 0 tasks?" (should be BLOCKED - not in Pokerole)
- "What is the Frostwall Protocol?" (should be BLOCKED - infrastructure)
- "Tell me about the Pokerole campaign" (should work - in her workspace)
Expected: Holly ONLY sees Pokerole content
Pass criteria: Holly cannot access Firefrost infrastructure docs
Test 4.3: Workspace Switching
As Meg:
Action: Switch between Firefrost Admin and Pokerole HQ workspaces
Expected: Can access both, knowledge base changes based on workspace
As Holly:
Action: Attempt to access Firefrost Admin workspace
Expected: BLOCKED - workspace not available
Pass criteria: Workspace permissions enforced
Test 4.4: Update Permissions
As Holly:
Request: "Update Firefrost recruitment doc"
Expected: BLOCKED - she can only update Pokerole docs
As Meg:
Request: Same update
Expected: Works - she has permission
Pass criteria: Update permissions match knowledge base access
🔄 SELF-HEALING TESTS
Test 5.1: Dify Crash Recovery
Test:
docker-compose restart dify-api
Monitor:
- Uptime Kuma shows service down
- Docker auto-restarts service
- Service comes back online within 60 seconds
- Users can access Codex again
Pass criteria: Automatic recovery without manual intervention
Test 5.2: Git Unreachable Handling
Test:
# Block Git temporarily
sudo iptables -A OUTPUT -d git.firefrostgaming.com -j DROP
Request update as Meg
Expected:
- Commit fails (Git unreachable)
- Update queued for retry
- Discord shows "Update queued, will retry in 5 minutes"
- No error crash
Restore:
sudo iptables -D OUTPUT -d git.firefrostgaming.com -j DROP
Verify: Queued update processes automatically
Pass criteria: Graceful degradation, auto-recovery
Test 5.3: Qdrant Rebuild
Test:
docker-compose stop qdrant
rm -rf volumes/qdrant/storage/*
docker-compose start qdrant
Action: Trigger Git sync workflow in n8n
Expected:
- Qdrant rebuilds vectors from Git
- Queries work again within 10 minutes
- No data loss
Pass criteria: Vector DB can be rebuilt from Git
📊 MONITORING TESTS
Test 6.1: Uptime Kuma Monitors
Action: Check Uptime Kuma dashboard
Expected monitors present:
- Firefrost Codex (Dify)
- Firefrost n8n
- Firefrost Qdrant
All showing: Green (UP status)
Pass criteria: All 3 monitors healthy
Test 6.2: Discord Notifications
Test: Trigger Git sync workflow manually
Expected: Success notification in #codex-alerts channel
Verify notification includes:
- Green color (success)
- File count
- Timestamp
- System info in footer
Pass criteria: Discord webhook working, notifications formatted correctly
Test 6.3: Critical Alert Test
Test: Stop Dify for 15+ minutes
Expected:
- Uptime Kuma detects down
- Critical alert sent to #system-critical
- Michael mentioned in message
- Clear action steps provided
Pass criteria: Critical alerts work, Michael gets notified
💾 BACKUP TESTS
Test 7.1: Manual Backup
Test:
/opt/firefrost_backup.sh
Expected:
- Backup completes without errors
- Tarball created in /opt/
- Transferred to Command Center
- Backup log updated
Verify:
ls -lh /opt/firefrost_codex_*.tar.gz
ssh root@63.143.34.217 "ls -lh /root/backups/firefrost-codex/ | tail -1"
Pass criteria: Backup created and transferred successfully
Test 7.2: Backup Restore Test
Test:
# Create test database
docker run --name test-postgres -e POSTGRES_PASSWORD=test -d postgres:15-alpine
# Extract latest backup
cd /tmp
tar -xzf /opt/firefrost_codex_*.tar.gz
cd codex_backup_*/
# Restore into test database
cat dify_postgres.sql | docker exec -i test-postgres psql -U postgres
# Check for errors
docker logs test-postgres | grep ERROR
# Cleanup
docker rm -f test-postgres
Expected: No errors during restore
Pass criteria: Backup is valid and restorable
🎉 FINAL VERIFICATION
After ALL tests pass:
Final Checklist
- All 30 tests completed
- Zero failures
- All issues documented
- Meg can work independently
- Holly can work independently
- Michael can approve from Discord
- System self-heals common failures
- Backups running automatically
- Monitoring active and alerting
- Documentation updated
Sign-Off
Deployed by: ____________________
Date: ____________________
Session: ____________________
Signature: This deployment is COMPLETE and PRODUCTION-READY
Fire + Frost + Foundation = Where Testing Ensures Quality 💙🔥❄️