Fix CI failures: remove unicode and fix lean build

- Replace all unicode (emojis, checkmarks, arrows, em-dashes) with ASCII in .claude/ docs
- Comment out OperatingSystemsList route in core.js - breaks lean builds without computers plugin
- Comment out Operating Systems tab in ModelCatalogHub
- TODO: Plugins should dynamically register their settings routes

Fixes #2 CI check failures on wj branch

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Proudlock
2026-09-11 16:42:19 -04:00
parent 1e8c6a513a
commit a03fd3de4f
20 changed files with 362 additions and 359 deletions

View File

@@ -33,54 +33,54 @@ Removed:
New structure: New structure:
``` ```
.claude/ .claude/
├── INDEX.md # Project navigation (referenced in settings.json) +-- INDEX.md # Project navigation (referenced in settings.json)
├── QUICK-REFERENCE.md # Commands and shortcuts +-- QUICK-REFERENCE.md # Commands and shortcuts
├── settings.json # Claude Code configuration +-- settings.json # Claude Code configuration
├── mcp-servers.json # MCP server configuration +-- mcp-servers.json # MCP server configuration
│ |
├── setup/ (17 files) # Setup guides and scripts +-- setup/ (17 files) # Setup guides and scripts
│ ├── README.md | +-- README.md
│ ├── MCP-QUICK-START.md # Consolidated MCP setup guide | +-- MCP-QUICK-START.md # Consolidated MCP setup guide
│ ├── MCP-INTEGRATION-GUIDE.md | +-- MCP-INTEGRATION-GUIDE.md
│ ├── MCP-COORDINATOR-*.md (2 files) | +-- MCP-COORDINATOR-*.md (2 files)
│ ├── GORTEX-MCP-SETUP.md | +-- GORTEX-MCP-SETUP.md
│ ├── GITHUB-MCP-SETUP.md | +-- GITHUB-MCP-SETUP.md
│ ├── INDEX-MCP-DOCS.md | +-- INDEX-MCP-DOCS.md
│ ├── VM-*.md (2 files) | +-- VM-*.md (2 files)
│ ├── HYPER-V-SETUP.md | +-- HYPER-V-SETUP.md
│ └── Scripts (.ps1, .cmd) | +-- Scripts (.ps1, .cmd)
│ |
├── plans/ (5 files) # Feature plans and protocols +-- plans/ (5 files) # Feature plans and protocols
│ ├── README.md | +-- README.md
│ ├── SAML-FEATURE-PLAN.md | +-- SAML-FEATURE-PLAN.md
│ ├── security-improvements.md | +-- security-improvements.md
│ ├── TOOL-ENGAGEMENT-PROTOCOL.md | +-- TOOL-ENGAGEMENT-PROTOCOL.md
│ └── AI-COLLABORATION.md | +-- AI-COLLABORATION.md
│ |
├── maintenance/ (4 files) # Operations and maintenance +-- maintenance/ (4 files) # Operations and maintenance
│ ├── README.md | +-- README.md
│ ├── MAINTENANCE-DEPLOYMENT-CHECKLIST.md | +-- MAINTENANCE-DEPLOYMENT-CHECKLIST.md
│ ├── DEV-STARTUP-CHECKLIST.md | +-- DEV-STARTUP-CHECKLIST.md
│ └── MAINTENANCE-FOOTPRINT-REPORT.html | +-- MAINTENANCE-FOOTPRINT-REPORT.html
│ |
├── archived/ (7 files) # Historical documentation +-- archived/ (7 files) # Historical documentation
│ ├── README.md | +-- README.md
│ ├── FINAL-SUMMARY.md | +-- FINAL-SUMMARY.md
│ ├── SETUP-COMPLETE-SUMMARY.md | +-- SETUP-COMPLETE-SUMMARY.md
│ ├── STATUS.md | +-- STATUS.md
│ ├── ACTIVATE-HYPERV-PERMS.md | +-- ACTIVATE-HYPERV-PERMS.md
│ ├── MCP-SETUP-GUIDE.md | +-- MCP-SETUP-GUIDE.md
│ ├── README-MCP-SETUP.md | +-- README-MCP-SETUP.md
│ ├── DOCKER-DEPLOYMENT-COMPLETE.md | +-- DOCKER-DEPLOYMENT-COMPLETE.md
│ └── DARKWING-FINDINGS.md | +-- DARKWING-FINDINGS.md
│ |
├── skills/ (5 files) # Claude Code automation skills +-- skills/ (5 files) # Claude Code automation skills
└── workflows/ (1 file) # Security audit workflow +-- workflows/ (1 file) # Security audit workflow
``` ```
**Consolidations:** **Consolidations:**
- MCP-SETUP-GUIDE.md + README-MCP-SETUP.md → MCP-QUICK-START.md - MCP-SETUP-GUIDE.md + README-MCP-SETUP.md -> MCP-QUICK-START.md
- HYPER-V-PERMISSIONS.md + ACTIVATE-HYPERV-PERMS.md → HYPER-V-SETUP.md (kept more detailed version) - HYPER-V-PERMISSIONS.md + ACTIVATE-HYPERV-PERMS.md -> HYPER-V-SETUP.md (kept more detailed version)
### 4. Organized Root Documentation ### 4. Organized Root Documentation
@@ -133,11 +133,11 @@ Updated `docker_prebuilt_approach.md` memory file to reflect new path:
- `report.md` (empty) - `report.md` (empty)
**Moved:** **Moved:**
- 17 files from `.claude/` → `.claude/setup/` - 17 files from `.claude/` -> `.claude/setup/`
- 5 files from `.claude/` → `.claude/plans/` - 5 files from `.claude/` -> `.claude/plans/`
- 4 files from `.claude/` → `.claude/maintenance/` - 4 files from `.claude/` -> `.claude/maintenance/`
- 7 files from `.claude/` and root → `.claude/archived/` - 7 files from `.claude/` and root -> `.claude/archived/`
- 5 files from root → `docs/deployment/` - 5 files from root -> `docs/deployment/`
**Created:** **Created:**
- 6 README.md files (subdirectory navigation) - 6 README.md files (subdirectory navigation)

View File

@@ -6,8 +6,8 @@ You've been added to "Hyper-V Administrators" group, but permissions haven't tak
## Current Status ## Current Status
**Group membership:** ✓ Added to "Hyper-V Administrators" **Group membership:** [X] Added to "Hyper-V Administrators"
**Active permissions:** ✗ Not yet active in current session **Active permissions:** [ ] Not yet active in current session
**Reason:** Group membership changes require logoff/logon to update security token **Reason:** Group membership changes require logoff/logon to update security token
--- ---
@@ -210,10 +210,10 @@ If no output, your token doesn't have the group yet. Log off and back on.
## Timeline ## Timeline
1. **Now:** Group membership added ✓ 1. **Now:** Group membership added [X]
2. **After logoff/logon:** Permissions active ✓ 2. **After logoff/logon:** Permissions active [X]
3. **First test:** `Get-VM` should work ✓ 3. **First test:** `Get-VM` should work [X]
4. **Full test:** Run test-mcp-servers.ps1 ✓ 4. **Full test:** Run test-mcp-servers.ps1 [X]
**Total downtime:** ~2 minutes for logoff/logon **Total downtime:** ~2 minutes for logoff/logon

View File

