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:
```
.claude/
├── INDEX.md # Project navigation (referenced in settings.json)
├── QUICK-REFERENCE.md # Commands and shortcuts
├── settings.json # Claude Code configuration
├── mcp-servers.json # MCP server configuration
│
├── setup/ (17 files) # Setup guides and scripts
│ ├── README.md
│ ├── MCP-QUICK-START.md # Consolidated MCP setup guide
│ ├── MCP-INTEGRATION-GUIDE.md
│ ├── MCP-COORDINATOR-*.md (2 files)
│ ├── GORTEX-MCP-SETUP.md
│ ├── GITHUB-MCP-SETUP.md
│ ├── INDEX-MCP-DOCS.md
│ ├── VM-*.md (2 files)
│ ├── HYPER-V-SETUP.md
│ └── Scripts (.ps1, .cmd)
│
├── plans/ (5 files) # Feature plans and protocols
│ ├── README.md
│ ├── SAML-FEATURE-PLAN.md
│ ├── security-improvements.md
│ ├── TOOL-ENGAGEMENT-PROTOCOL.md
│ └── AI-COLLABORATION.md
│
├── maintenance/ (4 files) # Operations and maintenance
│ ├── README.md
│ ├── MAINTENANCE-DEPLOYMENT-CHECKLIST.md
│ ├── DEV-STARTUP-CHECKLIST.md
│ └── MAINTENANCE-FOOTPRINT-REPORT.html
│
├── archived/ (7 files) # Historical documentation
│ ├── README.md
│ ├── FINAL-SUMMARY.md
│ ├── SETUP-COMPLETE-SUMMARY.md
│ ├── STATUS.md
│ ├── ACTIVATE-HYPERV-PERMS.md
│ ├── MCP-SETUP-GUIDE.md
│ ├── README-MCP-SETUP.md
│ ├── DOCKER-DEPLOYMENT-COMPLETE.md
│ └── DARKWING-FINDINGS.md
│
├── skills/ (5 files) # Claude Code automation skills
└── workflows/ (1 file) # Security audit workflow
+-- INDEX.md # Project navigation (referenced in settings.json)
+-- QUICK-REFERENCE.md # Commands and shortcuts
+-- settings.json # Claude Code configuration
+-- mcp-servers.json # MCP server configuration
|
+-- setup/ (17 files) # Setup guides and scripts
| +-- README.md
| +-- MCP-QUICK-START.md # Consolidated MCP setup guide
| +-- MCP-INTEGRATION-GUIDE.md
| +-- MCP-COORDINATOR-*.md (2 files)
| +-- GORTEX-MCP-SETUP.md
| +-- GITHUB-MCP-SETUP.md
| +-- INDEX-MCP-DOCS.md
| +-- VM-*.md (2 files)
| +-- HYPER-V-SETUP.md
| +-- Scripts (.ps1, .cmd)
|
+-- plans/ (5 files) # Feature plans and protocols
| +-- README.md
| +-- SAML-FEATURE-PLAN.md
| +-- security-improvements.md
| +-- TOOL-ENGAGEMENT-PROTOCOL.md
| +-- AI-COLLABORATION.md
|
+-- maintenance/ (4 files) # Operations and maintenance
| +-- README.md
| +-- MAINTENANCE-DEPLOYMENT-CHECKLIST.md
| +-- DEV-STARTUP-CHECKLIST.md
| +-- MAINTENANCE-FOOTPRINT-REPORT.html
|
+-- archived/ (7 files) # Historical documentation
| +-- README.md
| +-- FINAL-SUMMARY.md
| +-- SETUP-COMPLETE-SUMMARY.md
| +-- STATUS.md
| +-- ACTIVATE-HYPERV-PERMS.md
| +-- MCP-SETUP-GUIDE.md
| +-- README-MCP-SETUP.md
| +-- DOCKER-DEPLOYMENT-COMPLETE.md
| +-- DARKWING-FINDINGS.md
|
+-- skills/ (5 files) # Claude Code automation skills
+-- workflows/ (1 file) # Security audit workflow
```
**Consolidations:**
- 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)
- 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)
### 4. Organized Root Documentation
@@ -133,11 +133,11 @@ Updated `docker_prebuilt_approach.md` memory file to reflect new path:
- `report.md` (empty)
**Moved:**
- 17 files from `.claude/` → `.claude/setup/`
- 5 files from `.claude/` → `.claude/plans/`
- 4 files from `.claude/` → `.claude/maintenance/`
- 7 files from `.claude/` and root → `.claude/archived/`
- 5 files from root → `docs/deployment/`
- 17 files from `.claude/` -> `.claude/setup/`
- 5 files from `.claude/` -> `.claude/plans/`
- 4 files from `.claude/` -> `.claude/maintenance/`
- 7 files from `.claude/` and root -> `.claude/archived/`
- 5 files from root -> `docs/deployment/`
**Created:**
- 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
**Group membership:** ✓ Added to "Hyper-V Administrators"
**Active permissions:** ✗ Not yet active in current session
**Group membership:** [X] Added to "Hyper-V Administrators"
**Active permissions:** [ ] Not yet active in current session
**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
1. **Now:** Group membership added ✓
2. **After logoff/logon:** Permissions active ✓
3. **First test:** `Get-VM` should work ✓
4. **Full test:** Run test-mcp-servers.ps1 ✓
1. **Now:** Group membership added [X]
2. **After logoff/logon:** Permissions active [X]
3. **First test:** `Get-VM` should work [X]
4. **Full test:** Run test-mcp-servers.ps1 [X]
**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%)
```
✓ gortex - Project management ready
✓ mysql - Database running (MySQL 8.4.11)
✓ browser - Web automation ready
✓ config - 5 MCP servers configured
✗ vm - VM not started (optional)
ℹ hyperv - No Hyper-V cmdlet access (GUI works)
ℹ snapshots - No cmdlet access (GUI works)
[X] gortex - Project management ready
[X] mysql - Database running (MySQL 8.4.11)
[X] browser - Web automation ready
[X] config - 5 MCP servers configured
[ ] vm - VM not started (optional)
[i] hyperv - No Hyper-V cmdlet access (GUI works)
[i] snapshots - No cmdlet access (GUI works)
```
### 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
**What still works:**
- ✓ VM MCP (uses SSH, not Hyper-V API)
- ✓ Hyper-V Manager GUI (all features)
- ✓ Start/stop VMs via GUI
- ✓ Create/restore snapshots via GUI
- ✓ Connect to VM console
- [X] VM MCP (uses SSH, not Hyper-V API)
- [X] Hyper-V Manager GUI (all features)
- [X] Start/stop VMs via GUI
- [X] Create/restore snapshots via GUI
- [X] Connect to VM console
**What doesn't work:**
- ✗ PowerShell Hyper-V cmdlets (Get-VM, Checkpoint-VM, etc.)
- ✗ Scripted snapshot automation
- ✗ Automated VM status checks
- [ ] PowerShell Hyper-V cmdlets (Get-VM, Checkpoint-VM, etc.)
- [ ] Scripted snapshot automation
- [ ] Automated VM status checks
**Impact:** None for daily development. Only affects PowerShell automation.
@@ -170,19 +170,19 @@ claude
```
"List all tasks in the current project"
→ Tests Gortex
-> Tests Gortex
"Show me the first 5 endpoints in the database"
→ Tests MySQL
-> Tests MySQL
"What tables exist in the database?"
→ Tests MySQL schema
-> Tests MySQL schema
"Take a screenshot of https://localhost:5001"
→ Tests Browser (requires ShopDB running)
-> Tests Browser (requires ShopDB running)
"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
**Setup phase: ✓ Complete**
**Setup phase: [X] Complete**
- [x] Documentation written (~3500 lines)
- [x] Scripts created and tested
- [x] MCP servers configured
@@ -343,13 +343,13 @@ MCP setup saved to persistent memory:
- [x] Snapshot GUI access (cmdlets N/A)
**Ready for:**
- ✓ Database development and testing
- ✓ API development and testing
- ✓ Frontend development and testing
- ✓ UI testing with screenshots
- ✓ Project task tracking
- △ Agent deployment (VM needed)
- △ End-to-end testing (VM needed)
- [X] Database development and testing
- [X] API development and testing
- [X] Frontend development and testing
- [X] UI testing with screenshots
- [X] Project task tracking
- [~] Agent deployment (VM needed)
- [~] End-to-end testing (VM needed)
---
@@ -372,18 +372,18 @@ MCP setup saved to persistent memory:
```
.claude/
├── INDEX-MCP-DOCS.md (9.6K) Master index
├── README-MCP-SETUP.md (7.0K) Quick reference
├── MCP-INTEGRATION-GUIDE.md (17K) Complete guide
├── VM-SNAPSHOT-GUIDE.md (10K) Snapshots
├── VM-USERS.md (NEW) User accounts
├── HYPER-V-PERMISSIONS.md (NEW) Permissions
├── STATUS.md (NEW) Current status
├── SETUP-COMPLETE-SUMMARY.md (9.4K) Session recap
├── FINAL-SUMMARY.md (NEW) This file
├── test-mcp-servers.ps1 (11K) Test suite
├── quick-start-mcp.ps1 (8.2K) Setup script
└── mcp-servers.json (UPD) 5 servers configured
+-- INDEX-MCP-DOCS.md (9.6K) Master index
+-- README-MCP-SETUP.md (7.0K) Quick reference
+-- MCP-INTEGRATION-GUIDE.md (17K) Complete guide
+-- VM-SNAPSHOT-GUIDE.md (10K) Snapshots
+-- VM-USERS.md (NEW) User accounts
+-- HYPER-V-PERMISSIONS.md (NEW) Permissions
+-- STATUS.md (NEW) Current status
+-- SETUP-COMPLETE-SUMMARY.md (9.4K) Session recap
+-- FINAL-SUMMARY.md (NEW) This file
+-- test-mcp-servers.ps1 (11K) Test suite
+-- quick-start-mcp.ps1 (8.2K) Setup script
+-- mcp-servers.json (UPD) 5 servers configured
```
**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%)
gortex : OK ✓ (C:\Users\270015376\Documents\gortex.exe found)
browser : OK ✓ (v1.2.29 available via npm)
config : OK ✓ (mcp-servers.json valid)
mysql : FAIL ✗ (Docker database not running)
vm : FAIL ✗ (VM not reachable at 192.168.100.10)
hyperv : WARN ⚠ (No admin privileges to check)
snapshots : WARN ⚠ (No admin privileges to check)
gortex : OK [X] (C:\Users\270015376\Documents\gortex.exe found)
browser : OK [X] (v1.2.29 available via npm)
config : OK [X] (mcp-servers.json valid)
mysql : FAIL [ ] (Docker database not running)
vm : FAIL [ ] (VM not reachable at 192.168.100.10)
hyperv : WARN [!] (No admin privileges to check)
snapshots : WARN [!] (No admin privileges to check)
```
### What's Working
@@ -94,16 +94,16 @@ claude # Start Claude Code with MCP servers
```
flask-shopdb/.claude/
├── INDEX-MCP-DOCS.md ← START HERE (master index)
├── README-MCP-SETUP.md ← Quick reference
├── MCP-INTEGRATION-GUIDE.md ← Complete guide with workflows
├── VM-SNAPSHOT-GUIDE.md ← Snapshot management
├── setup-vm-ssh.md ← SSH configuration
├── mcp-servers.json ← Configuration file
├── test-mcp-servers.ps1 ← Test suite
├── quick-start-mcp.ps1 ← Setup automation
├── enable-vm-ssh.ps1 ← VM SSH enablement
└── SETUP-COMPLETE-SUMMARY.md ← This file
+-- INDEX-MCP-DOCS.md <- START HERE (master index)
+-- README-MCP-SETUP.md <- Quick reference
+-- MCP-INTEGRATION-GUIDE.md <- Complete guide with workflows
+-- VM-SNAPSHOT-GUIDE.md <- Snapshot management
+-- setup-vm-ssh.md <- SSH configuration
+-- mcp-servers.json <- Configuration file
+-- test-mcp-servers.ps1 <- Test suite
+-- quick-start-mcp.ps1 <- Setup automation
+-- enable-vm-ssh.ps1 <- VM SSH enablement
+-- SETUP-COMPLETE-SUMMARY.md <- This file
```
---

