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>
6.1 KiB
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
auditLogsMongoDB collection - Hook returns JSON decision (allow/deny/ask) to Claude Code
Exit Codes:
0: Allow tool execution2: Block tool execution
2. Hook Configuration (/.claude/settings.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:
- End this Claude Code session
- Start a new session
- Run
node scripts/session-init.js
Option B - Use Session Closedown:
- Say: "process session closedown"
- Start new session
- 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:
- Refresh dashboard: http://localhost:9000/admin/audit-analytics.html
- Check database:
mongosh tractatus_dev --eval "db.auditLogs.countDocuments()" - View recent logs:
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:
# 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:
# 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:
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
- Activate hook (restart Claude Code session)
- Test with prompts (see Step 2 above)
- Verify dashboard (http://localhost:9000/admin/audit-analytics.html)
- Monitor performance (check hook execution times)
- 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.