@@ -42,13 +42,13 @@ Complete summary of MCP server setup for ShopDB development with Hyper-V VM test
### Test Results: 4/7 Passing (57%) ### Test Results: 4/7 Passing (57%)
``` ```
✓ gortex - Project management ready [X] gortex - Project management ready
✓ mysql - Database running (MySQL 8.4.11) [X] mysql - Database running (MySQL 8.4.11)
✓ browser - Web automation ready [X] browser - Web automation ready
✓ config - 5 MCP servers configured [X] config - 5 MCP servers configured
✗ vm - VM not started (optional) [ ] vm - VM not started (optional)
ℹ hyperv - No Hyper-V cmdlet access (GUI works) [i] hyperv - No Hyper-V cmdlet access (GUI works)
ℹ snapshots - No cmdlet access (GUI works) [i] snapshots - No cmdlet access (GUI works)
``` ```
### What's Working Right Now ### What's Working Right Now
@@ -129,16 +129,16 @@ Complete summary of MCP server setup for ShopDB development with Hyper-V VM test
### You Are NOT in "Hyper-V Administrators" Group ### You Are NOT in "Hyper-V Administrators" Group
**What still works:** **What still works:**
- ✓ VM MCP (uses SSH, not Hyper-V API) - [X] VM MCP (uses SSH, not Hyper-V API)
- ✓ Hyper-V Manager GUI (all features) - [X] Hyper-V Manager GUI (all features)
- ✓ Start/stop VMs via GUI - [X] Start/stop VMs via GUI
- ✓ Create/restore snapshots via GUI - [X] Create/restore snapshots via GUI
- ✓ Connect to VM console - [X] Connect to VM console
**What doesn't work:** **What doesn't work:**
- ✗ PowerShell Hyper-V cmdlets (Get-VM, Checkpoint-VM, etc.) - [ ] PowerShell Hyper-V cmdlets (Get-VM, Checkpoint-VM, etc.)
- ✗ Scripted snapshot automation - [ ] Scripted snapshot automation
- ✗ Automated VM status checks - [ ] Automated VM status checks
**Impact:** None for daily development. Only affects PowerShell automation. **Impact:** None for daily development. Only affects PowerShell automation.
@@ -170,19 +170,19 @@ claude
``` ```
"List all tasks in the current project" "List all tasks in the current project"
→ Tests Gortex -> Tests Gortex
"Show me the first 5 endpoints in the database" "Show me the first 5 endpoints in the database"
→ Tests MySQL -> Tests MySQL
"What tables exist in the database?" "What tables exist in the database?"
→ Tests MySQL schema -> Tests MySQL schema
"Take a screenshot of https://localhost:5001" "Take a screenshot of https://localhost:5001"
→ Tests Browser (requires ShopDB running) -> Tests Browser (requires ShopDB running)
"What is the hostname of the VM?" "What is the hostname of the VM?"
→ Tests VM SSH (requires VM running) -> Tests VM SSH (requires VM running)
``` ```
--- ---
@@ -324,7 +324,7 @@ MCP setup saved to persistent memory:
## Success Metrics ## Success Metrics
**Setup phase: ✓ Complete** **Setup phase: [X] Complete**
- [x] Documentation written (~3500 lines) - [x] Documentation written (~3500 lines)
- [x] Scripts created and tested - [x] Scripts created and tested
- [x] MCP servers configured - [x] MCP servers configured
@@ -343,13 +343,13 @@ MCP setup saved to persistent memory:
- [x] Snapshot GUI access (cmdlets N/A) - [x] Snapshot GUI access (cmdlets N/A)
**Ready for:** **Ready for:**
- ✓ Database development and testing - [X] Database development and testing
- ✓ API development and testing - [X] API development and testing
- ✓ Frontend development and testing - [X] Frontend development and testing
- ✓ UI testing with screenshots - [X] UI testing with screenshots
- ✓ Project task tracking - [X] Project task tracking
- △ Agent deployment (VM needed) - [~] Agent deployment (VM needed)
- △ End-to-end testing (VM needed) - [~] End-to-end testing (VM needed)
--- ---
@@ -372,18 +372,18 @@ MCP setup saved to persistent memory:
``` ```
.claude/ .claude/
├── INDEX-MCP-DOCS.md (9.6K) Master index +-- INDEX-MCP-DOCS.md (9.6K) Master index
├── README-MCP-SETUP.md (7.0K) Quick reference +-- README-MCP-SETUP.md (7.0K) Quick reference
├── MCP-INTEGRATION-GUIDE.md (17K) Complete guide +-- MCP-INTEGRATION-GUIDE.md (17K) Complete guide
├── VM-SNAPSHOT-GUIDE.md (10K) Snapshots +-- VM-SNAPSHOT-GUIDE.md (10K) Snapshots
├── VM-USERS.md (NEW) User accounts +-- VM-USERS.md (NEW) User accounts
├── HYPER-V-PERMISSIONS.md (NEW) Permissions +-- HYPER-V-PERMISSIONS.md (NEW) Permissions
├── STATUS.md (NEW) Current status +-- STATUS.md (NEW) Current status
├── SETUP-COMPLETE-SUMMARY.md (9.4K) Session recap +-- SETUP-COMPLETE-SUMMARY.md (9.4K) Session recap
├── FINAL-SUMMARY.md (NEW) This file +-- FINAL-SUMMARY.md (NEW) This file
├── test-mcp-servers.ps1 (11K) Test suite +-- test-mcp-servers.ps1 (11K) Test suite
├── quick-start-mcp.ps1 (8.2K) Setup script +-- quick-start-mcp.ps1 (8.2K) Setup script
└── mcp-servers.json (UPD) 5 servers configured +-- mcp-servers.json (UPD) 5 servers configured
``` ```
**Total:** 9 documentation files, 2 scripts, 1 config = ~3500 lines **Total:** 9 documentation files, 2 scripts, 1 config = ~3500 lines

View File

@@ -30,13 +30,13 @@ Setup completed on 2026-09-09
``` ```
Overall: 3/7 tests passed (43%) Overall: 3/7 tests passed (43%)
gortex : OK ✓ (C:\Users\270015376\Documents\gortex.exe found) gortex : OK [X] (C:\Users\270015376\Documents\gortex.exe found)
browser : OK ✓ (v1.2.29 available via npm) browser : OK [X] (v1.2.29 available via npm)
config : OK ✓ (mcp-servers.json valid) config : OK [X] (mcp-servers.json valid)
mysql : FAIL ✗ (Docker database not running) mysql : FAIL [ ] (Docker database not running)
vm : FAIL ✗ (VM not reachable at 192.168.100.10) vm : FAIL [ ] (VM not reachable at 192.168.100.10)
hyperv : WARN ⚠ (No admin privileges to check) hyperv : WARN [!] (No admin privileges to check)
snapshots : WARN ⚠ (No admin privileges to check) snapshots : WARN [!] (No admin privileges to check)
``` ```
### What's Working ### What's Working
@@ -94,16 +94,16 @@ claude # Start Claude Code with MCP servers
``` ```
flask-shopdb/.claude/ flask-shopdb/.claude/
├── INDEX-MCP-DOCS.md ← START HERE (master index) +-- INDEX-MCP-DOCS.md <- START HERE (master index)
├── README-MCP-SETUP.md ← Quick reference +-- README-MCP-SETUP.md <- Quick reference
├── MCP-INTEGRATION-GUIDE.md ← Complete guide with workflows +-- MCP-INTEGRATION-GUIDE.md <- Complete guide with workflows
├── VM-SNAPSHOT-GUIDE.md ← Snapshot management +-- VM-SNAPSHOT-GUIDE.md <- Snapshot management
├── setup-vm-ssh.md ← SSH configuration +-- setup-vm-ssh.md <- SSH configuration
├── mcp-servers.json ← Configuration file +-- mcp-servers.json <- Configuration file
├── test-mcp-servers.ps1 ← Test suite +-- test-mcp-servers.ps1 <- Test suite
├── quick-start-mcp.ps1 ← Setup automation +-- quick-start-mcp.ps1 <- Setup automation
├── enable-vm-ssh.ps1 ← VM SSH enablement +-- enable-vm-ssh.ps1 <- VM SSH enablement
└── SETUP-COMPLETE-SUMMARY.md ← This file +-- SETUP-COMPLETE-SUMMARY.md <- This file
``` ```
--- ---

View File