View File

@@ -7,41 +7,41 @@
## 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:
✓ gortex : OK (Project management ready)
✓ mysql : OK (Database running and reachable)
✓ browser : OK (Web automation package available)
✓ config : OK (Configuration valid)
✗ vm : FAIL (VM not started)
⚠ hyperv : WARN (Need admin to check VMs)
⚠ snapshots : WARN (Need admin to manage snapshots)
[X] gortex : OK (Project management ready)
[X] mysql : OK (Database running and reachable)
[X] browser : OK (Web automation package available)
[X] config : OK (Configuration valid)
[ ] vm : FAIL (VM not started)
[!] hyperv : WARN (Need admin to check VMs)
[!] snapshots : WARN (Need admin to manage snapshots)
```
---
## What's Working Now
### ✓ Gortex (Project Management)
### [X] Gortex (Project Management)
- **Status:** Installed and ready
- **Location:** C:\Users\270015376\Documents\gortex.exe
- **Test:** Ask Claude "List all tasks in the current project"
### ✓ MySQL (Database Access)
### [X] MySQL (Database Access)
- **Status:** Running and healthy
- **Container:** flask-shopdb-db-1 (MySQL 8.4.11)
- **Connection:** 127.0.0.1:3306
- **Database:** shopdb_flask
- **Test:** Ask Claude "Show me the endpoints table schema"
### ✓ Browser (Web Automation)
### [X] Browser (Web Automation)
- **Status:** Package available via npm
- **Version:** 1.2.29
- **Package:** @agent-infra/mcp-server-browser
- **Test:** Ask Claude "Take a screenshot of https://localhost:5001"
### ✓ Configuration
### [X] Configuration
- **Status:** Valid JSON configuration
- **Location:** .claude/mcp-servers.json
- **Servers:** 4 configured (gortex, mysql, browser, vm)
@@ -95,16 +95,16 @@ Try these commands in Claude Code:
```
"List all tasks in the current project"
→ Tests Gortex project management
-> Tests Gortex project management
"Show me the first 5 endpoints in the database"
→ Tests MySQL database access
-> Tests MySQL database access
"What tables exist in the database?"
→ Tests MySQL schema inspection
-> Tests MySQL schema inspection
"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 |
|----------|-----------|-------------------|
| Database development | ✓ Yes | mysql |
| API development | ✓ Yes | mysql |
| Frontend development | ✓ Yes | browser |
| UI testing | ✓ Yes | browser + mysql |
| Project tracking | ✓ Yes | gortex |
| Agent deployment | ✗ No (VM needed) | vm + mysql |
| End-to-end testing | ✗ No (VM needed) | vm + mysql + browser |
| Snapshot management | △ Manual | (admin for scripting) |
| Database development | [X] Yes | mysql |
| API development | [X] Yes | mysql |
| Frontend development | [X] Yes | browser |
| UI testing | [X] Yes | browser + mysql |
| Project tracking | [X] Yes | gortex |
| Agent deployment | [ ] No (VM needed) | vm + mysql |
| End-to-end testing | [ ] No (VM needed) | vm + mysql + browser |
| Snapshot management | [~] Manual | (admin for scripting) |
**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:
- ✅ `.mcp.json` - MCP server configurations (gortex, mysql, browser, vm, coordinator)
- ✅ `.claude/settings.json` - Auto-enables project MCP servers + SessionEnd hook
- ✅ `start-dev.cmd` - Updated with `NODE_TLS_REJECT_UNAUTHORIZED=0` for Vite
- ✅ `stop-dev.cmd` - Auto-runs when Claude Code session closes
- [X] `.mcp.json` - MCP server configurations (gortex, mysql, browser, vm, coordinator)
- [X] `.claude/settings.json` - Auto-enables project MCP servers + SessionEnd hook
- [X] `start-dev.cmd` - Updated with `NODE_TLS_REJECT_UNAUTHORIZED=0` for Vite
- [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:**
- ✅ gortex (C:\Users\270015376\Documents\gortex.exe)
- ✅ mysql (database access)
- ✅ browser (browser automation)
- ✅ vm / vm-shopfloor (SSH to test VM)
- ✅ coordinator (multi-agent collaboration)
- [X] gortex (C:\Users\270015376\Documents\gortex.exe)
- [X] mysql (database access)
- [X] browser (browser automation)
- [X] vm / vm-shopfloor (SSH to test VM)
- [X] coordinator (multi-agent collaboration)
**Auto-loaded MCP servers:**
- github, shopdb, amber (from user config)
@@ -60,21 +60,21 @@ claude
## What's Automated
### On Dev Environment Start (`./start-dev.cmd`):
- ✅ MCP Coordinator daemon auto-starts (if not already running)
- ✅ Flask API (Docker)
- ✅ MySQL DB (Docker)
- ✅ Vite dev server (with TLS fix)
- [X] MCP Coordinator daemon auto-starts (if not already running)
- [X] Flask API (Docker)
- [X] MySQL DB (Docker)
- [X] Vite dev server (with TLS fix)
### On Claude Code Session Start:
- ✅ All approved MCP servers auto-connect
- ✅ `enableAllProjectMcpServers: true` loads project servers
- [X] All approved MCP servers auto-connect
- [X] `enableAllProjectMcpServers: true` loads project servers
### On Session Close:
- ✅ `./stop-dev.cmd` runs automatically (SessionEnd hook)
- ✅ MCP Coordinator daemon stops
- ✅ Docker containers stop
- ✅ Vite dev server stops
- ✅ No manual cleanup needed
- [X] `./stop-dev.cmd` runs automatically (SessionEnd hook)
- [X] MCP Coordinator daemon stops
- [X] Docker containers stop
- [X] Vite dev server stops
- [X] No manual cleanup needed
---
@@ -117,9 +117,9 @@ docker ps --filter "name=flask-shopdb"
```bash
# Check all services at once
docker ps --filter "name=flask-shopdb" && \
curl -s http://localhost:5173 > /dev/null && echo "✅ Vite OK" && \
curl -sk https://localhost:5001/api/auth/me 2>&1 | grep -q "Authorization" && echo "✅ Flask OK" && \
curl -s http://localhost:3100/health > /dev/null && echo "✅ Coordinator 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 "[X] Flask 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)
#### ☐ Configure Audit Log Retention (4 hours)
#### [ ] Configure Audit Log Retention (4 hours)
**Owner:** Developer + Admin
**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
- Backup size reduction: 60-80%
#### ☐ Configure Endpoint Event Retention (8 hours)
#### [ ] Configure Endpoint Event Retention (8 hours)
**Owner:** Developer
**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;`
- Should stabilize under 500K rows
#### ☐ Configure Docker Log Rotation (2 hours)
#### [ ] Configure Docker Log Rotation (2 hours)
**Owner:** Admin
**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)
#### ☐ Enable Backup Profile (6 hours)
#### [ ] Enable Backup Profile (6 hours)
**Owner:** Admin + Developer
**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`
6. Document restore time and any issues
#### ☐ Add Disk Space Monitoring (4 hours)
#### [ ] Add Disk Space Monitoring (4 hours)
**Owner:** Admin
**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)
#### ☐ Downgrade Python to 3.11 LTS (8 hours)
#### [ ] Downgrade Python to 3.11 LTS (8 hours)
**Owner:** Developer
**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)
#### ☐ Endpoint Health Dashboard
#### [ ] Endpoint Health Dashboard
```sql
-- Check endpoint reporting status
SELECT
@@ -293,7 +293,7 @@ WHERE assettype = 'endpoint';
```
**Alert if:** pct_healthy < 95%
#### ☐ Backup Verification
#### [ ] Backup Verification
```bash
# Check last backup timestamp
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
#### ☐ Docker Service Health
#### [ ] Docker Service Health
```bash
docker ps --filter name=shopdb --format "table {{.Names}}\t{{.Status}}\t{{.State}}"
```
**Alert if:** Any service not "Up" and "healthy"
#### ☐ Database Disk Space
#### [ ] Database Disk Space
```powershell
# Quick check
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)
#### ☐ Critical Application Errors
#### [ ] Critical Application Errors
```bash
# Check for OperationalError, IntegrityError, 500 responses
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)
#### ☐ Audit Log Size
#### [ ] Audit Log Size
```sql
SELECT
COUNT(*) as total_rows,
@@ -339,7 +339,7 @@ FROM auditlogs;
```
**Alert if:** total_rows > 1M and retention_days > 90
#### ☐ Failed Login Attempts
#### [ ] Failed Login Attempts
```sql
SELECT
username,
@@ -353,7 +353,7 @@ LIMIT 20;
```
**Alert if:** Any account with >10 failed attempts in 24 hours
#### ☐ Endpoint Events Accumulation
#### [ ] Endpoint Events Accumulation
```sql
SELECT
COUNT(*) as total_events,
@@ -363,14 +363,14 @@ FROM endpointevents;
```
**Alert if:** total_events > 500K
#### ☐ Security Advisories
#### [ ] Security Advisories
```bash
cd /path/to/shopdb
python scripts/scan_sbom.py sbom.cdx.json
```
**Review:** HIGH severity findings in shipped components (exclude dev-only)
#### ☐ Database Performance
#### [ ] Database Performance
```sql
-- Check for slow queries (if slow query log enabled)
SELECT
@@ -387,7 +387,7 @@ LIMIT 10;
### Monthly Checks (1 hour)
#### ☐ PAT Usage Audit
#### [ ] PAT Usage Audit
```sql
SELECT
t.tokenid,
@@ -403,13 +403,13 @@ ORDER BY days_since_use DESC;
```
**Action:** Revoke stale tokens (not used in 90+ days)
#### ☐ Certificate Expiration Check
#### [ ] Certificate Expiration Check
```bash
openssl x509 -in ./certs/server.crt -noout -enddate
```
**Alert if:** <60 days until expiry
#### ☐ Backup Restoration Test
#### [ ] Backup Restoration Test
```bash
# Restore to test environment
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
#### ☐ Plugin Version Audit
#### [ ] Plugin Version Audit
```bash
# Compare plugin registry to disk versions
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
#### ☐ Configuration Drift Review
#### [ ] Configuration Drift Review
```bash
# Compare .env files across sites
# dev, ops, prod should have consistent:
@@ -448,7 +448,7 @@ for name, plugin in plugin_registry.plugins.items():
### Quarterly Checks (4 hours)
#### ☐ Full DR Drill
#### [ ] Full DR Drill
**Scenario:** Complete site loss, restore from backup
**Steps:**
@@ -465,7 +465,7 @@ for name, plugin in plugin_registry.plugins.items():
**Target:** Full recovery in <2 hours
#### ☐ Security Log Audit
#### [ ] Security Log Audit
```sql
-- Check for anomalous patterns
SELECT
@@ -486,7 +486,7 @@ ORDER BY action_count DESC;
```
**Review:** Off-hours access, bulk deletes, permission changes
#### ☐ Dependency Vulnerability Scan
#### [ ] Dependency Vulnerability Scan
```bash
# Run OSV.dev scan
cd /path/to/shopdb
@@ -503,49 +503,49 @@ grep -E "HIGH|CRITICAL" vuln-report.txt | grep -v "dev-only"
### Critical Alerts (immediate notification)
#### ☐ Database Disk >85% Full
#### [ ] Database Disk >85% Full
**Method:** Daily disk monitor script (see Priority 2)
**Recipient:** Admin + Developer
**Action:** Implement retention policies or expand disk
#### ☐ Host Disk >85% Full
#### [ ] Host Disk >85% Full
**Method:** Daily disk monitor script
**Recipient:** Admin
**Action:** Clean logs, check Docker volumes, expand disk
#### ☐ Backup Failed or >24h Old
#### [ ] Backup Failed or >24h Old
**Method:** Check restic last snapshot timestamp
**Recipient:** Admin
**Action:** Investigate backup service logs, verify disk space
#### ☐ >10 Endpoints Offline >48 Hours
#### [ ] >10 Endpoints Offline >48 Hours
**Method:** Query assets table daily
**Recipient:** Admin
**Action:** Check network connectivity, agent service status
#### ☐ Application Error Rate >1% of Requests
#### [ ] Application Error Rate >1% of Requests
**Method:** Parse gunicorn access logs
**Recipient:** Developer
**Action:** Check Flask logs for exceptions, review recent changes
#### ☐ Certificate Expiring in <30 Days
#### [ ] Certificate Expiring in <30 Days
**Method:** Daily openssl check
**Recipient:** Admin
**Action:** Generate new self-signed cert or renew
### Warning Alerts (daily summary)
#### ☐ Audit Log >1M Rows Without Retention
#### [ ] Audit Log >1M Rows Without Retention
**Method:** Daily SQL query
**Recipient:** Admin
**Action:** Configure audit log purge job
#### ☐ Endpoint Events >500K Rows
#### [ ] Endpoint Events >500K Rows
**Method:** Daily SQL query
**Recipient:** Admin
**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
**Recipient:** Admin
**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
#### ☐ Create Backup
#### [ ] Create Backup
```bash
# 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
```
#### ☐ Test Bundle on Pilot Site
#### [ ] Test Bundle on Pilot Site
- Deploy to ops environment first
- Verify all services start (db, migrate, api)
- Check migration logs for errors
- Spot-check core features
- Monitor for 24 hours
#### ☐ Review Migration Chain
#### [ ] Review Migration Chain
```bash
# Check what migrations will run
docker compose run --rm api flask db heads
docker compose run --rm api flask db current
```
#### ☐ Verify Disk Space
#### [ ] Verify Disk Space
```bash
# Ensure enough space for migration and new code
df -h /var/lib/docker
@@ -716,13 +716,13 @@ docker compose -f docker-compose.prebuilt.yml restart api
### Post-Deployment Verification
#### ☐ All Services Healthy
#### [ ] All Services Healthy
```bash
docker ps --filter name=shopdb
# Should show: db (healthy), api (healthy), migrate (exited 0)
```
#### ☐ Endpoints Checking In
#### [ ] Endpoints Checking In
```sql
SELECT COUNT(*) FROM assets
WHERE assettype='endpoint'
@@ -730,19 +730,19 @@ WHERE assettype='endpoint'
```
**Expect:** >95% of endpoints
#### ☐ No Critical Errors in Logs
#### [ ] No Critical Errors in Logs
```bash
docker compose logs --since 1h api | grep -i critical
```
**Expect:** Empty or expected warnings only
#### ☐ UI Loads and Functions
#### [ ] UI Loads and Functions
- Login works
- Asset search returns results
- Can navigate to endpoint details
- Scripts tab loads
#### ☐ Document Deployment
#### [ ] Document Deployment
```markdown
## Deployment Log: 2026-09-11

View File

@@ -371,9 +371,9 @@ curl -X POST $SLACK_WEBHOOK_URL -d '{
## Recommended Setup for ShopDB Team
### Phase 1: Minimal (This Week)
1. ✅ Create `memory/active_work.md` (5 min)
2. ✅ Adopt branch naming: `<user>/<ai-tool>/<feature>` (0 min)
3. ✅ Add AI commit prefix: `[AI: tool] message` (0 min)
1. [X] Create `memory/active_work.md` (5 min)
2. [X] Adopt branch naming: `<user>/<ai-tool>/<feature>` (0 min)
3. [X] Add AI commit prefix: `[AI: tool] message` (0 min)
### Phase 2: Enhanced (Next Sprint)
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)
## Step 1: Create M365 Enterprise Application
1. Go to Azure AD / Entra ID → Enterprise Applications
2. New Application → Create your own
1. Go to Azure AD / Entra ID -> Enterprise Applications
2. New Application -> Create your own
3. Name: "ShopDB Production"
4. Click Assign users and groups
## 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:
- Identifier (Entity ID): `https://shopdb.yourdomain.com`
- 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
1. Login to ShopDB as admin
2. Settings → Authentication
2. Settings -> Authentication
3. Enable SAML SSO toggle
4. Paste Federation Metadata URL from Azure
5. Set Entity ID: `https://shopdb.yourdomain.com`
@@ -1344,7 +1344,7 @@ If complete failure:
2. **Plugin Hooks for Auth**
- `get_authentication_providers()` - Contribute new auth methods
- `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
3. **Core SAML Implementation**
@@ -1420,7 +1420,7 @@ If complete failure:
## Success Criteria
✅ **Functional Requirements:**
[X] **Functional Requirements:**
- [ ] M365 SAML login works end-to-end
- [ ] Auto-user-creation provisions users correctly
- [ ] Group-based admin assignment works
@@ -1429,7 +1429,7 @@ If complete failure:
- [ ] Plugin can contribute custom auth provider
- [ ] Plugin can extend user provisioning
✅ **Non-Functional Requirements:**
[X] **Non-Functional Requirements:**
- [ ] No breaking changes to existing auth
- [ ] Follows ShopDB plugin architecture patterns
- [ ] Works in air-gapped deployment
@@ -1437,7 +1437,7 @@ If complete failure:
- [ ] Comprehensive error handling
- [ ] Audit logging for all auth events
✅ **Documentation:**
[X] **Documentation:**
- [ ] Admin setup guide complete
- [ ] Plugin extension guide complete
- [ ] 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
### Good Engagement
- ✅ Coordinator used before every file edit
- ✅ Gortex used for architectural queries
- ✅ Skills invoked when task matches their domain
- ✅ Workflows proposed for complex tasks
- [X] Coordinator used before every file edit
- [X] Gortex used for architectural queries
- [X] Skills invoked when task matches their domain
- [X] Workflows proposed for complex tasks
### Poor Engagement
- ❌ Editing files without announce_work
- ❌ Using grep when Gortex would be more accurate
- ❌ Creating charts without dataviz skill guidance
- ❌ Manual sequential analysis when workflow would parallelize
- [ ] Editing files without announce_work
- [ ] Using grep when Gortex would be more accurate
- [ ] Creating charts without dataviz skill guidance
- [ ] Manual sequential analysis when workflow would parallelize
---

View File

@@ -148,11 +148,11 @@ Contact: [internal security team email]
## What's Already Good:
✅ Strong .gitignore (lines 64-86 cover most credential patterns)
✅ Darkwing scanning on PRs
✅ Air-gapped deployment (secrets never in GitHub)
✅ ADR-016: Device tokens instead of user credentials for kiosks
✅ Collector tokens are 64-char hashes, not readable passwords
[X] Strong .gitignore (lines 64-86 cover most credential patterns)
[X] Darkwing scanning on PRs
[X] Air-gapped deployment (secrets never in GitHub)
[X] ADR-016: Device tokens instead of user credentials for kiosks
[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
- Secret scanning alerts: (once enabled)
- Darkwing findings: Security → Code scanning
- Dependabot alerts: Security → Dependabot
- Darkwing findings: Security -> Code scanning
- 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
**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
/c/Users/270015376/Documents/gortex.exe status
# 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
@@ -109,7 +109,7 @@ Based on our typical workflow:
- With Gortex: 1-2K tokens (edit_symbol)
- **Savings: ~60-70%**
**Merging wilm → wj:**
**Merging wilm -> wj:**
- Current: 8-12K tokens (read conflicts, understand context)
- With Gortex: 3-5K tokens (diff_context tool)
- **Savings: ~50-60%**
@@ -155,10 +155,10 @@ If working, you'll see Gortex tools available via ToolSearch.
## Why This Matters
Instead of me reading entire files to understand code, I can:
1. Ask Gortex "explore fleet alerts" → get relevant symbols
2. Query "what calls get_fleet_alerts" → see usage
3. Edit symbols directly by ID → no file reading
4. Analyze blast radius before changes → prevent bugs
5. Get merge context → easier conflict resolution
1. Ask Gortex "explore fleet alerts" -> get relevant symbols
2. Query "what calls get_fleet_alerts" -> see usage
3. Edit symbols directly by ID -> no file reading
4. Analyze blast radius before changes -> prevent bugs
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.

View File

@@ -14,7 +14,7 @@ Quick guide to understanding Hyper-V permissions and why they don't matter for M
## What This Affects
### ✓ Still Works (No Admin Needed)
### [X] Still Works (No Admin Needed)
| 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.
### ✗ Doesn't Work (Need Group Membership)
### [ ] Doesn't Work (Need Group Membership)
| Feature | Why It Fails | Workaround |
|---------|-------------|-----------|
@@ -195,20 +195,20 @@ The following docs have been updated to clarify admin requirements:
**With VM MCP, Claude can:**
```
✓ Execute commands on VM
✓ Copy files to/from VM
✓ Read logs from VM
✓ Check service status
✓ Install/configure software
✓ Test agent deployment
✓ All via SSH - no Hyper-V perms needed!
[X] Execute commands on VM
[X] Copy files to/from VM
[X] Read logs from VM
[X] Check service status
[X] Install/configure software
[X] Test agent deployment
[X] All via SSH - no Hyper-V perms needed!
```
**Claude cannot (without Hyper-V perms):**
```
✗ Create snapshots via PowerShell
✗ Restore snapshots via script
✗ Query VM state via Get-VM
[ ] Create snapshots via PowerShell
[ ] Restore snapshots via script
[ ] Query VM state via Get-VM
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 |
|------|--------------|------------|
| VM MCP (SSH) | ✓ Works | ✓ Works |
| Start/stop VM | ✓ GUI | ✓ GUI or PowerShell |
| Create snapshot | ✓ GUI | ✓ GUI or PowerShell |
| Restore snapshot | ✓ GUI | ✓ GUI or PowerShell |
| View VM status | ✓ GUI | ✓ GUI or PowerShell |
| Script automation | ✗ Can't | ✓ Can |
| VM MCP (SSH) | [X] Works | [X] Works |
| Start/stop VM | [X] GUI | [X] GUI or PowerShell |
| Create snapshot | [X] GUI | [X] GUI or PowerShell |
| Restore snapshot | [X] GUI | [X] GUI or PowerShell |
| View VM status | [X] GUI | [X] GUI or PowerShell |
| Script automation | [ ] Can't | [X] Can |
**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/
└── .claude/
├── INDEX-MCP-DOCS.md ← This file (documentation index)
├── README-MCP-SETUP.md ← Quick reference
├── MCP-INTEGRATION-GUIDE.md ← Complete guide
├── VM-SNAPSHOT-GUIDE.md ← Snapshot management
├── setup-vm-ssh.md ← SSH setup guide
├── mcp-servers.json ← Configuration file
├── test-mcp-servers.ps1 ← Test suite
├── quick-start-mcp.ps1 ← Setup automation
└── enable-vm-ssh.ps1 ← VM SSH enablement
+-- .claude/
+-- INDEX-MCP-DOCS.md <- This file (documentation index)
+-- README-MCP-SETUP.md <- Quick reference
+-- MCP-INTEGRATION-GUIDE.md <- Complete guide
+-- VM-SNAPSHOT-GUIDE.md <- Snapshot management
+-- setup-vm-ssh.md <- SSH setup guide
+-- mcp-servers.json <- Configuration file
+-- test-mcp-servers.ps1 <- Test suite
+-- quick-start-mcp.ps1 <- Setup automation
+-- enable-vm-ssh.ps1 <- VM SSH enablement
```
---

View File

@@ -20,26 +20,26 @@ mcp-coordinator supports two connection methods:
## Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Your PC │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Claude Code #1 │ │ Claude Code #2 │ │
│ │ (Session 1) │ │ (Session 2) │ │
│ └────────┬─────────┘ └────────┬─────────┘ │
│ │ │ │
│ │ MCP over HTTP │ MCP over HTTP│
│ │ (localhost:3100) │ │
│ └──────────────┬───────────────────┘ │
│ │ │
│ ┌────────▼──────────┐ │
│ │ mcp-coordinator │ │
│ │ (daemon) │ │
│ │ Port: 3100 │ │
│ │ MQTT: 1883 │ │
│ └───────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
+-------------------------------------------------------------+
| Your PC |
| |
| +------------------+ +------------------+ |
| | Claude Code #1 | | Claude Code #2 | |
| | (Session 1) | | (Session 2) | |
| +--------+---------+ +--------+---------+ |
| | | |
| | MCP over HTTP | MCP over HTTP|
| | (localhost:3100) | |
| +--------------+-------------------+ |
| | |
| +--------v----------+ |
| | mcp-coordinator | |
| | (daemon) | |
| | Port: 3100 | |
| | MQTT: 1883 | |
| +-------------------+ |
| |
+-------------------------------------------------------------+
```
**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
```
┌─────────────────────┐ ┌─────────────────────┐
│ Dev PC #1 │ │ Dev PC #2 │
│ (270015376) │ │ (coworker) │
│ │ │ │
│ Claude Code │ │ Cursor │
│ │ │ │ │ │
│ └─────────────┼────────┼───────┘ │
│ │ │ │
└─────────────────────┘ └─────────────────────┘
│ │
│ MCP over HTTP │
│ (LAN: 192.168.1.100:3100) │
└──────────────┬───────────────┘
│
┌─────────▼──────────┐
│ Shared PC or │
│ Dev Server │
│ │
│ mcp-coordinator │
│ Host: 0.0.0.0 │
│ Port: 3100 │
└────────────────────┘
+---------------------+ +---------------------+
| Dev PC #1 | | Dev PC #2 |
| (270015376) | | (coworker) |
| | | |
| Claude Code | | Cursor |
| | | | | |
| +-------------+--------+-------+ |
| | | |
+---------------------+ +---------------------+
| |
| MCP over HTTP |
| (LAN: 192.168.1.100:3100) |
+--------------+---------------+
|
+---------v----------+
| Shared PC or |
| Dev Server |
| |
| mcp-coordinator |
| Host: 0.0.0.0 |
| Port: 3100 |
+--------------------+
```
### Step 1: Set Up Shared Coordinator
@@ -186,7 +186,7 @@ Edit `~/.mcp-coordinator/config.json`:
{
"server": {
"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": {
"enabled": true,
"origins": ["*"] // Or specific IPs
@@ -422,15 +422,15 @@ http://127.0.0.1:3100/dashboard shows:
```
Active Agents (2)
├─ 270015376-operator-reports
│ └─ Files: plugins/endpoints/api/routes.py
│ └─ Status: Working
│ └─ Since: 2 minutes ago
│
└─ 270015376-fleet-alerts
└─ Files: plugins/notifications/models/notification.py
└─ Status: Working
└─ Since: 1 minute ago
+- 270015376-operator-reports
| +- Files: plugins/endpoints/api/routes.py
| +- Status: Working
| +- Since: 2 minutes ago
|
+- 270015376-fleet-alerts
+- Files: plugins/notifications/models/notification.py
+- Status: Working
+- Since: 1 minute ago
Consultations (0)
No conflicts detected
@@ -443,13 +443,13 @@ No conflicts detected
```
You: "Also update the route handler"
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: [post_to_thread]
Claude: "Consulting... Opening thread #1"
# 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): [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)
**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 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: "Consulting with other agent... They're adding fleet alerts, I'm fixing operator reports. Different functions."
Claude: [Waits for response]
@@ -326,13 +326,13 @@ essaim run swarm --agents 3 -p ~/flask-shopdb
### For Air-Gapped Environment (ADR-004)
✅ **Works perfectly:**
[X] **Works perfectly:**
- Runs entirely locally (no internet required)
- SQLite database (no external DB)
- MQTT broker embedded (no external service)
- Dashboard is local HTTP (no cloud)
✅ **Team mode on LAN:**
[X] **Team mode on LAN:**
- Runs on internal network only
- No external connections
- 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"
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: "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 |
|------|--------|-------|
| **Claude Code** | ✅ Perfect | Native MCP support |
| **Gortex** | ✅ Compatible | Both are MCP servers, no conflict |
| **MySQL MCP** | ✅ Compatible | Separate concern |
| **Browser MCP** | ✅ Compatible | Separate concern |
| **GitHub MCP** | ✅ Compatible | Can coordinate PR creation |
| **Claude Code** | [X] Perfect | Native MCP support |
| **Gortex** | [X] Compatible | Both are MCP servers, no conflict |
| **MySQL MCP** | [X] Compatible | Separate concern |
| **Browser MCP** | [X] Compatible | Separate concern |
| **GitHub MCP** | [X] Compatible | Can coordinate PR creation |
### 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 2): [Announces] "Reviewing plugins/endpoints/"
→ No conflict, both proceed
-> No conflict, both proceed
Claude (Session 1): [Gortex] Finds code patterns
Claude (Session 1): [Coordinator] Announces intent to fix
@@ -631,13 +631,13 @@ Based on your `.claude/AI-COLLABORATION.md` proposal:
### Immediate (Today):
1. ✅ Read this evaluation
2. ⏳ Install mcp-coordinator: `npm install -g mcp-coordinator`
3. ⏳ Run init: `mcp-coordinator init`
4. ⏳ Start daemon: `mcp-coordinator server start --daemon`
5. ⏳ Add to `.claude/mcp-servers.json`
6. ⏳ Restart Claude Code
7. ⏳ Test: `coordinator_status()` in Claude
1. [X] Read this evaluation
2. [WAIT] Install mcp-coordinator: `npm install -g mcp-coordinator`
3. [WAIT] Run init: `mcp-coordinator init`
4. [WAIT] Start daemon: `mcp-coordinator server start --daemon`
5. [WAIT] Add to `.claude/mcp-servers.json`
6. [WAIT] Restart Claude Code
7. [WAIT] Test: `coordinator_status()` in Claude
**Time:** 5-10 minutes

View File

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

View File

@@ -237,7 +237,7 @@ Claude:
9. [Wait 5s]
10. [SSH: Check tray] Get-Process shopdb-endpoint-tray... Running
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 |
|-------------|--------|------------------|
| OpenSSH Server installed | ⏳ | `Get-WindowsCapability -Online -Name OpenSSH.Server*` |
| SSH service running | ⏳ | `Get-Service sshd` |
| Port 22 open in firewall | ⏳ | `Get-NetFirewallRule -Name sshd` |
| User has password set | ⏳ | `net user ShopFloor` |
| Network connectivity | ✅ | `arp -a` shows 192.168.100.10 |
| Internal network configured | ✅ | VM has 192.168.100.10 |
| OpenSSH Server installed | [WAIT] | `Get-WindowsCapability -Online -Name OpenSSH.Server*` |
| SSH service running | [WAIT] | `Get-Service sshd` |
| Port 22 open in firewall | [WAIT] | `Get-NetFirewallRule -Name sshd` |
| User has password set | [WAIT] | `net user ShopFloor` |
| Network connectivity | [X] | `arp -a` shows 192.168.100.10 |
| Internal network configured | [X] | VM has 192.168.100.10 |
---

View File

@@ -55,12 +55,14 @@ export default [
path: 'models',
name: 'model-catalog-models',
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
</router-link>
<router-link
<!-- TODO: Operating Systems tab should be added by computers plugin -->
<!-- <router-link
:to="{ name: 'model-catalog-os' }"
class="tab"
:class="{ active: $route.name === 'model-catalog-os' }"
>
Operating Systems
</router-link>
</router-link> -->
</div>
<div class="tab-content">