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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -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%)**
|
||||
|
||||
|
||||
@@ -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"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.**
|
||||
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -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?"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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')
|
||||
// }
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user