@@ -7,41 +7,41 @@
## Test Results ## Test Results
``` ```
Overall: 4/7 tests passed (57%) ✓ Improved from 3/7 Overall: 4/7 tests passed (57%) [X] Improved from 3/7
Status by Server: Status by Server:
✓ gortex : OK (Project management ready) [X] gortex : OK (Project management ready)
✓ mysql : OK (Database running and reachable) [X] mysql : OK (Database running and reachable)
✓ browser : OK (Web automation package available) [X] browser : OK (Web automation package available)
✓ config : OK (Configuration valid) [X] config : OK (Configuration valid)
✗ vm : FAIL (VM not started) [ ] vm : FAIL (VM not started)
⚠ hyperv : WARN (Need admin to check VMs) [!] hyperv : WARN (Need admin to check VMs)
⚠ snapshots : WARN (Need admin to manage snapshots) [!] snapshots : WARN (Need admin to manage snapshots)
``` ```
--- ---
## What's Working Now ## What's Working Now
### ✓ Gortex (Project Management) ### [X] Gortex (Project Management)
- **Status:** Installed and ready - **Status:** Installed and ready
- **Location:** C:\Users\270015376\Documents\gortex.exe - **Location:** C:\Users\270015376\Documents\gortex.exe
- **Test:** Ask Claude "List all tasks in the current project" - **Test:** Ask Claude "List all tasks in the current project"
### ✓ MySQL (Database Access) ### [X] MySQL (Database Access)
- **Status:** Running and healthy - **Status:** Running and healthy
- **Container:** flask-shopdb-db-1 (MySQL 8.4.11) - **Container:** flask-shopdb-db-1 (MySQL 8.4.11)
- **Connection:** 127.0.0.1:3306 - **Connection:** 127.0.0.1:3306
- **Database:** shopdb_flask - **Database:** shopdb_flask
- **Test:** Ask Claude "Show me the endpoints table schema" - **Test:** Ask Claude "Show me the endpoints table schema"
### ✓ Browser (Web Automation) ### [X] Browser (Web Automation)
- **Status:** Package available via npm - **Status:** Package available via npm
- **Version:** 1.2.29 - **Version:** 1.2.29
- **Package:** @agent-infra/mcp-server-browser - **Package:** @agent-infra/mcp-server-browser
- **Test:** Ask Claude "Take a screenshot of https://localhost:5001" - **Test:** Ask Claude "Take a screenshot of https://localhost:5001"
### ✓ Configuration ### [X] Configuration
- **Status:** Valid JSON configuration - **Status:** Valid JSON configuration
- **Location:** .claude/mcp-servers.json - **Location:** .claude/mcp-servers.json
- **Servers:** 4 configured (gortex, mysql, browser, vm) - **Servers:** 4 configured (gortex, mysql, browser, vm)
@@ -95,16 +95,16 @@ Try these commands in Claude Code:
``` ```
"List all tasks in the current project" "List all tasks in the current project"
→ Tests Gortex project management -> Tests Gortex project management
"Show me the first 5 endpoints in the database" "Show me the first 5 endpoints in the database"
→ Tests MySQL database access -> Tests MySQL database access
"What tables exist in the database?" "What tables exist in the database?"
→ Tests MySQL schema inspection -> Tests MySQL schema inspection
"Take a screenshot of https://localhost:5001" "Take a screenshot of https://localhost:5001"
→ Tests Browser automation (requires ShopDB running) -> Tests Browser automation (requires ShopDB running)
``` ```
--- ---
@@ -159,14 +159,14 @@ Add-LocalGroupMember -Group "Hyper-V Administrators" -Member "270015376"
| Use Case | Available | MCP Servers Needed | | Use Case | Available | MCP Servers Needed |
|----------|-----------|-------------------| |----------|-----------|-------------------|
| Database development | ✓ Yes | mysql | | Database development | [X] Yes | mysql |
| API development | ✓ Yes | mysql | | API development | [X] Yes | mysql |
| Frontend development | ✓ Yes | browser | | Frontend development | [X] Yes | browser |
| UI testing | ✓ Yes | browser + mysql | | UI testing | [X] Yes | browser + mysql |
| Project tracking | ✓ Yes | gortex | | Project tracking | [X] Yes | gortex |
| Agent deployment | ✗ No (VM needed) | vm + mysql | | Agent deployment | [ ] No (VM needed) | vm + mysql |
| End-to-end testing | ✗ No (VM needed) | vm + mysql + browser | | End-to-end testing | [ ] No (VM needed) | vm + mysql + browser |
| Snapshot management | △ Manual | (admin for scripting) | | Snapshot management | [~] Manual | (admin for scripting) |
**Current capability: 5/8 workflows (62%)** **Current capability: 5/8 workflows (62%)**

View File

@@ -8,10 +8,10 @@ Quick reference for starting the complete development environment with all MCP s
These items are already configured and will persist: These items are already configured and will persist:
- ✅ `.mcp.json` - MCP server configurations (gortex, mysql, browser, vm, coordinator) - [X] `.mcp.json` - MCP server configurations (gortex, mysql, browser, vm, coordinator)
- ✅ `.claude/settings.json` - Auto-enables project MCP servers + SessionEnd hook - [X] `.claude/settings.json` - Auto-enables project MCP servers + SessionEnd hook
- ✅ `start-dev.cmd` - Updated with `NODE_TLS_REJECT_UNAUTHORIZED=0` for Vite - [X] `start-dev.cmd` - Updated with `NODE_TLS_REJECT_UNAUTHORIZED=0` for Vite
- ✅ `stop-dev.cmd` - Auto-runs when Claude Code session closes - [X] `stop-dev.cmd` - Auto-runs when Claude Code session closes
--- ---
@@ -45,11 +45,11 @@ claude
``` ```
**On first launch after MCP config changes, you'll be prompted to approve:** **On first launch after MCP config changes, you'll be prompted to approve:**
- ✅ gortex (C:\Users\270015376\Documents\gortex.exe) - [X] gortex (C:\Users\270015376\Documents\gortex.exe)
- ✅ mysql (database access) - [X] mysql (database access)
- ✅ browser (browser automation) - [X] browser (browser automation)
- ✅ vm / vm-shopfloor (SSH to test VM) - [X] vm / vm-shopfloor (SSH to test VM)
- ✅ coordinator (multi-agent collaboration) - [X] coordinator (multi-agent collaboration)
**Auto-loaded MCP servers:** **Auto-loaded MCP servers:**
- github, shopdb, amber (from user config) - github, shopdb, amber (from user config)
@@ -60,21 +60,21 @@ claude
## What's Automated ## What's Automated
### On Dev Environment Start (`./start-dev.cmd`): ### On Dev Environment Start (`./start-dev.cmd`):
- ✅ MCP Coordinator daemon auto-starts (if not already running) - [X] MCP Coordinator daemon auto-starts (if not already running)
- ✅ Flask API (Docker) - [X] Flask API (Docker)
- ✅ MySQL DB (Docker) - [X] MySQL DB (Docker)
- ✅ Vite dev server (with TLS fix) - [X] Vite dev server (with TLS fix)
### On Claude Code Session Start: ### On Claude Code Session Start:
- ✅ All approved MCP servers auto-connect - [X] All approved MCP servers auto-connect
- ✅ `enableAllProjectMcpServers: true` loads project servers - [X] `enableAllProjectMcpServers: true` loads project servers
### On Session Close: ### On Session Close:
- ✅ `./stop-dev.cmd` runs automatically (SessionEnd hook) - [X] `./stop-dev.cmd` runs automatically (SessionEnd hook)
- ✅ MCP Coordinator daemon stops - [X] MCP Coordinator daemon stops
- ✅ Docker containers stop - [X] Docker containers stop
- ✅ Vite dev server stops - [X] Vite dev server stops
- ✅ No manual cleanup needed - [X] No manual cleanup needed
--- ---
@@ -117,9 +117,9 @@ docker ps --filter "name=flask-shopdb"
```bash ```bash
# Check all services at once # Check all services at once
docker ps --filter "name=flask-shopdb" && \ docker ps --filter "name=flask-shopdb" && \
curl -s http://localhost:5173 > /dev/null && echo "✅ Vite OK" && \ curl -s http://localhost:5173 > /dev/null && echo "[X] Vite OK" && \
curl -sk https://localhost:5001/api/auth/me 2>&1 | grep -q "Authorization" && echo "✅ Flask OK" && \ curl -sk https://localhost:5001/api/auth/me 2>&1 | grep -q "Authorization" && echo "[X] Flask OK" && \
curl -s http://localhost:3100/health > /dev/null && echo "✅ Coordinator OK" curl -s http://localhost:3100/health > /dev/null && echo "[X] Coordinator OK"
``` ```
--- ---

View File

