- Create Economist SubmissionTracking package correctly: * mainArticle = full blog post content * coverLetter = 216-word SIR— letter * Links to blog post via blogPostId - Archive 'Letter to The Economist' from blog posts (it's the cover letter) - Fix date display on article cards (use published_at) - Target publication already displaying via blue badge Database changes: - Make blogPostId optional in SubmissionTracking model - Economist package ID: 68fa85ae49d4900e7f2ecd83 - Le Monde package ID: 68fa2abd2e6acd5691932150 Next: Enhanced modal with tabs, validation, export 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2540 lines
80 KiB
Markdown
2540 lines
80 KiB
Markdown
# Multi-Project Governance System - Implementation Plan
|
|
|
|
**Project:** Tractatus Agentic Governance Framework
|
|
**Scope:** AI-Powered Rule Management + Multi-Project Infrastructure
|
|
**Standard:** World-class design and implementation
|
|
**Target:** Potential commercial product for Claude Code users
|
|
|
|
---
|
|
|
|
## 🎯 Executive Summary
|
|
|
|
Transform Tractatus from a single-project governance framework into a **multi-project, AI-powered governance platform** that:
|
|
|
|
1. **Replaces fragile CLAUDE.md** with validated, optimized governance rules
|
|
2. **Enables multi-project management** across portfolio with variable substitution
|
|
3. **Provides AI-assisted rule optimization** for clarity and effectiveness
|
|
4. **Offers project templates** for instant deployment to new projects
|
|
5. **Validates rules in real-time** using the 5 core Tractatus services
|
|
|
|
**Commercial Potential:** Solo developers to enterprise teams managing multiple AI-assisted projects
|
|
|
|
---
|
|
|
|
## 📐 System Architecture
|
|
|
|
### Three-Tier Rule System
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ TIER 1: UNIVERSAL RULES │
|
|
│ • Apply to ALL projects │
|
|
│ • Contain variables: ${DB_PORT}, ${PROJECT_NAME} │
|
|
│ • Example: "Database MUST use ${DB_TYPE}" │
|
|
└─────────────────────────────────────────────────────┘
|
|
↓ inherited by
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ TIER 2: PROJECT-INHERITED RULES │
|
|
│ • Universal rules with project variables applied │
|
|
│ • Tractatus: ${DB_TYPE} → MongoDB │
|
|
│ • SY Digital: ${DB_TYPE} → PostgreSQL │
|
|
└─────────────────────────────────────────────────────┘
|
|
+ combined with
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ TIER 3: PROJECT-SPECIFIC RULES │
|
|
│ • Unique to one project │
|
|
│ • Example: "Blog posts MUST cite case studies" │
|
|
└─────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Core Components
|
|
|
|
```
|
|
Frontend (Vanilla JS + Tailwind)
|
|
├── Rule Manager Dashboard
|
|
├── Rule Editor with AI Assistant
|
|
├── Project Manager Dashboard
|
|
├── CLAUDE.md Migration Wizard
|
|
└── Project Configuration Editor
|
|
|
|
Backend (Node.js + Express)
|
|
├── Rule Management API
|
|
├── Project Management API
|
|
├── AI Services
|
|
│ ├── RuleOptimizer.service.js
|
|
│ ├── ClaudeMdAnalyzer.service.js
|
|
│ ├── RuleSuggestionEngine.service.js
|
|
│ └── RuleInterpolator.service.js
|
|
├── Validation Engine
|
|
│ └── RuleValidator.service.js (integrates 5 core services)
|
|
└── Template System
|
|
|
|
Database (MongoDB)
|
|
├── governanceRules (enhanced with scope, variables)
|
|
├── projects (NEW)
|
|
├── projectRules (NEW - overrides)
|
|
├── templates (NEW)
|
|
├── sessions (NEW - concurrent session support)
|
|
├── sessionState (NEW - session-specific state)
|
|
└── tokenCheckpoints (NEW - session milestones)
|
|
```
|
|
|
|
---
|
|
|
|
## 🗂️ Database Schema
|
|
|
|
### Enhanced `governanceRules` Collection
|
|
|
|
```javascript
|
|
{
|
|
id: "univ_001",
|
|
|
|
// NEW FIELDS for multi-project
|
|
scope: "UNIVERSAL", // UNIVERSAL | PROJECT_SPECIFIC
|
|
applicableProjects: "*", // "*" or ["tractatus", "family-history"]
|
|
variables: ["DB_TYPE", "DB_PORT"], // Required variables for interpolation
|
|
|
|
// Existing fields
|
|
text: "Database connections MUST use ${DB_TYPE} on port ${DB_PORT}",
|
|
quadrant: "SYSTEM",
|
|
persistence: "HIGH",
|
|
category: "technical",
|
|
priority: 90,
|
|
temporalScope: "PERMANENT",
|
|
active: true,
|
|
|
|
// NEW FIELDS for AI optimization
|
|
clarityScore: 92, // 0-100, AI-calculated
|
|
specificityScore: 88, // 0-100, AI-calculated
|
|
actionabilityScore: 95, // 0-100, AI-calculated
|
|
lastOptimized: ISODate("2025-10-10"),
|
|
optimizationHistory: [
|
|
{
|
|
timestamp: ISODate("2025-10-10"),
|
|
before: "Database should use ${DB_TYPE}",
|
|
after: "Database MUST use ${DB_TYPE} on port ${DB_PORT}",
|
|
reason: "Changed weak language, added port parameter"
|
|
}
|
|
],
|
|
|
|
// Validation results
|
|
validationStatus: "PASSED", // PASSED | FAILED | NEEDS_REVIEW
|
|
lastValidated: ISODate("2025-10-10"),
|
|
validationResults: {
|
|
classification: { passed: true, quadrant: "SYSTEM", persistence: "HIGH" },
|
|
parameterExtraction: { passed: true, params: { DB_TYPE: "...", DB_PORT: "..." } },
|
|
conflictDetection: { passed: true, conflicts: [] },
|
|
boundaryCheck: { passed: true }
|
|
},
|
|
|
|
// Usage tracking
|
|
usageStats: {
|
|
referencedInProjects: ["tractatus", "family-history"],
|
|
timesEnforced: 156,
|
|
conflictsDetected: 3,
|
|
lastEnforced: ISODate("2025-10-10")
|
|
},
|
|
|
|
// Standard metadata
|
|
source: "user_instruction",
|
|
createdBy: "theflow",
|
|
createdAt: ISODate("2025-01-15"),
|
|
updatedAt: ISODate("2025-10-10"),
|
|
version: 2,
|
|
notes: "Core database connection rule"
|
|
}
|
|
```
|
|
|
|
### NEW `projects` Collection
|
|
|
|
```javascript
|
|
{
|
|
_id: ObjectId("..."),
|
|
projectId: "tractatus", // Unique slug
|
|
name: "Tractatus - Agentic Governance",
|
|
description: "AI governance framework demonstration",
|
|
active: true,
|
|
|
|
// Domains
|
|
domains: {
|
|
production: "agenticgovernance.digital",
|
|
mnemonics: ["ago.ovh"],
|
|
staging: "staging.agenticgovernance.digital",
|
|
development: "localhost:9000"
|
|
},
|
|
|
|
// Infrastructure
|
|
infrastructure: {
|
|
vps: {
|
|
provider: "OVHCloud",
|
|
host: "vps-93a693da.vps.ovh.net",
|
|
ip: "51.210.xxx.xxx",
|
|
user: "ubuntu",
|
|
sshKeyPath: "/home/theflow/.ssh/tractatus_deploy",
|
|
sshKeyEnvVar: "TRACTATUS_SSH_KEY", // Reference to .env
|
|
sshPort: 22
|
|
},
|
|
|
|
database: {
|
|
type: "MongoDB",
|
|
host: "localhost",
|
|
port: 27017,
|
|
name_dev: "tractatus_dev",
|
|
name_test: "tractatus_test",
|
|
name_prod: "tractatus_prod",
|
|
authDatabase: "admin",
|
|
backupSchedule: "daily-3am",
|
|
backupRetention: "30-days"
|
|
},
|
|
|
|
repository: {
|
|
url: "git@github.com:user/tractatus.git",
|
|
branch_dev: "develop",
|
|
branch_prod: "main",
|
|
cicd: "GitHub Actions"
|
|
},
|
|
|
|
deployment: {
|
|
method: "SSH + systemd",
|
|
deployPath: "/var/www/tractatus",
|
|
serviceName: "tractatus",
|
|
serviceManager: "systemd",
|
|
restartCommand: "sudo systemctl restart tractatus"
|
|
}
|
|
},
|
|
|
|
// Application
|
|
application: {
|
|
runtime: "Node.js",
|
|
version: "20.x",
|
|
packageManager: "npm",
|
|
port_dev: 9000,
|
|
port_test: 9001,
|
|
port_prod: 3000,
|
|
framework: "Express",
|
|
frontend: "Vanilla JS",
|
|
styling: "Tailwind CSS",
|
|
processManager: "systemd"
|
|
},
|
|
|
|
// Project Variables (used in rule interpolation)
|
|
variables: {
|
|
// Core identifiers
|
|
PROJECT_NAME: "Tractatus",
|
|
PROJECT_SLUG: "tractatus",
|
|
PROJECT_DESCRIPTION: "Agentic Governance Framework",
|
|
|
|
// Database
|
|
DB_TYPE: "MongoDB",
|
|
DB_PORT: "27017",
|
|
DB_NAME_DEV: "tractatus_dev",
|
|
DB_NAME_TEST: "tractatus_test",
|
|
DB_NAME_PROD: "tractatus_prod",
|
|
|
|
// Domains
|
|
PROD_DOMAIN: "agenticgovernance.digital",
|
|
PROD_URL: "https://agenticgovernance.digital",
|
|
MNEMONIC_DOMAIN: "ago.ovh",
|
|
|
|
// Infrastructure
|
|
VPS_HOST: "vps-93a693da.vps.ovh.net",
|
|
VPS_PROVIDER: "OVHCloud",
|
|
SSH_USER: "ubuntu",
|
|
SSH_KEY: "${ENV.TRACTATUS_SSH_KEY}", // References .env
|
|
DEPLOY_PATH: "/var/www/tractatus",
|
|
|
|
// Application
|
|
SERVICE_NAME: "tractatus",
|
|
APP_PORT_DEV: "9000",
|
|
APP_PORT_PROD: "3000",
|
|
|
|
// Tech stack
|
|
RUNTIME: "Node.js",
|
|
FRAMEWORK: "Express",
|
|
FRONTEND: "Vanilla JS",
|
|
STYLING: "Tailwind CSS"
|
|
},
|
|
|
|
// Governance Configuration
|
|
governance: {
|
|
frameworkVersion: "1.0.0",
|
|
universalRulesCount: 12,
|
|
projectSpecificRulesCount: 6,
|
|
totalActiveRules: 18,
|
|
strictMode: true,
|
|
auditRetention: "90-days",
|
|
pressureMonitoring: true,
|
|
metacognitiveVerification: true
|
|
},
|
|
|
|
// Team (for future expansion)
|
|
team: {
|
|
owner: "theflow",
|
|
developers: ["theflow"],
|
|
admins: ["theflow"]
|
|
},
|
|
|
|
// Related Projects
|
|
relatedProjects: ["family-history", "sydigital"],
|
|
templateId: "node-express-mongo",
|
|
clonedFrom: null, // If cloned from another project
|
|
|
|
// Deployment History
|
|
deployments: [
|
|
{
|
|
timestamp: ISODate("2025-10-10T20:00:00Z"),
|
|
version: "1.2.3",
|
|
environment: "production",
|
|
deployedBy: "theflow",
|
|
status: "success",
|
|
duration: "45s"
|
|
}
|
|
],
|
|
|
|
// Status
|
|
status: "active", // active | paused | archived
|
|
lastDeployed: ISODate("2025-10-10"),
|
|
createdAt: ISODate("2025-01-15"),
|
|
createdBy: "theflow",
|
|
updatedAt: ISODate("2025-10-10")
|
|
}
|
|
```
|
|
|
|
### NEW `projectRules` Collection (Overrides)
|
|
|
|
```javascript
|
|
{
|
|
_id: ObjectId("..."),
|
|
projectId: "tractatus",
|
|
ruleId: "univ_001", // References governanceRules
|
|
|
|
// Overrides to universal rule
|
|
overrides: {
|
|
priority: 95, // Override universal priority (90 → 95)
|
|
active: true,
|
|
notes: "Critical for Tractatus - increased priority"
|
|
},
|
|
|
|
// Project-specific variable values
|
|
variables: {
|
|
DB_TYPE: "MongoDB",
|
|
DB_PORT: "27017"
|
|
},
|
|
|
|
// Override metadata
|
|
overriddenAt: ISODate("2025-10-10"),
|
|
overriddenBy: "theflow",
|
|
reason: "Database connection is critical for Tractatus"
|
|
}
|
|
```
|
|
|
|
### NEW `templates` Collection
|
|
|
|
```javascript
|
|
{
|
|
_id: ObjectId("..."),
|
|
templateId: "node-express-mongo",
|
|
name: "Node.js + Express + MongoDB",
|
|
description: "Full-stack JavaScript with MongoDB backend",
|
|
category: "full-stack",
|
|
|
|
// Default infrastructure
|
|
defaultInfrastructure: {
|
|
database: {
|
|
type: "MongoDB",
|
|
port: 27017
|
|
},
|
|
application: {
|
|
runtime: "Node.js",
|
|
framework: "Express",
|
|
port_dev: 9000,
|
|
port_prod: 3000
|
|
}
|
|
},
|
|
|
|
// Default variables
|
|
defaultVariables: {
|
|
DB_TYPE: "MongoDB",
|
|
DB_PORT: "27017",
|
|
RUNTIME: "Node.js",
|
|
FRAMEWORK: "Express"
|
|
},
|
|
|
|
// Universal rules included
|
|
universalRules: [
|
|
"univ_001", // DB connection
|
|
"univ_002", // Port config
|
|
"univ_003", // Security boundaries
|
|
"univ_004", // Git workflow
|
|
"univ_005", // Testing requirements
|
|
"univ_006", // Code quality
|
|
"univ_007", // Documentation
|
|
"univ_008", // Error handling
|
|
"univ_009", // Authentication
|
|
"univ_010", // API design
|
|
"univ_011", // Deployment
|
|
"univ_012" // Monitoring
|
|
],
|
|
|
|
// Template-specific suggested rules
|
|
suggestedRules: [
|
|
{
|
|
text: "API endpoints MUST use Express Router pattern",
|
|
quadrant: "SYSTEM",
|
|
persistence: "HIGH",
|
|
category: "technical"
|
|
},
|
|
{
|
|
text: "MongoDB collections MUST use Mongoose models",
|
|
quadrant: "SYSTEM",
|
|
persistence: "HIGH",
|
|
category: "technical"
|
|
}
|
|
],
|
|
|
|
// Files to generate
|
|
scaffolding: {
|
|
directories: [
|
|
"src/models",
|
|
"src/controllers",
|
|
"src/routes",
|
|
"src/services",
|
|
"src/middleware",
|
|
"public",
|
|
"tests/unit",
|
|
"tests/integration"
|
|
],
|
|
files: [
|
|
"package.json",
|
|
".env.example",
|
|
"server.js",
|
|
"README.md"
|
|
]
|
|
},
|
|
|
|
createdAt: ISODate("2025-10-10"),
|
|
createdBy: "system",
|
|
usageCount: 3
|
|
}
|
|
```
|
|
|
|
### NEW `sessions` Collection (Concurrent Session Support)
|
|
|
|
```javascript
|
|
{
|
|
_id: ObjectId("..."),
|
|
sessionId: "uuid-v4-abc-123", // Unique session identifier
|
|
projectId: "tractatus", // Which project this session is working on
|
|
|
|
// Session metadata
|
|
createdAt: ISODate("2025-10-10T14:30:00Z"),
|
|
lastActive: ISODate("2025-10-10T15:45:00Z"),
|
|
status: "active", // active | completed | abandoned
|
|
|
|
// User/AI context
|
|
initiatedBy: "theflow",
|
|
aiModel: "claude-sonnet-4-5",
|
|
purpose: "Implement concurrent session support",
|
|
|
|
// Session metrics (isolated per session)
|
|
metrics: {
|
|
messageCount: 42,
|
|
tokensUsed: 85000,
|
|
tokensRemaining: 115000,
|
|
tokenBudget: 200000,
|
|
pressureLevel: "ELEVATED", // NORMAL | ELEVATED | HIGH | DANGEROUS
|
|
pressureScore: 42.5, // Percentage
|
|
errorsRecent: 2,
|
|
taskComplexity: "high"
|
|
},
|
|
|
|
// Framework activity (session-specific)
|
|
frameworkActivity: {
|
|
pressureChecks: 3,
|
|
instructionsAdded: 2,
|
|
validationsRun: 15,
|
|
boundaryEnforcements: 1,
|
|
metacognitiveVerifications: 8
|
|
},
|
|
|
|
// Checkpoints (when pressure checks were run)
|
|
checkpoints: [
|
|
{ tokens: 50000, timestamp: ISODate("2025-10-10T14:45:00Z"), pressure: 25.0 },
|
|
{ tokens: 100000, timestamp: ISODate("2025-10-10T15:15:00Z"), pressure: 50.0 }
|
|
],
|
|
|
|
// Related sessions (if forked or continued)
|
|
parentSessionId: null, // If continued from compacted conversation
|
|
childSessionIds: [], // If spawned sub-sessions
|
|
|
|
// Completion metadata
|
|
completedAt: null,
|
|
completionReason: null, // budget_exhausted | handoff | task_complete
|
|
|
|
// Indexes
|
|
indexes: [
|
|
{ sessionId: 1 }, // Unique
|
|
{ projectId: 1, status: 1 },
|
|
{ lastActive: 1 }
|
|
]
|
|
}
|
|
```
|
|
|
|
### NEW `sessionState` Collection (Session-Specific State)
|
|
|
|
```javascript
|
|
{
|
|
_id: ObjectId("..."),
|
|
sessionId: "uuid-v4-abc-123", // References sessions collection
|
|
|
|
// Current work context
|
|
currentTask: {
|
|
description: "Implement concurrent session support",
|
|
startedAt: ISODate("2025-10-10T15:30:00Z"),
|
|
filesModified: [
|
|
"/home/theflow/projects/tractatus/docs/MULTI_PROJECT_GOVERNANCE_IMPLEMENTATION_PLAN.md"
|
|
],
|
|
complexity: "high"
|
|
},
|
|
|
|
// Active instructions for this session
|
|
activeInstructions: [
|
|
{
|
|
instructionId: "inst_008",
|
|
text: "HTML/JS files MUST NOT contain CSP violations",
|
|
persistence: "HIGH",
|
|
addedAt: ISODate("2025-10-10T14:30:00Z"),
|
|
source: "instruction-history"
|
|
}
|
|
],
|
|
|
|
// Session-specific temporary rules (expires with session)
|
|
temporaryRules: [
|
|
{
|
|
text: "Focus on database-backed state implementation",
|
|
persistence: "SESSION",
|
|
expiresAt: "session-end"
|
|
}
|
|
],
|
|
|
|
// Validation results (session-specific)
|
|
validations: [
|
|
{
|
|
timestamp: ISODate("2025-10-10T15:00:00Z"),
|
|
type: "cross_reference",
|
|
action: "Edit file: implementation-plan.md",
|
|
result: "APPROVED",
|
|
conflicts: []
|
|
}
|
|
],
|
|
|
|
// Errors and warnings (session-specific)
|
|
errors: [
|
|
{
|
|
timestamp: ISODate("2025-10-10T14:50:00Z"),
|
|
type: "MongoServerError",
|
|
message: "E11000 duplicate key error",
|
|
resolved: true
|
|
}
|
|
],
|
|
|
|
// Last updated
|
|
updatedAt: ISODate("2025-10-10T15:45:00Z"),
|
|
|
|
// Indexes
|
|
indexes: [
|
|
{ sessionId: 1 } // Unique
|
|
]
|
|
}
|
|
```
|
|
|
|
### NEW `tokenCheckpoints` Collection (Session Milestones)
|
|
|
|
```javascript
|
|
{
|
|
_id: ObjectId("..."),
|
|
sessionId: "uuid-v4-abc-123",
|
|
|
|
// Checkpoint configuration
|
|
tokenBudget: 200000,
|
|
checkpoints: [
|
|
{ threshold: 50000, percentage: 25, label: "25%" },
|
|
{ threshold: 100000, percentage: 50, label: "50%" },
|
|
{ threshold: 150000, percentage: 75, label: "75%" }
|
|
],
|
|
|
|
// Checkpoint execution history
|
|
executedCheckpoints: [
|
|
{
|
|
threshold: 50000,
|
|
executedAt: ISODate("2025-10-10T14:45:00Z"),
|
|
tokensAtExecution: 50123,
|
|
messagesAtExecution: 18,
|
|
pressureLevel: "NORMAL",
|
|
pressureScore: 25.1,
|
|
reportedToUser: true,
|
|
nextCheckpoint: 100000
|
|
},
|
|
{
|
|
threshold: 100000,
|
|
executedAt: ISODate("2025-10-10T15:15:00Z"),
|
|
tokensAtExecution: 100456,
|
|
messagesAtExecution: 35,
|
|
pressureLevel: "ELEVATED",
|
|
pressureScore: 50.2,
|
|
reportedToUser: true,
|
|
nextCheckpoint: 150000
|
|
}
|
|
],
|
|
|
|
// Next checkpoint
|
|
nextCheckpoint: 150000,
|
|
nextCheckpointPercentage: 75,
|
|
|
|
// Framework fade detection
|
|
frameworkFadeDetected: false,
|
|
lastPressureCheck: ISODate("2025-10-10T15:15:00Z"),
|
|
missedCheckpoints: [],
|
|
|
|
// Metadata
|
|
createdAt: ISODate("2025-10-10T14:30:00Z"),
|
|
updatedAt: ISODate("2025-10-10T15:15:00Z"),
|
|
|
|
// Indexes
|
|
indexes: [
|
|
{ sessionId: 1 } // Unique
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 📁 File Structure
|
|
|
|
```
|
|
tractatus/
|
|
├── public/
|
|
│ └── admin/
|
|
│ ├── rule-manager.html # Main rule dashboard
|
|
│ ├── rule-editor.html # Detailed rule editor (modal)
|
|
│ ├── project-manager.html # Project list/switcher
|
|
│ ├── project-config.html # Project configuration
|
|
│ ├── claude-md-migrator.html # CLAUDE.md analysis wizard
|
|
│ ├── rule-validator.html # Rule validation results
|
|
│ └── project-templates.html # Template library
|
|
│
|
|
├── public/js/admin/
|
|
│ ├── rule-manager.js # Rule CRUD + filtering
|
|
│ ├── rule-editor.js # Editor with AI suggestions
|
|
│ ├── rule-optimizer-ui.js # AI optimization interface
|
|
│ ├── rule-validator-ui.js # Real-time validation display
|
|
│ ├── project-manager.js # Project CRUD
|
|
│ ├── project-config.js # Config editor
|
|
│ ├── claude-md-migrator.js # CLAUDE.md → rules
|
|
│ ├── variable-manager.js # Variable editor
|
|
│ └── template-selector.js # Template wizard
|
|
│
|
|
├── src/services/
|
|
│ ├── RuleOptimizer.service.js # AI rule improvement
|
|
│ ├── ClaudeMdAnalyzer.service.js # Parse CLAUDE.md
|
|
│ ├── RuleSuggestionEngine.service.js # Suggest rules from text
|
|
│ ├── RuleValidator.service.js # Test rules against framework
|
|
│ ├── RuleInterpolator.service.js # Variable substitution
|
|
│ ├── ProjectManager.service.js # Project CRUD operations
|
|
│ └── TemplateManager.service.js # Template operations
|
|
│
|
|
├── src/models/
|
|
│ ├── GovernanceRule.model.js # Enhanced with scope/variables
|
|
│ ├── Project.model.js # NEW
|
|
│ ├── ProjectRule.model.js # NEW (overrides)
|
|
│ └── Template.model.js # NEW
|
|
│
|
|
├── src/controllers/
|
|
│ ├── admin.controller.js # Existing, expanded
|
|
│ ├── projects.controller.js # NEW
|
|
│ ├── rules.controller.js # NEW (extracted from admin)
|
|
│ └── templates.controller.js # NEW
|
|
│
|
|
├── src/routes/
|
|
│ ├── admin.routes.js # Enhanced
|
|
│ ├── projects.routes.js # NEW
|
|
│ ├── rules.routes.js # NEW
|
|
│ └── templates.routes.js # NEW
|
|
│
|
|
├── scripts/
|
|
│ ├── analyze-claude-md.js # CLI tool
|
|
│ ├── migrate-claude-md.js # One-time migration
|
|
│ ├── validate-all-rules.js # Bulk validation
|
|
│ └── export-project-config.js # Export utility
|
|
│
|
|
└── docs/
|
|
├── MULTI_PROJECT_GOVERNANCE_IMPLEMENTATION_PLAN.md (this file)
|
|
├── API_REFERENCE.md # API documentation
|
|
├── RULE_OPTIMIZATION_GUIDE.md # How AI optimizer works
|
|
└── PROJECT_TEMPLATES_GUIDE.md # Template creation guide
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Implementation Phases
|
|
|
|
---
|
|
|
|
## **PHASE 1: Core Rule Manager UI** (8-10 hours)
|
|
|
|
**Goal:** Build foundational rule management interface with CRUD operations
|
|
|
|
### 1.1 Backend - Enhanced Rule Model (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Update `GovernanceRule.model.js` schema
|
|
- [ ] Add `scope` field (UNIVERSAL | PROJECT_SPECIFIC)
|
|
- [ ] Add `variables` array field
|
|
- [ ] Add `applicableProjects` field
|
|
- [ ] Add `clarityScore`, `specificityScore`, `actionabilityScore`
|
|
- [ ] Add `validationStatus`, `validationResults`
|
|
- [ ] Add `usageStats` nested object
|
|
- [ ] Add `optimizationHistory` array
|
|
- [ ] Create migration script for existing 18 rules
|
|
- [ ] Set all existing rules to scope: "UNIVERSAL"
|
|
- [ ] Initialize new fields with defaults
|
|
- [ ] Test migration on tractatus_dev database
|
|
- [ ] Add indexes for new fields
|
|
- [ ] Index on `scope`
|
|
- [ ] Index on `clarityScore`
|
|
- [ ] Index on `validationStatus`
|
|
|
|
**Files Modified:**
|
|
- `src/models/GovernanceRule.model.js`
|
|
- `scripts/migrations/001-enhance-governance-rules.js` (NEW)
|
|
|
|
**Success Criteria:**
|
|
- [ ] Schema updated without breaking existing functionality
|
|
- [ ] All 18 rules migrated successfully
|
|
- [ ] Database queries work with new fields
|
|
|
|
---
|
|
|
|
### 1.2 Backend - Rule Management API (2 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/controllers/rules.controller.js`
|
|
- [ ] `GET /api/admin/rules` - List all rules
|
|
- [ ] Support filtering: `?scope=UNIVERSAL&quadrant=SYSTEM&active=true`
|
|
- [ ] Support sorting: `?sort=priority&order=desc`
|
|
- [ ] Support pagination: `?page=1&limit=20`
|
|
- [ ] Include computed fields: `interpolated` (if variables present)
|
|
- [ ] `GET /api/admin/rules/:id` - Get single rule with full details
|
|
- [ ] Include validation results
|
|
- [ ] Include usage statistics
|
|
- [ ] Include optimization history
|
|
- [ ] `POST /api/admin/rules` - Create new rule
|
|
- [ ] Validate required fields
|
|
- [ ] Auto-detect variables in text (${VAR_NAME} pattern)
|
|
- [ ] Set initial clarityScore (basic heuristics)
|
|
- [ ] Trigger validation on creation
|
|
- [ ] `PUT /api/admin/rules/:id` - Update rule
|
|
- [ ] Track changes in optimizationHistory
|
|
- [ ] Re-validate after update
|
|
- [ ] Update clarityScore
|
|
- [ ] `DELETE /api/admin/rules/:id` - Soft delete (set active: false)
|
|
- [ ] Check if rule is in use by projects
|
|
- [ ] Warn if deleting universal rule
|
|
- [ ] `GET /api/admin/rules/stats` - Dashboard statistics
|
|
- [ ] Count by scope, quadrant, persistence
|
|
- [ ] Average clarity score
|
|
- [ ] Total active vs inactive
|
|
- [ ] Create `src/routes/rules.routes.js`
|
|
- [ ] Wire up all endpoints
|
|
- [ ] Add authentication middleware
|
|
- [ ] Add validation middleware
|
|
- [ ] Update `src/routes/index.js` to include rules routes
|
|
|
|
**Files Created:**
|
|
- `src/controllers/rules.controller.js`
|
|
- `src/routes/rules.routes.js`
|
|
|
|
**Files Modified:**
|
|
- `src/routes/index.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] All CRUD operations work via API
|
|
- [ ] Filtering and sorting work correctly
|
|
- [ ] Returns proper error messages
|
|
- [ ] Authenticated requests only
|
|
|
|
---
|
|
|
|
### 1.3 Frontend - Rule Manager Dashboard (3 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `public/admin/rule-manager.html`
|
|
- [ ] Header with project selector (placeholder for Phase 3)
|
|
- [ ] Filter panel
|
|
- [ ] Scope dropdown (All | Universal | Project-Specific)
|
|
- [ ] Quadrant dropdown
|
|
- [ ] Persistence dropdown
|
|
- [ ] Active/Inactive toggle
|
|
- [ ] Search box (text search)
|
|
- [ ] Sort controls
|
|
- [ ] Sort by: Priority | Clarity Score | Last Modified | Name
|
|
- [ ] Order: Ascending | Descending
|
|
- [ ] Statistics cards
|
|
- [ ] Total rules
|
|
- [ ] By quadrant (pie chart)
|
|
- [ ] Average clarity score
|
|
- [ ] Rules needing review
|
|
- [ ] Rule list/grid view
|
|
- [ ] Each rule card shows:
|
|
- [ ] Scope badge (Universal | Project)
|
|
- [ ] Rule ID and text (truncated)
|
|
- [ ] Quadrant + Persistence badges
|
|
- [ ] Clarity score (visual bar)
|
|
- [ ] Validation status icon
|
|
- [ ] Variables (if any)
|
|
- [ ] Actions: Edit | Validate | Delete
|
|
- [ ] Pagination controls
|
|
- [ ] "New Rule" button → opens editor modal
|
|
|
|
- [ ] Create `public/js/admin/rule-manager.js`
|
|
- [ ] Fetch rules from API
|
|
- [ ] Implement filtering logic
|
|
- [ ] Implement sorting logic
|
|
- [ ] Implement pagination
|
|
- [ ] Render rule cards dynamically
|
|
- [ ] Handle search with debouncing
|
|
- [ ] Update statistics in real-time
|
|
- [ ] Open editor modal on "Edit" click
|
|
- [ ] Confirm before delete
|
|
- [ ] Show success/error toasts
|
|
|
|
**Files Created:**
|
|
- `public/admin/rule-manager.html`
|
|
- `public/js/admin/rule-manager.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Dashboard loads all 18 rules
|
|
- [ ] Filtering works for all criteria
|
|
- [ ] Sorting works correctly
|
|
- [ ] Search finds rules by text
|
|
- [ ] Statistics update when filters change
|
|
- [ ] Responsive design (mobile-friendly)
|
|
|
|
---
|
|
|
|
### 1.4 Frontend - Rule Editor Modal (2.5 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `public/admin/rule-editor.html` (modal component)
|
|
- [ ] Left panel - Rule content
|
|
- [ ] Text: Large textarea with syntax highlighting for ${VARS}
|
|
- [ ] Scope: Radio buttons (Universal | Project-Specific)
|
|
- [ ] Quadrant: Dropdown
|
|
- [ ] Persistence: Dropdown
|
|
- [ ] Category: Dropdown
|
|
- [ ] Priority: Slider (1-100)
|
|
- [ ] Temporal Scope: Dropdown
|
|
- [ ] Active: Toggle
|
|
- [ ] Examples: List with "Add Example" button
|
|
- [ ] Notes: Textarea
|
|
- [ ] Right panel - Preview & Info (Phase 2 will add AI suggestions)
|
|
- [ ] Variables detected: List of ${VAR_NAME} found
|
|
- [ ] Clarity score: Visual indicator (placeholder)
|
|
- [ ] Preview: How rule looks when interpolated (Phase 3)
|
|
- [ ] Footer
|
|
- [ ] Cancel button
|
|
- [ ] Save button
|
|
- [ ] Save & Validate button
|
|
|
|
- [ ] Create `public/js/admin/rule-editor.js`
|
|
- [ ] Initialize modal with rule data (edit mode) or blank (create mode)
|
|
- [ ] Detect variables in text as user types
|
|
- [ ] Regex: `/\$\{([A-Z_]+)\}/g`
|
|
- [ ] Update variables list in real-time
|
|
- [ ] Form validation
|
|
- [ ] Required: text, scope, quadrant, persistence
|
|
- [ ] Text must not be empty
|
|
- [ ] If universal scope, must contain variables
|
|
- [ ] Save rule via API
|
|
- [ ] POST for new, PUT for update
|
|
- [ ] Show loading state
|
|
- [ ] Handle errors gracefully
|
|
- [ ] Close modal on success
|
|
- [ ] Refresh parent rule-manager list
|
|
|
|
**Files Created:**
|
|
- `public/admin/rule-editor.html`
|
|
- `public/js/admin/rule-editor.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Can create new rules
|
|
- [ ] Can edit existing rules
|
|
- [ ] Variable detection works in real-time
|
|
- [ ] Form validation prevents bad data
|
|
- [ ] Modal closes and list refreshes on save
|
|
- [ ] Error messages are clear
|
|
|
|
---
|
|
|
|
### 1.5 Testing & Polish (1.5 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Manual testing
|
|
- [ ] Create new rule from scratch
|
|
- [ ] Edit existing rule
|
|
- [ ] Delete rule (confirm it soft-deletes)
|
|
- [ ] Filter by each criterion
|
|
- [ ] Sort by each field
|
|
- [ ] Search for rules
|
|
- [ ] Test pagination with >20 rules (create dummy rules if needed)
|
|
- [ ] Error handling
|
|
- [ ] Test API failures (disconnect network)
|
|
- [ ] Test validation failures (invalid data)
|
|
- [ ] Test edge cases (empty lists, no rules)
|
|
- [ ] UI Polish
|
|
- [ ] Consistent styling with existing admin pages
|
|
- [ ] Responsive design checks
|
|
- [ ] Loading states for async operations
|
|
- [ ] Toast notifications for success/error
|
|
- [ ] Accessibility (keyboard navigation, ARIA labels)
|
|
- [ ] Documentation
|
|
- [ ] Add comments to complex functions
|
|
- [ ] Create basic user guide in README
|
|
|
|
**Success Criteria:**
|
|
- [ ] No bugs found in happy path
|
|
- [ ] Error cases handled gracefully
|
|
- [ ] UI is polished and professional
|
|
- [ ] Accessible and responsive
|
|
|
|
---
|
|
|
|
## **PHASE 2: AI Rule Optimizer & CLAUDE.md Analyzer** (10-12 hours)
|
|
|
|
**Goal:** Add intelligent rule optimization and CLAUDE.md migration
|
|
|
|
### 2.1 Backend - Rule Optimizer Service (3 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/services/RuleOptimizer.service.js`
|
|
- [ ] **Clarity Analysis**
|
|
- [ ] `analyzeClarity(ruleText)` → returns score 0-100
|
|
- [ ] Detect vague language: "try", "maybe", "consider", "might"
|
|
- [ ] Detect hedging: "probably", "possibly", "perhaps"
|
|
- [ ] Detect weak imperatives: "should" vs "MUST"
|
|
- [ ] Score based on: specificity, actionability, unambiguousness
|
|
- [ ] **Specificity Analysis**
|
|
- [ ] `analyzeSpecificity(ruleText)` → returns score 0-100
|
|
- [ ] Check for concrete parameters: ports, paths, URLs
|
|
- [ ] Check for explicit values vs generic terms
|
|
- [ ] Detect "this project" → suggest explicit name
|
|
- [ ] **Actionability Analysis**
|
|
- [ ] `analyzeActionability(ruleText)` → returns score 0-100
|
|
- [ ] Can a human/AI act on this without ambiguity?
|
|
- [ ] Does it specify WHO, WHAT, WHEN, WHERE?
|
|
- [ ] **Optimization Suggestions**
|
|
- [ ] `suggestOptimizations(ruleText)` → returns array of suggestions
|
|
- [ ] Suggest replacing weak language: "try to" → "MUST"
|
|
- [ ] Suggest adding parameters: "use MongoDB" → "use MongoDB (port ${DB_PORT})"
|
|
- [ ] Suggest replacing vague terms: "this project" → "${PROJECT_NAME} project (${TEMPORAL_SCOPE})"
|
|
- [ ] Suggest removing hedging: "maybe consider" → "consider" or remove
|
|
- [ ] **Auto-Optimize**
|
|
- [ ] `optimize(ruleText, options)` → returns optimized text
|
|
- [ ] Apply all suggestions automatically
|
|
- [ ] Options: aggressive (applies all) vs conservative (applies safe ones)
|
|
- [ ] Return before/after diff
|
|
|
|
**Algorithm Example:**
|
|
```javascript
|
|
analyzeClarity(text) {
|
|
let score = 100;
|
|
|
|
// Detect weak language
|
|
const weakWords = ['try', 'maybe', 'consider', 'might', 'probably'];
|
|
weakWords.forEach(word => {
|
|
if (new RegExp(`\\b${word}\\b`, 'i').test(text)) {
|
|
score -= 15;
|
|
}
|
|
});
|
|
|
|
// Detect strong imperatives (bonus)
|
|
const strongWords = ['MUST', 'SHALL', 'REQUIRED', 'PROHIBITED'];
|
|
const hasStrong = strongWords.some(word =>
|
|
new RegExp(`\\b${word}\\b`).test(text)
|
|
);
|
|
if (!hasStrong) score -= 10;
|
|
|
|
// Check for specificity
|
|
if (!/\$\{[A-Z_]+\}/.test(text)) score -= 10; // No variables
|
|
if (!/\d/.test(text)) score -= 5; // No numbers
|
|
|
|
return Math.max(0, Math.min(100, score));
|
|
}
|
|
```
|
|
|
|
**Files Created:**
|
|
- `src/services/RuleOptimizer.service.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Clarity scoring is accurate (test with known good/bad rules)
|
|
- [ ] Suggestions are actionable and improve quality
|
|
- [ ] Auto-optimize produces better rules
|
|
|
|
---
|
|
|
|
### 2.2 Backend - CLAUDE.md Analyzer Service (3 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/services/ClaudeMdAnalyzer.service.js`
|
|
- [ ] `parse(claudeMdContent)` → returns structured analysis
|
|
- [ ] Extract sections by heading
|
|
- [ ] Identify imperative statements (MUST, NEVER, ALWAYS)
|
|
- [ ] Identify conditional statements (IF X THEN Y)
|
|
- [ ] Identify preferences (SHOULD, TRY TO, PREFER)
|
|
- [ ] `extractCandidateRules(parsedContent)` → returns rule candidates
|
|
- [ ] For each imperative statement:
|
|
- [ ] Extract as potential rule
|
|
- [ ] Classify quadrant (keyword-based)
|
|
- [ ] Suggest persistence (MUST→HIGH, SHOULD→MEDIUM, TRY→LOW)
|
|
- [ ] Detect parameters (ports, paths, etc.)
|
|
- [ ] Calculate initial clarity score
|
|
- [ ] Categorize by quality:
|
|
- [ ] ✅ High-quality: Specific, actionable, clear
|
|
- [ ] ⚠️ Needs clarification: Vague, missing details
|
|
- [ ] ❌ Too nebulous: "Be professional", "Do good work"
|
|
- [ ] `detectRedundancies(candidates)` → returns merge suggestions
|
|
- [ ] Find similar rules (text similarity >70%)
|
|
- [ ] Suggest merging into single rule
|
|
- [ ] `suggestImprovements(candidate)` → returns improvement suggestions
|
|
- [ ] Use RuleOptimizer to analyze each candidate
|
|
- [ ] Suggest specific improvements
|
|
- [ ] `generateMigrationPlan(analysis)` → returns migration plan
|
|
- [ ] List of rules to create
|
|
- [ ] List of vague statements needing clarification
|
|
- [ ] List of redundancies to merge
|
|
|
|
**Example Output:**
|
|
```javascript
|
|
{
|
|
totalStatements: 45,
|
|
candidateRules: [
|
|
{
|
|
originalText: "MongoDB port is 27017",
|
|
suggestedRule: {
|
|
text: "Database MUST use ${DB_TYPE} on port ${DB_PORT}",
|
|
scope: "UNIVERSAL",
|
|
quadrant: "SYSTEM",
|
|
persistence: "HIGH",
|
|
variables: ["DB_TYPE", "DB_PORT"],
|
|
clarityScore: 92
|
|
},
|
|
quality: "HIGH",
|
|
autoConvert: true
|
|
},
|
|
{
|
|
originalText: "Try to maintain directory structure",
|
|
suggestedRule: {
|
|
text: "MUST preserve directory structure unless explicitly approved by user",
|
|
scope: "UNIVERSAL",
|
|
quadrant: "OPERATIONAL",
|
|
persistence: "MEDIUM",
|
|
clarityScore: 75
|
|
},
|
|
quality: "NEEDS_CLARIFICATION",
|
|
autoConvert: false,
|
|
improvements: [
|
|
"Change 'Try to' to 'MUST'",
|
|
"Add exception clause"
|
|
]
|
|
},
|
|
{
|
|
originalText: "Be professional",
|
|
quality: "TOO_NEBULOUS",
|
|
autoConvert: false,
|
|
suggestions: [
|
|
"Split into specific rules:",
|
|
"- Use formal tone in error messages",
|
|
"- Avoid slang in user-facing text",
|
|
"- Follow code style guide"
|
|
]
|
|
}
|
|
],
|
|
redundancies: [
|
|
{
|
|
rules: ["Use port 27017", "MongoDB port is 27017"],
|
|
mergeSuggestion: "Database MUST use MongoDB on port 27017"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
**Files Created:**
|
|
- `src/services/ClaudeMdAnalyzer.service.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Accurately extracts imperative statements from CLAUDE.md
|
|
- [ ] Classifies rules into quality tiers
|
|
- [ ] Detects redundancies
|
|
- [ ] Provides actionable improvement suggestions
|
|
|
|
---
|
|
|
|
### 2.3 Backend - API Endpoints for Optimization (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Add to `src/controllers/rules.controller.js`
|
|
- [ ] `POST /api/admin/rules/:id/optimize` - Optimize single rule
|
|
- [ ] Body: `{ mode: "aggressive" | "conservative" }`
|
|
- [ ] Returns: optimized rule + diff + suggestions
|
|
- [ ] `POST /api/admin/rules/analyze-claude-md` - Analyze CLAUDE.md
|
|
- [ ] Body: `{ content: "..." }` (CLAUDE.md text)
|
|
- [ ] Returns: full analysis with candidates
|
|
- [ ] `POST /api/admin/rules/migrate-from-claude-md` - Create rules from analysis
|
|
- [ ] Body: `{ selectedCandidates: [...] }`
|
|
- [ ] Creates rules in database
|
|
- [ ] Returns: created rule IDs
|
|
|
|
**Files Modified:**
|
|
- `src/controllers/rules.controller.js`
|
|
- `src/routes/rules.routes.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Endpoints work and return expected data
|
|
- [ ] Optimization applies suggestions correctly
|
|
- [ ] CLAUDE.md analysis is comprehensive
|
|
|
|
---
|
|
|
|
### 2.4 Frontend - AI Optimization UI (3 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Enhance `public/admin/rule-editor.html` - Add AI Assistant Panel
|
|
- [ ] Right panel now shows:
|
|
- [ ] **Clarity Score**: Visual bar (0-100) with color coding
|
|
- [ ] Green: 80-100
|
|
- [ ] Yellow: 60-79
|
|
- [ ] Red: 0-59
|
|
- [ ] **Specificity Score**: Similar visual
|
|
- [ ] **Actionability Score**: Similar visual
|
|
- [ ] **Ambiguity Detected**: List of issues
|
|
- [ ] "Weak language detected: 'try to'"
|
|
- [ ] "Vague term: 'this project'"
|
|
- [ ] **Suggested Improvements**: List with apply buttons
|
|
- [ ] Each suggestion shows before/after
|
|
- [ ] "Apply" button to auto-apply
|
|
- [ ] "Apply All" button
|
|
- [ ] **Optimization History**: Expandable list
|
|
- [ ] Shows previous versions
|
|
- [ ] Diff view
|
|
- [ ] **"Run AI Optimizer"** button
|
|
- [ ] Calls `/api/admin/rules/:id/optimize`
|
|
- [ ] Shows loading spinner
|
|
- [ ] Displays suggestions
|
|
- [ ] Can apply automatically or review
|
|
|
|
- [ ] Update `public/js/admin/rule-editor.js`
|
|
- [ ] Real-time clarity scoring as user types (debounced)
|
|
- [ ] Call RuleOptimizer API on blur or button click
|
|
- [ ] Display suggestions in UI
|
|
- [ ] Apply suggestion on click
|
|
- [ ] Update textarea
|
|
- [ ] Re-score clarity
|
|
- [ ] Add to optimization history
|
|
- [ ] Show diff between original and optimized
|
|
- [ ] Use diff library (e.g., `diff` npm package or simple highlight)
|
|
|
|
**Files Modified:**
|
|
- `public/admin/rule-editor.html`
|
|
- `public/js/admin/rule-editor.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Real-time clarity scoring works
|
|
- [ ] AI suggestions appear and are actionable
|
|
- [ ] Can apply suggestions individually or all at once
|
|
- [ ] Optimization history tracks changes
|
|
- [ ] UI is intuitive and responsive
|
|
|
|
---
|
|
|
|
### 2.5 Frontend - CLAUDE.md Migration Wizard (2 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `public/admin/claude-md-migrator.html`
|
|
- [ ] **Step 1: Upload CLAUDE.md**
|
|
- [ ] File upload or paste textarea
|
|
- [ ] "Analyze" button
|
|
- [ ] **Step 2: Review Analysis**
|
|
- [ ] Statistics
|
|
- [ ] Total statements found: X
|
|
- [ ] High-quality candidates: Y
|
|
- [ ] Needs clarification: Z
|
|
- [ ] Too nebulous: W
|
|
- [ ] Redundancies detected: R
|
|
- [ ] **High-Quality Rules** (Auto-convert recommended)
|
|
- [ ] List with checkboxes (all checked by default)
|
|
- [ ] Each shows:
|
|
- [ ] Original statement
|
|
- [ ] Suggested rule text
|
|
- [ ] Quadrant/Persistence
|
|
- [ ] Clarity score
|
|
- [ ] **Needs Clarification** (Review required)
|
|
- [ ] List with checkboxes (unchecked by default)
|
|
- [ ] Each shows:
|
|
- [ ] Original statement
|
|
- [ ] Suggested improvements
|
|
- [ ] Can edit inline before creating
|
|
- [ ] **Too Nebulous** (Manual action required)
|
|
- [ ] List (not selectable for auto-creation)
|
|
- [ ] Shows suggestions for how to split/improve
|
|
- [ ] **Redundancies** (Merge suggestions)
|
|
- [ ] Groups of similar rules
|
|
- [ ] Suggested merged version
|
|
- [ ] Can edit merged rule
|
|
- [ ] **Step 3: Create Rules**
|
|
- [ ] "Create Selected Rules" button
|
|
- [ ] Progress bar as rules are created
|
|
- [ ] Success summary: "Created 12 rules, 3 need manual review"
|
|
|
|
- [ ] Create `public/js/admin/claude-md-migrator.js`
|
|
- [ ] Handle file upload or paste
|
|
- [ ] Call `/api/admin/rules/analyze-claude-md`
|
|
- [ ] Render analysis results
|
|
- [ ] Allow editing of suggested rules
|
|
- [ ] Batch create selected rules via `/api/admin/rules/migrate-from-claude-md`
|
|
- [ ] Show progress and results
|
|
|
|
**Files Created:**
|
|
- `public/admin/claude-md-migrator.html`
|
|
- `public/js/admin/claude-md-migrator.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Can upload current CLAUDE.md and get analysis
|
|
- [ ] Analysis categorizes rules correctly
|
|
- [ ] Can review and edit before creating
|
|
- [ ] Batch creation works
|
|
- [ ] Clear feedback on success/failures
|
|
|
|
---
|
|
|
|
### 2.6 Testing & Validation (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Test RuleOptimizer with sample rules
|
|
- [ ] Good rule: Should score high clarity
|
|
- [ ] Vague rule: Should score low and suggest improvements
|
|
- [ ] Apply suggestions and verify improvement
|
|
- [ ] Test CLAUDE.md Analyzer
|
|
- [ ] Analyze actual CLAUDE.md from project
|
|
- [ ] Verify candidates are sensible
|
|
- [ ] Check redundancy detection
|
|
- [ ] Test Migration Wizard
|
|
- [ ] Upload CLAUDE.md
|
|
- [ ] Review suggestions
|
|
- [ ] Create rules
|
|
- [ ] Verify rules appear in rule manager
|
|
- [ ] Edge cases
|
|
- [ ] Empty CLAUDE.md
|
|
- [ ] Malformed content
|
|
- [ ] Already-perfect rules (shouldn't suggest changes)
|
|
|
|
**Success Criteria:**
|
|
- [ ] No bugs in optimization flow
|
|
- [ ] CLAUDE.md analysis is accurate
|
|
- [ ] Migration creates valid rules
|
|
- [ ] Edge cases handled gracefully
|
|
|
|
---
|
|
|
|
## **PHASE 3: Multi-Project Infrastructure** (10-12 hours)
|
|
|
|
**Goal:** Enable management of multiple projects with variable substitution
|
|
|
|
### 3.1 Backend - Project Model & API (3 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/models/Project.model.js`
|
|
- [ ] Define schema (as shown in Database Schema section)
|
|
- [ ] Add static methods
|
|
- [ ] `findBySlug(slug)`
|
|
- [ ] `findActive()`
|
|
- [ ] `findByTemplate(templateId)`
|
|
- [ ] Add instance methods
|
|
- [ ] `getVariables()` - return project variables
|
|
- [ ] `getRules()` - return all rules (universal + project-specific)
|
|
- [ ] `deploy()` - trigger deployment (placeholder for now)
|
|
- [ ] Add virtuals
|
|
- [ ] `totalRules` - count of active rules
|
|
|
|
- [ ] Create `src/models/ProjectRule.model.js`
|
|
- [ ] Schema for project-specific overrides
|
|
- [ ] Reference governanceRules and projects
|
|
|
|
- [ ] Create `src/controllers/projects.controller.js`
|
|
- [ ] `GET /api/admin/projects` - List all projects
|
|
- [ ] Support filtering: `?active=true&template=node-express-mongo`
|
|
- [ ] Include rule counts
|
|
- [ ] `GET /api/admin/projects/:id` - Get project with full config
|
|
- [ ] Include variables
|
|
- [ ] Include infrastructure
|
|
- [ ] Include rule counts (universal + custom)
|
|
- [ ] `POST /api/admin/projects` - Create new project
|
|
- [ ] Validate required fields
|
|
- [ ] Initialize default variables
|
|
- [ ] Link universal rules
|
|
- [ ] Return created project
|
|
- [ ] `PUT /api/admin/projects/:id` - Update project
|
|
- [ ] Allow updating variables, infrastructure, metadata
|
|
- [ ] Validate variable changes don't break rules
|
|
- [ ] `DELETE /api/admin/projects/:id` - Soft delete (set active: false)
|
|
- [ ] Warn if project has custom rules
|
|
- [ ] `GET /api/admin/projects/:id/rules` - Get all rules for project
|
|
- [ ] Return universal rules + project-specific
|
|
- [ ] Interpolate variables
|
|
- [ ] `POST /api/admin/projects/:id/rules` - Add custom rule to project
|
|
- [ ] `PUT /api/admin/projects/:id/rules/:ruleId/override` - Override universal rule
|
|
|
|
- [ ] Create `src/routes/projects.routes.js`
|
|
- [ ] Wire up all endpoints
|
|
- [ ] Add authentication
|
|
|
|
**Files Created:**
|
|
- `src/models/Project.model.js`
|
|
- `src/models/ProjectRule.model.js`
|
|
- `src/controllers/projects.controller.js`
|
|
- `src/routes/projects.routes.js`
|
|
|
|
**Files Modified:**
|
|
- `src/routes/index.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Can create projects via API
|
|
- [ ] Can retrieve projects with all details
|
|
- [ ] Can update project configurations
|
|
- [ ] Rules are correctly associated with projects
|
|
|
|
---
|
|
|
|
### 3.2 Backend - Rule Interpolator Service (2 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/services/RuleInterpolator.service.js`
|
|
- [ ] `interpolate(rule, projectVariables)` → returns expanded rule
|
|
- [ ] Find all `${VAR_NAME}` patterns
|
|
- [ ] Replace with project variable values
|
|
- [ ] Throw error if variable not defined
|
|
- [ ] Return new rule object with `interpolated: true`
|
|
- [ ] `interpolateRules(rules, projectVariables)` → bulk interpolation
|
|
- [ ] `validateVariables(ruleText, availableVariables)` → check if all vars defined
|
|
- [ ] `extractRequiredVariables(ruleText)` → return array of var names
|
|
- [ ] `previewAcrossProjects(ruleId)` → show how rule looks in all projects
|
|
- [ ] Fetch rule and all active projects
|
|
- [ ] Interpolate for each project
|
|
- [ ] Return array of { projectName, expandedRule }
|
|
|
|
**Example:**
|
|
```javascript
|
|
interpolate(rule, variables) {
|
|
let text = rule.text;
|
|
const varPattern = /\$\{([A-Z_]+)\}/g;
|
|
const matches = Array.from(text.matchAll(varPattern));
|
|
|
|
for (const match of matches) {
|
|
const varName = match[1];
|
|
|
|
// Handle env var references: ${ENV.VAR_NAME}
|
|
if (varName.startsWith('ENV.')) {
|
|
const envVar = varName.replace('ENV.', '');
|
|
const value = process.env[envVar];
|
|
if (!value) {
|
|
throw new Error(`Environment variable ${envVar} not set`);
|
|
}
|
|
text = text.replace(match[0], value);
|
|
}
|
|
// Normal project variable
|
|
else {
|
|
const value = variables[varName];
|
|
if (!value) {
|
|
throw new Error(`Variable ${varName} not defined for project`);
|
|
}
|
|
text = text.replace(match[0], value);
|
|
}
|
|
}
|
|
|
|
return { ...rule, text, originalText: rule.text, interpolated: true };
|
|
}
|
|
```
|
|
|
|
**Files Created:**
|
|
- `src/services/RuleInterpolator.service.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Variable substitution works correctly
|
|
- [ ] Handles missing variables with clear errors
|
|
- [ ] Environment variable references work
|
|
- [ ] Can preview rules across all projects
|
|
|
|
---
|
|
|
|
### 3.3 Backend - Seed Initial Projects (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `scripts/seed-projects.js`
|
|
- [ ] Create Tractatus project
|
|
- [ ] Use existing configuration
|
|
- [ ] Map all current rules to it
|
|
- [ ] Create template projects for reference
|
|
- [ ] Family History (placeholder)
|
|
- [ ] SY Digital (placeholder)
|
|
- [ ] Create universal rules
|
|
- [ ] Migrate existing 18 rules or subset to universal
|
|
- [ ] Add variables where appropriate
|
|
|
|
- [ ] Run seed script
|
|
- [ ] Test on tractatus_dev
|
|
- [ ] Verify projects created
|
|
- [ ] Verify rules linked correctly
|
|
|
|
**Files Created:**
|
|
- `scripts/seed-projects.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Tractatus project exists in database
|
|
- [ ] Rules are correctly associated
|
|
- [ ] Can query rules for Tractatus project
|
|
|
|
---
|
|
|
|
### 3.4 Frontend - Project Switcher (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Update all admin pages headers
|
|
- [ ] Add project dropdown in top nav
|
|
- [ ] Current project shown prominently
|
|
- [ ] Dropdown lists all active projects
|
|
- [ ] Clicking project switches context
|
|
- [ ] Store selected project in localStorage
|
|
- [ ] "Manage Projects" link → project manager
|
|
|
|
- [ ] Create `public/js/admin/project-switcher.js`
|
|
- [ ] Fetch projects from API
|
|
- [ ] Render dropdown
|
|
- [ ] Handle project selection
|
|
- [ ] Update localStorage: `currentProjectId`
|
|
- [ ] Refresh page content for new project
|
|
|
|
**Files Modified:**
|
|
- `public/admin/rule-manager.html` (add project switcher)
|
|
- `public/admin/rule-editor.html` (add project switcher)
|
|
- All other admin pages
|
|
|
|
**Files Created:**
|
|
- `public/js/admin/project-switcher.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Project switcher appears on all admin pages
|
|
- [ ] Switching projects updates UI
|
|
- [ ] Current project persists across page reloads
|
|
|
|
---
|
|
|
|
### 3.5 Frontend - Project Manager Dashboard (2.5 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `public/admin/project-manager.html`
|
|
- [ ] Project list/grid
|
|
- [ ] Each project card shows:
|
|
- [ ] Project name
|
|
- [ ] Primary domain
|
|
- [ ] Rule counts (universal + custom)
|
|
- [ ] Last deployed
|
|
- [ ] Status (active/paused)
|
|
- [ ] Actions: Edit | Deploy | Clone | Delete
|
|
- [ ] "New Project" button → opens project wizard
|
|
- [ ] Statistics
|
|
- [ ] Total projects
|
|
- [ ] Total rules across all projects
|
|
- [ ] Projects by template
|
|
|
|
- [ ] Create `public/js/admin/project-manager.js`
|
|
- [ ] Fetch projects from API
|
|
- [ ] Render project cards
|
|
- [ ] Handle edit (open config editor)
|
|
- [ ] Handle delete (confirm + API call)
|
|
- [ ] Handle clone (Phase 5)
|
|
- [ ] Handle deploy (placeholder for now)
|
|
|
|
**Files Created:**
|
|
- `public/admin/project-manager.html`
|
|
- `public/js/admin/project-manager.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Lists all projects
|
|
- [ ] Can navigate to project config editor
|
|
- [ ] Can delete projects with confirmation
|
|
- [ ] Shows accurate statistics
|
|
|
|
---
|
|
|
|
### 3.6 Frontend - Project Configuration Editor (2.5 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `public/admin/project-config.html`
|
|
- [ ] Tabs:
|
|
- [ ] **Overview**
|
|
- [ ] Name (editable)
|
|
- [ ] Description (editable)
|
|
- [ ] Status (active/paused toggle)
|
|
- [ ] Domains (list, can add/remove)
|
|
- [ ] **Infrastructure**
|
|
- [ ] VPS config (host, user, SSH key)
|
|
- [ ] Database config (type, port, name)
|
|
- [ ] Repository config (URL, branches)
|
|
- [ ] Deployment config (path, service name)
|
|
- [ ] **Variables**
|
|
- [ ] List of all variables
|
|
- [ ] Each row: Variable Name | Value | Used in X rules
|
|
- [ ] "Add Variable" button
|
|
- [ ] Can edit inline
|
|
- [ ] Preview rule expansion on hover
|
|
- [ ] **Rules**
|
|
- [ ] List inherited universal rules (read-only, but can override)
|
|
- [ ] List project-specific rules (can edit/delete)
|
|
- [ ] "Add Custom Rule" button
|
|
- [ ] Each rule shows:
|
|
- [ ] Scope badge
|
|
- [ ] Text (interpolated if universal)
|
|
- [ ] Quadrant/Persistence
|
|
- [ ] Actions: Edit | Delete (for custom) | Override (for universal)
|
|
- [ ] **Deployment**
|
|
- [ ] Deployment history table
|
|
- [ ] "Deploy Now" button (placeholder)
|
|
- [ ] Save button (applies to all tabs)
|
|
|
|
- [ ] Create `public/js/admin/project-config.js`
|
|
- [ ] Load project via API
|
|
- [ ] Render tabs
|
|
- [ ] Handle inline editing
|
|
- [ ] Variable management
|
|
- [ ] Add/remove variables
|
|
- [ ] Validate variable names (uppercase, underscores)
|
|
- [ ] Warn if removing variable used in rules
|
|
- [ ] Rule overrides
|
|
- [ ] Open override modal for universal rules
|
|
- [ ] Save overrides via API
|
|
- [ ] Save all changes via PUT /api/admin/projects/:id
|
|
|
|
**Files Created:**
|
|
- `public/admin/project-config.html`
|
|
- `public/js/admin/project-config.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Can edit all project configuration
|
|
- [ ] Variables can be added/removed/edited
|
|
- [ ] Rules are correctly displayed (interpolated)
|
|
- [ ] Changes save successfully
|
|
- [ ] UI prevents invalid states (e.g., removing used variables)
|
|
|
|
---
|
|
|
|
### 3.7 Testing & Integration (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Create second test project
|
|
- [ ] Different variables (e.g., PostgreSQL instead of MongoDB)
|
|
- [ ] Verify rule interpolation works
|
|
- [ ] Switch between projects
|
|
- [ ] Verify rules update correctly
|
|
- [ ] Verify variables are project-specific
|
|
- [ ] Test variable changes
|
|
- [ ] Change a variable value
|
|
- [ ] Verify interpolated rules update
|
|
- [ ] Test edge cases
|
|
- [ ] Variable referenced but not defined (should error)
|
|
- [ ] Environment variables (${ENV.VAR})
|
|
- [ ] Empty project (no custom rules)
|
|
|
|
**Success Criteria:**
|
|
- [ ] Multi-project system works seamlessly
|
|
- [ ] Variable interpolation is accurate
|
|
- [ ] No cross-project data leakage
|
|
- [ ] Error handling is robust
|
|
|
|
---
|
|
|
|
## **PHASE 3.5: Concurrent Session Architecture** (4-6 hours)
|
|
|
|
**Goal:** Enable multiple concurrent Claude Code sessions without state contamination
|
|
|
|
**Context:** Addresses architectural limitation discovered during production testing ([concurrent-session-architecture-limitations.md](/home/theflow/projects/tractatus/docs/research/concurrent-session-architecture-limitations.md)). Current file-based session state (`.claude/*.json`) causes contamination when multiple sessions run concurrently. Solution: Migrate to database-backed session state.
|
|
|
|
### 3.5.1 Backend - Session Models (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/models/Session.model.js`
|
|
- [ ] Schema (as shown in Database Schema section above)
|
|
- [ ] Static methods:
|
|
- [ ] `findActive()` - get all active sessions
|
|
- [ ] `findByProject(projectId)` - sessions for specific project
|
|
- [ ] `createWithUUID()` - generate unique session ID (uuid-v4)
|
|
- [ ] Instance methods:
|
|
- [ ] `updateMetrics(tokenCount, messageCount)` - update session metrics
|
|
- [ ] `recordCheckpoint(tokens, pressure)` - record pressure checkpoint
|
|
- [ ] `complete(reason)` - mark session as completed
|
|
- [ ] Indexes:
|
|
- [ ] Unique index on `sessionId`
|
|
- [ ] Compound index on `projectId` + `status`
|
|
- [ ] Index on `lastActive` for cleanup
|
|
|
|
- [ ] Create `src/models/SessionState.model.js`
|
|
- [ ] Schema (as shown in Database Schema section)
|
|
- [ ] Stores active instructions, validations, errors per session
|
|
- [ ] Index on `sessionId` (unique)
|
|
|
|
- [ ] Create `src/models/TokenCheckpoint.model.js`
|
|
- [ ] Schema (as shown in Database Schema section)
|
|
- [ ] Tracks checkpoints and framework fade detection
|
|
- [ ] Index on `sessionId` (unique)
|
|
|
|
**Files Created:**
|
|
- `src/models/Session.model.js`
|
|
- `src/models/SessionState.model.js`
|
|
- `src/models/TokenCheckpoint.model.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Models created with proper schemas
|
|
- [ ] Indexes configured correctly
|
|
- [ ] Can create/query session documents
|
|
|
|
---
|
|
|
|
### 3.5.2 Backend - Session Management Service (1.5 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/services/SessionManager.service.js`
|
|
- [ ] `initializeSession(projectId, purpose)` → creates new session
|
|
- [ ] Generate UUID v4 for session ID
|
|
- [ ] Create Session document
|
|
- [ ] Create SessionState document
|
|
- [ ] Create TokenCheckpoint document
|
|
- [ ] Return session ID
|
|
- [ ] `getSessionMetrics(sessionId)` → returns current metrics
|
|
- [ ] Fetch from Session.metrics
|
|
- [ ] Calculate pressure score
|
|
- [ ] Return isolated metrics (not contaminated)
|
|
- [ ] `updateSessionActivity(sessionId, data)` → updates session
|
|
- [ ] Update tokensUsed, messageCount, errors
|
|
- [ ] Update lastActive timestamp
|
|
- [ ] Recalculate pressure level
|
|
- [ ] `recordPressureCheckpoint(sessionId, tokens, pressure)` → logs checkpoint
|
|
- [ ] Append to Session.checkpoints
|
|
- [ ] Update TokenCheckpoint.executedCheckpoints
|
|
- [ ] Detect framework fade if missed checkpoint
|
|
- [ ] `addInstruction(sessionId, instruction)` → add to session
|
|
- [ ] Append to SessionState.activeInstructions
|
|
- [ ] No file writes (database only)
|
|
- [ ] `recordValidation(sessionId, validation)` → log validation result
|
|
- [ ] Append to SessionState.validations
|
|
- [ ] `completeSession(sessionId, reason)` → close session
|
|
- [ ] Update Session.status = 'completed'
|
|
- [ ] Set Session.completedAt
|
|
- [ ] Archive metrics for analysis
|
|
- [ ] `cleanupOldSessions(daysOld)` → remove stale sessions
|
|
- [ ] Find sessions older than N days
|
|
- [ ] Archive to cold storage (optional)
|
|
- [ ] Delete from active collections
|
|
|
|
**Files Created:**
|
|
- `src/services/SessionManager.service.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Can create isolated sessions with unique IDs
|
|
- [ ] Metrics are session-specific (no contamination)
|
|
- [ ] Concurrent sessions don't interfere
|
|
- [ ] Old sessions can be cleaned up
|
|
|
|
---
|
|
|
|
### 3.5.3 Scripts - Migrate Session Init to Database (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Update `scripts/session-init.js`
|
|
- [ ] Check if session ID exists in `.claude/session-state.json`
|
|
- [ ] If yes (continued session): Load from MongoDB using existing ID
|
|
- [ ] If no (new session): Create new session via SessionManager
|
|
- [ ] Initialize ContextPressureMonitor with session ID
|
|
- [ ] Update other 4 framework components to use session ID
|
|
- [ ] **Still write** `.claude/session-state.json` (for backward compatibility)
|
|
- [ ] Store only sessionId reference
|
|
- [ ] Actual state lives in MongoDB
|
|
- [ ] Report session ID to user
|
|
|
|
- [ ] Update `scripts/check-session-pressure.js`
|
|
- [ ] Read session ID from `.claude/session-state.json`
|
|
- [ ] Fetch current metrics from MongoDB (not file)
|
|
- [ ] Calculate pressure using session-specific data
|
|
- [ ] Update MongoDB (not file)
|
|
- [ ] Report to user with session ID
|
|
|
|
- [ ] Create `scripts/list-active-sessions.js` (diagnostic tool)
|
|
- [ ] Query MongoDB for all active sessions
|
|
- [ ] Display: sessionId, projectId, tokensUsed, pressureLevel, lastActive
|
|
- [ ] Help user understand concurrent session state
|
|
|
|
**Files Modified:**
|
|
- `scripts/session-init.js`
|
|
- `scripts/check-session-pressure.js`
|
|
|
|
**Files Created:**
|
|
- `scripts/list-active-sessions.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Session initialization uses database
|
|
- [ ] Backward compatible with existing file structure
|
|
- [ ] Pressure checks use isolated session metrics
|
|
- [ ] Can list all active sessions
|
|
|
|
---
|
|
|
|
### 3.5.4 Framework Integration - Update Core Services (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Update `src/services/ContextPressureMonitor.service.js`
|
|
- [ ] Accept sessionId in `initialize(sessionId)`
|
|
- [ ] Load metrics from MongoDB instead of file
|
|
- [ ] Update metrics to MongoDB instead of file
|
|
- [ ] Calculate pressure using session-specific data only
|
|
|
|
- [ ] Update `src/services/InstructionPersistenceClassifier.service.js`
|
|
- [ ] Store new instructions in MongoDB SessionState
|
|
- [ ] **ALSO append** to `.claude/instruction-history.json` (shared state)
|
|
- [ ] Use file locking to prevent race conditions
|
|
- [ ] Instruction history is shared across all sessions
|
|
- [ ] Session state is isolated per session
|
|
|
|
- [ ] Update `src/services/MetacognitiveVerifier.service.js`
|
|
- [ ] Store verification logs in MongoDB VerificationLog (already done)
|
|
- [ ] Ensure sessionId is included in all log entries
|
|
|
|
- [ ] Update `src/services/CrossReferenceValidator.service.js`
|
|
- [ ] No changes needed (reads shared instruction history)
|
|
|
|
- [ ] Update `src/services/BoundaryEnforcer.service.js`
|
|
- [ ] No changes needed (stateless)
|
|
|
|
**Files Modified:**
|
|
- `src/services/ContextPressureMonitor.service.js`
|
|
- `src/services/InstructionPersistenceClassifier.service.js`
|
|
- `src/services/MetacognitiveVerifier.service.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] All 5 framework components session-aware
|
|
- [ ] Shared state (instruction history) uses file locking
|
|
- [ ] Isolated state (session metrics) uses MongoDB
|
|
- [ ] No cross-session contamination
|
|
|
|
---
|
|
|
|
### 3.5.5 Testing - Concurrent Session Tests (0.5 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `tests/integration/concurrent-sessions.test.js`
|
|
- [ ] **Test: Isolated Metrics**
|
|
- [ ] Create two sessions (A, B)
|
|
- [ ] Update A with 50k tokens, 20 messages
|
|
- [ ] Update B with 100k tokens, 40 messages
|
|
- [ ] Verify A metrics show 50k tokens (not 150k)
|
|
- [ ] Verify B metrics show 100k tokens (not 150k)
|
|
- [ ] **Test: Independent Pressure Calculations**
|
|
- [ ] Session A at 25% usage → NORMAL pressure
|
|
- [ ] Session B at 75% usage → HIGH pressure
|
|
- [ ] Verify A reports NORMAL (not contaminated by B)
|
|
- [ ] **Test: Shared Instruction History**
|
|
- [ ] Session A adds instruction "Use MongoDB"
|
|
- [ ] Session B can see instruction in shared history
|
|
- [ ] Verify instruction-history.json contains it
|
|
- [ ] **Test: Session-Specific Validations**
|
|
- [ ] Session A runs validation
|
|
- [ ] Session B runs validation
|
|
- [ ] Verify validations stored separately in MongoDB
|
|
- [ ] **Test: Concurrent Test Suite Execution**
|
|
- [ ] Run test suite in Session A
|
|
- [ ] Simultaneously run test suite in Session B
|
|
- [ ] Verify no MongoDB duplicate key errors
|
|
- [ ] Verify tests pass in both sessions
|
|
|
|
**Files Created:**
|
|
- `tests/integration/concurrent-sessions.test.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] All concurrency tests pass
|
|
- [ ] No metric contamination
|
|
- [ ] No database conflicts
|
|
- [ ] Sessions can run simultaneously
|
|
|
|
---
|
|
|
|
### 3.5.6 Documentation & Migration Guide (0.5 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `docs/CONCURRENT_SESSIONS_GUIDE.md`
|
|
- [ ] Explain the problem (file-based state contamination)
|
|
- [ ] Explain the solution (database-backed session state)
|
|
- [ ] Architecture diagram:
|
|
- [ ] Shared state: instruction-history.json (file-locked)
|
|
- [ ] Isolated state: MongoDB sessions/sessionState/tokenCheckpoints
|
|
- [ ] How to use:
|
|
- [ ] Run `node scripts/session-init.js` as normal
|
|
- [ ] Session ID auto-generated (or continued)
|
|
- [ ] Multiple sessions can run concurrently
|
|
- [ ] Diagnostics:
|
|
- [ ] `node scripts/list-active-sessions.js` to see all sessions
|
|
- [ ] How to debug session contamination
|
|
- [ ] Migration notes:
|
|
- [ ] Existing `.claude/*.json` files still used
|
|
- [ ] Backward compatible
|
|
- [ ] Old sessions auto-migrated on first use
|
|
|
|
- [ ] Update `CLAUDE_Tractatus_Maintenance_Guide.md`
|
|
- [ ] Add section on concurrent session support
|
|
- [ ] Document session ID usage
|
|
- [ ] Update troubleshooting guide
|
|
|
|
**Files Created:**
|
|
- `docs/CONCURRENT_SESSIONS_GUIDE.md`
|
|
|
|
**Files Modified:**
|
|
- `CLAUDE_Tractatus_Maintenance_Guide.md`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Clear documentation of architecture
|
|
- [ ] Migration guide for users
|
|
- [ ] Troubleshooting instructions
|
|
|
|
---
|
|
|
|
### 3.5.7 Testing & Validation (0.5 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Manual testing
|
|
- [ ] Start two concurrent Claude Code sessions
|
|
- [ ] Verify each gets unique session ID
|
|
- [ ] Work in both sessions simultaneously
|
|
- [ ] Check metrics don't contaminate
|
|
- [ ] Run `scripts/list-active-sessions.js`
|
|
- [ ] Production scenario testing
|
|
- [ ] Run test suite in one session
|
|
- [ ] Do development work in another session
|
|
- [ ] Verify no duplicate key errors
|
|
- [ ] Verify test isolation works
|
|
- [ ] Framework fade detection
|
|
- [ ] Simulate missed checkpoint in one session
|
|
- [ ] Verify only that session reports fade (not others)
|
|
- [ ] Cleanup testing
|
|
- [ ] Create old sessions
|
|
- [ ] Run cleanup script
|
|
- [ ] Verify only old sessions removed
|
|
|
|
**Success Criteria:**
|
|
- [ ] Concurrent sessions work flawlessly
|
|
- [ ] No state contamination observed
|
|
- [ ] Framework components function correctly
|
|
- [ ] Cleanup works as expected
|
|
|
|
---
|
|
|
|
**Phase 3.5 Summary:**
|
|
|
|
This phase solves the **single-tenant architecture limitation** by migrating to database-backed session state while preserving backward compatibility with file-based instruction history. After this phase:
|
|
|
|
✅ Multiple Claude Code sessions can run concurrently
|
|
✅ Each session has isolated metrics (tokens, messages, pressure)
|
|
✅ Shared instruction history remains accessible to all sessions
|
|
✅ Test suites can run without conflicts
|
|
✅ Framework fade detection works per-session
|
|
✅ Production + development can run simultaneously
|
|
|
|
**References:**
|
|
- [Concurrent Session Architecture Limitations](/home/theflow/projects/tractatus/docs/research/concurrent-session-architecture-limitations.md)
|
|
- Database schemas: `sessions`, `sessionState`, `tokenCheckpoints` (defined above)
|
|
|
|
---
|
|
|
|
## **PHASE 4: Rule Validation Engine & Testing** (8-10 hours)
|
|
|
|
**Goal:** Real-time rule validation using Tractatus framework services
|
|
|
|
### 4.1 Backend - Rule Validator Service (4 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/services/RuleValidator.service.js`
|
|
- [ ] `validateRule(rule, projectContext)` → comprehensive validation
|
|
- [ ] **Classification Test**
|
|
- [ ] Use InstructionPersistenceClassifier.classify()
|
|
- [ ] Check if classified quadrant matches rule.quadrant
|
|
- [ ] Check if classified persistence matches rule.persistence
|
|
- [ ] Verify parameters extracted correctly
|
|
- [ ] **Parameter Extraction Test**
|
|
- [ ] Use InstructionPersistenceClassifier._extractParameters()
|
|
- [ ] Verify expected parameters are found
|
|
- [ ] Check for false positives (shouldn't extract non-params)
|
|
- [ ] **Conflict Detection Test**
|
|
- [ ] Use CrossReferenceValidator.validate()
|
|
- [ ] Test rule against other active rules
|
|
- [ ] Check for contradictions
|
|
- [ ] **Boundary Test**
|
|
- [ ] Use BoundaryEnforcer.enforce()
|
|
- [ ] Verify rule doesn't violate Tractatus boundaries
|
|
- [ ] Check for values decisions (should be flagged)
|
|
- [ ] **Metacognitive Verification Test** (optional, for complex rules)
|
|
- [ ] Use MetacognitiveVerifier.verify()
|
|
- [ ] Check reasoning quality if rule has examples
|
|
- [ ] Return comprehensive result:
|
|
```javascript
|
|
{
|
|
passed: true,
|
|
tests: {
|
|
classification: {
|
|
passed: true,
|
|
expected: { quadrant: 'SYSTEM', persistence: 'HIGH' },
|
|
actual: { quadrant: 'SYSTEM', persistence: 'HIGH' },
|
|
parameterMatch: true
|
|
},
|
|
parameterExtraction: {
|
|
passed: true,
|
|
params: { port: '27017', db_type: 'MongoDB' }
|
|
},
|
|
conflictDetection: {
|
|
passed: true,
|
|
conflicts: []
|
|
},
|
|
boundaryCheck: {
|
|
passed: true,
|
|
allowed: true
|
|
}
|
|
},
|
|
score: 95, // 0-100
|
|
warnings: [],
|
|
errors: []
|
|
}
|
|
```
|
|
|
|
- [ ] `validateBatch(rules, projectContext)` → validate multiple rules
|
|
- [ ] `generateTestCase(rule)` → auto-generate test for rule
|
|
- [ ] Create instruction object
|
|
- [ ] Create expected classification
|
|
- [ ] Create conflicting action (for conflict test)
|
|
- [ ] Return test case that can be run later
|
|
|
|
**Integration:**
|
|
- [ ] Use existing 5 core services:
|
|
- [ ] InstructionPersistenceClassifier
|
|
- [ ] CrossReferenceValidator
|
|
- [ ] BoundaryEnforcer
|
|
- [ ] ContextPressureMonitor (for pressure-aware validation)
|
|
- [ ] MetacognitiveVerifier
|
|
|
|
**Files Created:**
|
|
- `src/services/RuleValidator.service.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Validation integrates all 5 services
|
|
- [ ] Catches classification mismatches
|
|
- [ ] Detects conflicts between rules
|
|
- [ ] Identifies boundary violations
|
|
- [ ] Returns actionable results
|
|
|
|
---
|
|
|
|
### 4.2 Backend - Validation API Endpoints (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Add to `src/controllers/rules.controller.js`
|
|
- [ ] `POST /api/admin/rules/:id/validate` - Validate single rule
|
|
- [ ] Query param: `?projectId=tractatus` (optional)
|
|
- [ ] Runs all validation tests
|
|
- [ ] Updates rule's `validationStatus` and `validationResults` in DB
|
|
- [ ] Returns results
|
|
- [ ] `POST /api/admin/rules/validate-all` - Validate all rules
|
|
- [ ] Query param: `?projectId=tractatus` (optional)
|
|
- [ ] Runs validation for all active rules
|
|
- [ ] Returns summary + individual results
|
|
- [ ] `POST /api/admin/rules/:id/test` - Run generated test case
|
|
- [ ] Executes auto-generated test
|
|
- [ ] Returns pass/fail
|
|
|
|
**Files Modified:**
|
|
- `src/controllers/rules.controller.js`
|
|
- `src/routes/rules.routes.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Endpoints work and return validation results
|
|
- [ ] Validation results are persisted to database
|
|
- [ ] Can validate single or all rules
|
|
|
|
---
|
|
|
|
### 4.3 Frontend - Rule Validation UI (3 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Enhance `public/admin/rule-editor.html` - Add Validation Panel
|
|
- [ ] Add "Validate" tab in right panel
|
|
- [ ] "Run Validation" button
|
|
- [ ] Validation results display:
|
|
- [ ] Overall status: ✅ PASSED | ⚠️ WARNINGS | ❌ FAILED
|
|
- [ ] Test results (expandable sections):
|
|
- [ ] ✅ Classification Test
|
|
- [ ] Expected vs Actual quadrant/persistence
|
|
- [ ] Parameters extracted
|
|
- [ ] ✅ Parameter Extraction Test
|
|
- [ ] List of extracted parameters
|
|
- [ ] ✅ Conflict Detection Test
|
|
- [ ] No conflicts found / List conflicts
|
|
- [ ] ✅ Boundary Check
|
|
- [ ] Allowed / Blocked (reason)
|
|
- [ ] Warnings (if any)
|
|
- [ ] Errors (if any)
|
|
- [ ] Overall score: 95/100
|
|
- [ ] "Fix Issues" button (if failures)
|
|
- [ ] Opens AI optimizer with context
|
|
|
|
- [ ] Create `public/admin/rule-validator.html` (standalone page)
|
|
- [ ] Bulk validation interface
|
|
- [ ] "Validate All Rules" button
|
|
- [ ] Progress bar during validation
|
|
- [ ] Results table:
|
|
- [ ] Rule ID | Rule Text | Status | Score | Actions
|
|
- [ ] Filter: Show All | Passed | Failed | Warnings
|
|
- [ ] Can click rule to see details
|
|
- [ ] Summary statistics:
|
|
- [ ] Total rules validated
|
|
- [ ] Passed: X (%)
|
|
- [ ] Failed: Y (%)
|
|
- [ ] Average score
|
|
|
|
- [ ] Create `public/js/admin/rule-validator-ui.js`
|
|
- [ ] Handle single rule validation
|
|
- [ ] Call API
|
|
- [ ] Display results in editor panel
|
|
- [ ] Highlight issues in rule text
|
|
- [ ] Handle bulk validation
|
|
- [ ] Call API with progress tracking
|
|
- [ ] Render results table
|
|
- [ ] Update statistics
|
|
- [ ] Interactive result exploration
|
|
- [ ] Click to expand test details
|
|
- [ ] Show diff for classification mismatches
|
|
- [ ] Link to conflicting rules
|
|
|
|
**Files Modified:**
|
|
- `public/admin/rule-editor.html`
|
|
|
|
**Files Created:**
|
|
- `public/admin/rule-validator.html`
|
|
- `public/js/admin/rule-validator-ui.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Can validate rules from editor
|
|
- [ ] Validation results are clear and actionable
|
|
- [ ] Bulk validation works efficiently
|
|
- [ ] Failed rules are easy to identify and fix
|
|
|
|
---
|
|
|
|
### 4.4 Integration Tests for Validator (2 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `tests/integration/rule-validator.test.js`
|
|
- [ ] Test classification accuracy
|
|
- [ ] Create rule with known quadrant
|
|
- [ ] Validate
|
|
- [ ] Verify classification matches
|
|
- [ ] Test parameter extraction
|
|
- [ ] Create rule with variables
|
|
- [ ] Validate
|
|
- [ ] Verify parameters extracted
|
|
- [ ] Test conflict detection
|
|
- [ ] Create two conflicting rules
|
|
- [ ] Validate second rule
|
|
- [ ] Verify conflict detected
|
|
- [ ] Test boundary enforcement
|
|
- [ ] Create rule about values decision
|
|
- [ ] Validate
|
|
- [ ] Verify boundary violation detected
|
|
- [ ] Test validation persistence
|
|
- [ ] Validate rule
|
|
- [ ] Check DB for validation results
|
|
- [ ] Verify validationStatus updated
|
|
|
|
**Files Created:**
|
|
- `tests/integration/rule-validator.test.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] All validation tests pass
|
|
- [ ] Validator correctly identifies issues
|
|
- [ ] Results are persisted
|
|
|
|
---
|
|
|
|
### 4.5 Testing & Polish (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Manual testing
|
|
- [ ] Validate a well-formed rule (should pass)
|
|
- [ ] Validate a poorly-formed rule (should fail)
|
|
- [ ] Create conflicting rules and validate
|
|
- [ ] Run bulk validation on all rules
|
|
- [ ] Edge cases
|
|
- [ ] Rule with no parameters
|
|
- [ ] Rule with undefined variables
|
|
- [ ] Rule that violates boundaries
|
|
- [ ] Performance testing
|
|
- [ ] Validate 100 rules - should complete in reasonable time
|
|
- [ ] UI polish
|
|
- [ ] Loading states during validation
|
|
- [ ] Clear error messages
|
|
- [ ] Success animations
|
|
|
|
**Success Criteria:**
|
|
- [ ] Validation is reliable and accurate
|
|
- [ ] No performance issues
|
|
- [ ] UI is polished and intuitive
|
|
|
|
---
|
|
|
|
## **PHASE 5: Project Templates & Cloning** (6-8 hours)
|
|
|
|
**Goal:** Rapid project creation via templates and cloning
|
|
|
|
### 5.1 Backend - Template Model & Service (2 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/models/Template.model.js`
|
|
- [ ] Schema (as shown in Database Schema section)
|
|
- [ ] Static methods:
|
|
- [ ] `findByCategory(category)`
|
|
- [ ] `findPopular()` (most used)
|
|
|
|
- [ ] Create `src/services/TemplateManager.service.js`
|
|
- [ ] `createProjectFromTemplate(templateId, projectData)` → creates project
|
|
- [ ] Fetch template
|
|
- [ ] Merge template defaults with user overrides
|
|
- [ ] Create project in database
|
|
- [ ] Link universal rules
|
|
- [ ] Add template-suggested rules
|
|
- [ ] Return created project
|
|
- [ ] `cloneProject(sourceProjectId, newProjectData)` → clones existing project
|
|
- [ ] Fetch source project
|
|
- [ ] Copy configuration
|
|
- [ ] Copy custom rules
|
|
- [ ] Apply variable overrides
|
|
- [ ] Create new project
|
|
- [ ] Return created project
|
|
|
|
**Files Created:**
|
|
- `src/models/Template.model.js`
|
|
- `src/services/TemplateManager.service.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Can create projects from templates
|
|
- [ ] Can clone existing projects
|
|
- [ ] New projects have correct rules and variables
|
|
|
|
---
|
|
|
|
### 5.2 Backend - Template & Cloning API (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `src/controllers/templates.controller.js`
|
|
- [ ] `GET /api/admin/templates` - List all templates
|
|
- [ ] `GET /api/admin/templates/:id` - Get template details
|
|
- [ ] `POST /api/admin/projects/from-template` - Create from template
|
|
- [ ] Body: `{ templateId, projectName, variables: {...} }`
|
|
- [ ] `POST /api/admin/projects/:id/clone` - Clone project
|
|
- [ ] Body: `{ newProjectName, variableOverrides: {...} }`
|
|
|
|
- [ ] Create `src/routes/templates.routes.js`
|
|
|
|
**Files Created:**
|
|
- `src/controllers/templates.controller.js`
|
|
- `src/routes/templates.routes.js`
|
|
|
|
**Files Modified:**
|
|
- `src/routes/index.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Endpoints work and create projects
|
|
- [ ] Template-based creation applies defaults
|
|
- [ ] Cloning preserves configuration
|
|
|
|
---
|
|
|
|
### 5.3 Backend - Seed Templates (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `scripts/seed-templates.js`
|
|
- [ ] Create "Node.js + Express + MongoDB" template
|
|
- [ ] Matches Tractatus stack
|
|
- [ ] Links 12 universal rules
|
|
- [ ] Includes Node.js-specific suggested rules
|
|
- [ ] Create "React + Firebase" template (for future)
|
|
- [ ] Create "Python + FastAPI + PostgreSQL" template (for future)
|
|
|
|
- [ ] Run seed script
|
|
- [ ] Verify templates created
|
|
- [ ] Test creating project from template
|
|
|
|
**Files Created:**
|
|
- `scripts/seed-templates.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Templates exist in database
|
|
- [ ] Can create project from template successfully
|
|
|
|
---
|
|
|
|
### 5.4 Frontend - New Project Wizard (2.5 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `public/admin/project-wizard.html` (modal/multi-step form)
|
|
- [ ] **Step 1: Choose Source**
|
|
- [ ] Radio buttons:
|
|
- [ ] 📋 From Template
|
|
- [ ] 📑 Clone Existing Project
|
|
- [ ] ✨ Start from Scratch
|
|
- [ ] **Step 2a: Select Template** (if "From Template")
|
|
- [ ] Grid of template cards
|
|
- [ ] Each shows: Name, Description, Tech stack, Rule count
|
|
- [ ] Click to select
|
|
- [ ] **Step 2b: Select Project** (if "Clone")
|
|
- [ ] Dropdown of existing projects
|
|
- [ ] **Step 3: Project Details**
|
|
- [ ] Project Name (required)
|
|
- [ ] Project Slug (auto-generated from name, editable)
|
|
- [ ] Description
|
|
- [ ] Production Domain
|
|
- [ ] **Step 4: Infrastructure** (pre-filled from template/source)
|
|
- [ ] VPS Host
|
|
- [ ] Database Type & Port
|
|
- [ ] SSH User & Key
|
|
- [ ] Deploy Path
|
|
- [ ] All editable
|
|
- [ ] **Step 5: Variables** (pre-filled, can override)
|
|
- [ ] List of variables from template
|
|
- [ ] Can edit values
|
|
- [ ] Preview how rules will look with these values
|
|
- [ ] **Step 6: Review & Create**
|
|
- [ ] Summary:
|
|
- [ ] Project details
|
|
- [ ] X universal rules will be inherited
|
|
- [ ] Y template rules will be added
|
|
- [ ] Infrastructure summary
|
|
- [ ] "Create Project" button
|
|
|
|
- [ ] Create `public/js/admin/project-wizard.js`
|
|
- [ ] Multi-step form navigation
|
|
- [ ] Load templates from API
|
|
- [ ] Load projects for cloning
|
|
- [ ] Auto-generate slug from name
|
|
- [ ] Variable preview/interpolation
|
|
- [ ] Submit to API
|
|
- [ ] `/api/admin/projects/from-template` or
|
|
- [ ] `/api/admin/projects/:id/clone` or
|
|
- [ ] `/api/admin/projects` (from scratch)
|
|
- [ ] Show progress/success
|
|
- [ ] Redirect to new project config on success
|
|
|
|
**Files Created:**
|
|
- `public/admin/project-wizard.html`
|
|
- `public/js/admin/project-wizard.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Wizard guides user through project creation
|
|
- [ ] Can create from template
|
|
- [ ] Can clone existing project
|
|
- [ ] Can start from scratch
|
|
- [ ] Preview shows interpolated rules
|
|
- [ ] Successfully creates project
|
|
|
|
---
|
|
|
|
### 5.5 Frontend - Template Library Page (Optional) (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `public/admin/project-templates.html`
|
|
- [ ] Browse all templates
|
|
- [ ] Filter by category
|
|
- [ ] View template details
|
|
- [ ] "Use Template" button → opens wizard
|
|
|
|
- [ ] Create `public/js/admin/template-selector.js`
|
|
- [ ] Fetch templates
|
|
- [ ] Render cards
|
|
- [ ] Filter logic
|
|
- [ ] Launch wizard with pre-selected template
|
|
|
|
**Files Created:**
|
|
- `public/admin/project-templates.html`
|
|
- `public/js/admin/template-selector.js`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Easy to browse templates
|
|
- [ ] Can launch wizard from template page
|
|
|
|
---
|
|
|
|
### 5.6 Testing & Validation (0.5 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] Test template creation
|
|
- [ ] Create project from "Node.js + Express + MongoDB" template
|
|
- [ ] Verify all defaults applied
|
|
- [ ] Verify rules linked correctly
|
|
- [ ] Test cloning
|
|
- [ ] Clone Tractatus project
|
|
- [ ] Change variables
|
|
- [ ] Verify rules interpolated with new variables
|
|
- [ ] Test from-scratch
|
|
- [ ] Create project without template
|
|
- [ ] Verify basic setup works
|
|
- [ ] Edge cases
|
|
- [ ] Template with missing rules
|
|
- [ ] Cloning non-existent project
|
|
- [ ] Invalid variable names
|
|
|
|
**Success Criteria:**
|
|
- [ ] All creation methods work
|
|
- [ ] Projects are correctly configured
|
|
- [ ] No data corruption
|
|
|
|
---
|
|
|
|
## **PHASE 6: Polish, Documentation & Deployment** (4-6 hours)
|
|
|
|
**Goal:** Production-ready system with documentation
|
|
|
|
### 6.1 UI/UX Polish (2 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] **Consistent Styling**
|
|
- [ ] Ensure all pages use same Tailwind theme
|
|
- [ ] Consistent button styles
|
|
- [ ] Consistent form styles
|
|
- [ ] Consistent card/panel styles
|
|
- [ ] **Responsive Design**
|
|
- [ ] Test all pages on mobile (320px+)
|
|
- [ ] Test on tablet (768px+)
|
|
- [ ] Adjust layouts for small screens
|
|
- [ ] **Loading States**
|
|
- [ ] Spinners for API calls
|
|
- [ ] Skeleton loaders for lists
|
|
- [ ] Progress bars for long operations
|
|
- [ ] **Error Handling**
|
|
- [ ] Toast notifications for errors
|
|
- [ ] Inline validation messages
|
|
- [ ] Clear error states
|
|
- [ ] **Accessibility**
|
|
- [ ] Keyboard navigation
|
|
- [ ] ARIA labels
|
|
- [ ] Focus management
|
|
- [ ] Color contrast (WCAG AA)
|
|
- [ ] **Animations**
|
|
- [ ] Smooth transitions
|
|
- [ ] Success animations (checkmarks, etc.)
|
|
- [ ] Micro-interactions
|
|
|
|
**Success Criteria:**
|
|
- [ ] Professional, polished appearance
|
|
- [ ] Works on all screen sizes
|
|
- [ ] Accessible to all users
|
|
- [ ] Smooth, delightful interactions
|
|
|
|
---
|
|
|
|
### 6.2 Documentation (2 hours)
|
|
|
|
**Tasks:**
|
|
- [ ] Create `docs/API_REFERENCE.md`
|
|
- [ ] Document all API endpoints
|
|
- [ ] Request/response examples
|
|
- [ ] Error codes
|
|
- [ ] Create `docs/RULE_OPTIMIZATION_GUIDE.md`
|
|
- [ ] How clarity scoring works
|
|
- [ ] How to write high-quality rules
|
|
- [ ] Best practices
|
|
- [ ] Create `docs/PROJECT_TEMPLATES_GUIDE.md`
|
|
- [ ] How to create custom templates
|
|
- [ ] Template schema reference
|
|
- [ ] Create `docs/USER_GUIDE.md`
|
|
- [ ] Getting started
|
|
- [ ] Managing rules
|
|
- [ ] Managing projects
|
|
- [ ] CLAUDE.md migration
|
|
- [ ] Screenshots/videos
|
|
- [ ] Update `README.md`
|
|
- [ ] Feature overview
|
|
- [ ] Installation instructions
|
|
- [ ] Quick start guide
|
|
- [ ] Link to full documentation
|
|
- [ ] Code comments
|
|
- [ ] Add JSDoc comments to all public functions
|
|
- [ ] Explain complex algorithms
|
|
|
|
**Files Created:**
|
|
- `docs/API_REFERENCE.md`
|
|
- `docs/RULE_OPTIMIZATION_GUIDE.md`
|
|
- `docs/PROJECT_TEMPLATES_GUIDE.md`
|
|
- `docs/USER_GUIDE.md`
|
|
|
|
**Files Modified:**
|
|
- `README.md`
|
|
|
|
**Success Criteria:**
|
|
- [ ] Comprehensive documentation
|
|
- [ ] Easy to understand
|
|
- [ ] Code is well-commented
|
|
|
|
---
|
|
|
|
### 6.3 Security Audit (1 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] **Authentication**
|
|
- [ ] Verify all admin endpoints require auth
|
|
- [ ] Check for auth bypasses
|
|
- [ ] **Input Validation**
|
|
- [ ] Verify all user inputs are validated
|
|
- [ ] Check for SQL injection (N/A for MongoDB, but check NoSQL injection)
|
|
- [ ] Check for XSS vulnerabilities
|
|
- [ ] **CORS**
|
|
- [ ] Verify CORS is properly configured
|
|
- [ ] **Environment Variables**
|
|
- [ ] Ensure sensitive data in .env, not codebase
|
|
- [ ] Check .env.example is up to date
|
|
- [ ] **Rate Limiting**
|
|
- [ ] Add rate limiting to API endpoints
|
|
- [ ] **HTTPS**
|
|
- [ ] Ensure production uses HTTPS
|
|
- [ ] No mixed content warnings
|
|
|
|
**Success Criteria:**
|
|
- [ ] No security vulnerabilities found
|
|
- [ ] All sensitive data protected
|
|
- [ ] Production-ready security posture
|
|
|
|
---
|
|
|
|
### 6.4 Performance Optimization (0.5 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] **Database**
|
|
- [ ] Verify all necessary indexes exist
|
|
- [ ] Check slow queries
|
|
- [ ] **Frontend**
|
|
- [ ] Minify JavaScript
|
|
- [ ] Compress images
|
|
- [ ] Lazy load large lists
|
|
- [ ] **API**
|
|
- [ ] Add caching where appropriate
|
|
- [ ] Optimize N+1 queries
|
|
|
|
**Success Criteria:**
|
|
- [ ] Pages load quickly
|
|
- [ ] No performance bottlenecks
|
|
- [ ] Database queries are optimized
|
|
|
|
---
|
|
|
|
### 6.5 Deployment (0.5 hour)
|
|
|
|
**Tasks:**
|
|
- [ ] **Database Migration**
|
|
- [ ] Run all migration scripts on production DB
|
|
- [ ] Verify data integrity
|
|
- [ ] **Deploy Code**
|
|
- [ ] Push to production server
|
|
- [ ] Restart services
|
|
- [ ] **Smoke Tests**
|
|
- [ ] Login works
|
|
- [ ] Can view rules
|
|
- [ ] Can create rule
|
|
- [ ] Can switch projects
|
|
- [ ] No console errors
|
|
- [ ] **Monitoring**
|
|
- [ ] Set up error monitoring (Sentry, etc.)
|
|
- [ ] Set up uptime monitoring
|
|
|
|
**Success Criteria:**
|
|
- [ ] System deployed to production
|
|
- [ ] All features work in production
|
|
- [ ] Monitoring is active
|
|
|
|
---
|
|
|
|
## 📊 Summary
|
|
|
|
### Total Estimated Time: **46-58 hours**
|
|
|
|
| Phase | Estimated Time | Key Deliverables |
|
|
|-------|----------------|------------------|
|
|
| Phase 1: Core Rule Manager | 8-10 hours | Rule CRUD, dashboard, editor |
|
|
| Phase 2: AI Optimizer | 10-12 hours | Rule optimization, CLAUDE.md migration |
|
|
| Phase 3: Multi-Project | 10-12 hours | Project management, variable interpolation |
|
|
| Phase 4: Validation Engine | 8-10 hours | Real-time rule validation |
|
|
| Phase 5: Templates & Cloning | 6-8 hours | Project templates, cloning |
|
|
| Phase 6: Polish & Deployment | 4-6 hours | Documentation, security, deployment |
|
|
|
|
### Milestones
|
|
|
|
**Milestone 1** (After Phase 1): Basic rule management working
|
|
**Milestone 2** (After Phase 2): AI-powered optimization and CLAUDE.md migration
|
|
**Milestone 3** (After Phase 3): Multi-project system operational
|
|
**Milestone 4** (After Phase 4): Validation engine integrated
|
|
**Milestone 5** (After Phase 5): Template system complete
|
|
**Milestone 6** (After Phase 6): **Production-ready, world-class system**
|
|
|
|
---
|
|
|
|
## 🎯 Success Criteria
|
|
|
|
**Product is ready when:**
|
|
|
|
- [ ] All 18+ rules managed via UI
|
|
- [ ] CLAUDE.md successfully migrated to rules
|
|
- [ ] Can manage multiple projects (Tractatus + others)
|
|
- [ ] Rules validated against framework in real-time
|
|
- [ ] Can create projects from templates in <2 minutes
|
|
- [ ] AI optimizer improves rule clarity measurably
|
|
- [ ] Documentation is comprehensive
|
|
- [ ] No security vulnerabilities
|
|
- [ ] Deployed to production and stable
|
|
|
|
**Commercialization Ready When:**
|
|
|
|
- [ ] System is polished and professional
|
|
- [ ] Documentation suitable for external users
|
|
- [ ] Multi-tenant support (user authentication/authorization)
|
|
- [ ] Pricing/billing system (if SaaS)
|
|
- [ ] Marketing materials prepared
|
|
- [ ] Support system in place
|
|
|
|
---
|
|
|
|
## 🚦 Next Steps
|
|
|
|
**Immediate Actions:**
|
|
|
|
1. **Review this plan** - Confirm approach and priorities
|
|
2. **Fix MongoDB persistence issues** - Resolve 3 failing integration tests (quick win)
|
|
3. **Begin Phase 1** - Start with backend rule model enhancements
|
|
4. **Set up task tracking** - Use todo list to track granular progress
|
|
|
|
**Questions to Resolve:**
|
|
|
|
1. Should we proceed with all phases, or focus on subset first?
|
|
2. Any features to add/remove/modify?
|
|
3. Priority order - does this sequence make sense?
|
|
4. Timeline - is this realistic for your schedule?
|
|
|
|
---
|
|
|
|
Ready to start building? 🚀
|