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:
|
New structure:
|
||||||
```
|
```
|
||||||
.claude/
|
.claude/
|
||||||
├── INDEX.md # Project navigation (referenced in settings.json)
|
+-- INDEX.md # Project navigation (referenced in settings.json)
|
||||||
├── QUICK-REFERENCE.md # Commands and shortcuts
|
+-- QUICK-REFERENCE.md # Commands and shortcuts
|
||||||
├── settings.json # Claude Code configuration
|
+-- settings.json # Claude Code configuration
|
||||||
├── mcp-servers.json # MCP server configuration
|
+-- mcp-servers.json # MCP server configuration
|
||||||
│
|
|
|
||||||
├── setup/ (17 files) # Setup guides and scripts
|
+-- setup/ (17 files) # Setup guides and scripts
|
||||||
│ ├── README.md
|
| +-- README.md
|
||||||
│ ├── MCP-QUICK-START.md # Consolidated MCP setup guide
|
| +-- MCP-QUICK-START.md # Consolidated MCP setup guide
|
||||||
│ ├── MCP-INTEGRATION-GUIDE.md
|
| +-- MCP-INTEGRATION-GUIDE.md
|
||||||
│ ├── MCP-COORDINATOR-*.md (2 files)
|
| +-- MCP-COORDINATOR-*.md (2 files)
|
||||||
│ ├── GORTEX-MCP-SETUP.md
|
| +-- GORTEX-MCP-SETUP.md
|
||||||
│ ├── GITHUB-MCP-SETUP.md
|
| +-- GITHUB-MCP-SETUP.md
|
||||||
│ ├── INDEX-MCP-DOCS.md
|
| +-- INDEX-MCP-DOCS.md
|
||||||
│ ├── VM-*.md (2 files)
|
| +-- VM-*.md (2 files)
|
||||||
│ ├── HYPER-V-SETUP.md
|
| +-- HYPER-V-SETUP.md
|
||||||
│ └── Scripts (.ps1, .cmd)
|
| +-- Scripts (.ps1, .cmd)
|
||||||
│
|
|
|
||||||
├── plans/ (5 files) # Feature plans and protocols
|
+-- plans/ (5 files) # Feature plans and protocols
|
||||||
│ ├── README.md
|
| +-- README.md
|
||||||
│ ├── SAML-FEATURE-PLAN.md
|
| +-- SAML-FEATURE-PLAN.md
|
||||||
│ ├── security-improvements.md
|
| +-- security-improvements.md
|
||||||
│ ├── TOOL-ENGAGEMENT-PROTOCOL.md
|
| +-- TOOL-ENGAGEMENT-PROTOCOL.md
|
||||||
│ └── AI-COLLABORATION.md
|
| +-- AI-COLLABORATION.md
|
||||||
│
|
|
|
||||||
├── maintenance/ (4 files) # Operations and maintenance
|
+-- maintenance/ (4 files) # Operations and maintenance
|
||||||
│ ├── README.md
|
| +-- README.md
|
||||||
│ ├── MAINTENANCE-DEPLOYMENT-CHECKLIST.md
|
| +-- MAINTENANCE-DEPLOYMENT-CHECKLIST.md
|
||||||
│ ├── DEV-STARTUP-CHECKLIST.md
|
| +-- DEV-STARTUP-CHECKLIST.md
|
||||||
│ └── MAINTENANCE-FOOTPRINT-REPORT.html
|
| +-- MAINTENANCE-FOOTPRINT-REPORT.html
|
||||||
│
|
|
|
||||||
├── archived/ (7 files) # Historical documentation
|
+-- archived/ (7 files) # Historical documentation
|
||||||
│ ├── README.md
|
| +-- README.md
|
||||||
│ ├── FINAL-SUMMARY.md
|
| +-- FINAL-SUMMARY.md
|
||||||
│ ├── SETUP-COMPLETE-SUMMARY.md
|
| +-- SETUP-COMPLETE-SUMMARY.md
|
||||||
│ ├── STATUS.md
|
| +-- STATUS.md
|
||||||
│ ├── ACTIVATE-HYPERV-PERMS.md
|
| +-- ACTIVATE-HYPERV-PERMS.md
|
||||||
│ ├── MCP-SETUP-GUIDE.md
|
| +-- MCP-SETUP-GUIDE.md
|
||||||
│ ├── README-MCP-SETUP.md
|
| +-- README-MCP-SETUP.md
|
||||||
│ ├── DOCKER-DEPLOYMENT-COMPLETE.md
|
| +-- DOCKER-DEPLOYMENT-COMPLETE.md
|
||||||
│ └── DARKWING-FINDINGS.md
|
| +-- DARKWING-FINDINGS.md
|
||||||
│
|
|
|
||||||
├── skills/ (5 files) # Claude Code automation skills
|
+-- skills/ (5 files) # Claude Code automation skills
|
||||||
└── workflows/ (1 file) # Security audit workflow
|
+-- workflows/ (1 file) # Security audit workflow
|
||||||
```
|
```
|
||||||
|
|
||||||
**Consolidations:**
|
**Consolidations:**
|
||||||
- MCP-SETUP-GUIDE.md + README-MCP-SETUP.md → MCP-QUICK-START.md
|
- MCP-SETUP-GUIDE.md + README-MCP-SETUP.md -> MCP-QUICK-START.md
|
||||||
- HYPER-V-PERMISSIONS.md + ACTIVATE-HYPERV-PERMS.md → HYPER-V-SETUP.md (kept more detailed version)
|
- HYPER-V-PERMISSIONS.md + ACTIVATE-HYPERV-PERMS.md -> HYPER-V-SETUP.md (kept more detailed version)
|
||||||
|
|
||||||
### 4. Organized Root Documentation
|
### 4. Organized Root Documentation
|
||||||
|
|
||||||
@@ -133,11 +133,11 @@ Updated `docker_prebuilt_approach.md` memory file to reflect new path:
|
|||||||
- `report.md` (empty)
|
- `report.md` (empty)
|
||||||
|
|
||||||
**Moved:**
|
**Moved:**
|
||||||
- 17 files from `.claude/` → `.claude/setup/`
|
- 17 files from `.claude/` -> `.claude/setup/`
|
||||||
- 5 files from `.claude/` → `.claude/plans/`
|
- 5 files from `.claude/` -> `.claude/plans/`
|
||||||
- 4 files from `.claude/` → `.claude/maintenance/`
|
- 4 files from `.claude/` -> `.claude/maintenance/`
|
||||||
- 7 files from `.claude/` and root → `.claude/archived/`
|
- 7 files from `.claude/` and root -> `.claude/archived/`
|
||||||
- 5 files from root → `docs/deployment/`
|
- 5 files from root -> `docs/deployment/`
|
||||||
|
|
||||||
**Created:**
|
**Created:**
|
||||||
- 6 README.md files (subdirectory navigation)
|
- 6 README.md files (subdirectory navigation)
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ You've been added to "Hyper-V Administrators" group, but permissions haven't tak
|
|||||||
|
|
||||||
## Current Status
|
## Current Status
|
||||||
|
|
||||||
**Group membership:** ✓ Added to "Hyper-V Administrators"
|
**Group membership:** [X] Added to "Hyper-V Administrators"
|
||||||
**Active permissions:** ✗ Not yet active in current session
|
**Active permissions:** [ ] Not yet active in current session
|
||||||
**Reason:** Group membership changes require logoff/logon to update security token
|
**Reason:** Group membership changes require logoff/logon to update security token
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -210,10 +210,10 @@ If no output, your token doesn't have the group yet. Log off and back on.
|
|||||||
|
|
||||||
## Timeline
|
## Timeline
|
||||||
|
|
||||||
1. **Now:** Group membership added ✓
|
1. **Now:** Group membership added [X]
|
||||||
2. **After logoff/logon:** Permissions active ✓
|
2. **After logoff/logon:** Permissions active [X]
|
||||||
3. **First test:** `Get-VM` should work ✓
|
3. **First test:** `Get-VM` should work [X]
|
||||||
4. **Full test:** Run test-mcp-servers.ps1 ✓
|
4. **Full test:** Run test-mcp-servers.ps1 [X]
|
||||||
|
|
||||||
**Total downtime:** ~2 minutes for logoff/logon
|
**Total downtime:** ~2 minutes for logoff/logon
|
||||||
|
|
||||||
|
|||||||
@@ -42,13 +42,13 @@ Complete summary of MCP server setup for ShopDB development with Hyper-V VM test
|
|||||||
### Test Results: 4/7 Passing (57%)
|
### Test Results: 4/7 Passing (57%)
|
||||||
|
|
||||||
```
|
```
|
||||||
✓ gortex - Project management ready
|
[X] gortex - Project management ready
|
||||||
✓ mysql - Database running (MySQL 8.4.11)
|
[X] mysql - Database running (MySQL 8.4.11)
|
||||||
✓ browser - Web automation ready
|
[X] browser - Web automation ready
|
||||||
✓ config - 5 MCP servers configured
|
[X] config - 5 MCP servers configured
|
||||||
✗ vm - VM not started (optional)
|
[ ] vm - VM not started (optional)
|
||||||
ℹ hyperv - No Hyper-V cmdlet access (GUI works)
|
[i] hyperv - No Hyper-V cmdlet access (GUI works)
|
||||||
ℹ snapshots - No cmdlet access (GUI works)
|
[i] snapshots - No cmdlet access (GUI works)
|
||||||
```
|
```
|
||||||
|
|
||||||
### What's Working Right Now
|
### What's Working Right Now
|
||||||
@@ -129,16 +129,16 @@ Complete summary of MCP server setup for ShopDB development with Hyper-V VM test
|
|||||||
### You Are NOT in "Hyper-V Administrators" Group
|
### You Are NOT in "Hyper-V Administrators" Group
|
||||||
|
|
||||||
**What still works:**
|
**What still works:**
|
||||||
- ✓ VM MCP (uses SSH, not Hyper-V API)
|
- [X] VM MCP (uses SSH, not Hyper-V API)
|
||||||
- ✓ Hyper-V Manager GUI (all features)
|
- [X] Hyper-V Manager GUI (all features)
|
||||||
- ✓ Start/stop VMs via GUI
|
- [X] Start/stop VMs via GUI
|
||||||
- ✓ Create/restore snapshots via GUI
|
- [X] Create/restore snapshots via GUI
|
||||||
- ✓ Connect to VM console
|
- [X] Connect to VM console
|
||||||
|
|
||||||
**What doesn't work:**
|
**What doesn't work:**
|
||||||
- ✗ PowerShell Hyper-V cmdlets (Get-VM, Checkpoint-VM, etc.)
|
- [ ] PowerShell Hyper-V cmdlets (Get-VM, Checkpoint-VM, etc.)
|
||||||
- ✗ Scripted snapshot automation
|
- [ ] Scripted snapshot automation
|
||||||
- ✗ Automated VM status checks
|
- [ ] Automated VM status checks
|
||||||
|
|
||||||
**Impact:** None for daily development. Only affects PowerShell automation.
|
**Impact:** None for daily development. Only affects PowerShell automation.
|
||||||
|
|
||||||
@@ -170,19 +170,19 @@ claude
|
|||||||
|
|
||||||
```
|
```
|
||||||
"List all tasks in the current project"
|
"List all tasks in the current project"
|
||||||
→ Tests Gortex
|
-> Tests Gortex
|
||||||
|
|
||||||
"Show me the first 5 endpoints in the database"
|
"Show me the first 5 endpoints in the database"
|
||||||
→ Tests MySQL
|
-> Tests MySQL
|
||||||
|
|
||||||
"What tables exist in the database?"
|
"What tables exist in the database?"
|
||||||
→ Tests MySQL schema
|
-> Tests MySQL schema
|
||||||
|
|
||||||
"Take a screenshot of https://localhost:5001"
|
"Take a screenshot of https://localhost:5001"
|
||||||
→ Tests Browser (requires ShopDB running)
|
-> Tests Browser (requires ShopDB running)
|
||||||
|
|
||||||
"What is the hostname of the VM?"
|
"What is the hostname of the VM?"
|
||||||
→ Tests VM SSH (requires VM running)
|
-> Tests VM SSH (requires VM running)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -324,7 +324,7 @@ MCP setup saved to persistent memory:
|
|||||||
|
|
||||||
## Success Metrics
|
## Success Metrics
|
||||||
|
|
||||||
**Setup phase: ✓ Complete**
|
**Setup phase: [X] Complete**
|
||||||
- [x] Documentation written (~3500 lines)
|
- [x] Documentation written (~3500 lines)
|
||||||
- [x] Scripts created and tested
|
- [x] Scripts created and tested
|
||||||
- [x] MCP servers configured
|
- [x] MCP servers configured
|
||||||
@@ -343,13 +343,13 @@ MCP setup saved to persistent memory:
|
|||||||
- [x] Snapshot GUI access (cmdlets N/A)
|
- [x] Snapshot GUI access (cmdlets N/A)
|
||||||
|
|
||||||
**Ready for:**
|
**Ready for:**
|
||||||
- ✓ Database development and testing
|
- [X] Database development and testing
|
||||||
- ✓ API development and testing
|
- [X] API development and testing
|
||||||
- ✓ Frontend development and testing
|
- [X] Frontend development and testing
|
||||||
- ✓ UI testing with screenshots
|
- [X] UI testing with screenshots
|
||||||
- ✓ Project task tracking
|
- [X] Project task tracking
|
||||||
- △ Agent deployment (VM needed)
|
- [~] Agent deployment (VM needed)
|
||||||
- △ End-to-end testing (VM needed)
|
- [~] End-to-end testing (VM needed)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -372,18 +372,18 @@ MCP setup saved to persistent memory:
|
|||||||
|
|
||||||
```
|
```
|
||||||
.claude/
|
.claude/
|
||||||
├── INDEX-MCP-DOCS.md (9.6K) Master index
|
+-- INDEX-MCP-DOCS.md (9.6K) Master index
|
||||||
├── README-MCP-SETUP.md (7.0K) Quick reference
|
+-- README-MCP-SETUP.md (7.0K) Quick reference
|
||||||
├── MCP-INTEGRATION-GUIDE.md (17K) Complete guide
|
+-- MCP-INTEGRATION-GUIDE.md (17K) Complete guide
|
||||||
├── VM-SNAPSHOT-GUIDE.md (10K) Snapshots
|
+-- VM-SNAPSHOT-GUIDE.md (10K) Snapshots
|
||||||
├── VM-USERS.md (NEW) User accounts
|
+-- VM-USERS.md (NEW) User accounts
|
||||||
├── HYPER-V-PERMISSIONS.md (NEW) Permissions
|
+-- HYPER-V-PERMISSIONS.md (NEW) Permissions
|
||||||
├── STATUS.md (NEW) Current status
|
+-- STATUS.md (NEW) Current status
|
||||||
├── SETUP-COMPLETE-SUMMARY.md (9.4K) Session recap
|
+-- SETUP-COMPLETE-SUMMARY.md (9.4K) Session recap
|
||||||
├── FINAL-SUMMARY.md (NEW) This file
|
+-- FINAL-SUMMARY.md (NEW) This file
|
||||||
├── test-mcp-servers.ps1 (11K) Test suite
|
+-- test-mcp-servers.ps1 (11K) Test suite
|
||||||
├── quick-start-mcp.ps1 (8.2K) Setup script
|
+-- quick-start-mcp.ps1 (8.2K) Setup script
|
||||||
└── mcp-servers.json (UPD) 5 servers configured
|
+-- mcp-servers.json (UPD) 5 servers configured
|
||||||
```
|
```
|
||||||
|
|
||||||
**Total:** 9 documentation files, 2 scripts, 1 config = ~3500 lines
|
**Total:** 9 documentation files, 2 scripts, 1 config = ~3500 lines
|
||||||
|
|||||||
@@ -30,13 +30,13 @@ Setup completed on 2026-09-09
|
|||||||
```
|
```
|
||||||
Overall: 3/7 tests passed (43%)
|
Overall: 3/7 tests passed (43%)
|
||||||
|
|
||||||
gortex : OK ✓ (C:\Users\270015376\Documents\gortex.exe found)
|
gortex : OK [X] (C:\Users\270015376\Documents\gortex.exe found)
|
||||||
browser : OK ✓ (v1.2.29 available via npm)
|
browser : OK [X] (v1.2.29 available via npm)
|
||||||
config : OK ✓ (mcp-servers.json valid)
|
config : OK [X] (mcp-servers.json valid)
|
||||||
mysql : FAIL ✗ (Docker database not running)
|
mysql : FAIL [ ] (Docker database not running)
|
||||||
vm : FAIL ✗ (VM not reachable at 192.168.100.10)
|
vm : FAIL [ ] (VM not reachable at 192.168.100.10)
|
||||||
hyperv : WARN ⚠ (No admin privileges to check)
|
hyperv : WARN [!] (No admin privileges to check)
|
||||||
snapshots : WARN ⚠ (No admin privileges to check)
|
snapshots : WARN [!] (No admin privileges to check)
|
||||||
```
|
```
|
||||||
|
|
||||||
### What's Working
|
### What's Working
|
||||||
@@ -94,16 +94,16 @@ claude # Start Claude Code with MCP servers
|
|||||||
|
|
||||||
```
|
```
|
||||||
flask-shopdb/.claude/
|
flask-shopdb/.claude/
|
||||||
├── INDEX-MCP-DOCS.md ← START HERE (master index)
|
+-- INDEX-MCP-DOCS.md <- START HERE (master index)
|
||||||
├── README-MCP-SETUP.md ← Quick reference
|
+-- README-MCP-SETUP.md <- Quick reference
|
||||||
├── MCP-INTEGRATION-GUIDE.md ← Complete guide with workflows
|
+-- MCP-INTEGRATION-GUIDE.md <- Complete guide with workflows
|
||||||
├── VM-SNAPSHOT-GUIDE.md ← Snapshot management
|
+-- VM-SNAPSHOT-GUIDE.md <- Snapshot management
|
||||||
├── setup-vm-ssh.md ← SSH configuration
|
+-- setup-vm-ssh.md <- SSH configuration
|
||||||
├── mcp-servers.json ← Configuration file
|
+-- mcp-servers.json <- Configuration file
|
||||||
├── test-mcp-servers.ps1 ← Test suite
|
+-- test-mcp-servers.ps1 <- Test suite
|
||||||
├── quick-start-mcp.ps1 ← Setup automation
|
+-- quick-start-mcp.ps1 <- Setup automation
|
||||||
├── enable-vm-ssh.ps1 ← VM SSH enablement
|
+-- enable-vm-ssh.ps1 <- VM SSH enablement
|
||||||
└── SETUP-COMPLETE-SUMMARY.md ← This file
|
+-- SETUP-COMPLETE-SUMMARY.md <- This file
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -7,41 +7,41 @@
|
|||||||
## Test Results
|
## Test Results
|
||||||
|
|
||||||
```
|
```
|
||||||
Overall: 4/7 tests passed (57%) ✓ Improved from 3/7
|
Overall: 4/7 tests passed (57%) [X] Improved from 3/7
|
||||||
|
|
||||||
Status by Server:
|
Status by Server:
|
||||||
✓ gortex : OK (Project management ready)
|
[X] gortex : OK (Project management ready)
|
||||||
✓ mysql : OK (Database running and reachable)
|
[X] mysql : OK (Database running and reachable)
|
||||||
✓ browser : OK (Web automation package available)
|
[X] browser : OK (Web automation package available)
|
||||||
✓ config : OK (Configuration valid)
|
[X] config : OK (Configuration valid)
|
||||||
✗ vm : FAIL (VM not started)
|
[ ] vm : FAIL (VM not started)
|
||||||
⚠ hyperv : WARN (Need admin to check VMs)
|
[!] hyperv : WARN (Need admin to check VMs)
|
||||||
⚠ snapshots : WARN (Need admin to manage snapshots)
|
[!] snapshots : WARN (Need admin to manage snapshots)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What's Working Now
|
## What's Working Now
|
||||||
|
|
||||||
### ✓ Gortex (Project Management)
|
### [X] Gortex (Project Management)
|
||||||
- **Status:** Installed and ready
|
- **Status:** Installed and ready
|
||||||
- **Location:** C:\Users\270015376\Documents\gortex.exe
|
- **Location:** C:\Users\270015376\Documents\gortex.exe
|
||||||
- **Test:** Ask Claude "List all tasks in the current project"
|
- **Test:** Ask Claude "List all tasks in the current project"
|
||||||
|
|
||||||
### ✓ MySQL (Database Access)
|
### [X] MySQL (Database Access)
|
||||||
- **Status:** Running and healthy
|
- **Status:** Running and healthy
|
||||||
- **Container:** flask-shopdb-db-1 (MySQL 8.4.11)
|
- **Container:** flask-shopdb-db-1 (MySQL 8.4.11)
|
||||||
- **Connection:** 127.0.0.1:3306
|
- **Connection:** 127.0.0.1:3306
|
||||||
- **Database:** shopdb_flask
|
- **Database:** shopdb_flask
|
||||||
- **Test:** Ask Claude "Show me the endpoints table schema"
|
- **Test:** Ask Claude "Show me the endpoints table schema"
|
||||||
|
|
||||||
### ✓ Browser (Web Automation)
|
### [X] Browser (Web Automation)
|
||||||
- **Status:** Package available via npm
|
- **Status:** Package available via npm
|
||||||
- **Version:** 1.2.29
|
- **Version:** 1.2.29
|
||||||
- **Package:** @agent-infra/mcp-server-browser
|
- **Package:** @agent-infra/mcp-server-browser
|
||||||
- **Test:** Ask Claude "Take a screenshot of https://localhost:5001"
|
- **Test:** Ask Claude "Take a screenshot of https://localhost:5001"
|
||||||
|
|
||||||
### ✓ Configuration
|
### [X] Configuration
|
||||||
- **Status:** Valid JSON configuration
|
- **Status:** Valid JSON configuration
|
||||||
- **Location:** .claude/mcp-servers.json
|
- **Location:** .claude/mcp-servers.json
|
||||||
- **Servers:** 4 configured (gortex, mysql, browser, vm)
|
- **Servers:** 4 configured (gortex, mysql, browser, vm)
|
||||||
@@ -95,16 +95,16 @@ Try these commands in Claude Code:
|
|||||||
|
|
||||||
```
|
```
|
||||||
"List all tasks in the current project"
|
"List all tasks in the current project"
|
||||||
→ Tests Gortex project management
|
-> Tests Gortex project management
|
||||||
|
|
||||||
"Show me the first 5 endpoints in the database"
|
"Show me the first 5 endpoints in the database"
|
||||||
→ Tests MySQL database access
|
-> Tests MySQL database access
|
||||||
|
|
||||||
"What tables exist in the database?"
|
"What tables exist in the database?"
|
||||||
→ Tests MySQL schema inspection
|
-> Tests MySQL schema inspection
|
||||||
|
|
||||||
"Take a screenshot of https://localhost:5001"
|
"Take a screenshot of https://localhost:5001"
|
||||||
→ Tests Browser automation (requires ShopDB running)
|
-> Tests Browser automation (requires ShopDB running)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -159,14 +159,14 @@ Add-LocalGroupMember -Group "Hyper-V Administrators" -Member "270015376"
|
|||||||
|
|
||||||
| Use Case | Available | MCP Servers Needed |
|
| Use Case | Available | MCP Servers Needed |
|
||||||
|----------|-----------|-------------------|
|
|----------|-----------|-------------------|
|
||||||
| Database development | ✓ Yes | mysql |
|
| Database development | [X] Yes | mysql |
|
||||||
| API development | ✓ Yes | mysql |
|
| API development | [X] Yes | mysql |
|
||||||
| Frontend development | ✓ Yes | browser |
|
| Frontend development | [X] Yes | browser |
|
||||||
| UI testing | ✓ Yes | browser + mysql |
|
| UI testing | [X] Yes | browser + mysql |
|
||||||
| Project tracking | ✓ Yes | gortex |
|
| Project tracking | [X] Yes | gortex |
|
||||||
| Agent deployment | ✗ No (VM needed) | vm + mysql |
|
| Agent deployment | [ ] No (VM needed) | vm + mysql |
|
||||||
| End-to-end testing | ✗ No (VM needed) | vm + mysql + browser |
|
| End-to-end testing | [ ] No (VM needed) | vm + mysql + browser |
|
||||||
| Snapshot management | △ Manual | (admin for scripting) |
|
| Snapshot management | [~] Manual | (admin for scripting) |
|
||||||
|
|
||||||
**Current capability: 5/8 workflows (62%)**
|
**Current capability: 5/8 workflows (62%)**
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ Quick reference for starting the complete development environment with all MCP s
|
|||||||
|
|
||||||
These items are already configured and will persist:
|
These items are already configured and will persist:
|
||||||
|
|
||||||
- ✅ `.mcp.json` - MCP server configurations (gortex, mysql, browser, vm, coordinator)
|
- [X] `.mcp.json` - MCP server configurations (gortex, mysql, browser, vm, coordinator)
|
||||||
- ✅ `.claude/settings.json` - Auto-enables project MCP servers + SessionEnd hook
|
- [X] `.claude/settings.json` - Auto-enables project MCP servers + SessionEnd hook
|
||||||
- ✅ `start-dev.cmd` - Updated with `NODE_TLS_REJECT_UNAUTHORIZED=0` for Vite
|
- [X] `start-dev.cmd` - Updated with `NODE_TLS_REJECT_UNAUTHORIZED=0` for Vite
|
||||||
- ✅ `stop-dev.cmd` - Auto-runs when Claude Code session closes
|
- [X] `stop-dev.cmd` - Auto-runs when Claude Code session closes
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -45,11 +45,11 @@ claude
|
|||||||
```
|
```
|
||||||
|
|
||||||
**On first launch after MCP config changes, you'll be prompted to approve:**
|
**On first launch after MCP config changes, you'll be prompted to approve:**
|
||||||
- ✅ gortex (C:\Users\270015376\Documents\gortex.exe)
|
- [X] gortex (C:\Users\270015376\Documents\gortex.exe)
|
||||||
- ✅ mysql (database access)
|
- [X] mysql (database access)
|
||||||
- ✅ browser (browser automation)
|
- [X] browser (browser automation)
|
||||||
- ✅ vm / vm-shopfloor (SSH to test VM)
|
- [X] vm / vm-shopfloor (SSH to test VM)
|
||||||
- ✅ coordinator (multi-agent collaboration)
|
- [X] coordinator (multi-agent collaboration)
|
||||||
|
|
||||||
**Auto-loaded MCP servers:**
|
**Auto-loaded MCP servers:**
|
||||||
- github, shopdb, amber (from user config)
|
- github, shopdb, amber (from user config)
|
||||||
@@ -60,21 +60,21 @@ claude
|
|||||||
## What's Automated
|
## What's Automated
|
||||||
|
|
||||||
### On Dev Environment Start (`./start-dev.cmd`):
|
### On Dev Environment Start (`./start-dev.cmd`):
|
||||||
- ✅ MCP Coordinator daemon auto-starts (if not already running)
|
- [X] MCP Coordinator daemon auto-starts (if not already running)
|
||||||
- ✅ Flask API (Docker)
|
- [X] Flask API (Docker)
|
||||||
- ✅ MySQL DB (Docker)
|
- [X] MySQL DB (Docker)
|
||||||
- ✅ Vite dev server (with TLS fix)
|
- [X] Vite dev server (with TLS fix)
|
||||||
|
|
||||||
### On Claude Code Session Start:
|
### On Claude Code Session Start:
|
||||||
- ✅ All approved MCP servers auto-connect
|
- [X] All approved MCP servers auto-connect
|
||||||
- ✅ `enableAllProjectMcpServers: true` loads project servers
|
- [X] `enableAllProjectMcpServers: true` loads project servers
|
||||||
|
|
||||||
### On Session Close:
|
### On Session Close:
|
||||||
- ✅ `./stop-dev.cmd` runs automatically (SessionEnd hook)
|
- [X] `./stop-dev.cmd` runs automatically (SessionEnd hook)
|
||||||
- ✅ MCP Coordinator daemon stops
|
- [X] MCP Coordinator daemon stops
|
||||||
- ✅ Docker containers stop
|
- [X] Docker containers stop
|
||||||
- ✅ Vite dev server stops
|
- [X] Vite dev server stops
|
||||||
- ✅ No manual cleanup needed
|
- [X] No manual cleanup needed
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -117,9 +117,9 @@ docker ps --filter "name=flask-shopdb"
|
|||||||
```bash
|
```bash
|
||||||
# Check all services at once
|
# Check all services at once
|
||||||
docker ps --filter "name=flask-shopdb" && \
|
docker ps --filter "name=flask-shopdb" && \
|
||||||
curl -s http://localhost:5173 > /dev/null && echo "✅ Vite OK" && \
|
curl -s http://localhost:5173 > /dev/null && echo "[X] Vite OK" && \
|
||||||
curl -sk https://localhost:5001/api/auth/me 2>&1 | grep -q "Authorization" && echo "✅ Flask OK" && \
|
curl -sk https://localhost:5001/api/auth/me 2>&1 | grep -q "Authorization" && echo "[X] Flask OK" && \
|
||||||
curl -s http://localhost:3100/health > /dev/null && echo "✅ Coordinator OK"
|
curl -s http://localhost:3100/health > /dev/null && echo "[X] Coordinator OK"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
### Priority 1: Data Growth Bomb (6 months to disk exhaustion)
|
### Priority 1: Data Growth Bomb (6 months to disk exhaustion)
|
||||||
|
|
||||||
#### ☐ Configure Audit Log Retention (4 hours)
|
#### [ ] Configure Audit Log Retention (4 hours)
|
||||||
**Owner:** Developer + Admin
|
**Owner:** Developer + Admin
|
||||||
**Effort:** 2 hours config + 2 hours testing
|
**Effort:** 2 hours config + 2 hours testing
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ docker compose -f docker-compose.prebuilt.yml run --rm api flask audit purge --d
|
|||||||
- After 30 days: Should stabilize under 1M rows
|
- After 30 days: Should stabilize under 1M rows
|
||||||
- Backup size reduction: 60-80%
|
- Backup size reduction: 60-80%
|
||||||
|
|
||||||
#### ☐ Configure Endpoint Event Retention (8 hours)
|
#### [ ] Configure Endpoint Event Retention (8 hours)
|
||||||
**Owner:** Developer
|
**Owner:** Developer
|
||||||
**Effort:** 4 hours dev + 2 hours testing + 2 hours deploy
|
**Effort:** 4 hours dev + 2 hours testing + 2 hours deploy
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ def prune_events(days, batch_size, dry_run):
|
|||||||
- Monitor table size: `SELECT COUNT(*) FROM endpointevents;`
|
- Monitor table size: `SELECT COUNT(*) FROM endpointevents;`
|
||||||
- Should stabilize under 500K rows
|
- Should stabilize under 500K rows
|
||||||
|
|
||||||
#### ☐ Configure Docker Log Rotation (2 hours)
|
#### [ ] Configure Docker Log Rotation (2 hours)
|
||||||
**Owner:** Admin
|
**Owner:** Admin
|
||||||
**Effort:** 1 hour config + 1 hour verification
|
**Effort:** 1 hour config + 1 hour verification
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@ Get-ChildItem "C:\ProgramData\Docker\containers\*\*-json.log" |
|
|||||||
|
|
||||||
### Priority 2: Backup and Recovery (currently MISSING)
|
### Priority 2: Backup and Recovery (currently MISSING)
|
||||||
|
|
||||||
#### ☐ Enable Backup Profile (6 hours)
|
#### [ ] Enable Backup Profile (6 hours)
|
||||||
**Owner:** Admin + Developer
|
**Owner:** Admin + Developer
|
||||||
**Effort:** 3 hours setup + 3 hours restore test
|
**Effort:** 3 hours setup + 3 hours restore test
|
||||||
|
|
||||||
@@ -178,7 +178,7 @@ docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run -
|
|||||||
5. Run migrations to latest: `flask db upgrade`
|
5. Run migrations to latest: `flask db upgrade`
|
||||||
6. Document restore time and any issues
|
6. Document restore time and any issues
|
||||||
|
|
||||||
#### ☐ Add Disk Space Monitoring (4 hours)
|
#### [ ] Add Disk Space Monitoring (4 hours)
|
||||||
**Owner:** Admin
|
**Owner:** Admin
|
||||||
**Effort:** 2 hours script + 2 hours integration
|
**Effort:** 2 hours script + 2 hours integration
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ Register-ScheduledTask -TaskName "ShopDB-DiskMonitor" -Action $action -Trigger $
|
|||||||
|
|
||||||
### Priority 3: Production Stability (bleeding-edge runtime)
|
### Priority 3: Production Stability (bleeding-edge runtime)
|
||||||
|
|
||||||
#### ☐ Downgrade Python to 3.11 LTS (8 hours)
|
#### [ ] Downgrade Python to 3.11 LTS (8 hours)
|
||||||
**Owner:** Developer
|
**Owner:** Developer
|
||||||
**Effort:** 2 hours rebuild + 4 hours pilot + 2 hours bundle
|
**Effort:** 2 hours rebuild + 4 hours pilot + 2 hours bundle
|
||||||
|
|
||||||
@@ -281,7 +281,7 @@ docker compose -f docker-compose.prebuilt.yml logs api | grep -i deprecated
|
|||||||
|
|
||||||
### Daily Checks (5 minutes)
|
### Daily Checks (5 minutes)
|
||||||
|
|
||||||
#### ☐ Endpoint Health Dashboard
|
#### [ ] Endpoint Health Dashboard
|
||||||
```sql
|
```sql
|
||||||
-- Check endpoint reporting status
|
-- Check endpoint reporting status
|
||||||
SELECT
|
SELECT
|
||||||
@@ -293,7 +293,7 @@ WHERE assettype = 'endpoint';
|
|||||||
```
|
```
|
||||||
**Alert if:** pct_healthy < 95%
|
**Alert if:** pct_healthy < 95%
|
||||||
|
|
||||||
#### ☐ Backup Verification
|
#### [ ] Backup Verification
|
||||||
```bash
|
```bash
|
||||||
# Check last backup timestamp
|
# Check last backup timestamp
|
||||||
docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run --rm backup restic snapshots --last
|
docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run --rm backup restic snapshots --last
|
||||||
@@ -302,13 +302,13 @@ docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run -
|
|||||||
```
|
```
|
||||||
**Alert if:** No snapshot in last 24 hours
|
**Alert if:** No snapshot in last 24 hours
|
||||||
|
|
||||||
#### ☐ Docker Service Health
|
#### [ ] Docker Service Health
|
||||||
```bash
|
```bash
|
||||||
docker ps --filter name=shopdb --format "table {{.Names}}\t{{.Status}}\t{{.State}}"
|
docker ps --filter name=shopdb --format "table {{.Names}}\t{{.Status}}\t{{.State}}"
|
||||||
```
|
```
|
||||||
**Alert if:** Any service not "Up" and "healthy"
|
**Alert if:** Any service not "Up" and "healthy"
|
||||||
|
|
||||||
#### ☐ Database Disk Space
|
#### [ ] Database Disk Space
|
||||||
```powershell
|
```powershell
|
||||||
# Quick check
|
# Quick check
|
||||||
docker volume inspect shopdb_db_data | ConvertFrom-Json |
|
docker volume inspect shopdb_db_data | ConvertFrom-Json |
|
||||||
@@ -318,7 +318,7 @@ docker volume inspect shopdb_db_data | ConvertFrom-Json |
|
|||||||
```
|
```
|
||||||
**Alert if:** >40GB (or >85% of allocated disk)
|
**Alert if:** >40GB (or >85% of allocated disk)
|
||||||
|
|
||||||
#### ☐ Critical Application Errors
|
#### [ ] Critical Application Errors
|
||||||
```bash
|
```bash
|
||||||
# Check for OperationalError, IntegrityError, 500 responses
|
# Check for OperationalError, IntegrityError, 500 responses
|
||||||
docker compose -f docker-compose.prebuilt.yml logs --since 24h api |
|
docker compose -f docker-compose.prebuilt.yml logs --since 24h api |
|
||||||
@@ -328,7 +328,7 @@ docker compose -f docker-compose.prebuilt.yml logs --since 24h api |
|
|||||||
|
|
||||||
### Weekly Checks (15 minutes)
|
### Weekly Checks (15 minutes)
|
||||||
|
|
||||||
#### ☐ Audit Log Size
|
#### [ ] Audit Log Size
|
||||||
```sql
|
```sql
|
||||||
SELECT
|
SELECT
|
||||||
COUNT(*) as total_rows,
|
COUNT(*) as total_rows,
|
||||||
@@ -339,7 +339,7 @@ FROM auditlogs;
|
|||||||
```
|
```
|
||||||
**Alert if:** total_rows > 1M and retention_days > 90
|
**Alert if:** total_rows > 1M and retention_days > 90
|
||||||
|
|
||||||
#### ☐ Failed Login Attempts
|
#### [ ] Failed Login Attempts
|
||||||
```sql
|
```sql
|
||||||
SELECT
|
SELECT
|
||||||
username,
|
username,
|
||||||
@@ -353,7 +353,7 @@ LIMIT 20;
|
|||||||
```
|
```
|
||||||
**Alert if:** Any account with >10 failed attempts in 24 hours
|
**Alert if:** Any account with >10 failed attempts in 24 hours
|
||||||
|
|
||||||
#### ☐ Endpoint Events Accumulation
|
#### [ ] Endpoint Events Accumulation
|
||||||
```sql
|
```sql
|
||||||
SELECT
|
SELECT
|
||||||
COUNT(*) as total_events,
|
COUNT(*) as total_events,
|
||||||
@@ -363,14 +363,14 @@ FROM endpointevents;
|
|||||||
```
|
```
|
||||||
**Alert if:** total_events > 500K
|
**Alert if:** total_events > 500K
|
||||||
|
|
||||||
#### ☐ Security Advisories
|
#### [ ] Security Advisories
|
||||||
```bash
|
```bash
|
||||||
cd /path/to/shopdb
|
cd /path/to/shopdb
|
||||||
python scripts/scan_sbom.py sbom.cdx.json
|
python scripts/scan_sbom.py sbom.cdx.json
|
||||||
```
|
```
|
||||||
**Review:** HIGH severity findings in shipped components (exclude dev-only)
|
**Review:** HIGH severity findings in shipped components (exclude dev-only)
|
||||||
|
|
||||||
#### ☐ Database Performance
|
#### [ ] Database Performance
|
||||||
```sql
|
```sql
|
||||||
-- Check for slow queries (if slow query log enabled)
|
-- Check for slow queries (if slow query log enabled)
|
||||||
SELECT
|
SELECT
|
||||||
@@ -387,7 +387,7 @@ LIMIT 10;
|
|||||||
|
|
||||||
### Monthly Checks (1 hour)
|
### Monthly Checks (1 hour)
|
||||||
|
|
||||||
#### ☐ PAT Usage Audit
|
#### [ ] PAT Usage Audit
|
||||||
```sql
|
```sql
|
||||||
SELECT
|
SELECT
|
||||||
t.tokenid,
|
t.tokenid,
|
||||||
@@ -403,13 +403,13 @@ ORDER BY days_since_use DESC;
|
|||||||
```
|
```
|
||||||
**Action:** Revoke stale tokens (not used in 90+ days)
|
**Action:** Revoke stale tokens (not used in 90+ days)
|
||||||
|
|
||||||
#### ☐ Certificate Expiration Check
|
#### [ ] Certificate Expiration Check
|
||||||
```bash
|
```bash
|
||||||
openssl x509 -in ./certs/server.crt -noout -enddate
|
openssl x509 -in ./certs/server.crt -noout -enddate
|
||||||
```
|
```
|
||||||
**Alert if:** <60 days until expiry
|
**Alert if:** <60 days until expiry
|
||||||
|
|
||||||
#### ☐ Backup Restoration Test
|
#### [ ] Backup Restoration Test
|
||||||
```bash
|
```bash
|
||||||
# Restore to test environment
|
# Restore to test environment
|
||||||
docker compose -f docker-compose.backup.yml run --rm backup restic restore latest --target /restore-test
|
docker compose -f docker-compose.backup.yml run --rm backup restic restore latest --target /restore-test
|
||||||
@@ -424,7 +424,7 @@ docker compose exec api flask db current
|
|||||||
```
|
```
|
||||||
**Document:** Restore time, data integrity, any issues
|
**Document:** Restore time, data integrity, any issues
|
||||||
|
|
||||||
#### ☐ Plugin Version Audit
|
#### [ ] Plugin Version Audit
|
||||||
```bash
|
```bash
|
||||||
# Compare plugin registry to disk versions
|
# Compare plugin registry to disk versions
|
||||||
docker compose run --rm api python -c "
|
docker compose run --rm api python -c "
|
||||||
@@ -435,7 +435,7 @@ for name, plugin in plugin_registry.plugins.items():
|
|||||||
```
|
```
|
||||||
**Alert if:** Version mismatch between registry and MANIFEST.json
|
**Alert if:** Version mismatch between registry and MANIFEST.json
|
||||||
|
|
||||||
#### ☐ Configuration Drift Review
|
#### [ ] Configuration Drift Review
|
||||||
```bash
|
```bash
|
||||||
# Compare .env files across sites
|
# Compare .env files across sites
|
||||||
# dev, ops, prod should have consistent:
|
# dev, ops, prod should have consistent:
|
||||||
@@ -448,7 +448,7 @@ for name, plugin in plugin_registry.plugins.items():
|
|||||||
|
|
||||||
### Quarterly Checks (4 hours)
|
### Quarterly Checks (4 hours)
|
||||||
|
|
||||||
#### ☐ Full DR Drill
|
#### [ ] Full DR Drill
|
||||||
**Scenario:** Complete site loss, restore from backup
|
**Scenario:** Complete site loss, restore from backup
|
||||||
|
|
||||||
**Steps:**
|
**Steps:**
|
||||||
@@ -465,7 +465,7 @@ for name, plugin in plugin_registry.plugins.items():
|
|||||||
|
|
||||||
**Target:** Full recovery in <2 hours
|
**Target:** Full recovery in <2 hours
|
||||||
|
|
||||||
#### ☐ Security Log Audit
|
#### [ ] Security Log Audit
|
||||||
```sql
|
```sql
|
||||||
-- Check for anomalous patterns
|
-- Check for anomalous patterns
|
||||||
SELECT
|
SELECT
|
||||||
@@ -486,7 +486,7 @@ ORDER BY action_count DESC;
|
|||||||
```
|
```
|
||||||
**Review:** Off-hours access, bulk deletes, permission changes
|
**Review:** Off-hours access, bulk deletes, permission changes
|
||||||
|
|
||||||
#### ☐ Dependency Vulnerability Scan
|
#### [ ] Dependency Vulnerability Scan
|
||||||
```bash
|
```bash
|
||||||
# Run OSV.dev scan
|
# Run OSV.dev scan
|
||||||
cd /path/to/shopdb
|
cd /path/to/shopdb
|
||||||
@@ -503,49 +503,49 @@ grep -E "HIGH|CRITICAL" vuln-report.txt | grep -v "dev-only"
|
|||||||
|
|
||||||
### Critical Alerts (immediate notification)
|
### Critical Alerts (immediate notification)
|
||||||
|
|
||||||
#### ☐ Database Disk >85% Full
|
#### [ ] Database Disk >85% Full
|
||||||
**Method:** Daily disk monitor script (see Priority 2)
|
**Method:** Daily disk monitor script (see Priority 2)
|
||||||
**Recipient:** Admin + Developer
|
**Recipient:** Admin + Developer
|
||||||
**Action:** Implement retention policies or expand disk
|
**Action:** Implement retention policies or expand disk
|
||||||
|
|
||||||
#### ☐ Host Disk >85% Full
|
#### [ ] Host Disk >85% Full
|
||||||
**Method:** Daily disk monitor script
|
**Method:** Daily disk monitor script
|
||||||
**Recipient:** Admin
|
**Recipient:** Admin
|
||||||
**Action:** Clean logs, check Docker volumes, expand disk
|
**Action:** Clean logs, check Docker volumes, expand disk
|
||||||
|
|
||||||
#### ☐ Backup Failed or >24h Old
|
#### [ ] Backup Failed or >24h Old
|
||||||
**Method:** Check restic last snapshot timestamp
|
**Method:** Check restic last snapshot timestamp
|
||||||
**Recipient:** Admin
|
**Recipient:** Admin
|
||||||
**Action:** Investigate backup service logs, verify disk space
|
**Action:** Investigate backup service logs, verify disk space
|
||||||
|
|
||||||
#### ☐ >10 Endpoints Offline >48 Hours
|
#### [ ] >10 Endpoints Offline >48 Hours
|
||||||
**Method:** Query assets table daily
|
**Method:** Query assets table daily
|
||||||
**Recipient:** Admin
|
**Recipient:** Admin
|
||||||
**Action:** Check network connectivity, agent service status
|
**Action:** Check network connectivity, agent service status
|
||||||
|
|
||||||
#### ☐ Application Error Rate >1% of Requests
|
#### [ ] Application Error Rate >1% of Requests
|
||||||
**Method:** Parse gunicorn access logs
|
**Method:** Parse gunicorn access logs
|
||||||
**Recipient:** Developer
|
**Recipient:** Developer
|
||||||
**Action:** Check Flask logs for exceptions, review recent changes
|
**Action:** Check Flask logs for exceptions, review recent changes
|
||||||
|
|
||||||
#### ☐ Certificate Expiring in <30 Days
|
#### [ ] Certificate Expiring in <30 Days
|
||||||
**Method:** Daily openssl check
|
**Method:** Daily openssl check
|
||||||
**Recipient:** Admin
|
**Recipient:** Admin
|
||||||
**Action:** Generate new self-signed cert or renew
|
**Action:** Generate new self-signed cert or renew
|
||||||
|
|
||||||
### Warning Alerts (daily summary)
|
### Warning Alerts (daily summary)
|
||||||
|
|
||||||
#### ☐ Audit Log >1M Rows Without Retention
|
#### [ ] Audit Log >1M Rows Without Retention
|
||||||
**Method:** Daily SQL query
|
**Method:** Daily SQL query
|
||||||
**Recipient:** Admin
|
**Recipient:** Admin
|
||||||
**Action:** Configure audit log purge job
|
**Action:** Configure audit log purge job
|
||||||
|
|
||||||
#### ☐ Endpoint Events >500K Rows
|
#### [ ] Endpoint Events >500K Rows
|
||||||
**Method:** Daily SQL query
|
**Method:** Daily SQL query
|
||||||
**Recipient:** Admin
|
**Recipient:** Admin
|
||||||
**Action:** Configure event retention
|
**Action:** Configure event retention
|
||||||
|
|
||||||
#### ☐ Failed Login Rate >10/min from Single IP
|
#### [ ] Failed Login Rate >10/min from Single IP
|
||||||
**Method:** Parse Flask auth logs
|
**Method:** Parse Flask auth logs
|
||||||
**Recipient:** Admin
|
**Recipient:** Admin
|
||||||
**Action:** Review for brute force attempt, consider IP block
|
**Action:** Review for brute force attempt, consider IP block
|
||||||
@@ -598,27 +598,27 @@ grep -E "HIGH|CRITICAL" vuln-report.txt | grep -v "dev-only"
|
|||||||
|
|
||||||
### Pre-Deployment Checklist
|
### Pre-Deployment Checklist
|
||||||
|
|
||||||
#### ☐ Create Backup
|
#### [ ] Create Backup
|
||||||
```bash
|
```bash
|
||||||
# Take manual snapshot before deploy
|
# Take manual snapshot before deploy
|
||||||
docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run --rm backup restic backup /app/instance --tag pre-deploy
|
docker compose -f docker-compose.prebuilt.yml -f docker-compose.backup.yml run --rm backup restic backup /app/instance --tag pre-deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
#### ☐ Test Bundle on Pilot Site
|
#### [ ] Test Bundle on Pilot Site
|
||||||
- Deploy to ops environment first
|
- Deploy to ops environment first
|
||||||
- Verify all services start (db, migrate, api)
|
- Verify all services start (db, migrate, api)
|
||||||
- Check migration logs for errors
|
- Check migration logs for errors
|
||||||
- Spot-check core features
|
- Spot-check core features
|
||||||
- Monitor for 24 hours
|
- Monitor for 24 hours
|
||||||
|
|
||||||
#### ☐ Review Migration Chain
|
#### [ ] Review Migration Chain
|
||||||
```bash
|
```bash
|
||||||
# Check what migrations will run
|
# Check what migrations will run
|
||||||
docker compose run --rm api flask db heads
|
docker compose run --rm api flask db heads
|
||||||
docker compose run --rm api flask db current
|
docker compose run --rm api flask db current
|
||||||
```
|
```
|
||||||
|
|
||||||
#### ☐ Verify Disk Space
|
#### [ ] Verify Disk Space
|
||||||
```bash
|
```bash
|
||||||
# Ensure enough space for migration and new code
|
# Ensure enough space for migration and new code
|
||||||
df -h /var/lib/docker
|
df -h /var/lib/docker
|
||||||
@@ -716,13 +716,13 @@ docker compose -f docker-compose.prebuilt.yml restart api
|
|||||||
|
|
||||||
### Post-Deployment Verification
|
### Post-Deployment Verification
|
||||||
|
|
||||||
#### ☐ All Services Healthy
|
#### [ ] All Services Healthy
|
||||||
```bash
|
```bash
|
||||||
docker ps --filter name=shopdb
|
docker ps --filter name=shopdb
|
||||||
# Should show: db (healthy), api (healthy), migrate (exited 0)
|
# Should show: db (healthy), api (healthy), migrate (exited 0)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### ☐ Endpoints Checking In
|
#### [ ] Endpoints Checking In
|
||||||
```sql
|
```sql
|
||||||
SELECT COUNT(*) FROM assets
|
SELECT COUNT(*) FROM assets
|
||||||
WHERE assettype='endpoint'
|
WHERE assettype='endpoint'
|
||||||
@@ -730,19 +730,19 @@ WHERE assettype='endpoint'
|
|||||||
```
|
```
|
||||||
**Expect:** >95% of endpoints
|
**Expect:** >95% of endpoints
|
||||||
|
|
||||||
#### ☐ No Critical Errors in Logs
|
#### [ ] No Critical Errors in Logs
|
||||||
```bash
|
```bash
|
||||||
docker compose logs --since 1h api | grep -i critical
|
docker compose logs --since 1h api | grep -i critical
|
||||||
```
|
```
|
||||||
**Expect:** Empty or expected warnings only
|
**Expect:** Empty or expected warnings only
|
||||||
|
|
||||||
#### ☐ UI Loads and Functions
|
#### [ ] UI Loads and Functions
|
||||||
- Login works
|
- Login works
|
||||||
- Asset search returns results
|
- Asset search returns results
|
||||||
- Can navigate to endpoint details
|
- Can navigate to endpoint details
|
||||||
- Scripts tab loads
|
- Scripts tab loads
|
||||||
|
|
||||||
#### ☐ Document Deployment
|
#### [ ] Document Deployment
|
||||||
```markdown
|
```markdown
|
||||||
## Deployment Log: 2026-09-11
|
## Deployment Log: 2026-09-11
|
||||||
|
|
||||||
|
|||||||
@@ -371,9 +371,9 @@ curl -X POST $SLACK_WEBHOOK_URL -d '{
|
|||||||
## Recommended Setup for ShopDB Team
|
## Recommended Setup for ShopDB Team
|
||||||
|
|
||||||
### Phase 1: Minimal (This Week)
|
### Phase 1: Minimal (This Week)
|
||||||
1. ✅ Create `memory/active_work.md` (5 min)
|
1. [X] Create `memory/active_work.md` (5 min)
|
||||||
2. ✅ Adopt branch naming: `<user>/<ai-tool>/<feature>` (0 min)
|
2. [X] Adopt branch naming: `<user>/<ai-tool>/<feature>` (0 min)
|
||||||
3. ✅ Add AI commit prefix: `[AI: tool] message` (0 min)
|
3. [X] Add AI commit prefix: `[AI: tool] message` (0 min)
|
||||||
|
|
||||||
### Phase 2: Enhanced (Next Sprint)
|
### Phase 2: Enhanced (Next Sprint)
|
||||||
4. Create `.claude/sessions/` with session notes (15 min)
|
4. Create `.claude/sessions/` with session notes (15 min)
|
||||||
|
|||||||
@@ -1162,13 +1162,13 @@ def test_saml_group_to_role_mapping():
|
|||||||
- HTTPS enabled on ShopDB (required for SAML)
|
- HTTPS enabled on ShopDB (required for SAML)
|
||||||
|
|
||||||
## Step 1: Create M365 Enterprise Application
|
## Step 1: Create M365 Enterprise Application
|
||||||
1. Go to Azure AD / Entra ID → Enterprise Applications
|
1. Go to Azure AD / Entra ID -> Enterprise Applications
|
||||||
2. New Application → Create your own
|
2. New Application -> Create your own
|
||||||
3. Name: "ShopDB Production"
|
3. Name: "ShopDB Production"
|
||||||
4. Click Assign users and groups
|
4. Click Assign users and groups
|
||||||
|
|
||||||
## Step 2: Configure SAML in Azure
|
## Step 2: Configure SAML in Azure
|
||||||
1. In Enterprise App, go to Single sign-on → SAML
|
1. In Enterprise App, go to Single sign-on -> SAML
|
||||||
2. Basic SAML Configuration:
|
2. Basic SAML Configuration:
|
||||||
- Identifier (Entity ID): `https://shopdb.yourdomain.com`
|
- Identifier (Entity ID): `https://shopdb.yourdomain.com`
|
||||||
- Reply URL (ACS): `https://shopdb.yourdomain.com/api/auth/saml/acs`
|
- Reply URL (ACS): `https://shopdb.yourdomain.com/api/auth/saml/acs`
|
||||||
@@ -1182,7 +1182,7 @@ def test_saml_group_to_role_mapping():
|
|||||||
|
|
||||||
## Step 3: Configure ShopDB
|
## Step 3: Configure ShopDB
|
||||||
1. Login to ShopDB as admin
|
1. Login to ShopDB as admin
|
||||||
2. Settings → Authentication
|
2. Settings -> Authentication
|
||||||
3. Enable SAML SSO toggle
|
3. Enable SAML SSO toggle
|
||||||
4. Paste Federation Metadata URL from Azure
|
4. Paste Federation Metadata URL from Azure
|
||||||
5. Set Entity ID: `https://shopdb.yourdomain.com`
|
5. Set Entity ID: `https://shopdb.yourdomain.com`
|
||||||
@@ -1344,7 +1344,7 @@ If complete failure:
|
|||||||
2. **Plugin Hooks for Auth**
|
2. **Plugin Hooks for Auth**
|
||||||
- `get_authentication_providers()` - Contribute new auth methods
|
- `get_authentication_providers()` - Contribute new auth methods
|
||||||
- `on_user_authenticated()` - Post-auth callbacks
|
- `on_user_authenticated()` - Post-auth callbacks
|
||||||
- `map_external_groups_to_roles()` - Custom group→role logic
|
- `map_external_groups_to_roles()` - Custom group->role logic
|
||||||
- `provision_user_attributes()` - Custom user provisioning
|
- `provision_user_attributes()` - Custom user provisioning
|
||||||
|
|
||||||
3. **Core SAML Implementation**
|
3. **Core SAML Implementation**
|
||||||
@@ -1420,7 +1420,7 @@ If complete failure:
|
|||||||
|
|
||||||
## Success Criteria
|
## Success Criteria
|
||||||
|
|
||||||
✅ **Functional Requirements:**
|
[X] **Functional Requirements:**
|
||||||
- [ ] M365 SAML login works end-to-end
|
- [ ] M365 SAML login works end-to-end
|
||||||
- [ ] Auto-user-creation provisions users correctly
|
- [ ] Auto-user-creation provisions users correctly
|
||||||
- [ ] Group-based admin assignment works
|
- [ ] Group-based admin assignment works
|
||||||
@@ -1429,7 +1429,7 @@ If complete failure:
|
|||||||
- [ ] Plugin can contribute custom auth provider
|
- [ ] Plugin can contribute custom auth provider
|
||||||
- [ ] Plugin can extend user provisioning
|
- [ ] Plugin can extend user provisioning
|
||||||
|
|
||||||
✅ **Non-Functional Requirements:**
|
[X] **Non-Functional Requirements:**
|
||||||
- [ ] No breaking changes to existing auth
|
- [ ] No breaking changes to existing auth
|
||||||
- [ ] Follows ShopDB plugin architecture patterns
|
- [ ] Follows ShopDB plugin architecture patterns
|
||||||
- [ ] Works in air-gapped deployment
|
- [ ] Works in air-gapped deployment
|
||||||
@@ -1437,7 +1437,7 @@ If complete failure:
|
|||||||
- [ ] Comprehensive error handling
|
- [ ] Comprehensive error handling
|
||||||
- [ ] Audit logging for all auth events
|
- [ ] Audit logging for all auth events
|
||||||
|
|
||||||
✅ **Documentation:**
|
[X] **Documentation:**
|
||||||
- [ ] Admin setup guide complete
|
- [ ] Admin setup guide complete
|
||||||
- [ ] Plugin extension guide complete
|
- [ ] Plugin extension guide complete
|
||||||
- [ ] ADR documenting auth service architecture
|
- [ ] ADR documenting auth service architecture
|
||||||
|
|||||||
@@ -208,16 +208,16 @@ Then proceed without the required tools (but note that you're skipping for this
|
|||||||
## Success Metrics
|
## Success Metrics
|
||||||
|
|
||||||
### Good Engagement
|
### Good Engagement
|
||||||
- ✅ Coordinator used before every file edit
|
- [X] Coordinator used before every file edit
|
||||||
- ✅ Gortex used for architectural queries
|
- [X] Gortex used for architectural queries
|
||||||
- ✅ Skills invoked when task matches their domain
|
- [X] Skills invoked when task matches their domain
|
||||||
- ✅ Workflows proposed for complex tasks
|
- [X] Workflows proposed for complex tasks
|
||||||
|
|
||||||
### Poor Engagement
|
### Poor Engagement
|
||||||
- ❌ Editing files without announce_work
|
- [ ] Editing files without announce_work
|
||||||
- ❌ Using grep when Gortex would be more accurate
|
- [ ] Using grep when Gortex would be more accurate
|
||||||
- ❌ Creating charts without dataviz skill guidance
|
- [ ] Creating charts without dataviz skill guidance
|
||||||
- ❌ Manual sequential analysis when workflow would parallelize
|
- [ ] Manual sequential analysis when workflow would parallelize
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -148,11 +148,11 @@ Contact: [internal security team email]
|
|||||||
|
|
||||||
## What's Already Good:
|
## What's Already Good:
|
||||||
|
|
||||||
✅ Strong .gitignore (lines 64-86 cover most credential patterns)
|
[X] Strong .gitignore (lines 64-86 cover most credential patterns)
|
||||||
✅ Darkwing scanning on PRs
|
[X] Darkwing scanning on PRs
|
||||||
✅ Air-gapped deployment (secrets never in GitHub)
|
[X] Air-gapped deployment (secrets never in GitHub)
|
||||||
✅ ADR-016: Device tokens instead of user credentials for kiosks
|
[X] ADR-016: Device tokens instead of user credentials for kiosks
|
||||||
✅ Collector tokens are 64-char hashes, not readable passwords
|
[X] Collector tokens are 64-char hashes, not readable passwords
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -190,5 +190,5 @@ gitleaks detect --verbose
|
|||||||
|
|
||||||
- GitHub Security tab: https://github.com/ge-aero/shopdb-flask/security
|
- GitHub Security tab: https://github.com/ge-aero/shopdb-flask/security
|
||||||
- Secret scanning alerts: (once enabled)
|
- Secret scanning alerts: (once enabled)
|
||||||
- Darkwing findings: Security → Code scanning
|
- Darkwing findings: Security -> Code scanning
|
||||||
- Dependabot alerts: Security → Dependabot
|
- Dependabot alerts: Security -> Dependabot
|
||||||
|
|||||||
@@ -6,15 +6,15 @@ Now we need to connect it as an MCP server so Claude Code can use its 48 tools d
|
|||||||
|
|
||||||
## Current Status
|
## Current Status
|
||||||
|
|
||||||
**Installed:** ✅ Gortex v0.64.2 at `C:\Users\270015376\Documents\gortex.exe`
|
**Installed:** [X] Gortex v0.64.2 at `C:\Users\270015376\Documents\gortex.exe`
|
||||||
|
|
||||||
**Daemon Running:** ✅
|
**Daemon Running:** [X]
|
||||||
```bash
|
```bash
|
||||||
/c/Users/270015376/Documents/gortex.exe status
|
/c/Users/270015376/Documents/gortex.exe status
|
||||||
# Shows: daemon running, flask-shopdb tracked with 2467 files
|
# Shows: daemon running, flask-shopdb tracked with 2467 files
|
||||||
```
|
```
|
||||||
|
|
||||||
**Indexed Repository:** ✅ flask-shopdb at `C:\Users\270015376\Documents\github\flask-shopdb`
|
**Indexed Repository:** [X] flask-shopdb at `C:\Users\270015376\Documents\github\flask-shopdb`
|
||||||
|
|
||||||
## How to Connect as MCP Server
|
## How to Connect as MCP Server
|
||||||
|
|
||||||
@@ -109,7 +109,7 @@ Based on our typical workflow:
|
|||||||
- With Gortex: 1-2K tokens (edit_symbol)
|
- With Gortex: 1-2K tokens (edit_symbol)
|
||||||
- **Savings: ~60-70%**
|
- **Savings: ~60-70%**
|
||||||
|
|
||||||
**Merging wilm → wj:**
|
**Merging wilm -> wj:**
|
||||||
- Current: 8-12K tokens (read conflicts, understand context)
|
- Current: 8-12K tokens (read conflicts, understand context)
|
||||||
- With Gortex: 3-5K tokens (diff_context tool)
|
- With Gortex: 3-5K tokens (diff_context tool)
|
||||||
- **Savings: ~50-60%**
|
- **Savings: ~50-60%**
|
||||||
@@ -155,10 +155,10 @@ If working, you'll see Gortex tools available via ToolSearch.
|
|||||||
## Why This Matters
|
## Why This Matters
|
||||||
|
|
||||||
Instead of me reading entire files to understand code, I can:
|
Instead of me reading entire files to understand code, I can:
|
||||||
1. Ask Gortex "explore fleet alerts" → get relevant symbols
|
1. Ask Gortex "explore fleet alerts" -> get relevant symbols
|
||||||
2. Query "what calls get_fleet_alerts" → see usage
|
2. Query "what calls get_fleet_alerts" -> see usage
|
||||||
3. Edit symbols directly by ID → no file reading
|
3. Edit symbols directly by ID -> no file reading
|
||||||
4. Analyze blast radius before changes → prevent bugs
|
4. Analyze blast radius before changes -> prevent bugs
|
||||||
5. Get merge context → easier conflict resolution
|
5. Get merge context -> easier conflict resolution
|
||||||
|
|
||||||
This turns Gortex from a "nice to have" into a "fundamental workflow tool" that saves significant tokens and improves code understanding.
|
This turns Gortex from a "nice to have" into a "fundamental workflow tool" that saves significant tokens and improves code understanding.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ Quick guide to understanding Hyper-V permissions and why they don't matter for M
|
|||||||
|
|
||||||
## What This Affects
|
## What This Affects
|
||||||
|
|
||||||
### ✓ Still Works (No Admin Needed)
|
### [X] Still Works (No Admin Needed)
|
||||||
|
|
||||||
| Feature | How to Use | Notes |
|
| Feature | How to Use | Notes |
|
||||||
|---------|-----------|-------|
|
|---------|-----------|-------|
|
||||||
@@ -28,7 +28,7 @@ Quick guide to understanding Hyper-V permissions and why they don't matter for M
|
|||||||
|
|
||||||
**Bottom line:** Everything you need works via GUI or SSH.
|
**Bottom line:** Everything you need works via GUI or SSH.
|
||||||
|
|
||||||
### ✗ Doesn't Work (Need Group Membership)
|
### [ ] Doesn't Work (Need Group Membership)
|
||||||
|
|
||||||
| Feature | Why It Fails | Workaround |
|
| Feature | Why It Fails | Workaround |
|
||||||
|---------|-------------|-----------|
|
|---------|-------------|-----------|
|
||||||
@@ -195,20 +195,20 @@ The following docs have been updated to clarify admin requirements:
|
|||||||
|
|
||||||
**With VM MCP, Claude can:**
|
**With VM MCP, Claude can:**
|
||||||
```
|
```
|
||||||
✓ Execute commands on VM
|
[X] Execute commands on VM
|
||||||
✓ Copy files to/from VM
|
[X] Copy files to/from VM
|
||||||
✓ Read logs from VM
|
[X] Read logs from VM
|
||||||
✓ Check service status
|
[X] Check service status
|
||||||
✓ Install/configure software
|
[X] Install/configure software
|
||||||
✓ Test agent deployment
|
[X] Test agent deployment
|
||||||
✓ All via SSH - no Hyper-V perms needed!
|
[X] All via SSH - no Hyper-V perms needed!
|
||||||
```
|
```
|
||||||
|
|
||||||
**Claude cannot (without Hyper-V perms):**
|
**Claude cannot (without Hyper-V perms):**
|
||||||
```
|
```
|
||||||
✗ Create snapshots via PowerShell
|
[ ] Create snapshots via PowerShell
|
||||||
✗ Restore snapshots via script
|
[ ] Restore snapshots via script
|
||||||
✗ Query VM state via Get-VM
|
[ ] Query VM state via Get-VM
|
||||||
|
|
||||||
But you can do these manually in GUI!
|
But you can do these manually in GUI!
|
||||||
```
|
```
|
||||||
@@ -235,12 +235,12 @@ Request from IT admin to add you to "Hyper-V Administrators" local group.
|
|||||||
|
|
||||||
| Task | Without Group | With Group |
|
| Task | Without Group | With Group |
|
||||||
|------|--------------|------------|
|
|------|--------------|------------|
|
||||||
| VM MCP (SSH) | ✓ Works | ✓ Works |
|
| VM MCP (SSH) | [X] Works | [X] Works |
|
||||||
| Start/stop VM | ✓ GUI | ✓ GUI or PowerShell |
|
| Start/stop VM | [X] GUI | [X] GUI or PowerShell |
|
||||||
| Create snapshot | ✓ GUI | ✓ GUI or PowerShell |
|
| Create snapshot | [X] GUI | [X] GUI or PowerShell |
|
||||||
| Restore snapshot | ✓ GUI | ✓ GUI or PowerShell |
|
| Restore snapshot | [X] GUI | [X] GUI or PowerShell |
|
||||||
| View VM status | ✓ GUI | ✓ GUI or PowerShell |
|
| View VM status | [X] GUI | [X] GUI or PowerShell |
|
||||||
| Script automation | ✗ Can't | ✓ Can |
|
| Script automation | [ ] Can't | [X] Can |
|
||||||
|
|
||||||
**Bottom line: You can do everything, just not via PowerShell scripts.**
|
**Bottom line: You can do everything, just not via PowerShell scripts.**
|
||||||
|
|
||||||
|
|||||||
@@ -278,16 +278,16 @@ See `VM-SNAPSHOT-GUIDE.md` for complete snapshot management guide.
|
|||||||
|
|
||||||
```
|
```
|
||||||
flask-shopdb/
|
flask-shopdb/
|
||||||
└── .claude/
|
+-- .claude/
|
||||||
├── INDEX-MCP-DOCS.md ← This file (documentation index)
|
+-- INDEX-MCP-DOCS.md <- This file (documentation index)
|
||||||
├── README-MCP-SETUP.md ← Quick reference
|
+-- README-MCP-SETUP.md <- Quick reference
|
||||||
├── MCP-INTEGRATION-GUIDE.md ← Complete guide
|
+-- MCP-INTEGRATION-GUIDE.md <- Complete guide
|
||||||
├── VM-SNAPSHOT-GUIDE.md ← Snapshot management
|
+-- VM-SNAPSHOT-GUIDE.md <- Snapshot management
|
||||||
├── setup-vm-ssh.md ← SSH setup guide
|
+-- setup-vm-ssh.md <- SSH setup guide
|
||||||
├── mcp-servers.json ← Configuration file
|
+-- mcp-servers.json <- Configuration file
|
||||||
├── test-mcp-servers.ps1 ← Test suite
|
+-- test-mcp-servers.ps1 <- Test suite
|
||||||
├── quick-start-mcp.ps1 ← Setup automation
|
+-- quick-start-mcp.ps1 <- Setup automation
|
||||||
└── enable-vm-ssh.ps1 ← VM SSH enablement
|
+-- enable-vm-ssh.ps1 <- VM SSH enablement
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -20,26 +20,26 @@ mcp-coordinator supports two connection methods:
|
|||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────────┐
|
+-------------------------------------------------------------+
|
||||||
│ Your PC │
|
| Your PC |
|
||||||
│ │
|
| |
|
||||||
│ ┌──────────────────┐ ┌──────────────────┐ │
|
| +------------------+ +------------------+ |
|
||||||
│ │ Claude Code #1 │ │ Claude Code #2 │ │
|
| | Claude Code #1 | | Claude Code #2 | |
|
||||||
│ │ (Session 1) │ │ (Session 2) │ │
|
| | (Session 1) | | (Session 2) | |
|
||||||
│ └────────┬─────────┘ └────────┬─────────┘ │
|
| +--------+---------+ +--------+---------+ |
|
||||||
│ │ │ │
|
| | | |
|
||||||
│ │ MCP over HTTP │ MCP over HTTP│
|
| | MCP over HTTP | MCP over HTTP|
|
||||||
│ │ (localhost:3100) │ │
|
| | (localhost:3100) | |
|
||||||
│ └──────────────┬───────────────────┘ │
|
| +--------------+-------------------+ |
|
||||||
│ │ │
|
| | |
|
||||||
│ ┌────────▼──────────┐ │
|
| +--------v----------+ |
|
||||||
│ │ mcp-coordinator │ │
|
| | mcp-coordinator | |
|
||||||
│ │ (daemon) │ │
|
| | (daemon) | |
|
||||||
│ │ Port: 3100 │ │
|
| | Port: 3100 | |
|
||||||
│ │ MQTT: 1883 │ │
|
| | MQTT: 1883 | |
|
||||||
│ └───────────────────┘ │
|
| +-------------------+ |
|
||||||
│ │
|
| |
|
||||||
└─────────────────────────────────────────────────────────────┘
|
+-------------------------------------------------------------+
|
||||||
```
|
```
|
||||||
|
|
||||||
**Both Claude sessions connect to the SAME daemon = shared state = coordination works!**
|
**Both Claude sessions connect to the SAME daemon = shared state = coordination works!**
|
||||||
@@ -141,28 +141,28 @@ Claude: "Coordinator running. 2 agents registered: session-main, session-plugin
|
|||||||
### Architecture
|
### Architecture
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────┐ ┌─────────────────────┐
|
+---------------------+ +---------------------+
|
||||||
│ Dev PC #1 │ │ Dev PC #2 │
|
| Dev PC #1 | | Dev PC #2 |
|
||||||
│ (270015376) │ │ (coworker) │
|
| (270015376) | | (coworker) |
|
||||||
│ │ │ │
|
| | | |
|
||||||
│ Claude Code │ │ Cursor │
|
| Claude Code | | Cursor |
|
||||||
│ │ │ │ │ │
|
| | | | | |
|
||||||
│ └─────────────┼────────┼───────┘ │
|
| +-------------+--------+-------+ |
|
||||||
│ │ │ │
|
| | | |
|
||||||
└─────────────────────┘ └─────────────────────┘
|
+---------------------+ +---------------------+
|
||||||
│ │
|
| |
|
||||||
│ MCP over HTTP │
|
| MCP over HTTP |
|
||||||
│ (LAN: 192.168.1.100:3100) │
|
| (LAN: 192.168.1.100:3100) |
|
||||||
└──────────────┬───────────────┘
|
+--------------+---------------+
|
||||||
│
|
|
|
||||||
┌─────────▼──────────┐
|
+---------v----------+
|
||||||
│ Shared PC or │
|
| Shared PC or |
|
||||||
│ Dev Server │
|
| Dev Server |
|
||||||
│ │
|
| |
|
||||||
│ mcp-coordinator │
|
| mcp-coordinator |
|
||||||
│ Host: 0.0.0.0 │
|
| Host: 0.0.0.0 |
|
||||||
│ Port: 3100 │
|
| Port: 3100 |
|
||||||
└────────────────────┘
|
+--------------------+
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 1: Set Up Shared Coordinator
|
### Step 1: Set Up Shared Coordinator
|
||||||
@@ -186,7 +186,7 @@ Edit `~/.mcp-coordinator/config.json`:
|
|||||||
{
|
{
|
||||||
"server": {
|
"server": {
|
||||||
"port": 3100,
|
"port": 3100,
|
||||||
"host": "0.0.0.0", // ← Changed from 127.0.0.1 to allow LAN
|
"host": "0.0.0.0", // <- Changed from 127.0.0.1 to allow LAN
|
||||||
"cors": {
|
"cors": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"origins": ["*"] // Or specific IPs
|
"origins": ["*"] // Or specific IPs
|
||||||
@@ -422,15 +422,15 @@ http://127.0.0.1:3100/dashboard shows:
|
|||||||
|
|
||||||
```
|
```
|
||||||
Active Agents (2)
|
Active Agents (2)
|
||||||
├─ 270015376-operator-reports
|
+- 270015376-operator-reports
|
||||||
│ └─ Files: plugins/endpoints/api/routes.py
|
| +- Files: plugins/endpoints/api/routes.py
|
||||||
│ └─ Status: Working
|
| +- Status: Working
|
||||||
│ └─ Since: 2 minutes ago
|
| +- Since: 2 minutes ago
|
||||||
│
|
|
|
||||||
└─ 270015376-fleet-alerts
|
+- 270015376-fleet-alerts
|
||||||
└─ Files: plugins/notifications/models/notification.py
|
+- Files: plugins/notifications/models/notification.py
|
||||||
└─ Status: Working
|
+- Status: Working
|
||||||
└─ Since: 1 minute ago
|
+- Since: 1 minute ago
|
||||||
|
|
||||||
Consultations (0)
|
Consultations (0)
|
||||||
No conflicts detected
|
No conflicts detected
|
||||||
@@ -443,13 +443,13 @@ No conflicts detected
|
|||||||
```
|
```
|
||||||
You: "Also update the route handler"
|
You: "Also update the route handler"
|
||||||
Claude: [announce_work for plugins/endpoints/api/routes.py]
|
Claude: [announce_work for plugins/endpoints/api/routes.py]
|
||||||
Claude: "⚠️ Conflict detected!"
|
Claude: "[!] Conflict detected!"
|
||||||
Claude: "Agent '270015376-operator-reports' is currently modifying routes.py"
|
Claude: "Agent '270015376-operator-reports' is currently modifying routes.py"
|
||||||
Claude: [post_to_thread]
|
Claude: [post_to_thread]
|
||||||
Claude: "Consulting... Opening thread #1"
|
Claude: "Consulting... Opening thread #1"
|
||||||
|
|
||||||
# Session 1 sees notification via MQTT
|
# Session 1 sees notification via MQTT
|
||||||
Claude (Session 1): "📢 New consultation: Agent '270015376-fleet-alerts' also needs routes.py"
|
Claude (Session 1): "[ANNOUNCE] New consultation: Agent '270015376-fleet-alerts' also needs routes.py"
|
||||||
Claude (Session 1): [Reads thread]
|
Claude (Session 1): [Reads thread]
|
||||||
Claude (Session 1): [post_to_thread] "I'm working on _send_operator_report_alert function. What do you need?"
|
Claude (Session 1): [post_to_thread] "I'm working on _send_operator_report_alert function. What do you need?"
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Research findings for coordinating multiple AI agents working on ShopDB simultan
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🏆 Top Recommendation: mcp-coordinator
|
## [TROPHY] Top Recommendation: mcp-coordinator
|
||||||
|
|
||||||
**By:** Maxime Gagnon (swoofer)
|
**By:** Maxime Gagnon (swoofer)
|
||||||
**Status:** Production-ready (v2.3.0, 2500+ tests)
|
**Status:** Production-ready (v2.3.0, 2500+ tests)
|
||||||
@@ -179,7 +179,7 @@ You: "Fix the operator report email alerts"
|
|||||||
|
|
||||||
Claude: [Calls register_agent]
|
Claude: [Calls register_agent]
|
||||||
Claude: [Calls announce_work]
|
Claude: [Calls announce_work]
|
||||||
Claude: "⚠️ Conflict detected! jdoe's AI is also editing routes.py."
|
Claude: "[!] Conflict detected! jdoe's AI is also editing routes.py."
|
||||||
Claude: [Calls post_to_thread]
|
Claude: [Calls post_to_thread]
|
||||||
Claude: "Consulting with other agent... They're adding fleet alerts, I'm fixing operator reports. Different functions."
|
Claude: "Consulting with other agent... They're adding fleet alerts, I'm fixing operator reports. Different functions."
|
||||||
Claude: [Waits for response]
|
Claude: [Waits for response]
|
||||||
@@ -326,13 +326,13 @@ essaim run swarm --agents 3 -p ~/flask-shopdb
|
|||||||
|
|
||||||
### For Air-Gapped Environment (ADR-004)
|
### For Air-Gapped Environment (ADR-004)
|
||||||
|
|
||||||
✅ **Works perfectly:**
|
[X] **Works perfectly:**
|
||||||
- Runs entirely locally (no internet required)
|
- Runs entirely locally (no internet required)
|
||||||
- SQLite database (no external DB)
|
- SQLite database (no external DB)
|
||||||
- MQTT broker embedded (no external service)
|
- MQTT broker embedded (no external service)
|
||||||
- Dashboard is local HTTP (no cloud)
|
- Dashboard is local HTTP (no cloud)
|
||||||
|
|
||||||
✅ **Team mode on LAN:**
|
[X] **Team mode on LAN:**
|
||||||
- Runs on internal network only
|
- Runs on internal network only
|
||||||
- No external connections
|
- No external connections
|
||||||
- All data stays in your environment
|
- All data stays in your environment
|
||||||
@@ -478,7 +478,7 @@ Claude: "Registered intent to modify routes.py. No conflicts. Proceeding..."
|
|||||||
You: "Fix the fleet alert function in routes.py"
|
You: "Fix the fleet alert function in routes.py"
|
||||||
|
|
||||||
Claude: [Calls announce_work for plugins/endpoints/api/routes.py]
|
Claude: [Calls announce_work for plugins/endpoints/api/routes.py]
|
||||||
Claude: "⚠️ Conflict detected! Another session (270015376-main) is editing routes.py."
|
Claude: "[!] Conflict detected! Another session (270015376-main) is editing routes.py."
|
||||||
Claude: [Opens consultation thread]
|
Claude: [Opens consultation thread]
|
||||||
Claude: "Consulting... Other session is working on _send_operator_report_alert. I need _alert_targets_endpoint. Different functions, can proceed in parallel."
|
Claude: "Consulting... Other session is working on _send_operator_report_alert. I need _alert_targets_endpoint. Different functions, can proceed in parallel."
|
||||||
```
|
```
|
||||||
@@ -527,11 +527,11 @@ Open: http://localhost:3100/dashboard
|
|||||||
|
|
||||||
| Tool | Status | Notes |
|
| Tool | Status | Notes |
|
||||||
|------|--------|-------|
|
|------|--------|-------|
|
||||||
| **Claude Code** | ✅ Perfect | Native MCP support |
|
| **Claude Code** | [X] Perfect | Native MCP support |
|
||||||
| **Gortex** | ✅ Compatible | Both are MCP servers, no conflict |
|
| **Gortex** | [X] Compatible | Both are MCP servers, no conflict |
|
||||||
| **MySQL MCP** | ✅ Compatible | Separate concern |
|
| **MySQL MCP** | [X] Compatible | Separate concern |
|
||||||
| **Browser MCP** | ✅ Compatible | Separate concern |
|
| **Browser MCP** | [X] Compatible | Separate concern |
|
||||||
| **GitHub MCP** | ✅ Compatible | Can coordinate PR creation |
|
| **GitHub MCP** | [X] Compatible | Can coordinate PR creation |
|
||||||
|
|
||||||
### Workflow Example:
|
### Workflow Example:
|
||||||
|
|
||||||
@@ -540,7 +540,7 @@ You: "Review all plugins for ADR compliance and create PRs for fixes"
|
|||||||
|
|
||||||
Claude (Session 1): [Announces] "Reviewing plugins/notifications/"
|
Claude (Session 1): [Announces] "Reviewing plugins/notifications/"
|
||||||
Claude (Session 2): [Announces] "Reviewing plugins/endpoints/"
|
Claude (Session 2): [Announces] "Reviewing plugins/endpoints/"
|
||||||
→ No conflict, both proceed
|
-> No conflict, both proceed
|
||||||
|
|
||||||
Claude (Session 1): [Gortex] Finds code patterns
|
Claude (Session 1): [Gortex] Finds code patterns
|
||||||
Claude (Session 1): [Coordinator] Announces intent to fix
|
Claude (Session 1): [Coordinator] Announces intent to fix
|
||||||
@@ -631,13 +631,13 @@ Based on your `.claude/AI-COLLABORATION.md` proposal:
|
|||||||
|
|
||||||
### Immediate (Today):
|
### Immediate (Today):
|
||||||
|
|
||||||
1. ✅ Read this evaluation
|
1. [X] Read this evaluation
|
||||||
2. ⏳ Install mcp-coordinator: `npm install -g mcp-coordinator`
|
2. [WAIT] Install mcp-coordinator: `npm install -g mcp-coordinator`
|
||||||
3. ⏳ Run init: `mcp-coordinator init`
|
3. [WAIT] Run init: `mcp-coordinator init`
|
||||||
4. ⏳ Start daemon: `mcp-coordinator server start --daemon`
|
4. [WAIT] Start daemon: `mcp-coordinator server start --daemon`
|
||||||
5. ⏳ Add to `.claude/mcp-servers.json`
|
5. [WAIT] Add to `.claude/mcp-servers.json`
|
||||||
6. ⏳ Restart Claude Code
|
6. [WAIT] Restart Claude Code
|
||||||
7. ⏳ Test: `coordinator_status()` in Claude
|
7. [WAIT] Test: `coordinator_status()` in Claude
|
||||||
|
|
||||||
**Time:** 5-10 minutes
|
**Time:** 5-10 minutes
|
||||||
|
|
||||||
|
|||||||
@@ -159,15 +159,15 @@ ssh shopfloor@192.168.100.10 "net localgroup users"
|
|||||||
|
|
||||||
| Task | SupportUser | shopfloor |
|
| Task | SupportUser | shopfloor |
|
||||||
|------|-------------|-----------|
|
|------|-------------|-----------|
|
||||||
| Install service | ✓ Yes | ✗ No |
|
| Install service | [X] Yes | [ ] No |
|
||||||
| Start/stop service | ✓ Yes | ✗ No (needs admin) |
|
| Start/stop service | [X] Yes | [ ] No (needs admin) |
|
||||||
| Read service logs | ✓ Yes | △ Limited |
|
| Read service logs | [X] Yes | [~] Limited |
|
||||||
| Run tray app | ✓ Yes | ✓ Yes |
|
| Run tray app | [X] Yes | [X] Yes |
|
||||||
| Submit reports | ✓ Yes | ✓ Yes |
|
| Submit reports | [X] Yes | [X] Yes |
|
||||||
| Access user profile | Own only | Own only |
|
| Access user profile | Own only | Own only |
|
||||||
| Windows Event Log | ✓ Full access | △ Limited |
|
| Windows Event Log | [X] Full access | [~] Limited |
|
||||||
| Install software | ✓ Yes | ✗ No |
|
| Install software | [X] Yes | [ ] No |
|
||||||
| Modify registry | ✓ Yes | △ HKCU only |
|
| Modify registry | [X] Yes | [~] HKCU only |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ Claude:
|
|||||||
9. [Wait 5s]
|
9. [Wait 5s]
|
||||||
10. [SSH: Check tray] Get-Process shopdb-endpoint-tray... Running
|
10. [SSH: Check tray] Get-Process shopdb-endpoint-tray... Running
|
||||||
11. [SSH: Screenshot] Capturing tray notification...
|
11. [SSH: Screenshot] Capturing tray notification...
|
||||||
12. ✅ Complete! Agent installed, connected, and received fleet alert.
|
12. [X] Complete! Agent installed, connected, and received fleet alert.
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -246,12 +246,12 @@ Claude:
|
|||||||
|
|
||||||
| Requirement | Status | Command to Check |
|
| Requirement | Status | Command to Check |
|
||||||
|-------------|--------|------------------|
|
|-------------|--------|------------------|
|
||||||
| OpenSSH Server installed | ⏳ | `Get-WindowsCapability -Online -Name OpenSSH.Server*` |
|
| OpenSSH Server installed | [WAIT] | `Get-WindowsCapability -Online -Name OpenSSH.Server*` |
|
||||||
| SSH service running | ⏳ | `Get-Service sshd` |
|
| SSH service running | [WAIT] | `Get-Service sshd` |
|
||||||
| Port 22 open in firewall | ⏳ | `Get-NetFirewallRule -Name sshd` |
|
| Port 22 open in firewall | [WAIT] | `Get-NetFirewallRule -Name sshd` |
|
||||||
| User has password set | ⏳ | `net user ShopFloor` |
|
| User has password set | [WAIT] | `net user ShopFloor` |
|
||||||
| Network connectivity | ✅ | `arp -a` shows 192.168.100.10 |
|
| Network connectivity | [X] | `arp -a` shows 192.168.100.10 |
|
||||||
| Internal network configured | ✅ | VM has 192.168.100.10 |
|
| Internal network configured | [X] | VM has 192.168.100.10 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -55,12 +55,14 @@ export default [
|
|||||||
path: 'models',
|
path: 'models',
|
||||||
name: 'model-catalog-models',
|
name: 'model-catalog-models',
|
||||||
component: () => import('../../views/settings/ModelsList.vue')
|
component: () => import('../../views/settings/ModelsList.vue')
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'operatingsystems',
|
|
||||||
name: 'model-catalog-os',
|
|
||||||
component: () => import('../../.plugins-staged/computers/views/OperatingSystemsList.vue')
|
|
||||||
}
|
}
|
||||||
|
// TODO: Operating Systems route should be added by computers plugin, not hardcoded in core
|
||||||
|
// Lean builds without computers plugin fail because this import doesn't exist
|
||||||
|
// {
|
||||||
|
// path: 'operatingsystems',
|
||||||
|
// name: 'model-catalog-os',
|
||||||
|
// component: () => import('../../.plugins-staged/computers/views/OperatingSystemsList.vue')
|
||||||
|
// }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,13 +27,14 @@
|
|||||||
>
|
>
|
||||||
Models
|
Models
|
||||||
</router-link>
|
</router-link>
|
||||||
<router-link
|
<!-- TODO: Operating Systems tab should be added by computers plugin -->
|
||||||
|
<!-- <router-link
|
||||||
:to="{ name: 'model-catalog-os' }"
|
:to="{ name: 'model-catalog-os' }"
|
||||||
class="tab"
|
class="tab"
|
||||||
:class="{ active: $route.name === 'model-catalog-os' }"
|
:class="{ active: $route.name === 'model-catalog-os' }"
|
||||||
>
|
>
|
||||||
Operating Systems
|
Operating Systems
|
||||||
</router-link>
|
</router-link> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
|
|||||||
Reference in New Issue
Block a user