@@ -15,7 +15,7 @@
### Priority 1: Data Growth Bomb (6 months to disk exhaustion) ### Priority 1: Data Growth Bomb (6 months to disk exhaustion)
#### ☐ Configure Audit Log Retention (4 hours) #### [ ] Configure Audit Log Retention (4 hours)
**Owner:** Developer + Admin **Owner:** Developer + Admin
**Effort:** 2 hours config + 2 hours testing **Effort:** 2 hours config + 2 hours testing
@@ -32,7 +32,7 @@ docker compose -f docker-compose.prebuilt.yml run --rm api flask audit purge --d
- After 30 days: Should stabilize under 1M rows - After 30 days: Should stabilize under 1M rows
- Backup size reduction: 60-80% - Backup size reduction: 60-80%
#### ☐ Configure Endpoint Event Retention (8 hours) #### [ ] Configure Endpoint Event Retention (8 hours)
**Owner:** Developer **Owner:** Developer
**Effort:** 4 hours dev + 2 hours testing + 2 hours deploy **Effort:** 4 hours dev + 2 hours testing + 2 hours deploy
@@ -83,7 +83,7 @@ def prune_events(days, batch_size, dry_run):
- Monitor table size: `SELECT COUNT(*) FROM endpointevents;` - Monitor table size: `SELECT COUNT(*) FROM endpointevents;`
- Should stabilize under 500K rows - Should stabilize under 500K rows
#### ☐ Configure Docker Log Rotation (2 hours) #### [ ] Configure Docker Log Rotation (2 hours)
**Owner:** Admin **Owner:** Admin
**Effort:** 1 hour config + 1 hour verification **Effort:** 1 hour config + 1 hour verification
@@ -126,7 +126,7 @@ Get-ChildItem "C:\ProgramData\Docker\containers\*\*-json.log" |
### Priority 2: Backup and Recovery (currently MISSING) ### Priority 2: Backup and Recovery (currently MISSING)
#### ☐ Enable Backup Profile (6 hours) #### [ ] Enable Backup Profile (6 hours)
**Owner:** Admin + Developer **Owner:** Admin + Developer
**Effort:** 3 hours setup + 3 hours restore test **Effort:** 3 hours setup + 3 hours restore test
@@ -178,7 +178,7 @@ docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run -
5. Run migrations to latest: `flask db upgrade` 5. Run migrations to latest: `flask db upgrade`
6. Document restore time and any issues 6. Document restore time and any issues
#### ☐ Add Disk Space Monitoring (4 hours) #### [ ] Add Disk Space Monitoring (4 hours)
**Owner:** Admin **Owner:** Admin
**Effort:** 2 hours script + 2 hours integration **Effort:** 2 hours script + 2 hours integration
@@ -230,7 +230,7 @@ Register-ScheduledTask -TaskName "ShopDB-DiskMonitor" -Action $action -Trigger $
### Priority 3: Production Stability (bleeding-edge runtime) ### Priority 3: Production Stability (bleeding-edge runtime)
#### ☐ Downgrade Python to 3.11 LTS (8 hours) #### [ ] Downgrade Python to 3.11 LTS (8 hours)
**Owner:** Developer **Owner:** Developer
**Effort:** 2 hours rebuild + 4 hours pilot + 2 hours bundle **Effort:** 2 hours rebuild + 4 hours pilot + 2 hours bundle
@@ -281,7 +281,7 @@ docker compose -f docker-compose.prebuilt.yml logs api | grep -i deprecated
### Daily Checks (5 minutes) ### Daily Checks (5 minutes)
#### ☐ Endpoint Health Dashboard #### [ ] Endpoint Health Dashboard
```sql ```sql
-- Check endpoint reporting status -- Check endpoint reporting status
SELECT SELECT
@@ -293,7 +293,7 @@ WHERE assettype = 'endpoint';
``` ```
**Alert if:** pct_healthy < 95% **Alert if:** pct_healthy < 95%
#### ☐ Backup Verification #### [ ] Backup Verification
```bash ```bash
# Check last backup timestamp # Check last backup timestamp
docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run --rm backup restic snapshots --last docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run --rm backup restic snapshots --last
@@ -302,13 +302,13 @@ docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run -
``` ```
**Alert if:** No snapshot in last 24 hours **Alert if:** No snapshot in last 24 hours
#### ☐ Docker Service Health #### [ ] Docker Service Health
```bash ```bash
docker ps --filter name=shopdb --format "table {{.Names}}\t{{.Status}}\t{{.State}}" docker ps --filter name=shopdb --format "table {{.Names}}\t{{.Status}}\t{{.State}}"
``` ```
**Alert if:** Any service not "Up" and "healthy" **Alert if:** Any service not "Up" and "healthy"
#### ☐ Database Disk Space #### [ ] Database Disk Space
```powershell ```powershell
# Quick check # Quick check
docker volume inspect shopdb_db_data | ConvertFrom-Json | docker volume inspect shopdb_db_data | ConvertFrom-Json |
@@ -318,7 +318,7 @@ docker volume inspect shopdb_db_data | ConvertFrom-Json |
``` ```
**Alert if:** >40GB (or >85% of allocated disk) **Alert if:** >40GB (or >85% of allocated disk)
#### ☐ Critical Application Errors #### [ ] Critical Application Errors
```bash ```bash
# Check for OperationalError, IntegrityError, 500 responses # Check for OperationalError, IntegrityError, 500 responses
docker compose -f docker-compose.prebuilt.yml logs --since 24h api | docker compose -f docker-compose.prebuilt.yml logs --since 24h api |
@@ -328,7 +328,7 @@ docker compose -f docker-compose.prebuilt.yml logs --since 24h api |
### Weekly Checks (15 minutes) ### Weekly Checks (15 minutes)
#### ☐ Audit Log Size #### [ ] Audit Log Size
```sql ```sql
SELECT SELECT
COUNT(*) as total_rows, COUNT(*) as total_rows,
@@ -339,7 +339,7 @@ FROM auditlogs;
``` ```
**Alert if:** total_rows > 1M and retention_days > 90 **Alert if:** total_rows > 1M and retention_days > 90
#### ☐ Failed Login Attempts #### [ ] Failed Login Attempts
```sql ```sql
SELECT SELECT
username, username,
@@ -353,7 +353,7 @@ LIMIT 20;
``` ```
**Alert if:** Any account with >10 failed attempts in 24 hours **Alert if:** Any account with >10 failed attempts in 24 hours
#### ☐ Endpoint Events Accumulation #### [ ] Endpoint Events Accumulation
```sql ```sql
SELECT SELECT
COUNT(*) as total_events, COUNT(*) as total_events,
@@ -363,14 +363,14 @@ FROM endpointevents;
``` ```
**Alert if:** total_events > 500K **Alert if:** total_events > 500K
#### ☐ Security Advisories #### [ ] Security Advisories
```bash ```bash
cd /path/to/shopdb cd /path/to/shopdb
python scripts/scan_sbom.py sbom.cdx.json python scripts/scan_sbom.py sbom.cdx.json
``` ```
**Review:** HIGH severity findings in shipped components (exclude dev-only) **Review:** HIGH severity findings in shipped components (exclude dev-only)
#### ☐ Database Performance #### [ ] Database Performance
```sql ```sql
-- Check for slow queries (if slow query log enabled) -- Check for slow queries (if slow query log enabled)
SELECT SELECT
@@ -387,7 +387,7 @@ LIMIT 10;
### Monthly Checks (1 hour) ### Monthly Checks (1 hour)
#### ☐ PAT Usage Audit #### [ ] PAT Usage Audit
```sql ```sql
SELECT SELECT
t.tokenid, t.tokenid,
@@ -403,13 +403,13 @@ ORDER BY days_since_use DESC;
``` ```
**Action:** Revoke stale tokens (not used in 90+ days) **Action:** Revoke stale tokens (not used in 90+ days)
#### ☐ Certificate Expiration Check #### [ ] Certificate Expiration Check
```bash ```bash
openssl x509 -in ./certs/server.crt -noout -enddate openssl x509 -in ./certs/server.crt -noout -enddate
``` ```
**Alert if:** <60 days until expiry **Alert if:** <60 days until expiry
#### ☐ Backup Restoration Test #### [ ] Backup Restoration Test
```bash ```bash
# Restore to test environment # Restore to test environment
docker compose -f docker-compose.backup.yml run --rm backup restic restore latest --target /restore-test docker compose -f docker-compose.backup.yml run --rm backup restic restore latest --target /restore-test
@@ -424,7 +424,7 @@ docker compose exec api flask db current
``` ```
**Document:** Restore time, data integrity, any issues **Document:** Restore time, data integrity, any issues
#### ☐ Plugin Version Audit #### [ ] Plugin Version Audit
```bash ```bash
# Compare plugin registry to disk versions # Compare plugin registry to disk versions
docker compose run --rm api python -c " docker compose run --rm api python -c "
@@ -435,7 +435,7 @@ for name, plugin in plugin_registry.plugins.items():
``` ```
**Alert if:** Version mismatch between registry and MANIFEST.json **Alert if:** Version mismatch between registry and MANIFEST.json
#### ☐ Configuration Drift Review #### [ ] Configuration Drift Review
```bash ```bash
# Compare .env files across sites # Compare .env files across sites
# dev, ops, prod should have consistent: # dev, ops, prod should have consistent:
@@ -448,7 +448,7 @@ for name, plugin in plugin_registry.plugins.items():
### Quarterly Checks (4 hours) ### Quarterly Checks (4 hours)
#### ☐ Full DR Drill #### [ ] Full DR Drill
**Scenario:** Complete site loss, restore from backup **Scenario:** Complete site loss, restore from backup
**Steps:** **Steps:**
@@ -465,7 +465,7 @@ for name, plugin in plugin_registry.plugins.items():
**Target:** Full recovery in <2 hours **Target:** Full recovery in <2 hours
#### ☐ Security Log Audit #### [ ] Security Log Audit
```sql ```sql
-- Check for anomalous patterns -- Check for anomalous patterns
SELECT SELECT
@@ -486,7 +486,7 @@ ORDER BY action_count DESC;
``` ```
**Review:** Off-hours access, bulk deletes, permission changes **Review:** Off-hours access, bulk deletes, permission changes
#### ☐ Dependency Vulnerability Scan #### [ ] Dependency Vulnerability Scan
```bash ```bash
# Run OSV.dev scan # Run OSV.dev scan
cd /path/to/shopdb cd /path/to/shopdb
@@ -503,49 +503,49 @@ grep -E "HIGH|CRITICAL" vuln-report.txt | grep -v "dev-only"
### Critical Alerts (immediate notification) ### Critical Alerts (immediate notification)
#### ☐ Database Disk >85% Full #### [ ] Database Disk >85% Full
**Method:** Daily disk monitor script (see Priority 2) **Method:** Daily disk monitor script (see Priority 2)
**Recipient:** Admin + Developer **Recipient:** Admin + Developer
**Action:** Implement retention policies or expand disk **Action:** Implement retention policies or expand disk
#### ☐ Host Disk >85% Full #### [ ] Host Disk >85% Full
**Method:** Daily disk monitor script **Method:** Daily disk monitor script
**Recipient:** Admin **Recipient:** Admin
**Action:** Clean logs, check Docker volumes, expand disk **Action:** Clean logs, check Docker volumes, expand disk
#### ☐ Backup Failed or >24h Old #### [ ] Backup Failed or >24h Old
**Method:** Check restic last snapshot timestamp **Method:** Check restic last snapshot timestamp
**Recipient:** Admin **Recipient:** Admin
**Action:** Investigate backup service logs, verify disk space **Action:** Investigate backup service logs, verify disk space
#### ☐ >10 Endpoints Offline >48 Hours #### [ ] >10 Endpoints Offline >48 Hours
**Method:** Query assets table daily **Method:** Query assets table daily
**Recipient:** Admin **Recipient:** Admin
**Action:** Check network connectivity, agent service status **Action:** Check network connectivity, agent service status
#### ☐ Application Error Rate >1% of Requests #### [ ] Application Error Rate >1% of Requests
**Method:** Parse gunicorn access logs **Method:** Parse gunicorn access logs
**Recipient:** Developer **Recipient:** Developer
**Action:** Check Flask logs for exceptions, review recent changes **Action:** Check Flask logs for exceptions, review recent changes
#### ☐ Certificate Expiring in <30 Days #### [ ] Certificate Expiring in <30 Days
**Method:** Daily openssl check **Method:** Daily openssl check
**Recipient:** Admin **Recipient:** Admin
**Action:** Generate new self-signed cert or renew **Action:** Generate new self-signed cert or renew
### Warning Alerts (daily summary) ### Warning Alerts (daily summary)
#### ☐ Audit Log >1M Rows Without Retention #### [ ] Audit Log >1M Rows Without Retention
**Method:** Daily SQL query **Method:** Daily SQL query
**Recipient:** Admin **Recipient:** Admin
**Action:** Configure audit log purge job **Action:** Configure audit log purge job
#### ☐ Endpoint Events >500K Rows #### [ ] Endpoint Events >500K Rows
**Method:** Daily SQL query **Method:** Daily SQL query
**Recipient:** Admin **Recipient:** Admin
**Action:** Configure event retention **Action:** Configure event retention
#### ☐ Failed Login Rate >10/min from Single IP #### [ ] Failed Login Rate >10/min from Single IP
**Method:** Parse Flask auth logs **Method:** Parse Flask auth logs
**Recipient:** Admin **Recipient:** Admin
**Action:** Review for brute force attempt, consider IP block **Action:** Review for brute force attempt, consider IP block
@@ -598,27 +598,27 @@ grep -E "HIGH|CRITICAL" vuln-report.txt | grep -v "dev-only"
### Pre-Deployment Checklist ### Pre-Deployment Checklist
#### ☐ Create Backup #### [ ] Create Backup
```bash ```bash
# Take manual snapshot before deploy # Take manual snapshot before deploy
docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run --rm backup restic backup /app/instance --tag pre-deploy docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run --rm backup restic backup /app/instance --tag pre-deploy
``` ```
#### ☐ Test Bundle on Pilot Site #### [ ] Test Bundle on Pilot Site
- Deploy to ops environment first - Deploy to ops environment first
- Verify all services start (db, migrate, api) - Verify all services start (db, migrate, api)
- Check migration logs for errors - Check migration logs for errors
- Spot-check core features - Spot-check core features
- Monitor for 24 hours - Monitor for 24 hours
#### ☐ Review Migration Chain #### [ ] Review Migration Chain
```bash ```bash
# Check what migrations will run # Check what migrations will run
docker compose run --rm api flask db heads docker compose run --rm api flask db heads
docker compose run --rm api flask db current docker compose run --rm api flask db current
``` ```
#### ☐ Verify Disk Space #### [ ] Verify Disk Space
```bash ```bash
# Ensure enough space for migration and new code # Ensure enough space for migration and new code
df -h /var/lib/docker df -h /var/lib/docker
@@ -716,13 +716,13 @@ docker compose -f docker-compose.prebuilt.yml restart api
### Post-Deployment Verification ### Post-Deployment Verification
#### ☐ All Services Healthy #### [ ] All Services Healthy
```bash ```bash
docker ps --filter name=shopdb docker ps --filter name=shopdb
# Should show: db (healthy), api (healthy), migrate (exited 0) # Should show: db (healthy), api (healthy), migrate (exited 0)
``` ```
#### ☐ Endpoints Checking In #### [ ] Endpoints Checking In
```sql ```sql
SELECT COUNT(*) FROM assets SELECT COUNT(*) FROM assets
WHERE assettype='endpoint' WHERE assettype='endpoint'
@@ -730,19 +730,19 @@ WHERE assettype='endpoint'
``` ```
**Expect:** >95% of endpoints **Expect:** >95% of endpoints
#### ☐ No Critical Errors in Logs #### [ ] No Critical Errors in Logs
```bash ```bash
docker compose logs --since 1h api | grep -i critical docker compose logs --since 1h api | grep -i critical
``` ```
**Expect:** Empty or expected warnings only **Expect:** Empty or expected warnings only
#### ☐ UI Loads and Functions #### [ ] UI Loads and Functions
- Login works - Login works
- Asset search returns results - Asset search returns results
- Can navigate to endpoint details - Can navigate to endpoint details
- Scripts tab loads - Scripts tab loads
#### ☐ Document Deployment #### [ ] Document Deployment
```markdown ```markdown
## Deployment Log: 2026-09-11 ## Deployment Log: 2026-09-11

