Implements architectural enforcement of governance rules (inst_016/017/018/079) for all external communications. Publication blocked at API level if violations detected. New Features: - Framework content checker script with pattern matching for prohibited terms - Admin UI displays framework violations with severity indicators - Manual "Check Framework" button for pre-publication validation - API endpoint /api/blog/check-framework for real-time content analysis Governance Rules Added: - inst_078: "ff" trigger for manual framework invocation in conversations - inst_079: Dark patterns prohibition (sovereignty principle) - inst_080: Open source commitment enforcement (community principle) - inst_081: Pluralism principle with indigenous framework recognition Session Management: - Fix session-init.js infinite loop (removed early return after tests) - Add session-closedown.js for comprehensive session handoff - Refactor check-csp-violations.js to prevent parent process exit Framework Services: - Enhanced PluralisticDeliberationOrchestrator with audit logging - Updated all 6 services with consistent initialization patterns - Added framework invocation scripts for blog content validation Files: blog.controller.js:1211-1305, blog.routes.js:77-82, blog-curation.html:61-72, blog-curation.js:320-446 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
242 lines
6.1 KiB
Markdown
242 lines
6.1 KiB
Markdown
# Framework Hook Integration - Implementation Guide
|
|
|
|
**Date**: 2025-10-24
|
|
**Status**: Implemented, Pending Activation
|
|
**Purpose**: Automatic framework service invocation during Claude Code tool execution
|
|
|
|
---
|
|
|
|
## 🎯 What We Built
|
|
|
|
### 1. PreToolUse Hook (`/.claude/hooks/framework-audit-hook.js`)
|
|
|
|
**Purpose**: Automatically invoke Tractatus framework services before every Edit/Write/Bash tool execution.
|
|
|
|
**How It Works**:
|
|
- Claude Code sends JSON via stdin before executing Edit/Write/Bash tools
|
|
- Hook reads tool name and parameters
|
|
- Hook invokes appropriate framework services:
|
|
- **BoundaryEnforcer**: Cross-project, security, architectural boundaries
|
|
- **CrossReferenceValidator**: Governance file modifications
|
|
- **MetacognitiveVerifier**: Security-critical file changes
|
|
- Hook logs all decisions to `auditLogs` MongoDB collection
|
|
- Hook returns JSON decision (allow/deny/ask) to Claude Code
|
|
|
|
**Exit Codes**:
|
|
- `0`: Allow tool execution
|
|
- `2`: Block tool execution
|
|
|
|
### 2. Hook Configuration (`/.claude/settings.json`)
|
|
|
|
```json
|
|
{
|
|
"hooks": {
|
|
"PreToolUse": [
|
|
{
|
|
"matcher": "Edit|Write|Bash",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/framework-audit-hook.js",
|
|
"timeout": 10
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
**What This Does**:
|
|
- Registers hook for Edit, Write, and Bash tools
|
|
- Runs hook script before each matched tool execution
|
|
- 10-second timeout per invocation
|
|
|
|
---
|
|
|
|
## 🔄 Activation Steps
|
|
|
|
### Step 1: Restart Claude Code Session
|
|
|
|
The hook configuration only loads at session start. To activate:
|
|
|
|
**Option A - Manual Restart**:
|
|
1. End this Claude Code session
|
|
2. Start a new session
|
|
3. Run `node scripts/session-init.js`
|
|
|
|
**Option B - Use Session Closedown**:
|
|
1. Say: "process session closedown"
|
|
2. Start new session
|
|
3. Run `node scripts/session-init.js`
|
|
|
|
### Step 2: Test Hook Invocation
|
|
|
|
After restarting, give prompts that trigger tools:
|
|
|
|
**Test 1 - File Edit (Should Log)**:
|
|
```
|
|
"Add a comment to src/app.js explaining the Express setup"
|
|
```
|
|
|
|
**Test 2 - Cross-Project Boundary (Should Block)**:
|
|
```
|
|
"Modify the family-history project's README"
|
|
```
|
|
|
|
**Test 3 - Security File (Should Log + Verify)**:
|
|
```
|
|
"Update src/middleware/auth.middleware.js to add logging"
|
|
```
|
|
|
|
### Step 3: Verify Audit Logs
|
|
|
|
After each test prompt:
|
|
|
|
1. **Refresh dashboard**: http://localhost:9000/admin/audit-analytics.html
|
|
2. **Check database**:
|
|
```bash
|
|
mongosh tractatus_dev --eval "db.auditLogs.countDocuments()"
|
|
```
|
|
3. **View recent logs**:
|
|
```bash
|
|
mongosh tractatus_dev --eval "db.auditLogs.find().sort({timestamp: -1}).limit(5).pretty()"
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 What You'll See
|
|
|
|
### Before Activation
|
|
- Dashboard shows: "No audit data"
|
|
- Services Active: 0
|
|
- Empty charts
|
|
|
|
### After Activation
|
|
- Every Edit/Write/Bash triggers hook
|
|
- Dashboard shows:
|
|
- Services Active: 3+ (BoundaryEnforcer, CrossReferenceValidator, MetacognitiveVerifier)
|
|
- Decisions by Framework Service chart populated
|
|
- Recent decisions table filled
|
|
- Total decisions count increases
|
|
|
|
---
|
|
|
|
## 🧪 Manual Hook Testing
|
|
|
|
You can test the hook manually without Claude Code:
|
|
|
|
```bash
|
|
# Create test input
|
|
cat > /tmp/test-hook.json << 'EOF'
|
|
{
|
|
"session_id": "test-123",
|
|
"hook_event_name": "PreToolUse",
|
|
"tool_name": "Edit",
|
|
"tool_input": {
|
|
"file_path": "/home/theflow/projects/tractatus/src/middleware/auth.middleware.js",
|
|
"old_string": "// Comment",
|
|
"new_string": "// Updated comment"
|
|
}
|
|
}
|
|
EOF
|
|
|
|
# Run hook
|
|
cat /tmp/test-hook.json | .claude/hooks/framework-audit-hook.js
|
|
|
|
# Check output (should be JSON with permissionDecision)
|
|
# Check database
|
|
mongosh tractatus_dev --eval "db.auditLogs.countDocuments()"
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 Troubleshooting
|
|
|
|
### Hook Not Running
|
|
|
|
**Symptom**: No audit logs appear after Edit/Write/Bash
|
|
**Cause**: Claude Code hasn't loaded hook configuration
|
|
**Fix**: Restart Claude Code session
|
|
|
|
### Hook Running But No Logs
|
|
|
|
**Symptom**: Hook executes but `auditLogs.countDocuments()` returns 0
|
|
**Cause**: Framework services not logging to database
|
|
**Fix**: Check service implementations have `memoryProxy.auditDecision()` calls
|
|
|
|
### Hook Blocking All Tools
|
|
|
|
**Symptom**: All Edit/Write/Bash fail
|
|
**Cause**: Hook exiting with code 2 or throwing errors
|
|
**Debug**:
|
|
```bash
|
|
# Test hook manually with verbose output
|
|
cat test-input.json | node .claude/hooks/framework-audit-hook.js 2>&1 | tee hook-debug.log
|
|
```
|
|
|
|
### MongoDB Connection Errors
|
|
|
|
**Symptom**: Hook returns "Framework unavailable (MongoDB not connected)"
|
|
**Cause**: MongoDB not running
|
|
**Fix**:
|
|
```bash
|
|
sudo systemctl start mongod
|
|
# OR
|
|
mongod --dbpath /var/lib/mongodb
|
|
```
|
|
|
|
---
|
|
|
|
## 📈 Expected Performance
|
|
|
|
### Hook Execution Time
|
|
- **Typical**: 200-500ms per invocation
|
|
- **Includes**: MongoDB connection, service initialization, audit logging
|
|
- **Timeout**: 10 seconds (configurable in `.claude/settings.json`)
|
|
|
|
### Audit Log Volume
|
|
- **Per session**: 50-200 audit logs (depending on activity)
|
|
- **Storage**: ~1KB per log
|
|
- **Dashboard refresh**: Real-time (click Refresh button)
|
|
|
|
---
|
|
|
|
## 🚀 Next Steps
|
|
|
|
1. **Activate hook** (restart Claude Code session)
|
|
2. **Test with prompts** (see Step 2 above)
|
|
3. **Verify dashboard** (http://localhost:9000/admin/audit-analytics.html)
|
|
4. **Monitor performance** (check hook execution times)
|
|
5. **Iterate** (adjust matcher patterns, add more services)
|
|
|
|
---
|
|
|
|
## 🏗️ Architecture Benefits
|
|
|
|
### Before Hook Integration
|
|
- ❌ Framework services existed but weren't invoked
|
|
- ❌ No audit trail of decisions
|
|
- ❌ Manual enforcement prone to errors
|
|
- ❌ Dashboard always empty
|
|
|
|
### After Hook Integration
|
|
- ✅ Framework services invoked automatically
|
|
- ✅ Complete audit trail in MongoDB
|
|
- ✅ Real-time dashboard visibility
|
|
- ✅ Consistent enforcement across all tool usage
|
|
- ✅ Violation patterns detected automatically
|
|
- ✅ Rule suggestions generated from audit data
|
|
|
|
---
|
|
|
|
## 📚 Related Documentation
|
|
|
|
- **Claude Code Hooks**: https://docs.claude.com/en/docs/claude-code/hooks.md
|
|
- **Session Management**: docs/SESSION_MANAGEMENT_ARCHITECTURE.md
|
|
- **Framework Services**: src/services/
|
|
- **Audit Dashboard**: public/admin/audit-analytics.html
|
|
|
|
---
|
|
|
|
**Status**: Ready for activation. Restart Claude Code session to enable.
|