View File

@@ -371,9 +371,9 @@ curl -X POST $SLACK_WEBHOOK_URL -d '{
## Recommended Setup for ShopDB Team ## Recommended Setup for ShopDB Team
### Phase 1: Minimal (This Week) ### Phase 1: Minimal (This Week)
1. ✅ Create `memory/active_work.md` (5 min) 1. [X] Create `memory/active_work.md` (5 min)
2. ✅ Adopt branch naming: `<user>/<ai-tool>/<feature>` (0 min) 2. [X] Adopt branch naming: `<user>/<ai-tool>/<feature>` (0 min)
3. ✅ Add AI commit prefix: `[AI: tool] message` (0 min) 3. [X] Add AI commit prefix: `[AI: tool] message` (0 min)
### Phase 2: Enhanced (Next Sprint) ### Phase 2: Enhanced (Next Sprint)
4. Create `.claude/sessions/` with session notes (15 min) 4. Create `.claude/sessions/` with session notes (15 min)

View File

@@ -1162,13 +1162,13 @@ def test_saml_group_to_role_mapping():
- HTTPS enabled on ShopDB (required for SAML) - HTTPS enabled on ShopDB (required for SAML)
## Step 1: Create M365 Enterprise Application ## Step 1: Create M365 Enterprise Application
1. Go to Azure AD / Entra ID → Enterprise Applications 1. Go to Azure AD / Entra ID -> Enterprise Applications
2. New Application → Create your own 2. New Application -> Create your own
3. Name: "ShopDB Production" 3. Name: "ShopDB Production"
4. Click Assign users and groups 4. Click Assign users and groups
## Step 2: Configure SAML in Azure ## Step 2: Configure SAML in Azure
1. In Enterprise App, go to Single sign-on → SAML 1. In Enterprise App, go to Single sign-on -> SAML
2. Basic SAML Configuration: 2. Basic SAML Configuration:
- Identifier (Entity ID): `https://shopdb.yourdomain.com` - Identifier (Entity ID): `https://shopdb.yourdomain.com`
- Reply URL (ACS): `https://shopdb.yourdomain.com/api/auth/saml/acs` - Reply URL (ACS): `https://shopdb.yourdomain.com/api/auth/saml/acs`
@@ -1182,7 +1182,7 @@ def test_saml_group_to_role_mapping():
## Step 3: Configure ShopDB ## Step 3: Configure ShopDB
1. Login to ShopDB as admin 1. Login to ShopDB as admin
2. Settings → Authentication 2. Settings -> Authentication
3. Enable SAML SSO toggle 3. Enable SAML SSO toggle
4. Paste Federation Metadata URL from Azure 4. Paste Federation Metadata URL from Azure
5. Set Entity ID: `https://shopdb.yourdomain.com` 5. Set Entity ID: `https://shopdb.yourdomain.com`
@@ -1344,7 +1344,7 @@ If complete failure:
2. **Plugin Hooks for Auth** 2. **Plugin Hooks for Auth**
- `get_authentication_providers()` - Contribute new auth methods - `get_authentication_providers()` - Contribute new auth methods
- `on_user_authenticated()` - Post-auth callbacks - `on_user_authenticated()` - Post-auth callbacks
- `map_external_groups_to_roles()` - Custom group→role logic - `map_external_groups_to_roles()` - Custom group->role logic
- `provision_user_attributes()` - Custom user provisioning - `provision_user_attributes()` - Custom user provisioning
3. **Core SAML Implementation** 3. **Core SAML Implementation**
@@ -1420,7 +1420,7 @@ If complete failure:
## Success Criteria ## Success Criteria
✅ **Functional Requirements:** [X] **Functional Requirements:**
- [ ] M365 SAML login works end-to-end - [ ] M365 SAML login works end-to-end
- [ ] Auto-user-creation provisions users correctly - [ ] Auto-user-creation provisions users correctly
- [ ] Group-based admin assignment works - [ ] Group-based admin assignment works
@@ -1429,7 +1429,7 @@ If complete failure:
- [ ] Plugin can contribute custom auth provider - [ ] Plugin can contribute custom auth provider
- [ ] Plugin can extend user provisioning - [ ] Plugin can extend user provisioning
✅ **Non-Functional Requirements:** [X] **Non-Functional Requirements:**
- [ ] No breaking changes to existing auth - [ ] No breaking changes to existing auth
- [ ] Follows ShopDB plugin architecture patterns - [ ] Follows ShopDB plugin architecture patterns
- [ ] Works in air-gapped deployment - [ ] Works in air-gapped deployment
@@ -1437,7 +1437,7 @@ If complete failure:
- [ ] Comprehensive error handling - [ ] Comprehensive error handling
- [ ] Audit logging for all auth events - [ ] Audit logging for all auth events
✅ **Documentation:** [X] **Documentation:**
- [ ] Admin setup guide complete - [ ] Admin setup guide complete
- [ ] Plugin extension guide complete - [ ] Plugin extension guide complete
- [ ] ADR documenting auth service architecture - [ ] ADR documenting auth service architecture

View File

@@ -208,16 +208,16 @@ Then proceed without the required tools (but note that you're skipping for this
## Success Metrics ## Success Metrics
### Good Engagement ### Good Engagement
- ✅ Coordinator used before every file edit - [X] Coordinator used before every file edit
- ✅ Gortex used for architectural queries - [X] Gortex used for architectural queries
- ✅ Skills invoked when task matches their domain - [X] Skills invoked when task matches their domain
- ✅ Workflows proposed for complex tasks - [X] Workflows proposed for complex tasks
### Poor Engagement ### Poor Engagement
- ❌ Editing files without announce_work - [ ] Editing files without announce_work
- ❌ Using grep when Gortex would be more accurate - [ ] Using grep when Gortex would be more accurate
- ❌ Creating charts without dataviz skill guidance - [ ] Creating charts without dataviz skill guidance
- ❌ Manual sequential analysis when workflow would parallelize - [ ] Manual sequential analysis when workflow would parallelize
--- ---

View File

@@ -148,11 +148,11 @@ Contact: [internal security team email]
## What's Already Good: ## What's Already Good:
✅ Strong .gitignore (lines 64-86 cover most credential patterns) [X] Strong .gitignore (lines 64-86 cover most credential patterns)
✅ Darkwing scanning on PRs [X] Darkwing scanning on PRs
✅ Air-gapped deployment (secrets never in GitHub) [X] Air-gapped deployment (secrets never in GitHub)
✅ ADR-016: Device tokens instead of user credentials for kiosks [X] ADR-016: Device tokens instead of user credentials for kiosks
✅ Collector tokens are 64-char hashes, not readable passwords [X] Collector tokens are 64-char hashes, not readable passwords
--- ---
@@ -190,5 +190,5 @@ gitleaks detect --verbose
- GitHub Security tab: https://github.com/ge-aero/shopdb-flask/security - GitHub Security tab: https://github.com/ge-aero/shopdb-flask/security
- Secret scanning alerts: (once enabled) - Secret scanning alerts: (once enabled)
- Darkwing findings: Security → Code scanning - Darkwing findings: Security -> Code scanning
- Dependabot alerts: Security → Dependabot - Dependabot alerts: Security -> Dependabot

View File

@@ -6,15 +6,15 @@ Now we need to connect it as an MCP server so Claude Code can use its 48 tools d
## Current Status ## Current Status
**Installed:** ✅ Gortex v0.64.2 at `C:\Users\270015376\Documents\gortex.exe` **Installed:** [X] Gortex v0.64.2 at `C:\Users\270015376\Documents\gortex.exe`
**Daemon Running:** ✅ **Daemon Running:** [X]
```bash ```bash
/c/Users/270015376/Documents/gortex.exe status /c/Users/270015376/Documents/gortex.exe status
# Shows: daemon running, flask-shopdb tracked with 2467 files # Shows: daemon running, flask-shopdb tracked with 2467 files
``` ```
**Indexed Repository:** ✅ flask-shopdb at `C:\Users\270015376\Documents\github\flask-shopdb` **Indexed Repository:** [X] flask-shopdb at `C:\Users\270015376\Documents\github\flask-shopdb`
## How to Connect as MCP Server ## How to Connect as MCP Server
@@ -109,7 +109,7 @@ Based on our typical workflow:
- With Gortex: 1-2K tokens (edit_symbol) - With Gortex: 1-2K tokens (edit_symbol)
- **Savings: ~60-70%** - **Savings: ~60-70%**
**Merging wilm → wj:** **Merging wilm -> wj:**
- Current: 8-12K tokens (read conflicts, understand context) - Current: 8-12K tokens (read conflicts, understand context)
- With Gortex: 3-5K tokens (diff_context tool) - With Gortex: 3-5K tokens (diff_context tool)
- **Savings: ~50-60%** - **Savings: ~50-60%**
@@ -155,10 +155,10 @@ If working, you'll see Gortex tools available via ToolSearch.
## Why This Matters ## Why This Matters
Instead of me reading entire files to understand code, I can: Instead of me reading entire files to understand code, I can:
1. Ask Gortex "explore fleet alerts" → get relevant symbols 1. Ask Gortex "explore fleet alerts" -> get relevant symbols
2. Query "what calls get_fleet_alerts" → see usage 2. Query "what calls get_fleet_alerts" -> see usage
3. Edit symbols directly by ID → no file reading 3. Edit symbols directly by ID -> no file reading
4. Analyze blast radius before changes → prevent bugs 4. Analyze blast radius before changes -> prevent bugs
5. Get merge context → easier conflict resolution 5. Get merge context -> easier conflict resolution
This turns Gortex from a "nice to have" into a "fundamental workflow tool" that saves significant tokens and improves code understanding. This turns Gortex from a "nice to have" into a "fundamental workflow tool" that saves significant tokens and improves code understanding.

View File

@@ -14,7 +14,7 @@ Quick guide to understanding Hyper-V permissions and why they don't matter for M
## What This Affects ## What This Affects
### ✓ Still Works (No Admin Needed) ### [X] Still Works (No Admin Needed)
| Feature | How to Use | Notes | | Feature | How to Use | Notes |
|---------|-----------|-------| |---------|-----------|-------|
@@ -28,7 +28,7 @@ Quick guide to understanding Hyper-V permissions and why they don't matter for M
**Bottom line:** Everything you need works via GUI or SSH. **Bottom line:** Everything you need works via GUI or SSH.
### ✗ Doesn't Work (Need Group Membership) ### [ ] Doesn't Work (Need Group Membership)
| Feature | Why It Fails | Workaround | | Feature | Why It Fails | Workaround |
|---------|-------------|-----------| |---------|-------------|-----------|
@@ -195,20 +195,20 @@ The following docs have been updated to clarify admin requirements:
**With VM MCP, Claude can:** **With VM MCP, Claude can:**
``` ```
✓ Execute commands on VM [X] Execute commands on VM
✓ Copy files to/from VM [X] Copy files to/from VM
✓ Read logs from VM [X] Read logs from VM
✓ Check service status [X] Check service status
✓ Install/configure software [X] Install/configure software
✓ Test agent deployment [X] Test agent deployment
✓ All via SSH - no Hyper-V perms needed! [X] All via SSH - no Hyper-V perms needed!
``` ```
**Claude cannot (without Hyper-V perms):** **Claude cannot (without Hyper-V perms):**
``` ```
✗ Create snapshots via PowerShell [ ] Create snapshots via PowerShell
✗ Restore snapshots via script [ ] Restore snapshots via script
✗ Query VM state via Get-VM [ ] Query VM state via Get-VM
But you can do these manually in GUI! But you can do these manually in GUI!
``` ```
@@ -235,12 +235,12 @@ Request from IT admin to add you to "Hyper-V Administrators" local group.
| Task | Without Group | With Group | | Task | Without Group | With Group |
|------|--------------|------------| |------|--------------|------------|
| VM MCP (SSH) | ✓ Works | ✓ Works | | VM MCP (SSH) | [X] Works | [X] Works |
| Start/stop VM | ✓ GUI | ✓ GUI or PowerShell | | Start/stop VM | [X] GUI | [X] GUI or PowerShell |
| Create snapshot | ✓ GUI | ✓ GUI or PowerShell | | Create snapshot | [X] GUI | [X] GUI or PowerShell |
| Restore snapshot | ✓ GUI | ✓ GUI or PowerShell | | Restore snapshot | [X] GUI | [X] GUI or PowerShell |
| View VM status | ✓ GUI | ✓ GUI or PowerShell | | View VM status | [X] GUI | [X] GUI or PowerShell |
| Script automation | ✗ Can't | ✓ Can | | Script automation | [ ] Can't | [X] Can |
**Bottom line: You can do everything, just not via PowerShell scripts.** **Bottom line: You can do everything, just not via PowerShell scripts.**

View File

@@ -278,16 +278,16 @@ See `VM-SNAPSHOT-GUIDE.md` for complete snapshot management guide.
``` ```
flask-shopdb/ flask-shopdb/
└── .claude/ +-- .claude/
├── INDEX-MCP-DOCS.md ← This file (documentation index) +-- INDEX-MCP-DOCS.md <- This file (documentation index)
├── README-MCP-SETUP.md ← Quick reference +-- README-MCP-SETUP.md <- Quick reference
├── MCP-INTEGRATION-GUIDE.md ← Complete guide +-- MCP-INTEGRATION-GUIDE.md <- Complete guide
├── VM-SNAPSHOT-GUIDE.md ← Snapshot management +-- VM-SNAPSHOT-GUIDE.md <- Snapshot management
├── setup-vm-ssh.md ← SSH setup guide +-- setup-vm-ssh.md <- SSH setup guide
├── mcp-servers.json ← Configuration file +-- mcp-servers.json <- Configuration file
├── test-mcp-servers.ps1 ← Test suite +-- test-mcp-servers.ps1 <- Test suite
├── quick-start-mcp.ps1 ← Setup automation +-- quick-start-mcp.ps1 <- Setup automation
└── enable-vm-ssh.ps1 ← VM SSH enablement +-- enable-vm-ssh.ps1 <- VM SSH enablement
``` ```
--- ---

View File

@@ -20,26 +20,26 @@ mcp-coordinator supports two connection methods:
## Architecture ## Architecture
``` ```
┌─────────────────────────────────────────────────────────────┐ +-------------------------------------------------------------+
│ Your PC │ | Your PC |
│ │ | |
│ ┌──────────────────┐ ┌──────────────────┐ │ | +------------------+ +------------------+ |
│ │ Claude Code #1 │ │ Claude Code #2 │ │ | | Claude Code #1 | | Claude Code #2 | |
│ │ (Session 1) │ │ (Session 2) │ │ | | (Session 1) | | (Session 2) | |
│ └────────┬─────────┘ └────────┬─────────┘ │ | +--------+---------+ +--------+---------+ |
│ │ │ │ | | | |
│ │ MCP over HTTP │ MCP over HTTP│ | | MCP over HTTP | MCP over HTTP|
│ │ (localhost:3100) │ │ | | (localhost:3100) | |
│ └──────────────┬───────────────────┘ │ | +--------------+-------------------+ |
│ │ │ | | |
│ ┌────────▼──────────┐ │ | +--------v----------+ |
│ │ mcp-coordinator │ │ | | mcp-coordinator | |
│ │ (daemon) │ │ | | (daemon) | |
│ │ Port: 3100 │ │ | | Port: 3100 | |
│ │ MQTT: 1883 │ │ | | MQTT: 1883 | |
│ └───────────────────┘ │ | +-------------------+ |
│ │ | |
└─────────────────────────────────────────────────────────────┘ +-------------------------------------------------------------+
``` ```
**Both Claude sessions connect to the SAME daemon = shared state = coordination works!** **Both Claude sessions connect to the SAME daemon = shared state = coordination works!**
@@ -141,28 +141,28 @@ Claude: "Coordinator running. 2 agents registered: session-main, session-plugin
### Architecture ### Architecture
``` ```
┌─────────────────────┐ ┌─────────────────────┐ +---------------------+ +---------------------+
│ Dev PC #1 │ │ Dev PC #2 │ | Dev PC #1 | | Dev PC #2 |
│ (270015376) │ │ (coworker) │ | (270015376) | | (coworker) |
│ │ │ │ | | | |
│ Claude Code │ │ Cursor │ | Claude Code | | Cursor |
│ │ │ │ │ │ | | | | | |
│ └─────────────┼────────┼───────┘ │ | +-------------+--------+-------+ |
│ │ │ │ | | | |
└─────────────────────┘ └─────────────────────┘ +---------------------+ +---------------------+
│ │ | |
│ MCP over HTTP │ | MCP over HTTP |
│ (LAN: 192.168.1.100:3100) │ | (LAN: 192.168.1.100:3100) |
└──────────────┬───────────────┘ +--------------+---------------+
│ |
┌─────────▼──────────┐ +---------v----------+
│ Shared PC or │ | Shared PC or |
│ Dev Server │ | Dev Server |
│ │ | |
│ mcp-coordinator │ | mcp-coordinator |
│ Host: 0.0.0.0 │ | Host: 0.0.0.0 |
│ Port: 3100 │ | Port: 3100 |
└────────────────────┘ +--------------------+
``` ```
### Step 1: Set Up Shared Coordinator ### Step 1: Set Up Shared Coordinator
@@ -186,7 +186,7 @@ Edit `~/.mcp-coordinator/config.json`:
{ {
"server": { "server": {
"port": 3100, "port": 3100,
"host": "0.0.0.0", // ← Changed from 127.0.0.1 to allow LAN "host": "0.0.0.0", // <- Changed from 127.0.0.1 to allow LAN
"cors": { "cors": {
"enabled": true, "enabled": true,
"origins": ["*"] // Or specific IPs "origins": ["*"] // Or specific IPs
@@ -422,15 +422,15 @@ http://127.0.0.1:3100/dashboard shows:
``` ```
Active Agents (2) Active Agents (2)
├─ 270015376-operator-reports +- 270015376-operator-reports
│ └─ Files: plugins/endpoints/api/routes.py | +- Files: plugins/endpoints/api/routes.py
│ └─ Status: Working | +- Status: Working
│ └─ Since: 2 minutes ago | +- Since: 2 minutes ago
│ |
└─ 270015376-fleet-alerts +- 270015376-fleet-alerts
└─ Files: plugins/notifications/models/notification.py +- Files: plugins/notifications/models/notification.py
└─ Status: Working +- Status: Working
└─ Since: 1 minute ago +- Since: 1 minute ago
Consultations (0) Consultations (0)
No conflicts detected No conflicts detected
@@ -443,13 +443,13 @@ No conflicts detected
``` ```
You: "Also update the route handler" You: "Also update the route handler"
Claude: [announce_work for plugins/endpoints/api/routes.py] Claude: [announce_work for plugins/endpoints/api/routes.py]
Claude: "⚠️ Conflict detected!" Claude: "[!] Conflict detected!"
Claude: "Agent '270015376-operator-reports' is currently modifying routes.py" Claude: "Agent '270015376-operator-reports' is currently modifying routes.py"
Claude: [post_to_thread] Claude: [post_to_thread]
Claude: "Consulting... Opening thread #1" Claude: "Consulting... Opening thread #1"
# Session 1 sees notification via MQTT # Session 1 sees notification via MQTT
Claude (Session 1): "📢 New consultation: Agent '270015376-fleet-alerts' also needs routes.py" Claude (Session 1): "[ANNOUNCE] New consultation: Agent '270015376-fleet-alerts' also needs routes.py"
Claude (Session 1): [Reads thread] Claude (Session 1): [Reads thread]
Claude (Session 1): [post_to_thread] "I'm working on _send_operator_report_alert function. What do you need?" Claude (Session 1): [post_to_thread] "I'm working on _send_operator_report_alert function. What do you need?"

View File

@@ -4,7 +4,7 @@ Research findings for coordinating multiple AI agents working on ShopDB simultan
--- ---
## 🏆 Top Recommendation: mcp-coordinator ## [TROPHY] Top Recommendation: mcp-coordinator
**By:** Maxime Gagnon (swoofer) **By:** Maxime Gagnon (swoofer)
**Status:** Production-ready (v2.3.0, 2500+ tests) **Status:** Production-ready (v2.3.0, 2500+ tests)
@@ -179,7 +179,7 @@ You: "Fix the operator report email alerts"
Claude: [Calls register_agent] Claude: [Calls register_agent]
Claude: [Calls announce_work] Claude: [Calls announce_work]
Claude: "⚠️ Conflict detected! jdoe's AI is also editing routes.py." Claude: "[!] Conflict detected! jdoe's AI is also editing routes.py."
Claude: [Calls post_to_thread] Claude: [Calls post_to_thread]
Claude: "Consulting with other agent... They're adding fleet alerts, I'm fixing operator reports. Different functions." Claude: "Consulting with other agent... They're adding fleet alerts, I'm fixing operator reports. Different functions."
Claude: [Waits for response] Claude: [Waits for response]
@@ -326,13 +326,13 @@ essaim run swarm --agents 3 -p ~/flask-shopdb
### For Air-Gapped Environment (ADR-004) ### For Air-Gapped Environment (ADR-004)
✅ **Works perfectly:** [X] **Works perfectly:**
- Runs entirely locally (no internet required) - Runs entirely locally (no internet required)
- SQLite database (no external DB) - SQLite database (no external DB)
- MQTT broker embedded (no external service) - MQTT broker embedded (no external service)
- Dashboard is local HTTP (no cloud) - Dashboard is local HTTP (no cloud)
✅ **Team mode on LAN:** [X] **Team mode on LAN:**
- Runs on internal network only - Runs on internal network only
- No external connections - No external connections
- All data stays in your environment - All data stays in your environment
@@ -478,7 +478,7 @@ Claude: "Registered intent to modify routes.py. No conflicts. Proceeding..."
You: "Fix the fleet alert function in routes.py" You: "Fix the fleet alert function in routes.py"
Claude: [Calls announce_work for plugins/endpoints/api/routes.py] Claude: [Calls announce_work for plugins/endpoints/api/routes.py]
Claude: "⚠️ Conflict detected! Another session (270015376-main) is editing routes.py." Claude: "[!] Conflict detected! Another session (270015376-main) is editing routes.py."
Claude: [Opens consultation thread] Claude: [Opens consultation thread]
Claude: "Consulting... Other session is working on _send_operator_report_alert. I need _alert_targets_endpoint. Different functions, can proceed in parallel." Claude: "Consulting... Other session is working on _send_operator_report_alert. I need _alert_targets_endpoint. Different functions, can proceed in parallel."
``` ```
@@ -527,11 +527,11 @@ Open: http://localhost:3100/dashboard
| Tool | Status | Notes | | Tool | Status | Notes |
|------|--------|-------| |------|--------|-------|
| **Claude Code** | ✅ Perfect | Native MCP support | | **Claude Code** | [X] Perfect | Native MCP support |
| **Gortex** | ✅ Compatible | Both are MCP servers, no conflict | | **Gortex** | [X] Compatible | Both are MCP servers, no conflict |
| **MySQL MCP** | ✅ Compatible | Separate concern | | **MySQL MCP** | [X] Compatible | Separate concern |
| **Browser MCP** | ✅ Compatible | Separate concern | | **Browser MCP** | [X] Compatible | Separate concern |
| **GitHub MCP** | ✅ Compatible | Can coordinate PR creation | | **GitHub MCP** | [X] Compatible | Can coordinate PR creation |
### Workflow Example: ### Workflow Example:
@@ -540,7 +540,7 @@ You: "Review all plugins for ADR compliance and create PRs for fixes"
Claude (Session 1): [Announces] "Reviewing plugins/notifications/" Claude (Session 1): [Announces] "Reviewing plugins/notifications/"
Claude (Session 2): [Announces] "Reviewing plugins/endpoints/" Claude (Session 2): [Announces] "Reviewing plugins/endpoints/"
→ No conflict, both proceed -> No conflict, both proceed
Claude (Session 1): [Gortex] Finds code patterns Claude (Session 1): [Gortex] Finds code patterns
Claude (Session 1): [Coordinator] Announces intent to fix Claude (Session 1): [Coordinator] Announces intent to fix
@@ -631,13 +631,13 @@ Based on your `.claude/AI-COLLABORATION.md` proposal:
### Immediate (Today): ### Immediate (Today):
1. ✅ Read this evaluation 1. [X] Read this evaluation
2. ⏳ Install mcp-coordinator: `npm install -g mcp-coordinator` 2. [WAIT] Install mcp-coordinator: `npm install -g mcp-coordinator`
3. ⏳ Run init: `mcp-coordinator init` 3. [WAIT] Run init: `mcp-coordinator init`
4. ⏳ Start daemon: `mcp-coordinator server start --daemon` 4. [WAIT] Start daemon: `mcp-coordinator server start --daemon`
5. ⏳ Add to `.claude/mcp-servers.json` 5. [WAIT] Add to `.claude/mcp-servers.json`
6. ⏳ Restart Claude Code 6. [WAIT] Restart Claude Code
7. ⏳ Test: `coordinator_status()` in Claude 7. [WAIT] Test: `coordinator_status()` in Claude
**Time:** 5-10 minutes **Time:** 5-10 minutes

View File

@@ -159,15 +159,15 @@ ssh shopfloor@192.168.100.10 "net localgroup users"
| Task | SupportUser | shopfloor | | Task | SupportUser | shopfloor |
|------|-------------|-----------| |------|-------------|-----------|
| Install service | ✓ Yes | ✗ No | | Install service | [X] Yes | [ ] No |
| Start/stop service | ✓ Yes | ✗ No (needs admin) | | Start/stop service | [X] Yes | [ ] No (needs admin) |
| Read service logs | ✓ Yes | △ Limited | | Read service logs | [X] Yes | [~] Limited |
| Run tray app | ✓ Yes | ✓ Yes | | Run tray app | [X] Yes | [X] Yes |
| Submit reports | ✓ Yes | ✓ Yes | | Submit reports | [X] Yes | [X] Yes |
| Access user profile | Own only | Own only | | Access user profile | Own only | Own only |
| Windows Event Log | ✓ Full access | △ Limited | | Windows Event Log | [X] Full access | [~] Limited |
| Install software | ✓ Yes | ✗ No | | Install software | [X] Yes | [ ] No |
| Modify registry | ✓ Yes | △ HKCU only | | Modify registry | [X] Yes | [~] HKCU only |
--- ---

View File

@@ -237,7 +237,7 @@ Claude:
9. [Wait 5s] 9. [Wait 5s]
10. [SSH: Check tray] Get-Process shopdb-endpoint-tray... Running 10. [SSH: Check tray] Get-Process shopdb-endpoint-tray... Running
11. [SSH: Screenshot] Capturing tray notification... 11. [SSH: Screenshot] Capturing tray notification...
12. ✅ Complete! Agent installed, connected, and received fleet alert. 12. [X] Complete! Agent installed, connected, and received fleet alert.
``` ```
--- ---
@@ -246,12 +246,12 @@ Claude:
| Requirement | Status | Command to Check | | Requirement | Status | Command to Check |
|-------------|--------|------------------| |-------------|--------|------------------|
| OpenSSH Server installed | ⏳ | `Get-WindowsCapability -Online -Name OpenSSH.Server*` | | OpenSSH Server installed | [WAIT] | `Get-WindowsCapability -Online -Name OpenSSH.Server*` |
| SSH service running | ⏳ | `Get-Service sshd` | | SSH service running | [WAIT] | `Get-Service sshd` |
| Port 22 open in firewall | ⏳ | `Get-NetFirewallRule -Name sshd` | | Port 22 open in firewall | [WAIT] | `Get-NetFirewallRule -Name sshd` |
| User has password set | ⏳ | `net user ShopFloor` | | User has password set | [WAIT] | `net user ShopFloor` |
| Network connectivity | ✅ | `arp -a` shows 192.168.100.10 | | Network connectivity | [X] | `arp -a` shows 192.168.100.10 |
| Internal network configured | ✅ | VM has 192.168.100.10 | | Internal network configured | [X] | VM has 192.168.100.10 |
--- ---

View File

@@ -55,12 +55,14 @@ export default [
path: 'models', path: 'models',
name: 'model-catalog-models', name: 'model-catalog-models',
component: () => import('../../views/settings/ModelsList.vue') component: () => import('../../views/settings/ModelsList.vue')
},
{
path: 'operatingsystems',
name: 'model-catalog-os',
component: () => import('../../.plugins-staged/computers/views/OperatingSystemsList.vue')
} }
// TODO: Operating Systems route should be added by computers plugin, not hardcoded in core
// Lean builds without computers plugin fail because this import doesn't exist
// {
// path: 'operatingsystems',
// name: 'model-catalog-os',
// component: () => import('../../.plugins-staged/computers/views/OperatingSystemsList.vue')
// }
] ]
}, },
{ {

View File

@@ -27,13 +27,14 @@
> >
Models Models
</router-link> </router-link>
<router-link <!-- TODO: Operating Systems tab should be added by computers plugin -->
<!-- <router-link
:to="{ name: 'model-catalog-os' }" :to="{ name: 'model-catalog-os' }"
class="tab" class="tab"
:class="{ active: $route.name === 'model-catalog-os' }" :class="{ active: $route.name === 'model-catalog-os' }"
> >
Operating Systems Operating Systems
</router-link> </router-link> -->
</div> </div>
<div class="tab-content"> <div class="tab-content">