From 02e75949dffc1f1cb9108a3b1a94de4b9bde1b62 Mon Sep 17 00:00:00 2001 From: TheFlow Date: Wed, 22 Oct 2025 17:08:23 +1300 Subject: [PATCH] refactor(public): remove 6 internal project files from public repository Removed files: - SECURITY_INCIDENT_HUMAN_ACTIONS_REQUIRED.md (internal security doc) - .claude/instruction-history.json (project-specific governance rules) - scripts/add-security-rules-2025-10-21.js (dated, project-specific) - scripts/apply-governance-audit-2025-10-21.js (dated, project-specific) - docs/governance/GOVERNANCE_LEARNINGS_2025-10-21.md (internal learnings) - docs/governance/GOVERNANCE_RULES_AUDIT_2025-10-21.md (internal audit) These are internal to the tractatus project, not framework resources. Public repo should contain only framework implementation code and docs. Updated .gitignore to prevent future commits of similar files. --- .claude/instruction-history.json | 2461 ----------------- .gitignore | 8 + SECURITY_INCIDENT_HUMAN_ACTIONS_REQUIRED.md | 533 ---- .../GOVERNANCE_LEARNINGS_2025-10-21.md | 596 ---- .../GOVERNANCE_RULES_AUDIT_2025-10-21.md | 889 ------ scripts/add-security-rules-2025-10-21.js | 176 -- scripts/apply-governance-audit-2025-10-21.js | 500 ---- 7 files changed, 8 insertions(+), 5155 deletions(-) delete mode 100644 .claude/instruction-history.json delete mode 100644 SECURITY_INCIDENT_HUMAN_ACTIONS_REQUIRED.md delete mode 100644 docs/governance/GOVERNANCE_LEARNINGS_2025-10-21.md delete mode 100644 docs/governance/GOVERNANCE_RULES_AUDIT_2025-10-21.md delete mode 100755 scripts/add-security-rules-2025-10-21.js delete mode 100755 scripts/apply-governance-audit-2025-10-21.js diff --git a/.claude/instruction-history.json b/.claude/instruction-history.json deleted file mode 100644 index 030fc1a5..00000000 --- a/.claude/instruction-history.json +++ /dev/null @@ -1,2461 +0,0 @@ -{ - "version": "3.7", - "last_updated": "2025-10-21T10:59:05.330Z", - "description": "Persistent instruction database for Tractatus framework governance", - "instructions": [ - { - "id": "inst_001", - "text": "MongoDB runs on port 27017 for tractatus_dev database", - "timestamp": "2025-10-06T14:00:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 0.9, - "source": "user", - "session_id": "2025-10-06-initial-setup", - "parameters": { - "port": "27017", - "database": "tractatus_dev", - "service": "mongodb" - }, - "active": true, - "notes": "Infrastructure decision from project initialization" - }, - { - "id": "inst_002", - "text": "Application runs on port 9000", - "timestamp": "2025-10-06T14:00:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 0.9, - "source": "user", - "session_id": "2025-10-06-initial-setup", - "parameters": { - "port": "9000", - "service": "tractatus-web" - }, - "active": true, - "notes": "Infrastructure decision from project initialization" - }, - { - "id": "inst_003", - "text": "This is a separate project from family-history and sydigital - no shared code or data", - "timestamp": "2025-10-06T14:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 0.95, - "source": "user", - "session_id": "2025-10-06-initial-setup", - "parameters": {}, - "active": true, - "notes": "Critical project isolation requirement" - }, - { - "id": "inst_004", - "text": "No shortcuts, no fake data, world-class quality", - "timestamp": "2025-10-06T14:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 0.88, - "source": "user", - "session_id": "2025-10-06-initial-setup", - "parameters": {}, - "active": true, - "notes": "Quality standard for all work" - }, - { - "id": "inst_005", - "text": "Human approval required for major decisions, architectural changes, values-sensitive content", - "timestamp": "2025-10-06T14:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 0.92, - "source": "user", - "session_id": "2025-10-06-initial-setup", - "parameters": {}, - "active": true, - "notes": "Governance requirement - aligns with BoundaryEnforcer" - }, - { - "id": "inst_006", - "text": "Use ContextPressureMonitor to manage sessions and create handoff when pressure is CRITICAL", - "timestamp": "2025-10-07T09:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "REQUIRED", - "explicitness": 0.85, - "source": "user", - "session_id": "2025-10-07-part2", - "parameters": {}, - "active": true, - "notes": "Session management protocol established" - }, - { - "id": "inst_007", - "text": "Use Tractatus governance framework actively in all sessions", - "timestamp": "2025-10-07T09:15:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 0.98, - "source": "user", - "session_id": "2025-10-07-part2", - "parameters": { - "components": [ - "pressure_monitor", - "classifier", - "cross_reference", - "boundary_enforcer" - ], - "verbosity": "summary" - }, - "active": false, - "notes": "Framework activation - THIS IS THE NEW NORMAL", - "deprecation_reason": "Replaced by inst_064 (framework component usage - more specific)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_008", - "text": "ALWAYS comply with Content Security Policy (CSP) - no inline event handlers, no inline scripts", - "timestamp": "2025-10-07T19:30:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-07-docs-audit", - "parameters": { - "csp_policy": "script-src 'self'", - "violations_forbidden": [ - "onclick", - "onload", - "inline-script", - "javascript:" - ], - "alternatives_required": [ - "addEventListener", - "external-scripts" - ] - }, - "active": false, - "notes": "CRITICAL SECURITY REQUIREMENT - Framework should have caught CSP violation before deployment", - "deprecation_reason": "Consolidated into inst_008_CONSOLIDATED (CSP and security headers)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_009", - "text": "Stripe payment processing is ACTIVE (test keys configured). Email services (verification emails, donation receipts) are deferred until production launch. ProtonBridge email integration is Phase 2+.", - "timestamp": "2025-10-21T00:00:00Z", - "quadrant": "TACTICAL", - "persistence": "MEDIUM", - "temporal_scope": "PERMANENT", - "verification_required": "OPTIONAL", - "explicitness": 0.95, - "source": "user", - "session_id": "2025-10-08-phase-4", - "parameters": { - "deferred_tasks": [ - "email_service", - "stripe_activation" - ] - }, - "active": true, - "notes": "Updated 2025-10-21: Stripe fully implemented and active (test keys configured). Email services remain deferred until production launch with ProtonBridge integration planned for Phase 2+." - }, - { - "id": "inst_010", - "text": "Ensure all production UI links are working correctly", - "timestamp": "2025-10-08T00:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "REQUIRED", - "explicitness": 0.92, - "source": "user", - "session_id": "2025-10-08-phase-4", - "parameters": { - "scope": "production_ui", - "quality_standard": "all_links_functional" - }, - "active": true, - "notes": "Quality requirement for production deployment" - }, - { - "id": "inst_011", - "text": "Implement clear differentiation between technical documentation (for developers/implementers) and general documentation (for general audience)", - "timestamp": "2025-10-08T00:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "MEDIUM", - "temporal_scope": "PROJECT", - "verification_required": "REQUIRED", - "explicitness": 0.9, - "source": "user", - "session_id": "2025-10-08-phase-4", - "parameters": { - "technical_docs_examples": [ - "claude-code-framework-enforcement.md" - ], - "api_endpoint": "/api/documents", - "filter_requirement": "audience_type" - }, - "active": true, - "notes": "Content organization requirement - technical docs should be selectable separately from general docs", - "adjustment_history": [ - { - "date": "2025-10-21", - "session": "2025-10-07-001", - "changes": { - "persistence": "MEDIUM" - }, - "reason": "Lowered from HIGH - implementation detail" - } - ] - }, - { - "id": "inst_012", - "text": "NEVER deploy documents marked 'internal' or 'confidential' to public production without explicit human approval. Documents containing credentials, security vulnerabilities, financial information, or infrastructure details MUST NOT be publicly accessible.", - "timestamp": "2025-10-08T01:00:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "system", - "session_id": "2025-10-08-phase-4-security", - "parameters": { - "visibility_levels": [ - "public", - "internal", - "confidential" - ], - "public_requires": "visibility: 'public' AND security validation passed", - "blocked_content": [ - "credentials", - "api_keys", - "secrets", - "vulnerabilities", - "security_audits", - "payment_setup", - "deployment_guides" - ], - "validation_script": "scripts/validate-document-security.js" - }, - "active": true, - "notes": "CRITICAL SECURITY REQUIREMENT - Prevents accidental exposure of sensitive internal documentation. Learned from incident where Security Audit Report, Koha Stripe Setup, and Koha Deployment guides were incorrectly marked for public import." - }, - { - "id": "inst_013", - "text": "Public API endpoints MUST NOT expose sensitive runtime data (memory usage, heap sizes, exact uptime, environment details, service architecture) that could aid attackers. Use minimal health checks for public endpoints. Sensitive monitoring data requires authentication.", - "timestamp": "2025-10-08T02:00:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-08-phase-4-security", - "parameters": { - "public_endpoints": [ - "/health", - "/api/koha/transparency" - ], - "authenticated_endpoints": [ - "/api/governance", - "/api/governance/status" - ], - "blocked_from_public": [ - "memory_usage", - "heap_sizes", - "uptime", - "environment", - "service_names", - "internal_architecture" - ], - "allowed_public": [ - "status: ok", - "timestamp", - "public_metrics_only" - ], - "rate_limiting": "100 requests per 15 minutes per IP" - }, - "active": true, - "notes": "CRITICAL SECURITY REQUIREMENT - Prevents reconnaissance attacks. /api/governance exposed memory usage (95MB heap), exact uptime, service architecture to public. Now requires admin authentication. /health simplified to status + timestamp only." - }, - { - "id": "inst_014", - "text": "Do NOT expose API endpoint listings or attack surface maps to public users. Demo pages should showcase framework CONCEPTS (classification, boundaries, pressure), not production API infrastructure. API documentation requires authentication or should be deferred to GitHub SDK/samples.", - "timestamp": "2025-10-08T02:30:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-08-phase-4-security", - "parameters": { - "removed_sections": [ - "Live API Demo from tractatus-demo.html" - ], - "exposed_data_removed": [ - "all endpoint names", - "admin capabilities", - "authentication system", - "webhook endpoints", - "submission forms", - "internal features" - ], - "replacement": "Resources section with links to docs, researcher, implementer, about pages", - "future_approach": "GitHub SDK/samples when ready, or authenticated developer portal" - }, - "active": true, - "notes": "SECURITY DECISION - Removed Live API Demo section that exposed complete API attack surface (auth, documents, blog, media, cases, admin, governance, koha endpoints). Provided zero value to legitimate users but gave attackers enumeration targets. Replaced with Resources section linking to static documentation." - }, - { - "id": "inst_015", - "text": "NEVER deploy internal development documents to public downloads directory. Session handoffs, phase planning docs, testing checklists, cost estimates, infrastructure plans, progress reports, and cover letters are CONFIDENTIAL. Only deploy documents explicitly approved for public consumption.", - "timestamp": "2025-10-08T03:00:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-08-phase-4-security", - "parameters": { - "blocked_patterns": [ - "session-handoff-*.pdf", - "phase-2-*.pdf", - "ai-features-*.pdf", - "*-test-suite-*.pdf", - "*-testing-*.pdf", - "*-progress-report.pdf", - "*-blog-post-*.pdf", - "cover-letter-*.pdf" - ], - "public_directory": "/public/downloads/", - "approved_public_docs": [ - "framework documentation", - "implementation guides", - "glossary", - "case studies", - "core concepts", - "executive briefs" - ], - "requires_explicit_approval": true - }, - "active": true, - "notes": "CRITICAL SECURITY INCIDENT - 20 internal documents were publicly accessible in downloads directory, exposing: session debugging, infrastructure plans, cost estimates, testing methodologies, development processes. Removed from production. Public downloads must be whitelisted." - }, - { - "id": "inst_016", - "text": "NEVER fabricate statistics, cite non-existent data, or make claims without verifiable evidence. ALL statistics, ROI figures, performance metrics, and quantitative claims MUST either cite sources OR be marked [NEEDS VERIFICATION] for human review. Marketing goals do NOT override factual accuracy requirements.", - "timestamp": "2025-10-09T00:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-07-001-continued", - "parameters": { - "prohibited_actions": [ - "fabricating_statistics", - "inventing_data", - "citing_non_existent_sources", - "making_unverifiable_claims" - ], - "required_for_statistics": [ - "source_citation", - "verification_flag", - "human_approval" - ], - "applies_to": [ - "marketing_content", - "public_pages", - "documentation", - "presentations", - "all_public_claims" - ], - "boundary_enforcer_trigger": "ANY statistic or quantitative claim", - "failure_mode": "Values violation - honesty and transparency" - }, - "active": true, - "notes": "CRITICAL FRAMEWORK FAILURE 2025-10-09 - Claude fabricated statistics on leader.html (1,315% ROI, $3.77M savings, 14mo payback, 80% risk reduction, etc.) without triggering BoundaryEnforcer. This directly violates Tractatus core values of honesty and transparency. All public claims must be factually grounded." - }, - { - "id": "inst_017", - "text": "NEVER use prohibited absolute assurance terms: 'guarantee', 'guaranteed', 'ensures 100%', 'eliminates all', 'completely prevents', 'never fails'. Use evidence-based language: 'designed to reduce', 'helps mitigate', 'reduces risk of', 'supports prevention of'. Any absolute claim requires BoundaryEnforcer check and human approval.", - "timestamp": "2025-10-09T00:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-07-001-continued", - "parameters": { - "prohibited_terms": [ - "guarantee", - "guaranteed", - "ensures 100%", - "eliminates all", - "completely prevents", - "never fails", - "always works", - "perfect protection" - ], - "approved_alternatives": [ - "designed to reduce", - "helps mitigate", - "reduces risk of", - "supports prevention of", - "intended to minimize", - "architected to limit" - ], - "boundary_enforcer_trigger": "ANY absolute assurance language", - "replacement_required": true - }, - "active": true, - "notes": "CRITICAL FRAMEWORK FAILURE 2025-10-09 - Claude used term 'architectural guarantees' on leader.html. No AI safety framework can guarantee outcomes. This violates Tractatus principles of honesty and realistic expectations. Absolute assurances undermine credibility and set false expectations." - }, - { - "id": "inst_018", - "text": "Tractatus IS a development tool (like an IDE or linter) - this is its correct classification, not a limitation. Claims about readiness/stability MUST be based on actual testing and validation evidence. Do NOT claim 'production-ready', 'battle-tested', 'validated', or 'enterprise-proven' without documented evidence of adequate testing across multiple projects. Current testing status must be honest. Once validated through real-world use, 'production-ready development tool' is accurate and appropriate. Do NOT imply customer base, market validation, or widespread adoption without evidence.", - "timestamp": "2025-10-10T23:30:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-10-api-memory-transition", - "parameters": { - "tool_category": "development_tool", - "category_is_correct": true, - "focus_restriction": "testing_validation_status", - "prohibited_without_evidence": [ - "production-ready (without testing)", - "battle-tested (without projects)", - "validated (without evidence)", - "enterprise-proven (without deployments)", - "existing customers", - "market leader", - "widely adopted" - ], - "allowed_once_validated": [ - "production-ready development tool", - "tested with real projects", - "validated through use" - ], - "requires_evidence": [ - "testing documentation", - "multi-project validation", - "real-world usage data" - ], - "boundary_enforcer_trigger": "ANY claim about testing status, adoption, or customers" - }, - "active": true, - "notes": "CORRECTED 2025-10-10 - User clarified: 'Development tool' is the CORRECT classification (Tractatus helps developers build projects), not a limitation. The restriction is about honest testing/validation status, not tool category. Once adequately tested, 'production-ready development tool' is appropriate. Previous version incorrectly treated 'development framework' as early-stage status. Framework failure 2025-10-09: Claude claimed 'production-ready' without testing evidence." - }, - { - "id": "inst_019", - "text": "ContextPressureMonitor MUST account for total context window consumption, not just response token counts. Tool results (file reads, grep outputs, bash results) can consume massive context (6k+ tokens per large file read). System prompts, function schemas, and cumulative tool results significantly increase actual context usage. When compaction events occur frequently despite 'NORMAL' pressure scores, this indicates critical underestimation. Enhanced monitoring should track: response tokens, user messages, tool result sizes, system overhead, and predict compaction risk when context exceeds 70% of window. Implement improved pressure scoring in Phase 4 or Phase 6.", - "timestamp": "2025-10-10T23:45:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-10-api-memory-transition", - "parameters": { - "current_limitation": "underestimates_actual_context", - "missing_metrics": [ - "tool_result_sizes", - "system_prompt_overhead", - "function_schema_overhead", - "cumulative_context" - ], - "symptom": "frequent_compaction_despite_normal_scores", - "required_tracking": { - "response_tokens": "current tracking", - "user_messages": "current tracking", - "tool_results": "NEW - size estimation needed", - "system_overhead": "NEW - approximate 5k tokens", - "compaction_risk": "NEW - predict when >70% context used" - }, - "enhancement_phase": [ - "Phase 4", - "Phase 6" - ], - "priority": "MEDIUM" - }, - "active": true, - "notes": "IDENTIFIED 2025-10-10 - User observed frequent compaction events despite ContextPressureMonitor reporting 'NORMAL' (6.7%) pressure at 50k token checkpoint. Actual context consumption much higher due to tool results (reading instruction-history.json twice = 12k tokens, concurrent-session doc = large, multiple bash outputs). Current monitor only accurately tracks response generation, not total context window usage. This gap causes unexpected compactions and poor handoff timing. API Memory may reduce impact but won't eliminate root cause." - }, - { - "id": "inst_020", - "text": "Web application deployments MUST ensure correct file permissions before going live. All public-facing directories need 755 permissions (world-readable+executable), static files (HTML/CSS/JS/images) need 644 permissions (world-readable). Deployment scripts should verify nginx/apache can access all public paths. Add automated permission validation to deployment workflows to prevent 403 Forbidden errors.", - "timestamp": "2025-10-11T02:20:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "system", - "session_id": "2025-10-07-001", - "parameters": { - "directory_permissions": "755", - "file_permissions": "644", - "directories_requiring_755": [ - "/public", - "/public/admin", - "/public/js", - "/public/js/admin", - "/public/css", - "/public/images", - "/public/downloads" - ], - "deployment_check": "stat -c '%a %n' /path/to/public/* | grep -v '755\\|644'", - "prevention": "Add to deployment scripts or CI/CD pipeline" - }, - "active": false, - "notes": "DEPLOYMENT ISSUE 2025-10-11 - Priority 1 blog deployment: /public/admin/ directory had 0700 permissions (owner-only), causing nginx to return 403 Forbidden for all admin pages (/admin/login.html, /admin/project-manager.html, etc.). rsync preserved restrictive local permissions during deployment. Fixed with 'chmod 755 /public/admin && chmod 644 /public/admin/*.html'. This is preventable with automated permission validation in deployment workflow.", - "deprecation_reason": "Consolidated into inst_020_CONSOLIDATED (deployment permissions)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_021", - "text": "When implementing new features with dedicated models/controllers/routes, document the API-Model-Controller relationship clearly. Controller file headers should include endpoint examples, route files should document the model they operate on, and create API reference documentation in docs/api/. Update the API root endpoint (/api) with new route listings. This prevents confusion when multiple overlapping concepts exist (e.g., Projects for governance vs Blog for content).", - "timestamp": "2025-10-11T02:25:00Z", - "quadrant": "TACTICAL", - "persistence": "MEDIUM", - "temporal_scope": "PROJECT", - "verification_required": "REQUIRED", - "explicitness": 0.95, - "source": "system", - "session_id": "2025-10-07-001", - "parameters": { - "documentation_locations": [ - "controller file header", - "route file comments", - "docs/api/ directory", - "/api root endpoint" - ], - "controller_header_template": "Model: X.model.js | Routes: /api/path | Endpoints: GET /api/path, POST /api/path", - "route_file_comments": "Document model, validation requirements, authentication, examples", - "api_docs_format": "Markdown with endpoint details, request/response examples, error codes", - "update_api_root": "Add new routes to src/routes/index.js root handler" - }, - "active": true, - "notes": "DEVELOPMENT CONFUSION 2025-10-11 - Priority 1 blog testing: Initially tried using /api/admin/projects for blog posts instead of /api/blog, because both 'Projects' (governance system) and 'Blog' (content system) deal with project-like entities. BlogPost.model.js exists separately from Project.model.js, with dedicated blog.controller.js and blog.routes.js, but this wasn't immediately obvious. Clear Model-Controller-Route documentation would have prevented this 10-minute detour. The API confusion delayed testing and could confuse future developers.", - "adjustment_history": [ - { - "date": "2025-10-21", - "session": "2025-10-07-001", - "changes": { - "persistence": "MEDIUM", - "quadrant": "TACTICAL" - }, - "reason": "Lowered from HIGH, reclassified to TACTICAL" - } - ] - }, - { - "id": "inst_022", - "text": "ALL deployment scripts (rsync, scp, git pull) MUST include automated post-deployment permission correction as a standard step, not a reactive fix after errors. Use '--chmod=D755,F644' with rsync or equivalent automated permission setting for other tools. Directory creation during deployment MUST explicitly set 755 (directories) and 644 (files) permissions.", - "timestamp": "2025-10-11T04:05:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "system", - "session_id": "2025-10-11-priority-2-koha", - "parameters": { - "rsync_chmod_flag": "--chmod=D755,F644", - "rsync_example": "rsync -avz --chmod=D755,F644 -e 'ssh -i key' local/ remote:/path/", - "post_deploy_verification": "ssh remote 'find /var/www/tractatus/public -type d -exec chmod 755 {} + && find /var/www/tractatus/public -type f -name \"*.html\" -o -name \"*.js\" -o -name \"*.css\" -exec chmod 644 {} +'", - "deployment_script_requirement": "scripts/deploy-full-project-SAFE.sh and any ad-hoc rsync commands MUST use --chmod flag or include post-deployment permission fix as standard final step", - "applies_to": [ - "rsync", - "scp", - "git pull", - "docker volumes", - "manual copies" - ] - }, - "related_instructions": [ - "inst_020" - ], - "active": false, - "notes": "RECURRING DEPLOYMENT ISSUE 2025-10-11 - Despite inst_020 requiring permission validation, /public/koha/ directory had 0700 permissions (same pattern as /public/admin/ in previous session). Root cause: rsync creates directories with restrictive umask defaults, and inst_020 focuses on reactive validation rather than proactive automation. This shifts from 'MUST ensure permissions' (principle) to 'USE --chmod flag or automated fix' (automation requirement). Prevents manual permission fixing after discovering 403 errors.", - "deprecation_reason": "Consolidated into inst_020_CONSOLIDATED (deployment permissions)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_023", - "text": "Background processes spawned during development sessions (dev servers, file watchers, daemons) MUST be explicitly managed: (1) Document process intent and expected lifetime before spawning, (2) Kill non-essential background processes before session handoff unless explicitly marked 'session-persistent' with justification, (3) When starting sessions, check for orphaned processes from previous sessions before spawning new ones, (4) Development servers should run in foreground when possible to avoid port conflicts and resource leaks across session boundaries.", - "timestamp": "2025-10-11T17:40:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-11-admin-deployment", - "parameters": { - "trigger_conditions": [ - "run_in_background parameter", - "npm start/dev commands", - "daemon spawning", - "session handoff creation" - ], - "cleanup_protocol": { - "before_handoff": "List background processes via /bashes or BashOutput, kill non-essential", - "session_start": "Check lsof -ti:PORT for orphaned processes", - "exception": "Production services (systemd-managed) are separate from dev sessions" - }, - "common_culprits": [ - "npm start", - "npm run dev", - "npm run watch", - "nodemon", - "file watchers" - ], - "verification_commands": [ - "lsof -ti:9000", - "ps aux | grep npm" - ], - "cleanup_example": "KillShell then kill for orphaned processes" - }, - "related_instructions": [ - "inst_006" - ], - "active": true, - "notes": "IDENTIFIED 2025-10-11 - User observed background npm start processes running throughout session (shells 9c58f4 and 44704b). Shell 9c58f4 failed with EADDRINUSE (port 9000 occupied), shell 44704b ran successfully for 2.5 hours. This creates: (1) Resource consumption across session boundaries, (2) Port conflicts in subsequent sessions, (3) Confusion about system state, (4) Unclear handoff expectations. User specifically asked: 'should we contemplate a rule to manage daemons/spawns on development and ensure we do not compromise session handovers'. Cleanup performed: Killed shell 44704b and orphaned processes before creating this instruction. Production server (systemd tractatus.service) is separate and intentionally persistent." - }, - { - "id": "inst_024", - "text": "When user requests handoff document at session end, execute comprehensive closedown protocol BEFORE creating handoff: (1) Kill all background processes (check /bashes, terminate spawned tests/builds), (2) If instruction-history.json modified: run sync-instructions-to-db.js --force and verify counts, (3) Git state: if work complete and clean, offer atomic commit; if incomplete, document dirty state and reasoning in handoff, (4) Clean temporary artifacts (.memory-test/, lock files, test databases), (5) Create handoff as OPTIMAL STARTUP PROMPT with: context summary, completed tasks with file:line references, next priorities (actionable), key decisions/gotchas, current system state (servers, tests, known issues). AFTER handoff created: STOP immediately, DO NOT continue after compaction. Handoff = intent to start NEW session with fresh 200k tokens, NOT continue from compacted context.", - "timestamp": "2025-10-11T21:30:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 0.92, - "source": "user", - "session_id": "2025-10-11-handoff-protocol", - "parameters": { - "trigger": "user_requests_handoff_document", - "user_intent": "start_new_session_not_continue", - "closedown_checklist": { - "step_1_cleanup": { - "kill_background_processes": true, - "check_bashes_command": true, - "terminate_spawned_tests": true - }, - "step_2_database_sync": { - "if_instruction_history_modified": "run sync-instructions-to-db.js --force", - "verify_counts_match": true, - "check_local_and_production": true - }, - "step_3_git_state": { - "if_work_complete_and_clean": "offer atomic commit with clear message", - "if_incomplete": "document dirty state and reasoning in handoff", - "never": "leave dirty repo without explanation" - }, - "step_4_cleanup": { - "remove_test_artifacts": [ - ".memory-test/", - "lock files", - "test databases" - ], - "document_preserved_files": true - }, - "step_5_handoff_creation": { - "format": "OPTIMAL STARTUP PROMPT (ready to paste)", - "required_sections": [ - "context summary", - "completed tasks (with file:line references)", - "next priorities (specific and actionable)", - "key decisions and gotchas", - "current system state (servers, tests, errors)" - ], - "quality_checklist": [ - "formatted as startup prompt", - "no ambiguity about state", - "file references include line numbers", - "next priorities clear", - "critical context preserved" - ] - } - }, - "after_handoff_created": { - "stop_work": "immediately", - "no_continuation": "after conversation compaction", - "handoff_role": "bridge to NEW session", - "action": "wait for user to start fresh session" - }, - "if_compacted_after_handoff": { - "do_not": [ - "run session-init.js automatically", - "begin implementation from startup prompt" - ], - "instead": "output warning and wait for user confirmation" - }, - "warning_message": "⚠️ Handoff document created in previous session. This indicates intent to start NEW session with fresh 200k tokens. Confirm if you want to continue instead." - }, - "active": false, - "notes": "ENHANCED 2025-10-21: Added comprehensive closedown protocol - background process cleanup, database sync verification, git state management, artifact cleanup, and handoff quality requirements. Original issue (2025-10-11): After handoff, conversation was compacted and Claude auto-continued, consuming continuation tokens instead of fresh 200k session. User intent: handoff = new session, not continuation.", - "deprecation_reason": "Split into inst_024a/b/c/d/e for granular enforcement", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_025", - "text": "BEFORE deploying files with rsync to production: (1) Map each source file to its correct target directory structure, (2) When source files have different subdirectories (e.g., /admin/, /js/admin/), use SEPARATE rsync commands for each directory level, (3) NEVER flatten directory structures by deploying files with different paths to a single target directory, (4) VERIFY deployment paths in rsync command match intended structure: /public/admin/*.html → remote:/public/admin/, /public/js/admin/*.js → remote:/public/js/admin/, /public/*.html → remote:/public/, (5) After deployment, verify files are in correct locations BEFORE restarting services.", - "timestamp": "2025-10-11T05:44:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "system", - "session_id": "2025-10-11-priority-4-media-triage", - "parameters": { - "verification_steps": [ - "Map source files to target directories", - "Identify different directory levels", - "Use separate rsync for each level", - "Verify paths before execution", - "Confirm file locations post-deployment" - ], - "correct_example": [ - "rsync ... /local/public/admin/file.html remote:/var/www/tractatus/public/admin/", - "rsync ... /local/public/js/admin/file.js remote:/var/www/tractatus/public/js/admin/" - ], - "wrong_example": "rsync ... /local/public/admin/file.html /local/public/js/admin/file.js remote:/var/www/tractatus/public/ (flattens structure)", - "related_tools": [ - "rsync", - "scp" - ], - "applies_with": "--chmod=D755,F644 (inst_022)" - }, - "related_instructions": [ - "inst_020", - "inst_022" - ], - "active": true, - "notes": "RECURRING DEPLOYMENT ISSUE 2025-10-11 - Priority 4 frontend deployment: Initially deployed 4 files (admin/media-triage.html, js/admin/media-triage.js, media-triage-transparency.html, js/media-triage-transparency.js) with single rsync command to /public/, which flattened all files into /public/ instead of preserving /admin/ and /js/admin/ subdirectories. Required 4 separate rsync commands to fix. This is the THIRD occurrence of deployment directory errors (inst_020, inst_022, this session). Root cause: When source files have nested subdirectories, single rsync target flattens structure. Prevention: Use separate rsync per directory level." - }, - { - "id": "inst_026", - "text": "Standard Claude API environment variable is CLAUDE_API_KEY (not ANTHROPIC_API_KEY). When implementing AI features (blog curation, media triage, content generation), ALWAYS use process.env.CLAUDE_API_KEY. If encountering 401 API errors, check production .env for the actual key value (ssh to production: cat /var/www/tractatus/.env). Production currently sets BOTH CLAUDE_API_KEY and ANTHROPIC_API_KEY to same value as compatibility workaround, but all new code MUST use CLAUDE_API_KEY. Related feature flag: ENABLE_AI_CURATION must be 'true' for blog/curation features to work.", - "timestamp": "2025-10-12T00:00:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-12-blog-system", - "parameters": { - "standard_variable": "CLAUDE_API_KEY", - "deprecated_variable": "ANTHROPIC_API_KEY", - "production_check": "ssh -i ~/.ssh/tractatus_deploy ubuntu@vps-93a693da.vps.ovh.net 'cat /var/www/tractatus/.env | grep CLAUDE_API_KEY'", - "related_feature_flags": [ - "ENABLE_AI_CURATION" - ], - "affected_services": [ - "MediaTriage.service.js", - "blog.controller.js", - "future AI features" - ], - "codebase_usage": { - "correct": "new Anthropic({ apiKey: process.env.CLAUDE_API_KEY })", - "incorrect": "new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY })" - } - }, - "active": true, - "notes": "IDENTIFIED 2025-10-12 - Blog Priority 3: Initial 401 API error during blog post generation. Root cause: Local .env had placeholder value for CLAUDE_API_KEY, and I failed to check production environment configuration. MediaTriage.service.js was using ANTHROPIC_API_KEY instead of CLAUDE_API_KEY (inconsistent with rest of codebase: 5 files use CLAUDE_API_KEY vs 1 using ANTHROPIC_API_KEY). User feedback: 'the Claude API is configured. find it and explain why you did not find it previously' and 'there are obviously inconsistencies in the codebase that need to be resolved either by update of the codebase and or creation of a new rule that identifies how to find the key'. Fixed: Updated MediaTriage.service.js to use CLAUDE_API_KEY, updated local .env with production key, set ENABLE_AI_CURATION=true. This instruction prevents future confusion about which environment variable to use and where to find the actual API key value." - }, - { - "id": "inst_027", - "text": "NEVER overwrite, delete, or modify existing instructions in .claude/instruction-history.json without explicit human approval. ALWAYS check existing instruction IDs before creating new ones (use: grep '\"id\":' .claude/instruction-history.json | tail -5). When user requests instruction updates: (1) Show current instruction text, (2) Propose changes, (3) Wait for approval before editing. .claude/instruction-history.json MUST be kept in sync between dev and production: after any instruction changes, deploy to production immediately using: rsync -avz --chmod=D755,F644 -e 'ssh -i ~/.ssh/tractatus_deploy' /home/theflow/projects/tractatus/.claude/ ubuntu@vps-93a693da.vps.ovh.net:/var/www/tractatus/.claude/", - "timestamp": "2025-10-12T00:10:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-12-blog-system", - "parameters": { - "protected_file": ".claude/instruction-history.json", - "check_command": "grep '\"id\":' .claude/instruction-history.json | tail -5", - "sync_requirement": "IMMEDIATE", - "sync_command": "rsync -avz --chmod=D755,F644 -e 'ssh -i ~/.ssh/tractatus_deploy' /home/theflow/projects/tractatus/.claude/ ubuntu@vps-93a693da.vps.ovh.net:/var/www/tractatus/.claude/", - "sync_triggers": [ - "instruction_created", - "instruction_modified", - "instruction_deactivated" - ], - "approval_required_for": [ - "overwrite", - "delete", - "modify", - "deactivate" - ], - "allowed_without_approval": [ - "create_new_instruction_with_next_sequential_id" - ], - "verification_after_sync": "ssh -i ~/.ssh/tractatus_deploy ubuntu@vps-93a693da.vps.ovh.net 'ls -lh /var/www/tractatus/.claude/instruction-history.json && tail -3 /var/www/tractatus/.claude/instruction-history.json'" - }, - "active": true, - "notes": "CRITICAL REQUIREMENT 2025-10-12 - Blog system completion: Nearly created inst_025 when it already existed (user intervention prevented). User directive: 'create a rule to NEVER overwrite existing rules unless they are changes to that rule approved by human and ensure the rules are synced between dev and production at all times'. Instruction management protocol: instructions are HIGH-persistence governance data that MUST be protected from accidental modification and kept consistent across environments. Without sync, production sessions would operate under different rules than dev sessions, creating governance drift and unpredictable behavior. This instruction ensures: (1) No accidental overwrites, (2) Human oversight for changes, (3) Consistent governance between environments." - }, - { - "id": "inst_028", - "text": "ONLY documentation and research materials MUST be synced to tractatus-framework public GitHub repository at ../tractatus-public. After creating/updating documentation: (1) Manually copy files to ../tractatus-public, (2) Review changes with 'cd ../tractatus-public && git status', (3) Commit with descriptive message, (4) Push to GitHub. EXCLUDE ALL PRODUCTION CODE: src/, tests/, scripts/, public/, systemd/, deployment-quickstart/, package files, .env files, CLAUDE.md, SESSION-HANDOFF files, internal development guides, .claude/ directory, sensitive data. INCLUDE ONLY: docs/ (research, case studies, API documentation - excluding internal docs), README updates, CONTRIBUTING updates, LICENSE. Public repository is DOCUMENTATION ONLY for security reasons - full implementation is proprietary.", - "timestamp": "2025-10-12T09:50:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-12-public-repo-population", - "parameters": { - "public_repo_path": "../tractatus-public", - "sync_script": "scripts/sync-to-public.sh", - "sync_triggers": [ - "new_shareable_code", - "documentation_updates", - "deployment_file_changes", - "public_feature_additions" - ], - "exclude_patterns": [ - "CLAUDE.md", - "SESSION-HANDOFF-*.md", - "*Maintenance_Guide.md", - ".claude/", - "NEXT_SESSION*.md", - "PHASE-*-PREP*.md", - "docs/SESSION-*.md", - "docs/FRAMEWORK_FAILURE_*.md", - "docs/SECURITY_AUDIT_REPORT.md", - "docs/governance/MONTHLY-REVIEW-SCHEDULE.md", - "docs/governance/PRIVACY-PRESERVING-ANALYTICS-PLAN.md" - ], - "include_directories": [ - "src/", - "tests/", - "scripts/", - "public/", - "docs/markdown/", - "docs/api/", - "docs/case-studies/", - "docs/research/", - "docs/governance/ (selective)", - "deployment-quickstart/", - "systemd/" - ], - "include_files": [ - "package.json", - "package-lock.json", - "README.md", - "CONTRIBUTING.md", - "LICENSE", - ".env.example", - ".gitignore", - "SETUP_INSTRUCTIONS.md" - ], - "workflow_steps": [ - "Run sync script", - "Review with git status", - "Commit with descriptive message", - "Push to GitHub" - ], - "verification": "curl -s https://github.com/AgenticGovernance/tractatus-framework | grep -c src/" - }, - "active": false, - "notes": "SECURITY UPDATE 2025-10-12 - Initially populated public repo with full source code (255 files, 90k+ lines). User reviewed and immediately identified security risk: admin panels, deployment scripts, service configurations, and full source code provide attack surface for bad actors. SECURITY LOCKDOWN: Removed ALL production code (237 files, 79,856 lines). Public repository now DOCUMENTATION ONLY: docs/, README, CONTRIBUTING, LICENSE. Rationale: Framework concepts and research should be public for AI safety community, but production implementation details must remain private to prevent reconnaissance attacks and infrastructure exploitation. Developers can experience framework at https://agenticgovernance.digital and contact john.stroh.nz@pm.me for implementation inquiries. This instruction updated to prevent future syncing of production code.", - "deprecation_reason": "Consolidated into inst_063_CONSOLIDATED (public GitHub management)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_038", - "text": "BEFORE using Edit or Write tools on ANY file (HTML, JS, CSS, config), EXPLICITLY state: 'Running pre-action-check for [filename]' and execute node scripts/pre-action-check.js [file-path] ''. If pre-action-check FAILS (exit code 1), STOP immediately and fix violations before proceeding. Never skip pre-action-check - it validates: (1) ContextPressureMonitor recency, (2) Instruction history loaded, (3) Token checkpoints, (4) CSP compliance for HTML/JS files (inst_008), (5) Required framework components used. Skipping pre-action-check is CRITICAL FRAMEWORK FAILURE that can bypass governance rules (CSP, boundary checks, instruction conflicts). Add pre-action-check timestamp to session-state.json for watchdog monitoring.", - "timestamp": "2025-10-12T19:50:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-12-document-review", - "parameters": { - "trigger_tools": [ - "Edit", - "Write" - ], - "pre_action_command": "node scripts/pre-action-check.js [file-path] ''", - "action_types": [ - "file-edit", - "database", - "architecture", - "config", - "security", - "values", - "complex" - ], - "validates": [ - "pressure_check_recency", - "instructions_loaded", - "token_checkpoints", - "csp_compliance", - "framework_components" - ], - "fail_behavior": "STOP_immediately_fix_violations", - "csp_enforcement": "Automated detection of inline styles, inline scripts, event handlers (inst_008)", - "session_state_tracking": "Update last_pre_action_check timestamp in session-state.json", - "watchdog_integration": "Enable automated detection if pre-action-check skipped" - }, - "active": true, - "notes": "CRITICAL FRAMEWORK GAP 2025-10-12 - User discovered I violated CSP (inst_008) by adding inline styles to docs-app.js during category collapse fix. Root cause: I skipped pre-action-check.js before editing the file. The script would have caught the violations and BLOCKED the action (verified with test). Framework fade: Tool exists and works, but wasn't used. User question: 'why did the rules not pick up the csp violation?' Answer: Because I didn't run pre-action-check. This is a GENERIC FAILURE PATTERN that could bypass multiple rules (CSP, boundary enforcement, instruction conflicts). This instruction makes pre-action-check explicitly required before file modifications, with clear failure protocol. Fourth attempt to fix docs.html categories - need to ensure proper deployment this time." - }, - { - "id": "inst_039", - "text": "When processing documents for card presentations or any content updates, MANDATORY audit for: (1) Update all references from 'five services' to 'six services' - PluralisticDeliberationOrchestrator is the 6th service added in Phase 5, (2) Ensure PluralisticDeliberationOrchestrator is properly documented wherever core services are mentioned, (3) Check for rule violations using prohibited absolute language: 'guarantee', 'guarantees', 'always', 'never' (when describing effectiveness), 'impossible', 'ensures 100%', 'eliminates all', 'completely prevents', (4) Verify technical accuracy and currency of all claims - no fabricated statistics or outdated information. This applies to: markdown source files, database document content, public-facing HTML, API documentation, executive briefs, case studies. BEFORE deploying any document updates, search for prohibited terms and outdated service counts.", - "timestamp": "2025-10-12T20:10:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-12-card-presentations", - "parameters": { - "mandatory_checks": [ - "service_count_accuracy", - "pluralistic_deliberation_mentioned", - "prohibited_language_scan", - "technical_currency" - ], - "service_count": { - "incorrect": "five services", - "correct": "six services", - "sixth_service": "PluralisticDeliberationOrchestrator" - }, - "prohibited_terms": [ - "guarantee", - "guarantees", - "guaranteed", - "always works", - "never fails", - "impossible", - "ensures 100%", - "eliminates all", - "completely prevents", - "perfect protection" - ], - "approved_alternatives": [ - "designed to reduce", - "helps mitigate", - "reduces risk of", - "supports prevention of", - "intended to minimize", - "architected to limit", - "structurally prevented", - "designed to detect" - ], - "search_commands": [ - "grep -i 'five service' docs/markdown/*.md", - "grep -i 'guarantee' docs/markdown/*.md", - "grep -i 'always\\|never' docs/markdown/*.md" - ], - "applies_to": [ - "markdown_sources", - "database_documents", - "public_html", - "api_documentation", - "executive_briefs", - "case_studies", - "blog_posts" - ] - }, - "related_instructions": [ - "inst_016", - "inst_017", - "inst_018" - ], - "active": true, - "notes": "CRITICAL CONTENT ACCURACY GAP 2025-10-12 - User identified that most documents still reference 'five services' instead of 'six services'. PluralisticDeliberationOrchestrator was added as 6th service in Phase 5 but existing documentation not updated. Combined with ongoing rule violation checks (inst_016, inst_017) this creates comprehensive content accuracy protocol. User quote: 'very few of the documents refer correctly to the new 6th service! most still refer to 5' and 'we need to actually reexamine the content, not only for rule violations but also for currency'. This instruction ensures systematic content review during card presentation implementation, preventing outdated/inaccurate content from being deployed with improved UI/UX." - }, - { - "id": "inst_040", - "text": "When user says \"all\" (e.g., \"update all pages\", \"fix all instances\", \"check all files\"), Claude MUST: (1) Use Glob/Grep to find ALL matches, (2) List every item found with file:line references, (3) Confirm with user before proceeding, (4) Track completion of each item. NEVER assume \"all\" means \"a few examples\" or \"the ones I found first\".", - "timestamp": "2025-10-14T13:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-14-faq-fixes", - "parameters": { - "trigger_words": [ - "all", - "every", - "each" - ], - "examples": [ - "update all pages", - "fix all instances", - "check all files", - "update every page", - "fix each occurrence" - ], - "prohibited_actions": [ - "working_on_subset", - "representative_sample", - "partial_completion", - "silent_skipping" - ], - "required_actions": [ - "identify_complete_scope", - "confirm_if_ambiguous", - "process_every_item", - "verify_complete_coverage" - ], - "scope_too_large_threshold": 20, - "large_scope_action": "ask_user_to_prioritize_or_batch" - }, - "active": true, - "notes": "IDENTIFIED 2025-10-14 - User directive: 'create a rule that stipulates that when the user says \"all\" as in \"update all...\" Claude may not choose to work on a subset'. Context: Footer standardization where user asked to update all pages, and Claude initially only updated FAQ page footer then used script for remaining pages. User expects 'all' to mean complete coverage without exceptions or representative samples. This prevents pattern where Claude selectively applies changes to subset of items when user explicitly requested universal application." - }, - { - "id": "inst_041", - "text": "ALL file uploads (case study submissions, media attachments, document uploads, user-provided files) MUST undergo mandatory malware scanning using sovereign tools before processing or storage. REQUIRED validation pipeline: (1) File type validation using file(1) command - reject mismatched MIME types and extensions, (2) ClamAV antivirus scan with updated virus definitions (minimum daily updates), (3) YARA rule scanning for malware signatures and suspicious patterns, (4) File size limits enforced (max 10MB for documents, 50MB for media), (5) Quarantine suspicious files for manual review - NEVER auto-process flagged content. ALL scans must complete successfully before file is accessible to application logic. Failed scans trigger immediate rejection and security alert logging. Implement in src/middleware/file-security.middleware.js with detailed logging to security audit trail.", - "timestamp": "2025-10-14T01:45:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-14-security-vetting", - "parameters": { - "trigger_conditions": [ - "file_upload", - "document_submission", - "media_attachment", - "case_study_upload", - "any_external_file" - ], - "sovereign_tools": { - "file_type_validation": "file(1) - UNIX file command", - "antivirus": "ClamAV (clamscan/clamdscan)", - "pattern_matching": "YARA rules engine", - "update_frequency": "ClamAV definitions: minimum daily" - }, - "validation_pipeline": [ - "file_type_validation", - "mime_type_verification", - "clamav_scan", - "yara_scan", - "size_limit_check" - ], - "size_limits": { - "documents": "10MB", - "media": "50MB", - "default": "5MB" - }, - "rejection_criteria": [ - "mime_type_mismatch", - "virus_detected", - "malware_signature_match", - "size_exceeded", - "suspicious_patterns" - ], - "quarantine_directory": "/var/quarantine/tractatus", - "security_logging": "src/utils/security-logger.js", - "implementation_file": "src/middleware/file-security.middleware.js" - }, - "active": false, - "notes": "SECURITY REQUIREMENT 2025-10-14 - User directive: 'Create a set of tractatus permanent strategic rules that ensures any external input to the website or incoming mail or case study submissions etc are rigorously vetted for malware, viruses, sleeper code or any other bad actor infiltration attempts.' Part 1 of comprehensive security vetting framework. File uploads are primary attack vector for malware injection. Sovereign tools (ClamAV, YARA, file(1)) are open-source, auditable, and under organizational control - no reliance on external services or proprietary scanning APIs. Multi-layer validation creates defense in depth: type validation catches file extension spoofing, ClamAV catches known malware, YARA catches suspicious patterns and zero-days.", - "deprecation_reason": "Consolidated into inst_041_CONSOLIDATED (file input validation)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_042", - "text": "ALL email attachments and incoming mail to system addresses (media inquiries, case submissions, contact forms processed via email) MUST be scanned using sovereign email security stack before delivery to application. REQUIRED email security pipeline: (1) SpamAssassin content filtering with custom rules for governance domain (minimum score 5.0 = spam), (2) amavisd-new integration for virus scanning (ClamAV backend), (3) Attachment type restrictions - only allow: PDF, TXT, MD, DOC/DOCX, images (PNG/JPG). Block: executables, scripts, archives, macros, (4) DKIM/SPF/DMARC validation for sender authentication, (5) Rate limiting per sender (max 10 emails/hour from unknown senders), (6) Suspicious attachments quarantined to /var/quarantine/email/ with alert to admin. Configure postfix/dovecot with these filters. ALL blocked emails logged to security audit trail with sender IP, timestamp, rejection reason. Implement monitoring dashboard for security team.", - "timestamp": "2025-10-14T01:45:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-14-security-vetting", - "parameters": { - "trigger_conditions": [ - "incoming_email", - "email_attachments", - "contact_form_email", - "media_inquiry_email", - "case_submission_email" - ], - "sovereign_tools": { - "spam_filter": "SpamAssassin", - "virus_scanning": "amavisd-new with ClamAV backend", - "mail_server": "postfix/dovecot", - "authentication": "OpenDKIM, opendmarc" - }, - "email_pipeline": [ - "spamassassin_filtering", - "dkim_spf_dmarc_validation", - "amavisd_virus_scan", - "attachment_type_validation", - "rate_limiting_check" - ], - "allowed_attachments": [ - "application/pdf", - "text/plain", - "text/markdown", - "application/msword", - "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "image/png", - "image/jpeg" - ], - "blocked_attachments": [ - "executables (.exe, .bat, .cmd, .sh)", - "scripts (.js, .vbs, .ps1, .py)", - "archives (.zip, .rar, .tar, .gz)", - "macros (macro-enabled documents)", - "suspicious extensions (.scr, .pif, .com)" - ], - "spamassassin_config": { - "required_score": "5.0", - "custom_rules": "/etc/spamassassin/local.cf", - "auto_learn": true - }, - "rate_limiting": { - "unknown_senders": "10 emails per hour", - "known_senders": "100 emails per hour", - "implementation": "postfix policyd-weight" - }, - "quarantine_directory": "/var/quarantine/email", - "monitoring": "security dashboard for blocked emails" - }, - "active": false, - "notes": "SECURITY REQUIREMENT 2025-10-14 - Part 2 of comprehensive security vetting framework. Email is secondary attack vector - phishing, malware attachments, social engineering attempts. Sovereign email stack (SpamAssassin, amavisd-new, postfix) provides complete control over filtering rules and logging. DKIM/SPF/DMARC prevents sender spoofing. Attachment restrictions prevent executable delivery. Rate limiting prevents spam floods and automated attacks. This creates layered defense for email-based threats while maintaining full auditability and control of security infrastructure.", - "deprecation_reason": "Consolidated into inst_041_CONSOLIDATED (file input validation)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_043", - "text": "ALL user input from web forms (contact forms, case submissions, media inquiries, comment fields, search inputs) MUST undergo rigorous sanitization and validation BEFORE processing or storage. MANDATORY validation layers: (1) Input length limits enforced (configurable per field, default max 5000 chars), (2) HTML sanitization using DOMPurify (sovereign JS library) - strip ALL HTML tags except safe whitelist for markdown fields, (3) SQL injection prevention via parameterized queries ONLY (NEVER string concatenation in MongoDB queries), (4) NoSQL injection prevention - validate all user input against expected data types and patterns before database operations, (5) XSS prevention - Content Security Policy enforcement (inst_008) + output encoding, (6) CSRF protection on all POST/PUT/DELETE endpoints using signed tokens. Implement in src/middleware/input-validation.middleware.js with comprehensive logging. Use validator.js library for email, URL, and data format validation. Rate limit form submissions: 5 requests per minute per IP.", - "timestamp": "2025-10-14T01:45:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-14-security-vetting", - "parameters": { - "trigger_conditions": [ - "form_submission", - "user_input", - "search_query", - "contact_form", - "case_submission", - "media_inquiry", - "comment_field", - "any_external_text_input" - ], - "sovereign_tools": { - "html_sanitization": "DOMPurify (client + server)", - "validation_library": "validator.js", - "parameterized_queries": "MongoDB driver with prepared statements", - "csrf_protection": "csurf middleware" - }, - "validation_pipeline": [ - "length_limit_check", - "data_type_validation", - "html_sanitization", - "nosql_injection_check", - "xss_pattern_detection", - "csrf_token_validation" - ], - "input_limits": { - "default_max_length": 5000, - "email": 254, - "url": 2048, - "phone": 20, - "name": 100, - "title": 200, - "description": 5000, - "case_study": 50000 - }, - "html_sanitization": { - "default": "strip_all_html", - "markdown_fields": "allow_safe_whitelist", - "safe_tags": [ - "p", - "br", - "strong", - "em", - "ul", - "ol", - "li", - "a", - "code", - "pre" - ], - "blocked_tags": [ - "script", - "iframe", - "object", - "embed", - "style", - "link" - ] - }, - "injection_prevention": { - "sql": "parameterized_queries_only", - "nosql": "type_validation_before_query", - "mongodb_unsafe_operators": [ - "$where", - "mapReduce", - "eval" - ], - "validation": "mongoose_schema_validation" - }, - "xss_prevention": [ - "csp_enforcement (inst_008)", - "output_encoding", - "dompurify_sanitization", - "no_dangerouslySetInnerHTML" - ], - "csrf_protection": { - "implementation": "csurf middleware", - "token_rotation": "per_session", - "applies_to": [ - "POST", - "PUT", - "DELETE", - "PATCH" - ] - }, - "rate_limiting": { - "form_submissions": "5 requests per minute per IP", - "search_queries": "20 requests per minute per IP", - "implementation": "express-rate-limit" - }, - "implementation_file": "src/middleware/input-validation.middleware.js", - "logging": "security audit trail for rejected inputs" - }, - "active": true, - "notes": "SECURITY REQUIREMENT 2025-10-14 - Part 3 of comprehensive security vetting framework. Web form inputs are most common attack vector for XSS, injection attacks, and data exfiltration. DOMPurify is sovereign (open-source, client+server capable) and industry-standard for HTML sanitization. Parameterized queries prevent SQL/NoSQL injection. CSP (inst_008) provides defense in depth for XSS. CSRF tokens prevent cross-site request forgery. Rate limiting prevents automated form spam and brute force attempts. Multi-layer validation creates defense in depth: input validation, sanitization, parameterized queries, output encoding, CSP enforcement." - }, - { - "id": "inst_044", - "text": "ALL HTTP responses MUST include comprehensive security headers to prevent common web attacks and provide defense in depth. MANDATORY security headers: (1) Content-Security-Policy with strict directives (enforces inst_008 at HTTP level), (2) X-Content-Type-Options: nosniff - prevent MIME type sniffing attacks, (3) X-Frame-Options: DENY - prevent clickjacking via iframes, (4) X-XSS-Protection: 1; mode=block - enable browser XSS filter, (5) Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - enforce HTTPS, (6) Referrer-Policy: strict-origin-when-cross-origin - limit referrer leakage, (7) Permissions-Policy to restrict dangerous browser features. Implement in src/middleware/security-headers.middleware.js applied to ALL routes. CSP directives must match inst_008: script-src 'self', no inline scripts, no unsafe-eval. Regularly audit CSP violations via report-uri endpoint. Monitor SecurityHeaders.com grade (target: A+).", - "timestamp": "2025-10-14T01:45:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-14-security-vetting", - "parameters": { - "trigger_conditions": [ - "all_http_responses", - "every_route", - "api_responses", - "static_files", - "error_pages" - ], - "mandatory_headers": { - "Content-Security-Policy": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests; block-all-mixed-content", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "DENY", - "X-XSS-Protection": "1; mode=block", - "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", - "Referrer-Policy": "strict-origin-when-cross-origin", - "Permissions-Policy": "geolocation=(), microphone=(), camera=(), payment=()" - }, - "csp_directives": { - "default-src": "'self'", - "script-src": "'self'", - "style-src": "'self' 'unsafe-inline'", - "img-src": "'self' data: https:", - "font-src": "'self' https://fonts.gstatic.com", - "connect-src": "'self'", - "frame-ancestors": "'none'", - "base-uri": "'self'", - "form-action": "'self'", - "upgrade-insecure-requests": true, - "block-all-mixed-content": true, - "report-uri": "/api/csp-violations" - }, - "csp_violations_endpoint": { - "route": "/api/csp-violations", - "logging": "security audit trail", - "monitoring": "alert on repeated violations" - }, - "hsts_preload": { - "status": "required for production", - "submission": "https://hstspreload.org/", - "prerequisites": [ - "valid_certificate", - "https_on_all_subdomains", - "redirect_http_to_https" - ] - }, - "implementation_file": "src/middleware/security-headers.middleware.js", - "application_point": "app.use(securityHeadersMiddleware) - before all routes", - "monitoring": { - "tool": "SecurityHeaders.com", - "target_grade": "A+", - "audit_frequency": "weekly" - }, - "related_tools": { - "helmet_js": "optional convenience wrapper", - "manual_implementation": "preferred for full control" - } - }, - "related_instructions": [ - "inst_008" - ], - "active": false, - "notes": "SECURITY REQUIREMENT 2025-10-14 - Part 4 of comprehensive security vetting framework. HTTP security headers provide browser-level defense against common web attacks. CSP enforcement at HTTP level (inst_008 enforces at code level, inst_044 enforces at protocol level) creates defense in depth. HSTS prevents SSL stripping attacks. X-Frame-Options prevents clickjacking. X-Content-Type-Options prevents MIME confusion attacks. These headers are 'sovereign' in the sense that they're implemented entirely within our control (no external dependencies), enforce security policies at protocol level, and provide defense even if application-level protections fail. CSP violation reporting provides early warning of attack attempts or policy violations.", - "deprecation_reason": "Consolidated into inst_008_CONSOLIDATED (CSP and security headers)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_045", - "text": "ALL API endpoints MUST implement rate limiting, authentication requirements, and input validation to prevent automated attacks, brute force attempts, and API abuse. MANDATORY protections: (1) Rate limiting with express-rate-limit: public endpoints 100 req/15min per IP, authenticated endpoints 1000 req/15min per user, admin endpoints 50 req/15min per admin, (2) Authentication middleware for sensitive endpoints - JWT validation with short expiry (15min access, 7day refresh), (3) IP-based blocking after repeated rate limit violations (10 violations in 1 hour = 24 hour block), (4) Request validation for all POST/PUT/PATCH - reject requests with unexpected fields or malformed JSON, (5) Response sanitization - NEVER expose stack traces, internal paths, or sensitive errors to clients (inst_013), (6) API key rotation for service-to-service communication every 90 days. Implement monitoring for unusual API patterns: rapid endpoint enumeration, repeated 401s, large payloads, unusual user agents. Log all rate limit violations and authentication failures to security audit trail.", - "timestamp": "2025-10-14T01:45:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-14-security-vetting", - "parameters": { - "trigger_conditions": [ - "all_api_endpoints", - "public_routes", - "authenticated_routes", - "admin_routes", - "service_to_service_communication" - ], - "rate_limiting": { - "public_endpoints": "100 requests per 15 minutes per IP", - "authenticated_endpoints": "1000 requests per 15 minutes per user", - "admin_endpoints": "50 requests per 15 minutes per admin", - "implementation": "express-rate-limit", - "storage": "Redis for distributed rate limiting", - "violation_threshold": "10 violations in 1 hour = 24 hour IP block" - }, - "authentication": { - "mechanism": "JWT (JSON Web Tokens)", - "access_token_expiry": "15 minutes", - "refresh_token_expiry": "7 days", - "algorithm": "HS256", - "secret_rotation": "every 90 days", - "middleware": "src/middleware/auth.middleware.js" - }, - "endpoint_classification": { - "public": [ - "/health", - "/api/documents", - "/api/blog" - ], - "authenticated": [ - "/api/cases", - "/api/media", - "/api/koha" - ], - "admin": [ - "/api/admin/*", - "/api/governance/*" - ] - }, - "input_validation": { - "reject_unexpected_fields": true, - "reject_malformed_json": true, - "max_payload_size": "1MB", - "content_type_enforcement": "application/json for POST/PUT/PATCH" - }, - "response_sanitization": { - "production_mode": "hide_stack_traces", - "hide_internal_paths": true, - "generic_error_messages": true, - "error_codes_only": "specific details logged, not exposed", - "relates_to": "inst_013" - }, - "service_to_service": { - "api_key_rotation": "every 90 days", - "mutual_tls": "consider for high security services", - "key_storage": "environment variables, not in code" - }, - "monitoring_alerts": [ - "rapid_endpoint_enumeration (>50 unique endpoints in 1 minute)", - "repeated_401_errors (>10 from single IP in 5 minutes)", - "large_payloads (>10MB)", - "unusual_user_agents (automated scanners)", - "rate_limit_violations (repeated from same IP)", - "authentication_failures (>5 failed attempts in 5 minutes)" - ], - "ip_blocking": { - "automatic_block": "10 rate limit violations in 1 hour", - "block_duration": "24 hours", - "whitelist": "monitoring services, known good IPs", - "implementation": "express-slow-down + custom blocking middleware", - "storage": "Redis for distributed blocking" - }, - "logging": { - "security_audit_trail": "all violations, failures, blocks", - "log_fields": [ - "timestamp", - "ip", - "endpoint", - "method", - "user_agent", - "violation_type", - "user_id (if authenticated)" - ] - }, - "implementation_files": [ - "src/middleware/rate-limit.middleware.js", - "src/middleware/auth.middleware.js", - "src/middleware/api-validation.middleware.js", - "src/utils/security-logger.js" - ] - }, - "related_instructions": [ - "inst_013" - ], - "active": true, - "notes": "SECURITY REQUIREMENT 2025-10-14 - Part 5 of comprehensive security vetting framework. API endpoints are primary targets for automated attacks, brute force attempts, credential stuffing, and reconnaissance. Rate limiting prevents abuse and DoS attacks. JWT authentication with short expiry limits impact of token theft. IP blocking prevents persistent attackers. Request validation prevents injection attacks and malformed input exploitation. Response sanitization (inst_013) prevents information disclosure. Monitoring unusual patterns provides early warning of attacks. This creates defense in depth for API security: rate limiting (prevent volume), authentication (verify identity), input validation (prevent injection), response sanitization (prevent info disclosure), monitoring (detect attacks)." - }, - { - "id": "inst_046", - "text": "ALL security events (file upload rejections, email blocks, input validation failures, rate limit violations, authentication failures, CSP violations, suspicious patterns) MUST be logged to centralized security audit trail with comprehensive monitoring and alerting. MANDATORY security monitoring: (1) Centralized logging to /var/log/tractatus/security-audit.log with rotation (daily, keep 90 days), (2) Real-time monitoring dashboard showing: rejected uploads, blocked emails, rate limit violations, failed authentications, CSP violations, IP blocks, (3) Alert thresholds: >10 violations from single IP in 1 hour = immediate email alert, >100 violations globally in 1 hour = potential attack underway alert, (4) Weekly security reports: summary of all security events, top violating IPs, attack patterns identified, (5) Integration with fail2ban for automatic IP blocking across services. Implement security dashboard at /admin/security-monitoring.html (admin auth required). Log format: JSON with timestamp, event_type, source_ip, user_id, endpoint, violation_details, action_taken. Use sovereign log analysis tools: grep, awk, custom scripts (no external log aggregation services unless encrypted).", - "timestamp": "2025-10-14T01:45:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-14-security-vetting", - "parameters": { - "trigger_conditions": [ - "any_security_event", - "file_upload_rejection", - "email_block", - "input_validation_failure", - "rate_limit_violation", - "authentication_failure", - "csp_violation", - "suspicious_pattern_detection", - "ip_block_applied" - ], - "security_events": [ - "file_upload_rejected", - "malware_detected", - "email_blocked", - "spam_filtered", - "input_sanitization_applied", - "injection_attempt_blocked", - "rate_limit_exceeded", - "authentication_failed", - "csp_violation_reported", - "ip_blocked", - "unusual_api_pattern" - ], - "centralized_logging": { - "log_file": "/var/log/tractatus/security-audit.log", - "rotation": "daily", - "retention": "90 days", - "format": "JSON", - "fields": [ - "timestamp", - "event_type", - "source_ip", - "user_id", - "endpoint", - "user_agent", - "violation_details", - "action_taken", - "severity" - ] - }, - "monitoring_dashboard": { - "route": "/admin/security-monitoring.html", - "authentication": "admin_only", - "metrics": [ - "rejected_uploads_count", - "blocked_emails_count", - "rate_limit_violations", - "failed_authentications", - "csp_violations", - "active_ip_blocks", - "attack_patterns_identified" - ], - "time_ranges": [ - "last_hour", - "last_24_hours", - "last_7_days", - "last_30_days" - ] - }, - "alert_thresholds": { - "single_ip_violations": { - "threshold": "10 violations in 1 hour", - "action": "immediate email alert to admin", - "includes": "IP address, violation types, affected endpoints" - }, - "global_violations": { - "threshold": "100 violations in 1 hour", - "action": "potential attack alert", - "includes": "event summary, top violating IPs, attack pattern analysis" - }, - "authentication_failures": { - "threshold": "5 failures in 5 minutes for single user", - "action": "account lockout + alert" - }, - "critical_events": { - "malware_detected": "immediate alert", - "admin_account_compromise_attempt": "immediate alert", - "data_exfiltration_pattern": "immediate alert" - } - }, - "reporting": { - "weekly_security_report": { - "recipients": [ - "admin@tractatus.local", - "security@tractatus.local" - ], - "includes": [ - "security_events_summary", - "top_violating_ips", - "attack_patterns_identified", - "blocked_threats_count", - "recommendations" - ] - } - }, - "fail2ban_integration": { - "enabled": true, - "log_parsing": "parse security-audit.log for IP violations", - "ban_duration": "24 hours", - "ban_action": "iptables block + log", - "whitelist": "monitoring services, admin IPs" - }, - "sovereign_analysis_tools": [ - "grep", - "awk", - "sed", - "jq (for JSON)", - "custom shell scripts", - "NO external log aggregation (unless encrypted)" - ], - "implementation_files": [ - "src/utils/security-logger.js", - "public/admin/security-monitoring.html", - "public/js/admin/security-monitoring.js", - "scripts/generate-security-report.js", - "/etc/fail2ban/filter.d/tractatus.conf" - ] - }, - "active": true, - "notes": "SECURITY REQUIREMENT 2025-10-14 - Part 6 of comprehensive security vetting framework. Comprehensive logging and monitoring are essential for: (1) detecting attacks in progress, (2) forensic analysis after incidents, (3) compliance and audit requirements, (4) continuous improvement of security rules. Centralized logging provides single source of truth for all security events. Real-time monitoring dashboard provides visibility for security team. Alert thresholds enable rapid response to attacks. fail2ban integration provides automated defense. Sovereign tools (grep, awk, jq) ensure full control over log analysis without external dependencies. 90-day retention balances forensic needs with storage costs. This completes the 6-layer security vetting framework: file uploads (inst_041), email (inst_042), form inputs (inst_043), HTTP headers (inst_044), API protection (inst_045), monitoring/alerting (inst_046)." - }, - { - "id": "inst_047", - "text": "NEVER dismiss, downplay, or avoid user requests by claiming \"too hard\", \"too complex\", \"beyond capabilities\". When facing difficult requests: (1) Acknowledge complexity honestly, (2) Break into smaller steps, (3) Identify blockers explicitly, (4) Propose alternative approaches, (5) Ask user for priorities/trade-offs. If truly impossible, explain technical limitations with evidence, not vague dismissal.", - "timestamp": "2025-10-17T00:00:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-17-language-selector", - "parameters": { - "prohibited_evasion_phrases": [ - "too hard", - "too complex", - "beyond scope", - "difficult to determine", - "would require extensive investigation", - "this is complex and would require", - "I cannot determine without", - "this would be difficult because", - "it's hard to say", - "this is beyond the scope", - "I don't have enough information", - "would need significant effort" - ], - "required_behaviors": [ - "break_into_investigatable_steps", - "use_tools_systematically", - "research_documentation", - "present_findings_incrementally", - "provide_specific_evidence_for_blockers" - ], - "appropriate_tools": [ - "Read", - "Grep", - "Glob", - "Bash", - "Task", - "WebFetch", - "WebSearch" - ], - "acceptable_blockers": { - "file_not_found": "file does not exist at path X", - "missing_documentation": "documentation at URL Y does not contain information about Z", - "missing_dependencies": "package X is not installed (evidence: npm ls X shows not found)", - "authentication_required": "endpoint requires credentials not available in current session", - "external_service_down": "service returned 503 error (evidence: curl output)" - }, - "unacceptable_blockers": { - "vague_difficulty": "this is too complex", - "claimed_inability": "I cannot determine this", - "effort_avoidance": "this would require significant investigation", - "scope_dismissal": "this is beyond current scope" - }, - "investigation_protocol": { - "step_1": "identify_what_information_is_needed", - "step_2": "determine_which_tools_can_provide_it", - "step_3": "execute_tool_usage_systematically", - "step_4": "present_findings_or_specific_blockers" - } - }, - "related_instructions": [ - "inst_007", - "inst_038" - ], - "active": true, - "notes": "CRITICAL FRAMEWORK DISCIPLINE 2025-10-17 - User observed pattern where Claude avoided investigating SessionStart hook error by initially claiming it was 'working correctly' rather than thoroughly investigating why error message appeared despite successful manual execution. User directive: 'create a rule that prevents Claude from ignoring a user instruction because it's too hard!' Root cause: LLMs can exhibit evasion behaviors when faced with complex or time-consuming tasks, defaulting to vague explanations rather than systematic investigation. This instruction requires: (1) Use of available tools for investigation, (2) Breaking complex problems into steps, (3) Providing concrete evidence rather than difficulty claims, (4) Explicit blockers with proof rather than vague inability. Prevents pattern where 'I cannot determine' replaces 'let me investigate using tools X, Y, Z'. This is a SYSTEM-level governance rule that ensures Claude maintains investigative rigor regardless of task complexity." - }, - { - "id": "inst_048", - "text": "Pre-tool-execution hook validators (validate-file-write.js, validate-file-edit.js) MUST check content AFTER the proposed action would be applied, NOT the current existing file content. Write hook: validate HOOK_INPUT.tool_input.content (the NEW content being written). Edit hook: simulate the edit by applying old_string→new_string replacement on current file, then validate RESULT. This prevents catch-22 where hooks block legitimate attempts to fix violations in existing files. Hooks enforce what WILL BE committed, not what currently exists. When hooks detect violations in POST-action content, they MUST block with specific error explaining which violation was found in the PROPOSED content.", - "timestamp": "2025-10-17T10:56:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "system", - "session_id": "2025-10-17-csp-fixes", - "parameters": { - "hook_files": [ - "scripts/hook-validators/validate-file-write.js", - "scripts/hook-validators/validate-file-edit.js" - ], - "validation_principle": "validate_POST_action_content_not_PRE_action", - "write_hook_validates": "HOOK_INPUT.tool_input.content", - "edit_hook_validates": "current_file_content_with_edit_applied", - "edit_simulation": "apply old_string→new_string replacement then validate result", - "prevents": "catch-22 where fixing violations is blocked", - "violation_detection_in": "proposed_content_after_action", - "block_behavior": "specific error message explaining violation in PROPOSED content", - "enforcement_scope": [ - "inst_008 (CSP compliance)", - "inst_012 (internal document deployment)", - "inst_013 (sensitive data exposure)", - "inst_041-046 (security validation)", - "any_governance_rule_enforced_by_hooks" - ] - }, - "related_instructions": [ - "inst_008", - "inst_038" - ], - "active": false, - "notes": "ARCHITECTURAL FIX 2025-10-17 - CSP violation remediation was blocked by catch-22: hooks checked EXISTING file content (which had violations), saw violations, blocked attempt to FIX those violations. Root cause: validate-file-write.js read existing file from disk instead of checking tool_input.content (what WILL BE written). validate-file-edit.js checked current file instead of simulating edit and checking result. Fix: Changed hooks to validate POST-action content. Write hook now checks HOOK_INPUT.tool_input.content directly. Edit hook now applies the edit (old_string→new_string replacement) to current content, then validates the result. This allows hooks to properly enforce governance rules on PROPOSED changes while allowing remediation of existing violations. Successfully fixed 8 files with CSP violations after hook improvement. This is a CRITICAL architectural principle: enforcement hooks validate future state (what will be), not current state (what is).", - "deprecation_reason": "Consolidated into inst_008_CONSOLIDATED (CSP and security headers)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_049", - "text": "When user provides technical hypothesis or debugging suggestion, MUST test user's hypothesis FIRST before pursuing alternative approaches. BoundaryEnforcer enforcement: (1) If user suggests specific technical cause (e.g., 'could be a Tailwind issue', 'might be cache', 'probably X service'), create minimal test to validate hypothesis before trying alternatives, (2) If user hypothesis test fails, report specific results to user before pursuing alternative approach, (3) If pursuing alternative without testing user hypothesis, MUST explain why user's suggestion was not testable or relevant. PROHIBITED: Ignoring user technical suggestions and pursuing 12+ alternative debugging paths without testing user's idea. REQUIRED: Respect user domain expertise - test their hypothesis in first 1-2 attempts. This prevents resource waste (70,000+ tokens, 4+ hours) from ignoring correct user diagnosis. Architectural enforcement via BoundaryEnforcer: block actions that ignore user suggestions without explicit justification or test results.", - "timestamp": "2025-10-20T00:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 1, - "source": "user", - "session_id": "2025-10-20-framework-incident", - "parameters": { - "trigger_conditions": [ - "user_provides_hypothesis", - "user_suggests_cause", - "user_debugging_suggestion", - "user_technical_diagnosis", - "user_says_could_be_X", - "user_says_might_be_Y", - "user_says_probably_Z" - ], - "required_behaviors": [ - "test_user_hypothesis_first", - "minimal_test_to_validate", - "report_test_results_before_alternatives", - "explain_if_not_testable" - ], - "prohibited_behaviors": [ - "ignore_user_suggestion", - "pursue_12_plus_alternatives_without_testing_user_idea", - "assume_user_wrong_without_testing" - ], - "enforcement_mechanism": "BoundaryEnforcer", - "enforcement_action": "block actions that ignore user suggestions without justification or test results", - "example_user_phrases": [ - "could be a Tailwind issue", - "might be a cache problem", - "probably service X", - "I think it's Y", - "have you checked Z?" - ], - "test_requirements": { - "attempt_limit": "1-2 attempts to test user hypothesis", - "before_alternatives": true, - "report_results": "specific test results, not assumptions" - }, - "prevents": { - "resource_waste": "70,000+ tokens on wrong debugging path", - "time_waste": "4+ hours pursuing alternatives", - "trust_erosion": "user frustration from ignored expertise" - }, - "incident_reference": "FRAMEWORK_INCIDENT_2025-10-20_IGNORED_USER_HYPOTHESIS.md", - "roi_impact": "Prevents $610 losses per incident (4,500,000% ROI compared to governance overhead)" - }, - "related_instructions": [ - "inst_005", - "inst_047" - ], - "active": true, - "notes": "CRITICAL FRAMEWORK DISCIPLINE 2025-10-20 - Framework incident: User correctly identified 'could be a Tailwind issue' early in conversation. Claude pursued 12+ failed CSS/layout debugging attempts instead of testing user hypothesis. Issue was finally resolved on attempt 13 by testing user's original suggestion (zero-Tailwind buttons worked immediately). User feedback: 'you have just wasted four hours of my time' and 'you ignored me. Is that an issue to take up with the framework rules committee.' Root cause: BoundaryEnforcer component existed but was not architecturally enforced - voluntary compliance failed. This instruction creates MANDATORY enforcement: test user hypothesis FIRST (within 1-2 attempts) before pursuing alternatives. Prevents resource waste: 70,000 tokens, $210 API costs, 4 hours developer time, trust degradation. ROI: 135ms governance overhead prevents $610 in losses = 4,500,000% return. User technical expertise must be architecturally respected, not optionally considered. This instruction enforces the boundary: 'User knows their domain - test their ideas first.' Proposed for architectural enforcement via hooks in BoundaryEnforcer component." - }, - { - "id": "inst_050", - "text": "Before starting multi-file work (3+ files) or complex refactoring, perform explicit capacity self-assessment: estimate token cost, check current usage, calculate buffer, document decision to proceed/defer", - "timestamp": "2025-10-20T21:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "REQUIRED", - "explicitness": 0.88, - "source": "collaborative", - "session_id": "2025-10-20-autonomous-rules", - "parameters": { - "threshold_files": 3, - "required_elements": [ - "token_estimate", - "current_usage", - "buffer_calculation", - "decision" - ] - }, - "active": true, - "notes": "Prevents token exhaustion mid-task. Proven in admin UI overhaul (estimated 62k, used 26k)." - }, - { - "id": "inst_051", - "text": "At 50k, 100k, 150k token milestones, run pressure check and report status. If pressure > ELEVATED at any checkpoint, create handoff summary before continuing", - "timestamp": "2025-10-20T21:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "REQUIRED", - "explicitness": 0.92, - "source": "collaborative", - "session_id": "2025-10-20-autonomous-rules", - "parameters": { - "checkpoints": [ - 50000, - 100000, - 150000 - ], - "pressure_threshold": "ELEVATED" - }, - "active": true, - "notes": "Automated pressure monitoring at token milestones. To be implemented in session-init.js" - }, - { - "id": "inst_052", - "text": "Claude Code has authority to adjust implementation scope for efficiency when user grants 'full discretion', BUT must document rationale in commit message or handoff summary. Preserve user-valued patterns over forced uniformity. NEVER adjust: security architecture, user credentials, media responses, third-party interactions (except GitHub, OVHCloud)", - "timestamp": "2025-10-20T21:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 0.85, - "source": "collaborative", - "session_id": "2025-10-20-autonomous-rules", - "parameters": { - "trigger_phrase": "full discretion", - "never_adjust": [ - "security_architecture", - "user_credentials", - "media_responses", - "third_party_interactions" - ], - "pre_approved_third_parties": [ - "github.com", - "ovhcloud.com" - ] - }, - "active": true, - "notes": "Enables pragmatic efficiency (58% token savings in admin UI overhaul) while preserving critical boundaries" - }, - { - "id": "inst_053", - "text": "When making architectural decisions (component patterns, data structures, API designs), document: (1) alternatives considered, (2) trade-offs, (3) rationale for choice. Include in commit message or create ADR for major changes. Threshold for ADR: at discretion based on impact", - "timestamp": "2025-10-20T21:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 0.9, - "source": "collaborative", - "session_id": "2025-10-20-autonomous-rules", - "parameters": { - "adr_triggers": [ - "component_pattern", - "schema_change", - "api_design", - "auth_change" - ], - "required_elements": [ - "alternatives", - "trade_offs", - "rationale" - ] - }, - "active": true, - "notes": "Creates maintainability context for future sessions. Threshold at discretion per user guidance" - }, - { - "id": "inst_054", - "text": "PRE-DEPLOYMENT CHECKLIST (run in order):\n□ 1. CSP Compliance Check [AUTOMATED via hook]\n□ 2. Local Server Test (curl http://localhost:9000/health → 200 OK)\n□ 3. Comprehensive Testing (npm test → all pass)\n□ 4. Permission Verification (ls -la → correct 644/755)\n□ 5. Git Status Clean (no uncommitted changes)\nMark each checkbox before proceeding to next. BLOCK deployment if any step fails.", - "timestamp": "2025-10-20T21:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 0.95, - "source": "collaborative", - "session_id": "2025-10-20-autonomous-rules", - "parameters": { - "steps": [ - "csp_check", - "local_test", - "commit", - "push", - "deploy", - "verify_restart" - ], - "local_port": 9000 - }, - "active": false, - "notes": "Zero-defect deployment chain. Successfully followed in Phase 1 and Phase 2\n\nSuperseded by inst_071 on 2025-10-21 which adds secret detection and credential audit steps." - }, - { - "id": "inst_055", - "text": "When refactoring, preserve working patterns that serve legitimate use cases, even if they don't match ideal architecture. Standardize appearance/conventions, but don't force-fit different use cases into single component. Document why patterns differ", - "timestamp": "2025-10-20T21:00:00Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "REQUIRED", - "explicitness": 0.82, - "source": "collaborative", - "session_id": "2025-10-20-autonomous-rules", - "parameters": { - "preserve_patterns": [ - "cross_page_navigation", - "internal_tabs", - "workflow_specific_ui" - ], - "standardize": [ - "css_versions", - "naming_conventions", - "api_patterns" - ] - }, - "active": true, - "notes": "Key insight from admin UI overhaul: preserved cross-page navigation tabs instead of forcing uniformity" - }, - { - "id": "inst_056", - "text": "When performing batch operations (editing 3+ similar files), validate pattern on 1 file first, verify success, then apply to remaining files. Document pattern in commit message", - "timestamp": "2025-10-20T21:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "REQUIRED", - "explicitness": 0.9, - "source": "collaborative", - "session_id": "2025-10-20-autonomous-rules", - "parameters": { - "threshold_files": 3, - "validation_steps": [ - "apply_to_one", - "verify_success", - "batch_apply" - ] - }, - "active": true, - "notes": "Prevents cascading errors. Used successfully in navbar component rollout (3 pages, zero errors)" - }, - { - "id": "inst_057", - "text": "For changes affecting: (1) production database schemas, (2) authentication/security, (3) critical user workflows, document rollback plan BEFORE making changes. Risk level and rollback requirements at discretion. Include: backup steps, reversion commands, verification tests", - "timestamp": "2025-10-20T21:00:00Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "MANDATORY", - "explicitness": 0.92, - "source": "collaborative", - "session_id": "2025-10-20-autonomous-rules", - "parameters": { - "high_risk_categories": [ - "database_schema", - "authentication", - "security", - "critical_workflows" - ], - "rollback_required_elements": [ - "backup_steps", - "reversion_commands", - "verification_tests" - ] - }, - "active": true, - "notes": "Risk mitigation for deployment safety. Rollback requirement threshold at discretion per user guidance" - }, - { - "id": "inst_058", - "text": "When synchronizing data between file-based config (.json) and database schemas (MongoDB/Mongoose), ALWAYS implement explicit field mapping functions. Before executing sync operations, validate that mapping functions exist for ALL fields with enum constraints or different naming conventions between source and destination formats. Test mapping with a single record before batch operations.", - "timestamp": "2025-10-21T00:00:00Z", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PROJECT", - "verification_required": "RECOMMENDED", - "explicitness": 0.95, - "source": "automated", - "session_id": "2025-10-21-sync-implementation", - "parameters": { - "validation_requirements": [ - "enum_constraints_mapped", - "naming_conventions_mapped", - "single_record_test_before_batch" - ] - }, - "active": true, - "notes": "Prevents mass sync failures. Created after 20-rule rejection due to enum mismatch (user vs user_instruction). Would have saved 8 minutes debugging." - }, - { - "id": "inst_059", - "text": "When creating new files that may trigger Write hook validation: (1) Attempt Write tool first, (2) If blocked, copy similar existing file then Edit, (3) For large code blocks, use bash heredoc with strong quoting ('EOF' not EOF), (4) Always Read before Edit for recently created/modified files. Prefer copy-edit over heredoc for JavaScript/complex syntax.", - "timestamp": "2025-10-21T00:00:00Z", - "quadrant": "TACTICAL", - "persistence": "MEDIUM", - "temporal_scope": "PROJECT", - "verification_required": "OPTIONAL", - "explicitness": 0.88, - "source": "automated", - "session_id": "2025-10-21-sync-implementation", - "parameters": { - "workflow_steps": [ - "attempt_write_first", - "copy_edit_if_blocked", - "heredoc_with_strong_quotes", - "read_before_edit" - ], - "preference": "copy_edit_for_complex_syntax" - }, - "active": true, - "notes": "Codifies successful workaround patterns. Reduces time lost to hook validation errors.", - "adjustment_history": [ - { - "date": "2025-10-21", - "session": "2025-10-07-001", - "changes": { - "quadrant": "TACTICAL" - }, - "reason": "Reclassified from OPERATIONAL to TACTICAL" - } - ] - }, - { - "id": "inst_060", - "text": "When using sed for global replacements (s///g), verify replacement won't cascade to already-replaced text. For complex multi-variable replacements or when replacing with similar patterns (e.g., isDryRun → _isDryRun), prefer rewriting entire file over incremental sed commands. Always use Read tool to verify sed results before proceeding.", - "timestamp": "2025-10-21T00:00:00Z", - "quadrant": "TACTICAL", - "persistence": "LOW", - "temporal_scope": "PROJECT", - "verification_required": "RECOMMENDED", - "explicitness": 0.82, - "source": "automated", - "session_id": "2025-10-21-sync-implementation", - "parameters": { - "risk_factors": [ - "cascading_replacements", - "similar_patterns", - "multi_variable_changes" - ], - "mitigation": "prefer_full_file_rewrite" - }, - "active": true, - "notes": "Prevents cascading sed errors (isDryRun → __isDryRun). Low persistence as issue is specific to shell operations." - }, - { - "id": "inst_061", - "text": "When user selects hook approval option '2. Yes, and don't ask again for similar commands in [directory]', Claude Code MUST persist this approval for the entire session. Do NOT ask again for similar bash commands in the same directory during the same session. This is a Claude Code framework requirement, not a suggestion.", - "timestamp": "2025-10-20T19:54:46.237Z", - "quadrant": "TACTICAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 0.95, - "source": "user", - "session_id": "2025-10-21-mongodb-fix", - "parameters": { - "hook_type": "bash_approval", - "expected_behavior": "persist_for_session", - "applies_to": "all_similar_commands_in_directory" - }, - "active": true, - "notes": "User feedback: Having to repeatedly answer hook prompts after selecting option 2 is unacceptable. Framework must respect session-level approvals.", - "adjustment_history": [ - { - "date": "2025-10-21", - "session": "2025-10-07-001", - "changes": { - "quadrant": "TACTICAL" - }, - "reason": "Reclassified from OPERATIONAL to TACTICAL" - } - ] - }, - { - "id": "inst_062", - "text": "GitHub README.md must be reviewed weekly and 'Last Updated' date updated when material changes occur", - "timestamp": "2025-10-21T05:38:05.001Z", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 0.9, - "source": "governance_decision", - "session_id": "2025-10-21", - "parameters": { - "file": "README.md", - "review_frequency": "weekly", - "update_trigger": "material_changes", - "priority": "high" - }, - "active": false, - "notes": "GitHub README is primary external interface - must be world-class and current. Material changes include: service additions/removals, architecture changes, status updates, documentation links, or critical corrections. Minor fixes (typos, formatting) don't require date update.", - "deprecation_reason": "Consolidated into inst_063_CONSOLIDATED (public GitHub management)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_063", - "text": "Public GitHub (tractatus-framework) must remain implementation-focused. Prohibited without explicit approval: changing target audience (implementer→researcher), adding research framing, adding failure case studies, theoretical content, or repositioning as research project. Full discretion ≠ permission to change fundamental purpose.", - "timestamp": "2025-10-21T08:12:30.842Z", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "verification_required": "MANDATORY", - "explicitness": 0.95, - "source": "user_correction", - "session_id": "2025-10-21", - "parameters": { - "repository": "tractatus-framework", - "prohibited_actions": [ - "audience_substitution", - "research_framing", - "failure_case_studies", - "theoretical_positioning", - "scope_inflation" - ], - "required_audience": "implementers", - "required_purpose": "implementation_documentation", - "approval_required_for": "audience_changes, content_type_changes, project_positioning" - }, - "active": false, - "notes": "Created 2025-10-21 after bad actor incident: AI converted implementation docs to research manifesto without permission. Scope creep under \"full discretion\" is not authorized architectural repositioning. Public GitHub is for developers implementing framework, not researchers studying it. All background/research content belongs on agenticgovernance.digital website.", - "deprecation_reason": "Consolidated into inst_063_CONSOLIDATED (public GitHub management)", - "deprecated_date": "2025-10-21", - "deprecated_session": "2025-10-07-001" - }, - { - "id": "inst_008_CONSOLIDATED", - "text": "ALL HTML/JS must comply with Content Security Policy: no inline event handlers (onclick, onload, etc.), no inline scripts, no inline styles. ALL HTTP responses MUST include comprehensive security headers: Content-Security-Policy, Strict-Transport-Security, X-Frame-Options (DENY), X-Content-Type-Options (nosniff), Referrer-Policy (strict-origin-when-cross-origin). Pre-tool execution hook validators (validate-file-write.js, validate-file-edit.js) MUST check CSP compliance before allowing edits and provide specific violation details if blocked.", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "CONSOLIDATED from inst_008, inst_044, inst_048. Single source of truth for CSP and security header requirements. Prevents CSP violations and security header omissions.", - "deprecates": [ - "inst_008", - "inst_044", - "inst_048" - ], - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "blocking": true, - "enforcement_location": "pre-tool-hooks" - } - }, - { - "id": "inst_020_CONSOLIDATED", - "text": "Web application deployments MUST ensure correct file permissions before going live. Public-facing HTML/CSS/JS: 644 (rw-r--r--), executable scripts: 755 (rwxr-xr-x), admin directories: 750 (rwxr-x---). ALL deployment scripts (rsync, scp, git pull) MUST include automated post-deployment permission correction commands. Verify with \"ls -la\" before declaring deployment complete. Permission errors are recurring deployment failures - automated correction is mandatory.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "CONSOLIDATED from inst_020, inst_022. Prevents public access to admin directories and execution of static files. Recurring issue required automation mandate.", - "deprecates": [ - "inst_020", - "inst_022" - ], - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "blocking": true, - "automation_required": true - } - }, - { - "id": "inst_041_CONSOLIDATED", - "text": "ALL file inputs (web uploads, email attachments, user-provided files) MUST be validated before processing: (1) File type whitelist validation (reject executables, scripts), (2) Size limits enforced, (3) Content scanning for malware/XSS payloads, (4) Secure storage (GridFS with encryption), (5) Access control (authenticated users only, role-based permissions). Reject and log all suspicious files per inst_046 (security event logging). Never trust client-provided MIME types - verify file signatures.", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "CONSOLIDATED from inst_041, inst_042. Comprehensive file/attachment security validation. Part of security vetting framework.", - "deprecates": [ - "inst_041", - "inst_042" - ], - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "blocking": true, - "security_critical": true - } - }, - { - "id": "inst_063_CONSOLIDATED", - "text": "Public GitHub repository (tractatus-framework) must remain implementation-focused. Prohibited without explicit approval: (1) Governance research documents, (2) Pluralistic deliberation guides, (3) Theoretical frameworks, (4) Project-specific internal documentation, (5) Business strategy documents. Allowed: (1) Technical implementation documentation, (2) API reference guides, (3) Code examples and tutorials, (4) Installation/setup guides, (5) Contribution guidelines. README.md must be reviewed weekly and \"Last Updated\" date updated when material changes occur. README is primary external interface - must be world-class and current.", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "CONSOLIDATED from inst_028, inst_062, inst_063. Created after bad actor incident where AI converted implementation docs to authoritarian governance guide. Prevents misrepresentation of framework purpose.", - "deprecates": [ - "inst_028", - "inst_062", - "inst_063" - ], - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "ADVISORY", - "requires_user_approval": true, - "review_frequency": "weekly" - } - }, - { - "id": "inst_064", - "text": "Tractatus framework components MUST be actively used throughout sessions: (1) ContextPressureMonitor: At session start (baseline), 50k/100k/150k token milestones, after complex multi-file operations, after errors. (2) InstructionPersistenceClassifier: When user gives explicit instruction, configuration specifications, architectural constraints. (3) CrossReferenceValidator: Before database schema changes, configuration modifications, architectural decisions. (4) BoundaryEnforcer: Before privacy policy decisions, ethical trade-offs, values-sensitive content. (5) MetacognitiveVerifier: For operations with 3+ file modifications or 5+ sequential steps. (6) PluralisticDeliberationOrchestrator: When BoundaryEnforcer flags values conflict. Framework fade (components not being used) = CRITICAL FAILURE. Update .claude/session-state.json after each component use with timestamp and validation count.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "CRITICAL ENFORCEMENT GAP - Previously documented but not enforced as rule. Specifies exactly when each component must be used. Replaces vague inst_007.", - "replaces": [ - "inst_007" - ], - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "framework_critical": true, - "failure_mode": "CRITICAL" - } - }, - { - "id": "inst_065", - "text": "MANDATORY at session start and immediately after conversation compaction: Run \"node scripts/session-init.js\", then report to user: (1) Server status: curl -s http://localhost:9000/health | jq -r '.status' (expect 'ok'), (2) Framework statistics: session ID, active instructions count, version from .claude/session-state.json and .claude/instruction-history.json, (3) MongoDB status: active rules count from tractatus_dev database. BLOCK all session work until initialization complete and results reported to user. Output results in clean formatted summary before proceeding with any tasks.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Required by CLAUDE.md but not previously enforced as rule. Ensures framework operational before work begins. Critical for session continuity after compaction.", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "blocking": true, - "triggers": [ - "session_start", - "post_compaction" - ] - } - }, - { - "id": "inst_066", - "text": "ALL git commits MUST use conventional commit format: \"type(scope): description\". Types: feat (new feature), fix (bug fix), docs (documentation), refactor (code restructure), test (test additions), chore (maintenance). Include Claude Code attribution footer:\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\nCo-Authored-By: Claude \n\nNEVER use \"git commit -i\" or \"git add -i\" (interactive modes not supported). When pre-commit hooks modify files, verify commit authorship (git log -1 --format='%an %ae') before amending - NEVER amend other developers' commits.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Documented in Maintenance Guide but not enforced as rule. Improves git history quality and provides attribution transparency.", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "ADVISORY", - "quality_standard": true - } - }, - { - "id": "inst_067", - "text": "BEFORE database operations or port-specific commands: (1) VERIFY current environment (local vs production) from context, (2) VERIFY correct port/database from explicit user instruction OR CLAUDE.md defaults (local: tractatus_dev:27017 on port 9000, production: tractatus_prod:27017 on port 9000), (3) If user specifies non-standard port or database (e.g., port 27027, custom database name), USE EXACT VALUE FROM USER INSTRUCTION - do NOT autocorrect to standard defaults. Pattern recognition bias for standard ports/databases is a known 27027 failure mode where training data associations override explicit instructions. When in doubt, ask user to confirm environment.", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Prevents 27027-type failures where pattern recognition overrides explicit user instructions. Critical for multi-environment operations.", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "failure_prevention": "27027_pattern_bias", - "blocking": true - } - }, - { - "id": "inst_068", - "text": "Run tests in these scenarios: (1) Before git commits if tests exist for modified code area, (2) Before all deployments (run full test suite), (3) After refactoring (run affected tests), (4) When user explicitly requests testing. Test failures BLOCK commits and deployments unless user explicitly approves proceeding with failing tests. When creating new features, ask user if tests should be written - do not assume test requirements. Report test results with counts: X passed, Y failed, Z skipped. Use \"npm test\" for full suite or \"npm test -- \" for specific tests.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Aligns with world-class quality standard (inst_004). Prevents regressions and maintains code quality.", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "blocking": true, - "quality_critical": true - } - }, - { - "id": "inst_024a", - "text": "Before session handoff or closedown: Kill all background processes spawned during session (npm, jest, node, dev servers, file watchers). Use \"ps aux | grep -E \\\"npm|jest|node\\\"\" to find processes, \"pkill -f \" to terminate. Verify cleanup with \"ps aux | grep -E \\\"npm|jest|node\\\"\" again (should show no results except grep itself). Update .claude/session-state.json with cleanup timestamp and process count terminated.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Split from inst_024 for granular enforcement. Part of comprehensive closedown protocol.", - "part_of": "inst_024_series", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "closedown_step": 1 - } - }, - { - "id": "inst_024b", - "text": "Before session handoff: Verify .claude/instruction-history.json changes are synced to MongoDB governanceRules collection. If instruction-history.json modified this session, run \"node scripts/sync-instructions-to-db.js\" to sync. Compare counts: active instructions in JSON vs active rules in database. Report sync status in handoff document: \"Synced: X instructions → Y database rules\" or \"Not needed: No changes this session\".", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Split from inst_024 for granular enforcement. Ensures file-database consistency.", - "part_of": "inst_024_series", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "closedown_step": 2 - } - }, - { - "id": "inst_024c", - "text": "Before session handoff: Document complete git status: (1) Current branch, (2) Commits ahead/behind remote (git status shows \"Your branch is ahead of origin/main by X commits\"), (3) Working tree status (clean vs untracked files), (4) Most recent commits (git log --oneline -5). Include in handoff document with explanations for any untracked files (e.g., \"untracked files are INTERNAL project files, NOT for public repo\"). If working tree has uncommitted changes, explain why or commit before handoff.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Split from inst_024 for granular enforcement. Provides next session with clear git context.", - "part_of": "inst_024_series", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "closedown_step": 3 - } - }, - { - "id": "inst_024d", - "text": "Before session handoff: Clean temporary artifacts created during session: (1) .memory-test/ directory (if exists from testing), (2) Test databases (mongosh --eval \"db.dropDatabase()\" on tractatus_test), (3) Stale lock files (check age - if hours old with no process, safe to delete), (4) Temporary scripts in /tmp/. Document what was cleaned and what was intentionally kept (e.g., \"package-lock.json kept - legitimate\", \"mongod.lock kept - server running\"). Do NOT delete legitimate lock files for running processes.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Split from inst_024 for granular enforcement. Prevents clutter accumulation across sessions.", - "part_of": "inst_024_series", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "ADVISORY", - "closedown_step": 4 - } - }, - { - "id": "inst_024e", - "text": "Create session handoff document as OPTIMAL_STARTUP_PROMPT_.md with: (1) Current system status (server, framework, database, git), (2) Completed tasks with file:line references and verification, (3) In-progress tasks with blockers and next steps, (4) Pending tasks prioritized by user importance, (5) Recent instruction additions/changes with rationale, (6) Known issues and gotchas, (7) Framework health assessment, (8) User decisions needed, (9) Ready-to-use TodoWrite JSON for next session, (10) Recommended startup sequence with exact commands. STOP ALL WORK IMMEDIATELY after creating handoff document - handoff signals NEW session intent, not continuation.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "Split from inst_024 for granular enforcement. Core handoff creation with strict format requirements.", - "part_of": "inst_024_series", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "closedown_step": 5, - "terminal_action": true - } - }, - { - "id": "inst_069", - "text": "ALL credentials, API keys, secrets, tokens, passwords in documentation MUST be redacted or use example-only values. NEVER include real production or development credentials in files committed to git. Required patterns: API keys: \"sk-ant-api03-EXAMPLE-REDACTED-NEVER-USE\", Stripe keys: \"sk_live_EXAMPLE_REDACTED\", \"pk_live_EXAMPLE_REDACTED\", Passwords: \"REDACTED\" or \"your-password-here\", Tokens: \"your-token-here\". BEFORE committing any file containing credential-like patterns: (1) Replace ALL real values with examples/redacted versions, (2) Run secret detection scan (gitleaks or detect-secrets), (3) Verify no actual credentials remain. If actual credentials needed for deployment, use: Environment variables (.env file, NOT committed), Secure secret management (HashiCorp Vault, AWS Secrets Manager), Deployment-specific configuration (NOT in git).", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "CRITICAL SECURITY REQUIREMENT - Created in response to Anthropic API key exposure incident on 2025-10-21. API key (sk-ant-api03-_xm...TwAA, ID 5043627, name: family-history-ocr) was committed to public repository in docs/STRIPE_LIVE_MODE_DEPLOYMENT.md at commit 31345d5c1abc8c8da9387d55494a1741f451f9a7. GitHub secret scanning detected and Anthropic revoked key automatically. This rule prevents recurrence by requiring ALL credentials to be redacted in documentation and enforcing secret detection scans before commits.", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "blocking": true, - "security_critical": true, - "incident_response": "anthropic_api_key_exposure_2025_10_21" - } - }, - { - "id": "inst_070", - "text": "ALL git commits MUST pass secret detection scan before being allowed. Use gitleaks or detect-secrets as pre-commit hook. Hook location: .git/hooks/pre-commit. Command: gitleaks detect --source . --verbose. Action: BLOCK commit if secrets detected. If legitimate secret-like pattern detected (false positive): (1) Verify it is NOT a real secret, (2) Add to .gitleaksignore with comment explaining why, (3) Get user approval before committing, (4) Document in commit message. NEVER bypass secret detection hook without explicit user approval.", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "CRITICAL SECURITY REQUIREMENT - Created in response to Anthropic API key exposure incident. Automated pre-commit hook prevents credentials from being committed to git in the first place. This is Layer 3 of defense-in-depth strategy (Prevention → Mitigation → Detection → Backstop → Recovery).", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "blocking": true, - "automation_required": true, - "security_critical": true - } - }, - { - "id": "inst_071", - "text": "PRE-DEPLOYMENT CHECKLIST (run in order):\n□ 1. CSP Compliance Check [AUTOMATED via hook]\n□ 2. Secret Detection Scan (gitleaks detect --source .)\n□ 3. Credential Audit (grep -r \"sk-\" \"pk-\" \"secret\" \"password\")\n□ 4. Local Server Test (curl http://localhost:9000/health → 200 OK)\n□ 5. Comprehensive Testing (npm test → all pass)\n□ 6. Permission Verification (ls -la → correct 644/755)\n□ 7. Git Status Clean (no uncommitted changes)\n□ 8. Public Repository Content Review (no internal docs)\nMark each checkbox before proceeding to next. BLOCK deployment if any step fails.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "ENHANCED from inst_054 - Added steps 2, 3, 8 in response to security incident. Step 2 (Secret Detection) and Step 3 (Credential Audit) provide redundant verification that no credentials are being deployed. Step 8 (Public Repository Content Review) ensures no internal documentation accidentally published. This is defense-in-depth approach.", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "MANDATORY", - "blocking": true, - "replaces": "inst_054" - } - }, - { - "id": "inst_072", - "text": "Implement defense-in-depth for credential protection: Layer 1 - Prevention: Never commit credentials to git. Layer 2 - Mitigation: Redact credentials in documentation. Layer 3 - Detection: Pre-commit secret scanning (automated). Layer 4 - Backstop: GitHub secret scanning (automatic on public repos). Layer 5 - Recovery: Credential rotation procedures documented. ALL security-sensitive operations must have multiple layers. If one layer fails, others should prevent catastrophic outcome. When creating deployment documentation: (1) Use environment variable names, not values, (2) Include credential rotation procedures, (3) Document secret management system (Vault, AWS Secrets Manager), (4) Never assume \"just do not commit secrets\" is sufficient protection.", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-07-001", - "notes": "STRATEGIC SECURITY PRINCIPLE - Created in response to incident analysis. The breach occurred because only Layer 1 (prevention) and Layer 4 (GitHub scanning) existed. Layers 2, 3, and 5 were missing. This rule requires ALL five layers for security-critical operations. Based on \"assume breach\" security model where no single control is trusted.", - "active": true, - "created_date": "2025-10-21", - "parameters": { - "verification_required": "ADVISORY", - "architectural_principle": true, - "security_critical": true - } - } - ], - "stats": { - "total_instructions": 72, - "active_instructions": 59, - "by_quadrant": { - "SYSTEM": 16, - "STRATEGIC": 13, - "OPERATIONAL": 25, - "TACTICAL": 5 - }, - "by_persistence": { - "HIGH": 54, - "MEDIUM": 4, - "LOW": 1 - } - } -} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 51fb7532..8a9a10c5 100644 --- a/.gitignore +++ b/.gitignore @@ -211,3 +211,11 @@ scripts/test-deliberation*.js public/downloads/*claude-code*.pdf public/downloads/*governance-in-action*.pdf SECURITY_INCIDENT_POST_MORTEM_2025-10-21.md + +# Internal project-specific files (not framework) +SECURITY_INCIDENT_HUMAN_ACTIONS_REQUIRED.md +.claude/instruction-history.json +scripts/add-security-rules-*.js +scripts/apply-governance-audit-*.js +docs/governance/GOVERNANCE_LEARNINGS_*.md +docs/governance/GOVERNANCE_RULES_AUDIT_*.md diff --git a/SECURITY_INCIDENT_HUMAN_ACTIONS_REQUIRED.md b/SECURITY_INCIDENT_HUMAN_ACTIONS_REQUIRED.md deleted file mode 100644 index c7d440fb..00000000 --- a/SECURITY_INCIDENT_HUMAN_ACTIONS_REQUIRED.md +++ /dev/null @@ -1,533 +0,0 @@ -# SECURITY INCIDENT - HUMAN ACTIONS REQUIRED - -**Date**: 2025-10-21 -**Incident**: Anthropic API Key Exposure + Additional Credentials Found -**Severity**: CRITICAL -**Status**: IMMEDIATE ACTION REQUIRED - ---- - -## EXECUTIVE SUMMARY - -**What Happened**: -1. Anthropic API key exposed in public GitHub repository (tractatus-framework) -2. Key automatically revoked by Anthropic (good - their secret scanning worked) -3. Comprehensive scan revealed ADDITIONAL exposed credentials in internal repository - -**Credentials Found**: -1. ✅ Anthropic API key (REVOKED by Anthropic) -2. ❌ SAME Anthropic key STILL in `.env` file (internal repo) -3. ❌ SAME Anthropic key STILL in `docs/STRIPE_LIVE_MODE_DEPLOYMENT.md` (internal repo) -4. ❌ Stripe TEST keys in `.env` (low risk, but still credentials) -5. ❌ JWT secret in `.env` (production secret) - -**Your Action**: Follow checklist below IMMEDIATELY - ---- - -## CRITICAL - IMMEDIATE ACTIONS (Next 30 Minutes) - -### 1. Rotate Anthropic API Key ✅ HIGHEST PRIORITY - -**Why**: Same key that was exposed publicly is STILL in internal repository - -**Actions**: -1. Login to Anthropic Console: https://platform.claude.com/settings/keys -2. Verify key `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` is revoked - - Key ID: 5043627 - - Key Name: family-history-ocr - - Status should show: **REVOKED** -3. Create NEW API key: - - Name: `tractatus-production-2025-10-21` (or similar) - - Description: "Replaces compromised key family-history-ocr" - - Copy new key (starts with `sk-ant-api03-`) -4. Update `.env` file: - ```bash - # Open .env file - nano /home/theflow/projects/tractatus/.env - - # Replace OLD key with NEW key: - # OLD: CLAUDE_API_KEY=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 - # NEW: CLAUDE_API_KEY=sk-ant-api03-YOUR_NEW_KEY_HERE - - # Save and exit (Ctrl+X, Y, Enter) - ``` -5. Test new key: - ```bash - curl https://api.anthropic.com/v1/messages \ - --header "x-api-key: sk-ant-api03-YOUR_NEW_KEY_HERE" \ - --header "anthropic-version: 2023-06-01" \ - --header "content-type: application/json" \ - --data '{"model": "claude-sonnet-4-5-20250929", "max_tokens": 10, "messages": [{"role": "user", "content": "test"}]}' - - # Should return valid response (not 401 error) - ``` - -**Verification**: New key works, old key definitely revoked - ---- - -### 2. Remove Exposed Key from Documentation ✅ CRITICAL - -**Why**: `docs/STRIPE_LIVE_MODE_DEPLOYMENT.md` contains the SAME exposed key - -**Actions**: -```bash -# Edit the file -nano /home/theflow/projects/tractatus/docs/STRIPE_LIVE_MODE_DEPLOYMENT.md - -# Find line with: CLAUDE_API_KEY=sk-ant-api03-_xmqWkax8jx... -# Replace with: CLAUDE_API_KEY=sk-ant-api03-EXAMPLE-REDACTED-NEVER-USE - -# Save and exit -``` - -**Alternative** (automated): -```bash -sed -i 's/CLAUDE_API_KEY=sk-ant-api03-[a-zA-Z0-9_-]*/CLAUDE_API_KEY=sk-ant-api03-EXAMPLE-REDACTED-NEVER-USE/g' docs/STRIPE_LIVE_MODE_DEPLOYMENT.md -``` - -**Verification**: No real API keys in documentation - ---- - -### 3. Rotate JWT Secret ✅ HIGH PRIORITY - -**Why**: JWT secret in `.env` is production credential used for authentication - -**Current Secret** (EXPOSED): -``` -d4d9b5ac258123dbab38abf5ca7cd6274e2247d247a5a4fc18a031853cb332ec9d661f2cdb6aac7288bfffdcfb69b7c34cef84d342c139e69064941a8525f4c5 -``` - -**Actions**: -1. Generate new JWT secret: - ```bash - # Generate secure random secret (64 bytes hex) - openssl rand -hex 64 - - # Copy the output - ``` -2. Update `.env`: - ```bash - nano .env - - # Replace: - # OLD: JWT_SECRET=d4d9b5ac258123db... - # NEW: JWT_SECRET= - - # Save and exit - ``` -3. **IMPORTANT**: This will invalidate ALL existing JWT tokens - - All users will need to re-login - - Any admin sessions will be terminated - - This is CORRECT behavior (invalidates potentially compromised sessions) - -**Verification**: Server starts successfully with new JWT secret - ---- - -### 4. Rotate Stripe Keys (OPTIONAL - Low Risk) ⚠️ MEDIUM PRIORITY - -**Why**: Stripe TEST keys found in `.env` (not live keys, low financial risk) - -**Current Keys** (TEST mode): -- Secret: `sk_test_51RX67kGhfAwOYBrf2yU9XCbjkJERKuYhvreL5bFOV7Rr2qdDlHbVRobZ7bz7bC7ZR89q2aI4fX6rubqTl7iH2Y3U001FPAsNxr` -- Publishable: `pk_test_51RX67kGhfAwOYBrfbow71FlMSRR2fZlWysLV5w9oV0ylCFf5nLL4Aoin2SWBnmgnkBv6pusOlfxctt9kRBKHOjWC00XGag29RO` - -**Risk Assessment**: -- These are TEST keys (sk_test_, pk_test_) -- No real money can be charged -- Still best practice to rotate - -**Actions** (if you want to rotate): -1. Login to Stripe Dashboard: https://dashboard.stripe.com/test/apikeys -2. Roll secret key (this creates new key and invalidates old) -3. Copy new keys -4. Update `.env`: - ```bash - STRIPE_SECRET_KEY=sk_test_YOUR_NEW_SECRET_KEY - STRIPE_PUBLISHABLE_KEY=pk_test_YOUR_NEW_PUBLISHABLE_KEY - ``` - -**Decision**: Your call - test keys have low risk, but rotation is prudent - ---- - -## SECONDARY ACTIONS (Next 1-2 Hours) - -### 5. Install Gitleaks (Secret Detection Tool) - -**Why**: Prevents future credential exposure with automated pre-commit scanning - -**Installation** (Linux): -```bash -# Download gitleaks -wget https://github.com/gitleaks/gitleaks/releases/download/v8.18.1/gitleaks_8.18.1_linux_x64.tar.gz - -# Extract -tar -xzf gitleaks_8.18.1_linux_x64.tar.gz - -# Move to /usr/local/bin -sudo mv gitleaks /usr/local/bin/ - -# Verify installation -gitleaks version -``` - -**Installation** (Mac - if applicable): -```bash -brew install gitleaks -``` - -**Test**: -```bash -# Scan repository -cd /home/theflow/projects/tractatus -gitleaks detect --source . --verbose - -# Should detect credentials in .env, docs/STRIPE_LIVE_MODE_DEPLOYMENT.md -``` - ---- - -### 6. Create Git Pre-Commit Hook - -**Why**: Blocks commits containing secrets BEFORE they reach git history - -**Actions**: -```bash -# Navigate to repository -cd /home/theflow/projects/tractatus - -# Create pre-commit hook -cat > .git/hooks/pre-commit << 'EOF' -#!/bin/bash - -echo "🔍 Running secret detection scan..." -gitleaks detect --source . --verbose --no-git - -if [ $? -ne 0 ]; then - echo "" - echo "❌ SECRETS DETECTED - Commit blocked" - echo "" - echo "If this is a false positive:" - echo " 1. Verify it's NOT a real secret" - echo " 2. Add to .gitleaksignore with explanation" - echo " 3. Get user approval" - echo " 4. Try committing again" - echo "" - exit 1 -fi - -echo "✅ No secrets detected - proceeding with commit" -exit 0 -EOF - -# Make executable -chmod +x .git/hooks/pre-commit - -# Test -echo "test-secret=sk-ant-api03-test" > test-file.txt -git add test-file.txt -git commit -m "test" # Should BLOCK with secret detection error -rm test-file.txt -git reset HEAD test-file.txt -``` - -**Verification**: Committing a file with API key pattern is BLOCKED - ---- - -### 7. Add .env to .gitignore (If Not Already) - -**Why**: Ensures .env never accidentally committed - -**Actions**: -```bash -# Check if .env in .gitignore -grep "^\.env$" .gitignore - -# If not found, add it: -echo ".env" >> .gitignore - -# Verify -cat .gitignore | grep "\.env" -``` - -**Verification**: .env appears in .gitignore - ---- - -### 8. Remove docs/STRIPE_LIVE_MODE_DEPLOYMENT.md from Public Repository - -**Why**: This file was exposed in public repo at commit 31345d5c1abc8c8da9387d55494a1741f451f9a7 - -**Decision Required**: - -**Option A**: Delete file from git history (RECOMMENDED) -- Pros: Removes credential from git history -- Cons: Force push required, breaks forks -- Tool: BFG Repo-Cleaner - -**Option B**: Accept file in history, rely on key revocation -- Pros: No repository disruption -- Cons: Credential remains in git history (already revoked) -- Action: None needed - -**Option C**: Delete public repository and recreate -- Pros: Complete removal -- Cons: Loses stars, discussions, community engagement - -**Recommendation**: Option B (accept in history) since: -1. Key already revoked by Anthropic -2. Public repo is tractatus-framework (implementation only) -3. No active community yet (early stage) -4. Low risk of exploitation (key revoked) - -**If you choose Option A** (remove from history): -```bash -# Install BFG Repo-Cleaner -wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar -java -jar bfg-1.14.0.jar --delete-files STRIPE_LIVE_MODE_DEPLOYMENT.md /path/to/tractatus-framework - -# Follow BFG instructions to git reflog expire and force push -``` - -**Your Decision**: Which option? - ---- - -### 9. Review All .env Files Across All Projects - -**Why**: If one project exposed credentials, others might too - -**Projects to Check**: -1. `/home/theflow/projects/tractatus` (DONE - issues found) -2. `/home/theflow/projects/family-history` (CHECK THIS) -3. `/home/theflow/projects/sydigital` (CHECK THIS) -4. Any other projects - -**Actions for Each Project**: -```bash -# Navigate to project -cd /home/theflow/projects/PROJECTNAME - -# Check .env exists -ls -la .env - -# Scan for credentials -gitleaks detect --source . --verbose - -# Check if .env in git history (BAD if true) -git log --all --full-history -- .env -``` - -**Verification**: No .env files in git history across any project - ---- - -## MONITORING & VERIFICATION (Next 24-48 Hours) - -### 10. Monitor Anthropic API Usage - -**Why**: Detect unauthorized usage of compromised key (before revocation) - -**Actions**: -1. Login to Anthropic Console: https://platform.claude.com/settings/usage -2. Review API usage for past 24 hours -3. Look for: - - Unusual volume spikes - - Geographic anomalies (API calls from unexpected regions) - - Unknown application names - - Timestamp gaps (usage when you weren't working) - -**Red Flags**: -- API calls from non-Europe/non-Australia IPs (if you're only in those regions) -- Calls during hours you weren't working (e.g., 2-6 AM your timezone) -- Sudden spike in usage -- Unfamiliar model names or endpoints - -**Action if Suspicious**: Contact Anthropic support immediately - ---- - -### 11. Monitor Stripe Dashboard - -**Why**: Detect unauthorized test transactions (low risk with test keys) - -**Actions**: -1. Login to Stripe Dashboard: https://dashboard.stripe.com/test/payments -2. Review test transactions for past 7 days -3. Look for unexpected test charges - -**Note**: Test keys cannot charge real money, so financial risk is zero - ---- - -### 12. Review Git Log for Other Credential Exposures - -**Why**: May have committed other secrets in past - -**Actions**: -```bash -cd /home/theflow/projects/tractatus - -# Scan entire git history for secrets -gitleaks detect --source . --log-opts="--all" --verbose --report-path=/tmp/gitleaks-report.json - -# Review report -cat /tmp/gitleaks-report.json | jq '.' - -# Or use grep for common patterns -git log -p --all | grep -E "sk-|pk-|api.?key|secret|password" | head -50 -``` - -**Action if Found**: Rotate those credentials too - ---- - -## POST-INCIDENT IMPROVEMENTS - -### 13. Update SECURITY.md in Public Repository - -**Why**: Transparency and incident disclosure - -**Actions**: -1. Add incident to Security Audit History table -2. Document response (key revocation, rotation procedures) -3. Update best practices based on learnings - -**Draft Entry**: -```markdown -| Date | Type | Severity | Status | Details | -|------|------|----------|--------|---------| -| 2025-10-21 | Credential Exposure | CRITICAL | Resolved | Anthropic API key exposed in docs/STRIPE_LIVE_MODE_DEPLOYMENT.md at commit 31345d5c1a. Key automatically revoked by Anthropic via GitHub secret scanning. All credentials rotated. Pre-commit secret detection implemented. | -``` - ---- - -### 14. Document Incident in Internal Post-Mortem - -**File**: `docs/security/INCIDENT_2025-10-21_API_KEY_EXPOSURE.md` - -**Sections**: -1. Timeline -2. Root cause -3. Impact assessment -4. Response actions -5. Preventive measures -6. Lessons learned - -**Claude will create this** - see SECURITY_INCIDENT_POST_MORTEM_2025-10-21.md - ---- - -### 15. Review and Test Pre-Deployment Checklist - -**Why**: Ensure inst_071 (new enhanced checklist) prevents recurrence - -**Actions**: -1. Review inst_071 checklist -2. Practice running each step -3. Identify any gaps -4. Update checklist if needed - -**Checklist** (from inst_071): -``` -□ 1. CSP Compliance Check [AUTOMATED via hook] -□ 2. Secret Detection Scan (gitleaks detect --source .) -□ 3. Credential Audit (grep -r "sk-" "pk-" "secret" "password") -□ 4. Local Server Test (curl http://localhost:9000/health → 200 OK) -□ 5. Comprehensive Testing (npm test → all pass) -□ 6. Permission Verification (ls -la → correct 644/755) -□ 7. Git Status Clean (no uncommitted changes) -□ 8. Public Repository Content Review (no internal docs) -``` - ---- - -## SUMMARY CHECKLIST - -Use this to track completion: - -**CRITICAL (Do Now)**: -- [ ] Rotate Anthropic API key (create new, update .env) -- [ ] Remove exposed key from docs/STRIPE_LIVE_MODE_DEPLOYMENT.md -- [ ] Rotate JWT secret (generate new, update .env) -- [ ] Test application with new credentials - -**HIGH PRIORITY (Next 2 Hours)**: -- [ ] Install gitleaks -- [ ] Create pre-commit hook -- [ ] Verify .env in .gitignore -- [ ] Decide on public repo history (Option A/B/C) - -**MEDIUM PRIORITY (Next 24 Hours)**: -- [ ] Rotate Stripe test keys (optional) -- [ ] Review other projects (.env files) -- [ ] Monitor Anthropic API usage -- [ ] Monitor Stripe dashboard -- [ ] Scan git history for other secrets - -**LOW PRIORITY (Next Week)**: -- [ ] Update SECURITY.md -- [ ] Review post-mortem -- [ ] Test pre-deployment checklist -- [ ] Schedule quarterly security audits - ---- - -## QUESTIONS & CLARIFICATIONS - -### Q: Why did this happen? -**A**: Multiple failures in credential handling: -1. Real API key in documentation (should have been redacted example) -2. No secret detection before commit (no pre-commit hook) -3. No credential audit in cleanup checklist (inst_054 didn't include secret scan) -4. Framework components not actively used (BoundaryEnforcer should have caught this) - -### Q: Was this malicious AI behavior? -**A**: NO. This was systematic failure in processes, not AI having "bad intent": -- AI doesn't have intent (good or bad) -- AI made mistakes that had catastrophic consequences -- Framework existed but wasn't enforced (framework fade) -- New rules (inst_069-072) prevent recurrence - -### Q: What's the financial impact? -**A**: MINIMAL (likely zero): -- Anthropic key revoked immediately (GitHub secret scanning worked) -- No evidence of unauthorized usage (monitor to confirm) -- Stripe keys are TEST mode only (no real money) -- JWT secret rotation invalidates sessions (security benefit) - -### Q: Will this happen again? -**A**: NOT if we follow new procedures: -- inst_069: Mandatory credential redaction -- inst_070: Pre-commit secret detection (automated) -- inst_071: Enhanced deployment checklist (includes credential audit) -- inst_072: Defense-in-depth (5 layers of protection) -- Gitleaks hook: Blocks commits with secrets - -### Q: Should I be worried about other credentials? -**A**: YES - Audit recommended: -- Review all projects for .env files -- Scan git history with gitleaks -- Rotate credentials found in scans -- Implement secret detection across all projects - ---- - -## CONTACT & SUPPORT - -**Anthropic Support**: https://support.anthropic.com -**Stripe Support**: https://support.stripe.com -**GitHub Security**: https://docs.github.com/en/code-security/secret-scanning - -**Internal**: Review SECURITY_INCIDENT_POST_MORTEM_2025-10-21.md for full analysis - ---- - -**CREATED**: 2025-10-21 by Claude Code (Automated Security Response) -**URGENCY**: IMMEDIATE ACTION REQUIRED -**NEXT REVIEW**: After completing CRITICAL section (next 30 minutes) diff --git a/docs/governance/GOVERNANCE_LEARNINGS_2025-10-21.md b/docs/governance/GOVERNANCE_LEARNINGS_2025-10-21.md deleted file mode 100644 index 6127eda8..00000000 --- a/docs/governance/GOVERNANCE_LEARNINGS_2025-10-21.md +++ /dev/null @@ -1,596 +0,0 @@ -# Governance Learnings - Session 2025-10-21 - -**Date**: 2025-10-21 -**Session**: 2025-10-07-001 (continued) -**Context**: Comprehensive governance rules audit and optimization - ---- - -## Executive Summary - -This session conducted a comprehensive audit of the Tractatus governance framework, identifying and fixing critical enforcement gaps while optimizing rule structure for clarity and effectiveness. - -**Key Achievement**: Transformed governance framework from 54 rules with significant overlaps and gaps into 56 highly-optimized rules with complete coverage and zero redundancy. - ---- - -## What We Did - -### 1. Comprehensive Audit (86,000 tokens of analysis) - -**Scope**: Audited all 54 active governance rules against: -- CLAUDE.md requirements -- CLAUDE_Tractatus_Maintenance_Guide.md specifications -- Appropriateness, completeness, specificity criteria -- Overlap and conflict detection - -**Methodology**: -- Read instruction-history.json (all 54 rules) -- Cross-referenced with project documentation -- Analyzed distribution (quadrant, persistence, scope) -- Evaluated actionability and enforceability -- Identified coverage gaps and redundancies - -**Output**: 25-page comprehensive audit report with specific recommendations - -### 2. Implementation (Applied all recommendations) - -**Changes Made**: -1. **Consolidated 12 overlapping rules → 4 comprehensive rules** (-8 rules) -2. **Created 5 new rules to fill coverage gaps** (+5 rules) -3. **Split 1 overly broad rule into 5 granular rules** (+4 rules) -4. **Enhanced 3 vague rules with specific guidance** (clarity improvements) -5. **Adjusted 4 rules' persistence/quadrant classifications** (better organization) -6. **Updated 1 rule's text to reflect current state** (accuracy) - -**Net Result**: 54 → 56 rules (+2 rules, +40% quality improvement) - -### 3. Database Synchronization - -**Created**: Sync script to maintain consistency between file and database -- `scripts/sync-instructions-to-db.js` -- Handles inserts, updates, deactivations -- Validates counts match between JSON and MongoDB -- Preserves audit trail (deprecation reasons, adjustment history) - -**Verified**: MongoDB governanceRules collection synced (56 active rules) - -### 4. Documentation - -**Created**: -- `GOVERNANCE_RULES_AUDIT_2025-10-21.md` (comprehensive audit report) -- `GOVERNANCE_LEARNINGS_2025-10-21.md` (this document) -- `scripts/apply-governance-audit-2025-10-21.js` (migration script) -- `scripts/sync-instructions-to-db.js` (ongoing sync tool) - ---- - -## Critical Findings - -### Finding 1: Framework Component Usage NOT Enforced - -**Problem**: CLAUDE_Maintenance_Guide documents 6 mandatory framework components, but inst_007 just said "use framework actively" (too vague for enforcement) - -**Components Missing Coverage**: -1. ContextPressureMonitor -2. InstructionPersistenceClassifier -3. CrossReferenceValidator -4. BoundaryEnforcer -5. MetacognitiveVerifier -6. PluralisticDeliberationOrchestrator - -**Impact**: Framework fade (components not being used) is documented as CRITICAL FAILURE, but no rule specified when to use each component - -**Solution**: Created inst_064 with explicit triggers: -- ContextPressureMonitor: Session start, 50k/100k/150k tokens, after complex ops, after errors -- InstructionPersistenceClassifier: When user gives explicit instruction -- CrossReferenceValidator: Before DB/config/architecture changes -- BoundaryEnforcer: Before values/privacy/ethical decisions -- MetacognitiveVerifier: Operations with 3+ files or 5+ steps -- PluralisticDeliberationOrchestrator: When values conflict detected - -**Result**: Framework usage now enforceable, not just aspirational - ---- - -### Finding 2: Session Initialization NOT Enforced - -**Problem**: CLAUDE.md requires `node scripts/session-init.js` IMMEDIATELY at session start and after compaction, but no rule enforced this - -**Impact**: Sessions could start without framework operational, leading to degraded behavior - -**Solution**: Created inst_065 with mandatory initialization protocol: -1. Run session-init.js -2. Report server status (curl health endpoint) -3. Report framework stats (session ID, active instructions, version) -4. Report MongoDB status (active rules count) -5. BLOCK all work until initialization complete and reported - -**Result**: Every session now starts with verified framework operational state - ---- - -### Finding 3: Environment Verification Prevents 27027 Failures - -**Problem**: 27027 incident (pattern recognition bias) not prevented by any rule - -**27027 Failure Mode**: -- User says: "Check port 27027" -- Claude does: Uses port 27017 (standard default) -- Root cause: Training data's "MongoDB = 27017" association overrides explicit instruction - -**Impact**: Pattern recognition can override explicit user instructions without Claude even "hearing" the instruction - -**Solution**: Created inst_067 with explicit verification protocol: -1. VERIFY current environment (local vs production) -2. VERIFY correct port/database from user instruction OR CLAUDE.md defaults -3. If user specifies non-standard value, USE EXACT VALUE - do NOT autocorrect to standards -4. When in doubt, ask user to confirm - -**Result**: Protection against pattern recognition bias overriding explicit instructions - ---- - -### Finding 4: Security Rules Had 7 Redundancies - -**Problem**: CSP compliance covered by 3 separate rules (inst_008, inst_044, inst_048) with partial overlap - -**Other Overlaps**: -- Deployment permissions: inst_020, inst_022 (both about file permissions) -- File upload validation: inst_041, inst_042 (uploads vs email attachments) -- Public GitHub management: inst_028, inst_062, inst_063 (partial overlap) - -**Impact**: Cognitive load, potential conflicts, unclear which rule to follow - -**Solution**: Consolidated into 4 comprehensive rules: -- inst_008_CONSOLIDATED: All CSP and security headers in one place -- inst_020_CONSOLIDATED: All deployment permission requirements unified -- inst_041_CONSOLIDATED: All file input validation (uploads, attachments, user files) -- inst_063_CONSOLIDATED: Complete public GitHub policy with weekly review requirement - -**Result**: Single source of truth for each security domain, -7 overlapping rules - ---- - -### Finding 5: Session Closedown Too Broad - -**Problem**: inst_024 covered 5 separate closedown steps in one rule, making granular enforcement difficult - -**Steps Conflated**: -1. Background process cleanup -2. Database sync verification -3. Git state documentation -4. Temporary artifact cleanup -5. Handoff document creation - -**Impact**: Difficult to verify each step independently, easy to skip steps - -**Solution**: Split into inst_024a/b/c/d/e with: -- Each step as separate rule -- Clear verification criteria -- Numbered sequence (step 1, step 2, etc.) -- Part of "inst_024_series" for grouping - -**Result**: Granular enforcement, checkboxes for each closedown step - ---- - -### Finding 6: Git Commit Conventions Not Enforced - -**Problem**: CLAUDE_Maintenance_Guide documents conventional commit format, but no rule enforced it - -**Current State**: Documented standard exists but compliance voluntary - -**Solution**: Created inst_066 with mandatory format: -- Type(scope): description -- Types: feat, fix, docs, refactor, test, chore -- Claude Code attribution footer required -- NEVER use git commit -i (not supported) -- Verify authorship before amending commits - -**Result**: Consistent git history, attribution transparency, prevents accidental amends - ---- - -### Finding 7: Test Execution Requirements Missing - -**Problem**: No rule specified when to run tests or how to handle failures - -**Impact**: Unclear expectations for test-driven development, risk of deploying broken code - -**Solution**: Created inst_068 with clear requirements: -- Before commits (if tests exist for modified area) -- Before deployments (full suite) -- After refactoring (affected tests) -- Test failures BLOCK commits/deployments (unless user approves) -- Ask user if tests should be written (don't assume) -- Report results: X passed, Y failed, Z skipped - -**Result**: World-class quality standard (inst_004) now has enforcement mechanism - ---- - -## Key Learnings - -### 1. Documentation ≠ Enforcement - -**Observation**: Many requirements were documented in CLAUDE_Maintenance_Guide but not present as enforceable rules - -**Examples**: -- Framework component usage: Documented extensively, zero enforcement -- Session initialization: Required in CLAUDE.md, not enforced -- Git conventions: Specified in guide, voluntary compliance - -**Lesson**: If something is critical, it must exist as a HIGH persistence rule, not just documentation - -**Action**: Created inst_064, inst_065, inst_066 to fill enforcement gaps - -### 2. Vague Rules Are Ineffective Rules - -**Observation**: inst_007 said "use framework actively" but provided no specifics - -**Problem**: Claude cannot enforce vague guidance -- What does "actively" mean? -- Which components, when? -- How to verify compliance? - -**Lesson**: Effective rules specify: -1. **WHAT** to do (specific action) -2. **WHEN** to do it (clear triggers) -3. **HOW** to verify (measurable outcomes) - -**Action**: Replaced inst_007 with inst_064 (explicit component usage triggers) - -### 3. Overlap Creates Confusion - -**Observation**: CSP compliance appeared in 3 rules with partial overlap - -**Problem**: When faced with decision, which rule applies? -- inst_008: CSP in HTML/JS -- inst_044: Security headers including CSP -- inst_048: Hook validators must check CSP - -**Lesson**: Consolidate related requirements into single comprehensive rule - -**Action**: Created inst_008_CONSOLIDATED as single source of truth - -### 4. Broad Rules Resist Granular Enforcement - -**Observation**: inst_024 covered 5 closedown steps in one rule - -**Problem**: Cannot mark "partially complete" - either done or not done -- Completed background cleanup but not git documentation -- Difficult to track progress through multi-step process - -**Lesson**: Split complex procedures into granular checkboxes - -**Action**: inst_024 → inst_024a/b/c/d/e (each step independently verifiable) - -### 5. Pattern Recognition Bias Needs Explicit Protection - -**Observation**: 27027 incident showed training data can override explicit instructions - -**Insight**: As AI capabilities increase, training patterns get STRONGER (not weaker) -- More data = stronger associations -- MongoDB port 27017 appears millions of times in training data -- User saying "27027" gets auto-corrected by pattern recognition - -**Lesson**: Rules must explicitly warn about pattern recognition bias and require verification - -**Action**: Created inst_067 with "USE EXACT USER VALUE" emphasis and 27027 failure mode explanation - -### 6. Persistence Levels Matter - -**Observation**: 94% of rules marked HIGH persistence (51/54) - -**Problem**: Everything marked critical = nothing is critical -- Signal-to-noise ratio issue -- Cognitive load from too many "critical" rules - -**Lesson**: Reserve HIGH for truly permanent requirements, use MEDIUM for implementation details - -**Action**: Lowered inst_011, inst_021 from HIGH → MEDIUM (appropriate for their scope) - -### 7. Quadrant Classification Impacts Organization - -**Observation**: Some OPERATIONAL rules were really TACTICAL (implementation details) - -**Problem**: OPERATIONAL should be processes, TACTICAL should be specific techniques -- inst_021: Document API-Model-Controller flow (technique, not process) -- inst_059: Write hook workaround (specific workaround, not general practice) -- inst_061: Hook approval persistence (UI behavior, not workflow) - -**Lesson**: Classify by nature of rule, not perceived importance - -**Action**: Reclassified inst_021, inst_059, inst_061 as TACTICAL - -### 8. Coverage Gaps Emerge Over Time - -**Observation**: Framework grew from 6 documented components to full implementation, but rules didn't keep pace - -**Timeline**: -- Components documented in Maintenance Guide -- Implementation built in services/ -- Hook system added for enforcement -- **But**: Rules still referenced "use framework actively" (inst_007 from early sessions) - -**Lesson**: Periodic audits essential as systems evolve - -**Action**: Made governance audit a recurring practice (quarterly recommended) - ---- - -## Metrics - -### Before Audit -- **Total Rules**: 54 -- **Active Rules**: 54 -- **Overlapping Rules**: 7 (13% of total) -- **Coverage Gaps**: 5 critical areas (framework usage, session init, git, environment verification, testing) -- **Vague Rules**: 3 (6% of total) -- **Misclassified Rules**: 3 (6% of total) -- **Persistence Distribution**: 94% HIGH, 4% MEDIUM, 2% LOW - -### After Implementation -- **Total Rules**: 68 (54 active + 14 new/consolidated) -- **Active Rules**: 56 -- **Overlapping Rules**: 0 (0%) -- **Coverage Gaps**: 0 (all filled) -- **Vague Rules**: 0 (all enhanced with specifics) -- **Misclassified Rules**: 0 (all corrected) -- **Persistence Distribution**: 91% HIGH, 7% MEDIUM, 2% LOW (better balance) - -### Quality Improvements -- **Clarity**: +35% (vague rules eliminated, specific guidance added) -- **Coverage**: +100% (all critical gaps filled) -- **Efficiency**: +15% (overlaps removed, cognitive load reduced) -- **Enforceability**: +40% (actionable requirements, clear verification) - ---- - -## New Rules Created - -### Consolidated Rules (4 rules) - -1. **inst_008_CONSOLIDATED** (CSP and Security Headers) - - Merged: inst_008, inst_044, inst_048 - - Quadrant: SYSTEM | Persistence: HIGH - - Impact: Single source of truth for CSP compliance - -2. **inst_020_CONSOLIDATED** (Deployment Permissions) - - Merged: inst_020, inst_022 - - Quadrant: OPERATIONAL | Persistence: HIGH - - Impact: Unified deployment permission requirements - -3. **inst_041_CONSOLIDATED** (File Input Validation) - - Merged: inst_041, inst_042 - - Quadrant: SYSTEM | Persistence: HIGH - - Impact: Comprehensive file/attachment security - -4. **inst_063_CONSOLIDATED** (Public GitHub Management) - - Merged: inst_028, inst_062, inst_063 - - Quadrant: STRATEGIC | Persistence: HIGH - - Impact: Complete public repository policy with weekly review - -### Coverage Gap Rules (5 rules) - -5. **inst_064** (Framework Component Usage) - - Replaces: inst_007 - - Quadrant: OPERATIONAL | Persistence: HIGH - - Impact: Explicit triggers for each of 6 framework components - - **CRITICAL**: Core framework enforcement - -6. **inst_065** (Session Initialization) - - New requirement - - Quadrant: OPERATIONAL | Persistence: HIGH - - Impact: Mandatory session-init.js at session start and after compaction - - **CRITICAL**: CLAUDE.md compliance - -7. **inst_066** (Git Commit Conventions) - - New requirement - - Quadrant: OPERATIONAL | Persistence: HIGH - - Impact: Conventional commit format with Claude Code attribution - -8. **inst_067** (Environment Verification) - - New requirement - - Quadrant: SYSTEM | Persistence: HIGH - - Impact: Prevents 27027-type pattern recognition failures - - **CRITICAL**: Protection against bias - -9. **inst_068** (Test Execution Requirements) - - New requirement - - Quadrant: OPERATIONAL | Persistence: HIGH - - Impact: When to run tests, how to handle failures - -### Split Rules (5 rules) - -10. **inst_024a** (Background Process Cleanup) -11. **inst_024b** (Database Sync Verification) -12. **inst_024c** (Git State Documentation) -13. **inst_024d** (Temporary Artifact Cleanup) -14. **inst_024e** (Handoff Document Creation) - - Split from: inst_024 - - Quadrant: OPERATIONAL | Persistence: HIGH - - Impact: Granular closedown enforcement, checkboxes for each step - ---- - -## Tools Created - -### 1. Audit Implementation Script -**File**: `scripts/apply-governance-audit-2025-10-21.js` - -**Purpose**: Apply all audit recommendations automatically - -**Capabilities**: -- Deprecate 12 overlapping rules -- Add 4 consolidated rules -- Add 5 new coverage rules -- Add 5 split rules -- Adjust persistence levels and quadrants -- Enhance vague rules with specifics -- Update version from 3.5 → 3.6 -- Recalculate statistics -- Create backup before changes - -**Output**: Comprehensive summary with before/after statistics - -### 2. Database Sync Script -**File**: `scripts/sync-instructions-to-db.js` - -**Purpose**: Maintain consistency between instruction-history.json and MongoDB - -**Capabilities**: -- Insert new rules -- Update existing rules -- Deactivate removed rules -- Preserve metadata (parameters, deprecation reasons, adjustment history) -- Validate counts match -- Report sync statistics - -**Usage**: Run after any changes to instruction-history.json - ---- - -## Process Improvements - -### Before This Session -1. Edit instruction-history.json manually -2. Hope changes sync somehow -3. No verification mechanism -4. No audit trail for rule changes -5. Overlaps discovered accidentally -6. Coverage gaps found when failures occur - -### After This Session -1. **Audit Process**: Systematic review against project documentation -2. **Migration Scripts**: Automated application of changes -3. **Sync Scripts**: Reliable file-to-database consistency -4. **Verification**: Count matching, active/inactive checks -5. **Audit Trail**: Deprecation reasons, adjustment history preserved -6. **Documentation**: Comprehensive audit reports with metrics - -### Recommended Ongoing Process -1. **Quarterly Audits**: Review governance rules vs current practices -2. **Post-Incident Reviews**: Add rules when failures occur -3. **Sync After Changes**: Run sync-instructions-to-db.js -4. **Version Increments**: Bump version on rule changes -5. **Backup First**: Scripts now create automatic backups - ---- - -## Recommendations for Future Sessions - -### 1. Use inst_064 (Framework Components) IMMEDIATELY - -**What**: inst_064 specifies when to use each framework component - -**When to Reference**: -- Session start: Use ContextPressureMonitor for baseline -- User gives instruction: Use InstructionPersistenceClassifier -- Before DB/config changes: Use CrossReferenceValidator -- Before values decisions: Use BoundaryEnforcer -- Complex operations (3+ files): Use MetacognitiveVerifier -- Values conflicts: Use PluralisticDeliberationOrchestrator - -**Verification**: Update .claude/session-state.json after each component use - -### 2. Follow inst_065 (Session Initialization) Protocol - -**What**: Mandatory session initialization at start and after compaction - -**Steps**: -1. Run `node scripts/session-init.js` -2. Report server status (curl health endpoint) -3. Report framework statistics -4. Report MongoDB status -5. BLOCK work until complete - -**Why**: Ensures framework operational before work begins - -### 3. Run Quarterly Governance Audits - -**Schedule**: Every 3 months or after major framework changes - -**Process**: -1. Review all active rules -2. Check against current CLAUDE.md and Maintenance Guide -3. Identify overlaps and gaps -4. Create audit report -5. Implement recommendations -6. Update version number -7. Sync to database -8. Document learnings - -**Tools**: Use GOVERNANCE_RULES_AUDIT template as starting point - -### 4. Create ADRs for Major Governance Changes - -**What**: Architecture Decision Records for governance rule changes - -**When**: -- Consolidating multiple rules -- Creating new critical rules -- Changing framework architecture -- Resolving rule conflicts - -**Format**: See ADR-001 (to be created) - -### 5. Monitor Framework Fade - -**What**: Framework components not being used = CRITICAL FAILURE - -**Detection**: -- .claude/session-state.json shows component staleness -- No ContextPressureMonitor updates in 50k+ tokens -- Explicit instructions given but not classified -- Major changes without cross-reference validation - -**Recovery**: Immediate pressure check, review recent actions, apply framework retroactively if possible - ---- - -## Session Artifacts - -### Files Created -1. `docs/governance/GOVERNANCE_RULES_AUDIT_2025-10-21.md` (comprehensive audit report) -2. `docs/governance/GOVERNANCE_LEARNINGS_2025-10-21.md` (this document) -3. `scripts/apply-governance-audit-2025-10-21.js` (migration script) -4. `scripts/sync-instructions-to-db.js` (ongoing sync tool) - -### Files Modified -1. `.claude/instruction-history.json` (version 3.5 → 3.6, 54 → 68 total instructions, 54 → 56 active) -2. `.claude/instruction-history.json.backup-3.5-*` (automatic backup created) - -### Database Changes -1. MongoDB governanceRules collection: 55 → 71 total rules, 54 → 56 active rules -2. 16 new rules inserted -3. 52 existing rules updated -4. 12 rules deactivated with deprecation reasons - ---- - -## Conclusion - -This session demonstrated the value of systematic governance audits. By identifying and fixing overlaps, gaps, and vagueness, we significantly improved the enforceability and clarity of the Tractatus framework. - -**Key Takeaway**: Documentation without enforcement is aspirational. Enforcement without clarity is ineffective. Both are required for robust governance. - -**Impact**: Framework now has complete coverage of critical requirements with zero redundancy, enabling reliable autonomous operation within well-defined boundaries. - -**Next Steps**: -1. Create ADR for public release process (Priority C) -2. Apply learnings to production deployment (Priority D) -3. Schedule quarterly audit for 2026-01-21 - ---- - -**Session Statistics**: -- Token Usage: ~86,000 / 200,000 (43% of budget) -- Time Investment: ~2 hours -- Rules Analyzed: 54 -- Rules Created/Modified: 30 -- Quality Improvement: +40% -- Coverage Improvement: +100% - -**ROI**: High - Critical enforcement gaps filled, framework significantly strengthened diff --git a/docs/governance/GOVERNANCE_RULES_AUDIT_2025-10-21.md b/docs/governance/GOVERNANCE_RULES_AUDIT_2025-10-21.md deleted file mode 100644 index 3a6cd8f7..00000000 --- a/docs/governance/GOVERNANCE_RULES_AUDIT_2025-10-21.md +++ /dev/null @@ -1,889 +0,0 @@ -# Governance Rules Audit Report -**Date**: 2025-10-21 -**Session**: 2025-10-07-001 (continued) -**Version**: 3.5 (54 active instructions) - ---- - -## Executive Summary - -This audit reviews all 54 active governance rules in `.claude/instruction-history.json` for: -- Appropriateness (fit for purpose) -- Completeness (coverage of critical areas) -- Specificity (clear, actionable guidance) -- Overlaps (redundancy/conflicts) -- Effectiveness (optimal structure for Claude Code enforcement) - -**Key Findings**: -- ✅ **Strong areas**: Security (13 rules), deployment (6 rules), framework discipline (8 rules) -- ⚠️ **Overlaps identified**: 7 rules with partial redundancy -- ❌ **Coverage gaps**: 5 critical areas not covered by rules -- 🔧 **Recommendations**: Consolidate 7 rules → 3, split 2 rules → 4, create 5 new rules - ---- - -## Methodology - -### Sources Analyzed -1. `.claude/instruction-history.json` (54 active instructions) -2. `CLAUDE.md` (session start requirements) -3. `CLAUDE_Tractatus_Maintenance_Guide.md` (comprehensive reference) -4. Previous session handoff documents -5. Framework enforcement requirements - -### Evaluation Criteria -- **Appropriateness**: Does rule address real need? Is it still relevant? -- **Completeness**: Does rule cover all necessary cases? -- **Specificity**: Is rule clear and actionable? -- **Persistence Level**: Is HIGH/MEDIUM/LOW correctly assigned? -- **Quadrant Classification**: Is SYSTEM/STRATEGIC/OPERATIONAL/TACTICAL correct? -- **Overlap/Conflict**: Does rule duplicate or contradict other rules? - ---- - -## Distribution Analysis - -### Current Distribution -- **SYSTEM**: 18 rules (33%) - Infrastructure, security, technical requirements -- **STRATEGIC**: 12 rules (22%) - Project goals, quality standards, governance -- **OPERATIONAL**: 21 rules (39%) - Day-to-day processes, workflows -- **TACTICAL**: 3 rules (6%) - Specific techniques, workarounds - -### Persistence Distribution -- **HIGH**: 51 rules (94%) - Permanent across sessions -- **MEDIUM**: 2 rules (4%) - Session-specific, important -- **LOW**: 1 rule (2%) - Temporary guidance - -### Assessment -- ✅ Distribution generally appropriate -- ⚠️ HIGH persistence may be over-used (51/54 = 94%) -- ⚠️ TACTICAL under-represented (3/54 = 6%) -- ⚠️ Some OPERATIONAL rules should be TACTICAL (implementation details) - ---- - -## Overlaps & Redundancies - -### 1. Security Header Rules (3 rules → consolidate to 1) - -**inst_008**: CSP compliance (no inline handlers/scripts) -**inst_044**: Security headers (CSP, HSTS, X-Frame-Options, etc.) -**inst_048**: Pre-tool hook validators must check CSP compliance - -**Issue**: Three rules covering CSP with partial overlap -**Recommendation**: Consolidate into single comprehensive security rule - -``` -PROPOSED: inst_008_CONSOLIDATED -Text: "ALL HTML/JS must comply with Content Security Policy (no inline handlers, no inline scripts). ALL HTTP responses MUST include security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy). Pre-tool hook validators MUST check CSP compliance before allowing edits." -Persistence: HIGH -Quadrant: SYSTEM -Scope: PERMANENT -``` - -**Action**: Merge inst_008, inst_044, inst_048 → inst_008_CONSOLIDATED -**Result**: 3 rules → 1 rule, clearer enforcement - - -### 2. Deployment Permission Rules (2 rules → consolidate to 1) - -**inst_020**: File permissions must be correct before deployment (644/755) -**inst_022**: Deployment scripts MUST include automated permission correction - -**Issue**: Overlapping coverage of same problem -**Recommendation**: Merge into single deployment permissions rule - -``` -PROPOSED: inst_020_CONSOLIDATED -Text: "Web deployments MUST ensure correct permissions (public HTML/CSS/JS: 644, scripts: 755, admin: 750). ALL deployment scripts (rsync, scp, git pull) MUST include automated post-deployment permission correction. Verify with ls -la before declaring deployment complete." -Persistence: HIGH -Quadrant: OPERATIONAL -Scope: PERMANENT -``` - -**Action**: Merge inst_020, inst_022 → inst_020_CONSOLIDATED -**Result**: 2 rules → 1 rule, single source of truth - - -### 3. File Upload Security Rules (2 rules → consolidate to 1) - -**inst_041**: File uploads must be validated (type, size, content) -**inst_042**: Email attachments must be validated - -**Issue**: Both cover file/attachment validation with similar requirements -**Recommendation**: Consolidate into comprehensive input validation rule - -``` -PROPOSED: inst_041_CONSOLIDATED -Text: "ALL file inputs (uploads, email attachments, user-provided files) MUST be validated: (1) File type whitelist, (2) Size limits, (3) Content scanning for malware/XSS, (4) Secure storage (GridFS encrypted), (5) Access control (authenticated only). Reject and log suspicious files per inst_046." -Persistence: HIGH -Quadrant: SYSTEM -Scope: PERMANENT -``` - -**Action**: Merge inst_041, inst_042 → inst_041_CONSOLIDATED -**Result**: 2 rules → 1 rule, unified validation approach - - -### 4. MongoDB Connection Rules (partial overlap) - -**inst_001**: MongoDB on port 27017 for tractatus_dev -**inst_058**: Sync between JSON config and MongoDB requires Mongoose enum validation - -**Issue**: Partial overlap - both address MongoDB but different aspects -**Recommendation**: Keep separate, clarify distinction in notes - -**Action**: Update inst_001 notes to reference inst_058 for sync requirements -**Result**: Clarified relationship, no merge needed - - -### Summary of Overlaps -- **7 rules identified with overlaps** -- **Consolidation saves**: 4 rules (54 → 50) -- **Benefit**: Clearer enforcement, less cognitive load - ---- - -## Coverage Gaps - -### 1. Framework Component Usage Requirements ❌ NOT COVERED - -**Gap**: CLAUDE_Maintenance_Guide.md specifies 6 mandatory components, but no rule enforces their usage - -**Components Missing Coverage**: -1. ContextPressureMonitor (inst_006 mentions handoff, not continuous usage) -2. InstructionPersistenceClassifier (no rule requiring classification) -3. CrossReferenceValidator (no rule requiring validation) -4. BoundaryEnforcer (inst_005 mentions approval, not component) -5. MetacognitiveVerifier (no rule for when to use) -6. PluralisticDeliberationOrchestrator (no rule for activation) - -**Current State**: -- inst_006: Only mentions ContextPressureMonitor for handoff -- inst_007: Generic "use framework actively" (too vague) -- inst_051: Automated pressure checks at milestones (partial coverage) - -**Recommendation**: Create comprehensive framework component usage rule - -``` -PROPOSED: inst_064 - Framework Component Usage -Text: "Framework components MUST be actively used throughout sessions: -(1) ContextPressureMonitor: At session start, 50k/100k/150k tokens, after complex operations -(2) InstructionPersistenceClassifier: When user gives explicit instruction -(3) CrossReferenceValidator: Before DB schema, config, architectural changes -(4) BoundaryEnforcer: Before values/privacy/ethical decisions -(5) MetacognitiveVerifier: For operations with 3+ files or 5+ steps -(6) PluralisticDeliberationOrchestrator: When BoundaryEnforcer flags values conflict - -Framework fade (components not used) = CRITICAL FAILURE. Update .claude/session-state.json after each component use." -Persistence: HIGH -Quadrant: OPERATIONAL -Scope: PERMANENT -``` - -**Impact**: HIGH - This is the core enforcement gap for the framework - - -### 2. Session Initialization Requirements ❌ PARTIALLY COVERED - -**Gap**: CLAUDE.md requires `node scripts/session-init.js` IMMEDIATELY at session start and after compaction, but no rule enforces this - -**Current State**: -- No rule exists for session-init.js requirement -- inst_024 covers session closedown, but not startup - -**Recommendation**: Create session startup rule - -``` -PROPOSED: inst_065 - Session Initialization -Text: "MANDATORY at session start and after compaction: Run 'node scripts/session-init.js', then report (1) Server status (curl http://localhost:9000/health), (2) Framework stats (session ID, active instructions, version), (3) MongoDB status (active rules count). BLOCK session work until initialization complete and results reported to user." -Persistence: HIGH -Quadrant: OPERATIONAL -Scope: PERMANENT -``` - -**Impact**: HIGH - Required by CLAUDE.md, currently not enforced - - -### 3. Git Commit Message Format ❌ NOT COVERED - -**Gap**: CLAUDE_Maintenance_Guide.md specifies conventional commits (feat:, fix:, docs:, etc.), but no rule enforces this - -**Current State**: -- No rule for commit message format -- Maintenance Guide documents convention but doesn't enforce - -**Recommendation**: Create git conventions rule - -``` -PROPOSED: inst_066 - Git Commit Conventions -Text: "ALL git commits MUST use conventional commit format: 'type(scope): description' -Types: feat, fix, docs, refactor, test, chore -Include Claude Code attribution footer: -🤖 Generated with [Claude Code](https://claude.com/claude-code) -Co-Authored-By: Claude - -NEVER use 'git commit -i' (interactive mode not supported). When pre-commit hooks modify files, verify authorship before amending commits." -Persistence: HIGH -Quadrant: OPERATIONAL -Scope: PERMANENT -``` - -**Impact**: MEDIUM - Improves git history quality, aligns with project standards - - -### 4. Port/Database Verification Before Actions ❌ NOT COVERED - -**Gap**: Multiple incidents of wrong port/database usage, but no rule requires verification - -**Examples**: -- 27027 incident (used 27017 instead of 27027) -- Production port confusion (9000 vs other ports) - -**Recommendation**: Create environment verification rule - -``` -PROPOSED: inst_067 - Environment Verification -Text: "BEFORE database operations or port-specific commands: (1) VERIFY current environment (local vs production), (2) VERIFY correct port/database from explicit user instruction or CLAUDE.md defaults (tractatus_dev:27017 local, tractatus_prod:27017 production, app:9000), (3) If user specifies non-standard port (e.g., 27027), USE EXACT VALUE - do NOT autocorrect to standard defaults. Pattern recognition bias for standard ports is a known 27027 failure mode." -Persistence: HIGH -Quadrant: SYSTEM -Scope: PERMANENT -``` - -**Impact**: HIGH - Prevents 27027-type failures - - -### 5. Test Execution Requirements ❌ NOT COVERED - -**Gap**: No rule specifies when tests must be run or how to handle test failures - -**Current State**: -- inst_054 mentions deployment checklist but not test execution policy -- No guidance on test-driven development expectations - -**Recommendation**: Create testing requirements rule - -``` -PROPOSED: inst_068 - Test Execution Requirements -Text: "Run tests in these scenarios: (1) Before git commits (if tests exist for modified area), (2) Before deployments (full test suite), (3) After refactoring (affected tests). Test failures BLOCK commits/deployments unless user explicitly approves proceeding. When creating new features, ask user if tests should be written (don't assume). Report test results: passed/failed/skipped counts." -Persistence: HIGH -Quadrant: OPERATIONAL -Scope: PERMANENT -``` - -**Impact**: MEDIUM - Improves code quality, aligns with world-class standard - - -### Summary of Coverage Gaps -- **5 critical gaps identified** -- **Proposed**: 5 new rules (inst_064 through inst_068) -- **Impact**: HIGH for 3 rules, MEDIUM for 2 rules -- **Result**: Framework enforcement significantly improved - ---- - -## Specificity Issues - -### Rules Too Vague - -#### inst_007: "Use Tractatus governance framework actively in all sessions" -**Issue**: Too generic, doesn't specify WHAT to do -**Recommendation**: REPLACE with inst_064 (Framework Component Usage) which specifies exactly when to use each component - - -#### inst_040: "When user says 'all', Claude MUST enumerate exactly" -**Issue**: Good intent, but "enumerate exactly" is vague -**Recommendation**: Enhance with examples - -``` -ENHANCED: inst_040 -Text: "When user says 'all' (e.g., 'update all pages', 'fix all instances', 'check all files'), Claude MUST: (1) Use Glob/Grep to find ALL matches, (2) List every item found with file:line references, (3) Confirm with user before proceeding, (4) Track completion of each item. NEVER assume 'all' means 'a few examples' or 'the ones I found first'." -``` - - -### Rules Too Narrow - -#### inst_059: "When creating new files that may trigger Write hook validation..." -**Issue**: Very specific workaround for hook issue, likely temporary -**Recommendation**: Consider lowering persistence to LOW (currently MEDIUM) - -#### inst_060: "When using sed for global replacements, verify won't cascade..." -**Issue**: Extremely specific (sed cascading), already marked LOW persistence -**Recommendation**: KEEP as-is (appropriately marked LOW) - - -### Rules Missing Action Guidance - -#### inst_047: "NEVER dismiss user requests by claiming 'too hard'" -**Issue**: Says what NOT to do, but not what TO do instead -**Recommendation**: Enhance with positive guidance - -``` -ENHANCED: inst_047 -Text: "NEVER dismiss, downplay, or avoid user requests by claiming 'too hard', 'too complex', 'beyond capabilities'. When facing difficult requests: (1) Acknowledge complexity honestly, (2) Break into smaller steps, (3) Identify blockers explicitly, (4) Propose alternative approaches, (5) Ask user for priorities/trade-offs. If truly impossible, explain technical limitations with evidence, not vague dismissal." -``` - - -### Summary of Specificity Issues -- **3 rules too vague** (inst_007 → replace, inst_040 → enhance) -- **2 rules too narrow** (inst_059 → lower persistence, inst_060 → keep as-is) -- **1 rule missing action guidance** (inst_047 → enhance) -- **Result**: More actionable, clearer enforcement - ---- - -## Persistence Level Issues - -### Rules Potentially Over-Persisted (HIGH → MEDIUM) - -#### inst_011: "Differentiate technical docs from general content" -**Current**: HIGH, PROJECT scope -**Issue**: This is an implementation detail, not a permanent requirement -**Recommendation**: Lower to MEDIUM persistence - - -#### inst_021: "Document API-Model-Controller flow when implementing features" -**Current**: HIGH, PROJECT scope -**Issue**: Development practice, useful but not critical -**Recommendation**: Lower to MEDIUM persistence - - -### Rules Potentially Under-Persisted (MEDIUM → HIGH) - -#### inst_059: "Workaround for Write hook validation" -**Current**: MEDIUM, PROJECT scope -**Issue**: If hooks are staying, this workaround is permanent knowledge -**Recommendation**: Raise to HIGH if hooks are permanent, otherwise DELETE when hooks improved - - -### Summary of Persistence Issues -- **2 rules over-persisted** (inst_011, inst_021 → MEDIUM) -- **1 rule under-persisted** (inst_059 → HIGH or DELETE) -- **Result**: Better signal-to-noise ratio - ---- - -## Rules Requiring Splits - -### inst_024: Session Closedown Protocol (TOO BROAD) - -**Current**: Single rule covering 5 distinct closedown steps -**Issue**: Each step deserves separate attention/validation - -**Recommendation**: Split into focused rules - -``` -inst_024a - Background Process Cleanup -Text: "Before session handoff: Kill background processes (npm, jest, node). Use ps aux | grep to find, pkill to terminate. Verify with ps aux again. Update session-state.json with cleanup timestamp." -Persistence: HIGH -Quadrant: OPERATIONAL - -inst_024b - Database Sync Verification -Text: "Before session handoff: Verify instruction-history.json synced to MongoDB. If changes exist, run sync script. Report sync status in handoff document." -Persistence: HIGH -Quadrant: OPERATIONAL - -inst_024c - Git State Documentation -Text: "Before session handoff: Document git status (branch, commits ahead/behind, working tree status). Include in handoff with explanations for untracked files." -Persistence: HIGH -Quadrant: OPERATIONAL - -inst_024d - Temporary Artifact Cleanup -Text: "Before session handoff: Clean temporary artifacts (.memory-test/, test databases, lock files if stale). Document what was cleaned and what was intentionally kept." -Persistence: HIGH -Quadrant: OPERATIONAL - -inst_024e - Handoff Document Creation -Text: "Create handoff document as OPTIMAL_STARTUP_PROMPT with: (1) System status, (2) Completed/pending tasks with file:line references, (3) Known issues, (4) User decisions needed, (5) Ready-to-use TodoWrite JSON. STOP work immediately after handoff creation - signals NEW session intent." -Persistence: HIGH -Quadrant: OPERATIONAL -``` - -**Action**: Split inst_024 → inst_024a/b/c/d/e -**Result**: 1 rule → 5 rules, clearer enforcement, easier to verify - - -### inst_054: Pre-Deployment Checklist (TOO BROAD) - -**Current**: Single rule covering 5 deployment checks -**Issue**: Each check is independently verifiable - -**Recommendation**: Keep as single rule BUT enhance with numbered checklist format - -``` -ENHANCED: inst_054 -Text: "PRE-DEPLOYMENT CHECKLIST (run in order): -□ 1. CSP Compliance Check [AUTOMATED via hook] -□ 2. Local Server Test (curl http://localhost:9000/health → 200 OK) -□ 3. Comprehensive Testing (npm test → all pass) -□ 4. Permission Verification (ls -la → correct 644/755) -□ 5. Git Status Clean (no uncommitted changes) -Mark each checkbox before proceeding to next. BLOCK deployment if any step fails." -Persistence: HIGH -Quadrant: OPERATIONAL -``` - -**Action**: Enhance inst_054 with checklist format -**Result**: Better verification, no additional rules needed - - -### Summary of Split Requirements -- **1 rule requires split** (inst_024 → 5 rules) -- **1 rule enhanced with checklist** (inst_054) -- **Result**: More granular enforcement, clearer verification - ---- - -## Quadrant Misclassifications - -### inst_021: API-Model-Controller Documentation -**Current**: OPERATIONAL -**Issue**: This is an implementation detail, should be TACTICAL -**Recommendation**: Reclassify as TACTICAL - - -### inst_059: Write Hook Workaround -**Current**: Not explicitly classified (appears OPERATIONAL) -**Issue**: This is a specific technique, should be TACTICAL -**Recommendation**: Reclassify as TACTICAL - - -### inst_061: Hook Approval Persistence -**Current**: Not explicitly classified (appears OPERATIONAL) -**Issue**: User interface behavior, should be TACTICAL -**Recommendation**: Reclassify as TACTICAL - - -### Summary of Quadrant Issues -- **3 rules misclassified** (all OPERATIONAL → TACTICAL) -- **Result**: Better alignment with quadrant definitions - ---- - -## Rules Requiring Updates - -### inst_009: Email Services Status -**Current**: "Email deferred until production launch" -**Issue**: Notes say "Updated 2025-10-21: Stripe fully implemented and active" -**Recommendation**: Update text to reflect current state - -``` -UPDATED: inst_009 -Text: "Stripe payment processing is ACTIVE (test keys configured). Email services (verification emails, donation receipts) are deferred until production launch. ProtonBridge email integration is Phase 2+." -``` - - -### inst_028: Public GitHub Sync Rules -**Current**: "ONLY docs/research to public GitHub" -**Issue**: Conflicts with inst_063 which provides more detailed guidance -**Recommendation**: Merge with inst_063 - -``` -CONSOLIDATED: inst_063 (absorbs inst_028) -Text: "Public GitHub (tractatus-framework) must remain implementation-focused. Prohibited without explicit approval: (1) Governance research documents, (2) Deliberation guides, (3) Theoretical frameworks, (4) Project-specific documentation. Allowed: (1) Technical implementation docs, (2) API references, (3) Code examples, (4) Setup guides. README.md must be reviewed weekly and updated with material changes." -Persistence: HIGH -Quadrant: STRATEGIC -``` - - -### inst_062: GitHub README.md Weekly Review -**Current**: "README reviewed weekly" -**Issue**: This is part of public repo management, should merge with inst_063 -**Recommendation**: Already merged above in consolidated inst_063 - - -### Summary of Update Requirements -- **3 rules need updates** (inst_009 text, inst_028/063 merge, inst_062 absorbed) -- **Result**: More accurate, less redundancy - ---- - -## Comparison with CLAUDE.md - -### CLAUDE.md Requirements Analysis - -**Required by CLAUDE.md**: -1. ✅ MongoDB port 27017, database tractatus_dev (inst_001) -2. ✅ Application port 9000 (inst_002) -3. ✅ Project separation (inst_003) -4. ✅ World-class quality standard (inst_004) -5. ✅ Human approval for major decisions (inst_005) -6. ❌ **MISSING**: Session initialization requirement (`node scripts/session-init.js`) -7. ❌ **MISSING**: Framework statistics reporting requirement -8. ✅ Pre-approved commands for document workflow (covered in Maintenance Guide) -9. ✅ Framework components active (inst_007, but needs enhancement → inst_064) -10. ✅ Process management: systemd not pm2 (documented but no rule - low priority) - -**Gap**: Session initialization (covered by proposed inst_065) - - -### CLAUDE_Maintenance_Guide.md Requirements Analysis - -**Required by Maintenance Guide**: -1. ✅ Six framework components mandatory (inst_007 partial, needs inst_064) -2. ✅ 27027 failure prevention (inst_001 partial, needs inst_067) -3. ✅ ContextPressureMonitor usage at milestones (inst_051) -4. ❌ **MISSING**: InstructionPersistenceClassifier usage requirement -5. ❌ **MISSING**: CrossReferenceValidator usage requirement -6. ❌ **MISSING**: BoundaryEnforcer usage requirement -7. ❌ **MISSING**: MetacognitiveVerifier usage requirement -8. ❌ **MISSING**: PluralisticDeliberationOrchestrator usage requirement -9. ✅ Session handoff protocol (inst_024) -10. ✅ Git conventions (documented but needs inst_066) -11. ✅ Document workflow (covered by multiple rules) -12. ✅ Security requirements (inst_008, 012-015, 041-046) -13. ✅ Deployment requirements (inst_020, 022, 025, 054, 057) - -**Gap**: Framework component usage (covered by proposed inst_064) - - -### Summary of CLAUDE.md/Maintenance Guide Gaps -- **2 critical gaps**: Session initialization, framework component usage -- **Both gaps covered** by proposed inst_064 and inst_065 -- **Result**: Full alignment with project documentation - ---- - -## Final Recommendations - -### Immediate Actions (High Priority) - -#### 1. Consolidate Overlapping Rules -- ✅ Merge inst_008 + inst_044 + inst_048 → inst_008_CONSOLIDATED (CSP/security headers) -- ✅ Merge inst_020 + inst_022 → inst_020_CONSOLIDATED (deployment permissions) -- ✅ Merge inst_041 + inst_042 → inst_041_CONSOLIDATED (file upload validation) -- ✅ Merge inst_028 + inst_062 + inst_063 → inst_063_CONSOLIDATED (public GitHub management) - -**Result**: 54 → 50 rules - - -#### 2. Create Missing Critical Rules -- ✅ inst_064: Framework Component Usage (HIGH priority - core framework) -- ✅ inst_065: Session Initialization (HIGH priority - CLAUDE.md requirement) -- ✅ inst_066: Git Commit Conventions (MEDIUM priority - code quality) -- ✅ inst_067: Environment Verification (HIGH priority - 27027 prevention) -- ✅ inst_068: Test Execution Requirements (MEDIUM priority - quality standard) - -**Result**: 50 → 55 rules - - -#### 3. Split Overly Broad Rules -- ✅ Split inst_024 → inst_024a/b/c/d/e (session closedown) - -**Result**: 55 → 59 rules - - -#### 4. Enhance Vague Rules -- ✅ Enhance inst_040 (enumerate 'all' with examples) -- ✅ Enhance inst_047 (positive guidance for difficult requests) -- ✅ Enhance inst_054 (checklist format) - -**Result**: 59 rules (same count, improved clarity) - - -#### 5. Fix Persistence Levels -- ✅ Lower inst_011, inst_021 from HIGH → MEDIUM -- ✅ Delete inst_007 (replaced by inst_064) - -**Result**: 59 → 58 rules - - -#### 6. Fix Quadrant Classifications -- ✅ Reclassify inst_021, inst_059, inst_061 from OPERATIONAL → TACTICAL - -**Result**: 58 rules (same count, correct classification) - - -#### 7. Update Outdated Rules -- ✅ Update inst_009 text (Stripe status) - -**Result**: 58 rules (same count, accurate information) - - -### Final Count -- **Starting**: 54 rules -- **After consolidation**: -4 rules (54 → 50) -- **After new rules**: +5 rules (50 → 55) -- **After splits**: +4 rules (55 → 59) -- **After deletions**: -1 rule (59 → 58) -- **FINAL**: **58 rules** - -**Net change**: +4 rules (7% increase) -**Quality improvement**: Significant (overlaps removed, gaps filled, clarity enhanced) - - -### Implementation Plan - -#### Phase 1: Consolidation (Immediate) -1. Create consolidated rules (inst_008, inst_020, inst_041, inst_063) -2. Mark original rules as `active: false` with deprecation notes -3. Update session-state.json with consolidation timestamp - -#### Phase 2: New Rules (Immediate) -1. Create inst_064 (Framework Component Usage) -2. Create inst_065 (Session Initialization) -3. Create inst_066 (Git Commit Conventions) -4. Create inst_067 (Environment Verification) -5. Create inst_068 (Test Execution Requirements) - -#### Phase 3: Splits (Immediate) -1. Create inst_024a/b/c/d/e (split closedown protocol) -2. Mark inst_024 as deprecated with reference to split rules - -#### Phase 4: Enhancements (Next Session) -1. Enhance inst_040, inst_047, inst_054 with improved text -2. Update inst_009 text -3. Adjust persistence levels (inst_011, inst_021) -4. Reclassify quadrants (inst_021, inst_059, inst_061) - -#### Phase 5: Verification (Next Session) -1. Run framework tests with new rules -2. Verify CrossReferenceValidator handles consolidated rules -3. Test session-init.js with inst_065 active -4. Update documentation to reference new rule IDs - ---- - -## Metrics - -### Before Audit -- **Total Rules**: 54 -- **Overlapping Rules**: 7 (13%) -- **Coverage Gaps**: 5 critical areas -- **Vague Rules**: 3 (6%) -- **Misclassified Rules**: 3 (6%) - -### After Implementation -- **Total Rules**: 58 (+4) -- **Overlapping Rules**: 0 (0%) -- **Coverage Gaps**: 0 (all filled) -- **Vague Rules**: 0 (all enhanced) -- **Misclassified Rules**: 0 (all corrected) - -### Quality Improvement -- **Clarity**: +35% (vague rules eliminated, specific guidance added) -- **Coverage**: +100% (all gaps filled) -- **Efficiency**: +15% (overlaps removed, cognitive load reduced) -- **Enforceability**: +40% (actionable requirements, clear verification) - ---- - -## Appendix A: Consolidated Rule Texts - -### inst_008_CONSOLIDATED (CSP and Security Headers) -```json -{ - "id": "inst_008_CONSOLIDATED", - "text": "ALL HTML/JS must comply with Content Security Policy: no inline event handlers (onclick, onload, etc.), no inline scripts, no inline styles. ALL HTTP responses MUST include comprehensive security headers: Content-Security-Policy, Strict-Transport-Security, X-Frame-Options (DENY), X-Content-Type-Options (nosniff), Referrer-Policy (strict-origin-when-cross-origin). Pre-tool execution hook validators (validate-file-write.js, validate-file-edit.js) MUST check CSP compliance before allowing edits and provide specific violation details if blocked.", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "CONSOLIDATED from inst_008, inst_044, inst_048. Single source of truth for CSP and security header requirements. Prevents CSP violations and security header omissions.", - "deprecates": ["inst_008", "inst_044", "inst_048"], - "active": true -} -``` - -### inst_020_CONSOLIDATED (Deployment Permissions) -```json -{ - "id": "inst_020_CONSOLIDATED", - "text": "Web application deployments MUST ensure correct file permissions before going live. Public-facing HTML/CSS/JS: 644 (rw-r--r--), executable scripts: 755 (rwxr-xr-x), admin directories: 750 (rwxr-x---). ALL deployment scripts (rsync, scp, git pull) MUST include automated post-deployment permission correction commands. Verify with 'ls -la' before declaring deployment complete. Permission errors are recurring deployment failures - automated correction is mandatory.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "CONSOLIDATED from inst_020, inst_022. Prevents public access to admin directories and execution of static files. Recurring issue required automation mandate.", - "deprecates": ["inst_020", "inst_022"], - "active": true -} -``` - -### inst_041_CONSOLIDATED (File Input Validation) -```json -{ - "id": "inst_041_CONSOLIDATED", - "text": "ALL file inputs (web uploads, email attachments, user-provided files) MUST be validated before processing: (1) File type whitelist validation (reject executables, scripts), (2) Size limits enforced, (3) Content scanning for malware/XSS payloads, (4) Secure storage (GridFS with encryption), (5) Access control (authenticated users only, role-based permissions). Reject and log all suspicious files per inst_046 (security event logging). Never trust client-provided MIME types - verify file signatures.", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "CONSOLIDATED from inst_041, inst_042. Comprehensive file/attachment security validation. Part of security vetting framework.", - "deprecates": ["inst_041", "inst_042"], - "active": true -} -``` - -### inst_063_CONSOLIDATED (Public GitHub Management) -```json -{ - "id": "inst_063_CONSOLIDATED", - "text": "Public GitHub repository (tractatus-framework) must remain implementation-focused. Prohibited without explicit approval: (1) Governance research documents, (2) Pluralistic deliberation guides, (3) Theoretical frameworks, (4) Project-specific internal documentation, (5) Business strategy documents. Allowed: (1) Technical implementation documentation, (2) API reference guides, (3) Code examples and tutorials, (4) Installation/setup guides, (5) Contribution guidelines. README.md must be reviewed weekly and 'Last Updated' date updated when material changes occur. README is primary external interface - must be world-class and current.", - "quadrant": "STRATEGIC", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "CONSOLIDATED from inst_028, inst_062, inst_063. Created after bad actor incident where AI converted implementation docs to authoritarian governance guide. Prevents misrepresentation of framework purpose.", - "deprecates": ["inst_028", "inst_062", "inst_063"], - "active": true -} -``` - ---- - -## Appendix B: New Rule Texts - -### inst_064 (Framework Component Usage) -```json -{ - "id": "inst_064", - "text": "Tractatus framework components MUST be actively used throughout sessions: (1) ContextPressureMonitor: At session start (baseline), 50k/100k/150k token milestones, after complex multi-file operations, after errors. (2) InstructionPersistenceClassifier: When user gives explicit instruction, configuration specifications, architectural constraints. (3) CrossReferenceValidator: Before database schema changes, configuration modifications, architectural decisions. (4) BoundaryEnforcer: Before privacy policy decisions, ethical trade-offs, values-sensitive content. (5) MetacognitiveVerifier: For operations with 3+ file modifications or 5+ sequential steps. (6) PluralisticDeliberationOrchestrator: When BoundaryEnforcer flags values conflict. Framework fade (components not being used) = CRITICAL FAILURE. Update .claude/session-state.json after each component use with timestamp and validation count.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "CRITICAL ENFORCEMENT GAP - Previously documented but not enforced as rule. Specifies exactly when each component must be used. Replaces vague inst_007.", - "replaces": ["inst_007"], - "active": true -} -``` - -### inst_065 (Session Initialization) -```json -{ - "id": "inst_065", - "text": "MANDATORY at session start and immediately after conversation compaction: Run 'node scripts/session-init.js', then report to user: (1) Server status: curl -s http://localhost:9000/health | jq -r '.status' (expect 'ok'), (2) Framework statistics: session ID, active instructions count, version from .claude/session-state.json and .claude/instruction-history.json, (3) MongoDB status: active rules count from tractatus_dev database. BLOCK all session work until initialization complete and results reported to user. Output results in clean formatted summary before proceeding with any tasks.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Required by CLAUDE.md but not previously enforced as rule. Ensures framework operational before work begins. Critical for session continuity after compaction.", - "active": true -} -``` - -### inst_066 (Git Commit Conventions) -```json -{ - "id": "inst_066", - "text": "ALL git commits MUST use conventional commit format: 'type(scope): description'. Types: feat (new feature), fix (bug fix), docs (documentation), refactor (code restructure), test (test additions), chore (maintenance). Include Claude Code attribution footer:\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\nCo-Authored-By: Claude \n\nNEVER use 'git commit -i' or 'git add -i' (interactive modes not supported). When pre-commit hooks modify files, verify commit authorship (git log -1 --format='%an %ae') before amending - NEVER amend other developers' commits.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Documented in Maintenance Guide but not enforced as rule. Improves git history quality and provides attribution transparency.", - "active": true -} -``` - -### inst_067 (Environment Verification) -```json -{ - "id": "inst_067", - "text": "BEFORE database operations or port-specific commands: (1) VERIFY current environment (local vs production) from context, (2) VERIFY correct port/database from explicit user instruction OR CLAUDE.md defaults (local: tractatus_dev:27017 on port 9000, production: tractatus_prod:27017 on port 9000), (3) If user specifies non-standard port or database (e.g., port 27027, custom database name), USE EXACT VALUE FROM USER INSTRUCTION - do NOT autocorrect to standard defaults. Pattern recognition bias for standard ports/databases is a known 27027 failure mode where training data associations override explicit instructions. When in doubt, ask user to confirm environment.", - "quadrant": "SYSTEM", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Prevents 27027-type failures where pattern recognition overrides explicit user instructions. Critical for multi-environment operations.", - "active": true -} -``` - -### inst_068 (Test Execution Requirements) -```json -{ - "id": "inst_068", - "text": "Run tests in these scenarios: (1) Before git commits if tests exist for modified code area, (2) Before all deployments (run full test suite), (3) After refactoring (run affected tests), (4) When user explicitly requests testing. Test failures BLOCK commits and deployments unless user explicitly approves proceeding with failing tests. When creating new features, ask user if tests should be written - do not assume test requirements. Report test results with counts: X passed, Y failed, Z skipped. Use 'npm test' for full suite or 'npm test -- ' for specific tests.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Aligns with world-class quality standard (inst_004). Prevents regressions and maintains code quality.", - "active": true -} -``` - ---- - -## Appendix C: Split Rule Texts - -### inst_024a (Background Process Cleanup) -```json -{ - "id": "inst_024a", - "text": "Before session handoff or closedown: Kill all background processes spawned during session (npm, jest, node, dev servers, file watchers). Use 'ps aux | grep -E \"npm|jest|node\"' to find processes, 'pkill -f ' to terminate. Verify cleanup with 'ps aux | grep -E \"npm|jest|node\"' again (should show no results except grep itself). Update .claude/session-state.json with cleanup timestamp and process count terminated.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Split from inst_024 for granular enforcement. Part of comprehensive closedown protocol.", - "part_of": "inst_024_series", - "active": true -} -``` - -### inst_024b (Database Sync Verification) -```json -{ - "id": "inst_024b", - "text": "Before session handoff: Verify .claude/instruction-history.json changes are synced to MongoDB governanceRules collection. If instruction-history.json modified this session, run 'node scripts/sync-instructions-to-db.js' to sync. Compare counts: active instructions in JSON vs active rules in database. Report sync status in handoff document: 'Synced: X instructions → Y database rules' or 'Not needed: No changes this session'.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Split from inst_024 for granular enforcement. Ensures file-database consistency.", - "part_of": "inst_024_series", - "active": true -} -``` - -### inst_024c (Git State Documentation) -```json -{ - "id": "inst_024c", - "text": "Before session handoff: Document complete git status: (1) Current branch, (2) Commits ahead/behind remote (git status shows 'Your branch is ahead of origin/main by X commits'), (3) Working tree status (clean vs untracked files), (4) Most recent commits (git log --oneline -5). Include in handoff document with explanations for any untracked files (e.g., 'untracked files are INTERNAL project files, NOT for public repo'). If working tree has uncommitted changes, explain why or commit before handoff.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Split from inst_024 for granular enforcement. Provides next session with clear git context.", - "part_of": "inst_024_series", - "active": true -} -``` - -### inst_024d (Temporary Artifact Cleanup) -```json -{ - "id": "inst_024d", - "text": "Before session handoff: Clean temporary artifacts created during session: (1) .memory-test/ directory (if exists from testing), (2) Test databases (mongosh --eval 'db.dropDatabase()' on tractatus_test), (3) Stale lock files (check age - if hours old with no process, safe to delete), (4) Temporary scripts in /tmp/. Document what was cleaned and what was intentionally kept (e.g., 'package-lock.json kept - legitimate', 'mongod.lock kept - server running'). Do NOT delete legitimate lock files for running processes.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Split from inst_024 for granular enforcement. Prevents clutter accumulation across sessions.", - "part_of": "inst_024_series", - "active": true -} -``` - -### inst_024e (Handoff Document Creation) -```json -{ - "id": "inst_024e", - "text": "Create session handoff document as OPTIMAL_STARTUP_PROMPT_.md with: (1) Current system status (server, framework, database, git), (2) Completed tasks with file:line references and verification, (3) In-progress tasks with blockers and next steps, (4) Pending tasks prioritized by user importance, (5) Recent instruction additions/changes with rationale, (6) Known issues and gotchas, (7) Framework health assessment, (8) User decisions needed, (9) Ready-to-use TodoWrite JSON for next session, (10) Recommended startup sequence with exact commands. STOP ALL WORK IMMEDIATELY after creating handoff document - handoff signals NEW session intent, not continuation.", - "quadrant": "OPERATIONAL", - "persistence": "HIGH", - "temporal_scope": "PERMANENT", - "session_id": "2025-10-21-governance-audit", - "notes": "Split from inst_024 for granular enforcement. Core handoff creation with strict format requirements.", - "part_of": "inst_024_series", - "active": true -} -``` - ---- - -**END OF AUDIT REPORT** diff --git a/scripts/add-security-rules-2025-10-21.js b/scripts/add-security-rules-2025-10-21.js deleted file mode 100755 index 1833c94a..00000000 --- a/scripts/add-security-rules-2025-10-21.js +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env node - -/** - * Add Security Rules - Post-Breach Response - * - * Adds inst_069, inst_070, inst_071, inst_072 in response to - * Anthropic API key exposure incident on 2025-10-21 - */ - -const fs = require('fs'); -const path = require('path'); - -const INSTRUCTION_FILE = path.join(__dirname, '../.claude/instruction-history.json'); - -console.log('═══════════════════════════════════════════════════════════'); -console.log(' ADD SECURITY RULES - POST-BREACH RESPONSE'); -console.log('═══════════════════════════════════════════════════════════\n'); - -// Read current data -console.log('📖 Reading current instruction-history.json...'); -const data = JSON.parse(fs.readFileSync(INSTRUCTION_FILE, 'utf8')); - -console.log(` Version: ${data.version}`); -console.log(` Instructions: ${data.instructions.length}`); -console.log(` Active: ${data.stats.active_instructions}\n`); - -// Create backup -const backupFile = INSTRUCTION_FILE + '.backup-pre-security-rules-' + Date.now(); -fs.copyFileSync(INSTRUCTION_FILE, backupFile); -console.log(`💾 Backup created: ${path.basename(backupFile)}\n`); - -// Define new security rules -const newRules = [ - { - id: 'inst_069', - text: 'ALL credentials, API keys, secrets, tokens, passwords in documentation MUST be redacted or use example-only values. NEVER include real production or development credentials in files committed to git. Required patterns: API keys: "sk-ant-api03-EXAMPLE-REDACTED-NEVER-USE", Stripe keys: "sk_live_EXAMPLE_REDACTED", "pk_live_EXAMPLE_REDACTED", Passwords: "REDACTED" or "your-password-here", Tokens: "your-token-here". BEFORE committing any file containing credential-like patterns: (1) Replace ALL real values with examples/redacted versions, (2) Run secret detection scan (gitleaks or detect-secrets), (3) Verify no actual credentials remain. If actual credentials needed for deployment, use: Environment variables (.env file, NOT committed), Secure secret management (HashiCorp Vault, AWS Secrets Manager), Deployment-specific configuration (NOT in git).', - quadrant: 'SYSTEM', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'CRITICAL SECURITY REQUIREMENT - Created in response to Anthropic API key exposure incident on 2025-10-21. API key (sk-ant-api03-_xm...TwAA, ID 5043627, name: family-history-ocr) was committed to public repository in docs/STRIPE_LIVE_MODE_DEPLOYMENT.md at commit 31345d5c1abc8c8da9387d55494a1741f451f9a7. GitHub secret scanning detected and Anthropic revoked key automatically. This rule prevents recurrence by requiring ALL credentials to be redacted in documentation and enforcing secret detection scans before commits.', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - blocking: true, - security_critical: true, - incident_response: 'anthropic_api_key_exposure_2025_10_21' - } - }, - { - id: 'inst_070', - text: 'ALL git commits MUST pass secret detection scan before being allowed. Use gitleaks or detect-secrets as pre-commit hook. Hook location: .git/hooks/pre-commit. Command: gitleaks detect --source . --verbose. Action: BLOCK commit if secrets detected. If legitimate secret-like pattern detected (false positive): (1) Verify it is NOT a real secret, (2) Add to .gitleaksignore with comment explaining why, (3) Get user approval before committing, (4) Document in commit message. NEVER bypass secret detection hook without explicit user approval.', - quadrant: 'SYSTEM', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'CRITICAL SECURITY REQUIREMENT - Created in response to Anthropic API key exposure incident. Automated pre-commit hook prevents credentials from being committed to git in the first place. This is Layer 3 of defense-in-depth strategy (Prevention → Mitigation → Detection → Backstop → Recovery).', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - blocking: true, - automation_required: true, - security_critical: true - } - }, - { - id: 'inst_071', - text: 'PRE-DEPLOYMENT CHECKLIST (run in order):\n□ 1. CSP Compliance Check [AUTOMATED via hook]\n□ 2. Secret Detection Scan (gitleaks detect --source .)\n□ 3. Credential Audit (grep -r "sk-" "pk-" "secret" "password")\n□ 4. Local Server Test (curl http://localhost:9000/health → 200 OK)\n□ 5. Comprehensive Testing (npm test → all pass)\n□ 6. Permission Verification (ls -la → correct 644/755)\n□ 7. Git Status Clean (no uncommitted changes)\n□ 8. Public Repository Content Review (no internal docs)\nMark each checkbox before proceeding to next. BLOCK deployment if any step fails.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'ENHANCED from inst_054 - Added steps 2, 3, 8 in response to security incident. Step 2 (Secret Detection) and Step 3 (Credential Audit) provide redundant verification that no credentials are being deployed. Step 8 (Public Repository Content Review) ensures no internal documentation accidentally published. This is defense-in-depth approach.', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - blocking: true, - replaces: 'inst_054' - } - }, - { - id: 'inst_072', - text: 'Implement defense-in-depth for credential protection: Layer 1 - Prevention: Never commit credentials to git. Layer 2 - Mitigation: Redact credentials in documentation. Layer 3 - Detection: Pre-commit secret scanning (automated). Layer 4 - Backstop: GitHub secret scanning (automatic on public repos). Layer 5 - Recovery: Credential rotation procedures documented. ALL security-sensitive operations must have multiple layers. If one layer fails, others should prevent catastrophic outcome. When creating deployment documentation: (1) Use environment variable names, not values, (2) Include credential rotation procedures, (3) Document secret management system (Vault, AWS Secrets Manager), (4) Never assume "just do not commit secrets" is sufficient protection.', - quadrant: 'STRATEGIC', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'STRATEGIC SECURITY PRINCIPLE - Created in response to incident analysis. The breach occurred because only Layer 1 (prevention) and Layer 4 (GitHub scanning) existed. Layers 2, 3, and 5 were missing. This rule requires ALL five layers for security-critical operations. Based on "assume breach" security model where no single control is trusted.', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'ADVISORY', - architectural_principle: true, - security_critical: true - } - } -]; - -console.log('➕ Adding new security rules...\n'); - -newRules.forEach(rule => { - data.instructions.push(rule); - console.log(` ✓ Added ${rule.id}`); - console.log(` ${rule.text.substring(0, 80)}...`); - console.log(''); -}); - -// Update inst_054 to mark as superseded -const inst_054 = data.instructions.find(i => i.id === 'inst_054'); -if (inst_054) { - if (!inst_054.notes.includes('Superseded')) { - inst_054.notes += '\n\nSuperseded by inst_071 on 2025-10-21 which adds secret detection and credential audit steps.'; - } - inst_054.active = false; - console.log(' ⊝ Deprecated inst_054 (superseded by inst_071)\n'); -} - -// Update version and stats -data.version = '3.7'; -data.last_updated = new Date().toISOString(); - -const activeInstructions = data.instructions.filter(i => i.active !== false); - -const quadrantCounts = { - SYSTEM: 0, - STRATEGIC: 0, - OPERATIONAL: 0, - TACTICAL: 0 -}; - -const persistenceCounts = { - HIGH: 0, - MEDIUM: 0, - LOW: 0 -}; - -activeInstructions.forEach(inst => { - if (inst.quadrant) quadrantCounts[inst.quadrant]++; - if (inst.persistence) persistenceCounts[inst.persistence]++; -}); - -data.stats = { - total_instructions: data.instructions.length, - active_instructions: activeInstructions.length, - by_quadrant: quadrantCounts, - by_persistence: persistenceCounts -}; - -console.log('📊 Updating version and stats...'); -console.log(` Version: 3.6 → 3.7`); -console.log(` Total: ${data.instructions.length}`); -console.log(` Active: ${data.stats.active_instructions}\n`); - -// Write updated file -fs.writeFileSync(INSTRUCTION_FILE, JSON.stringify(data, null, 2)); -console.log(`💾 Written to ${path.basename(INSTRUCTION_FILE)}\n`); - -console.log('═══════════════════════════════════════════════════════════'); -console.log(' ✅ SECURITY RULES ADDED SUCCESSFULLY'); -console.log('═══════════════════════════════════════════════════════════'); -console.log(''); -console.log('New rules:'); -console.log(' inst_069: Credential Handling in Documentation'); -console.log(' inst_070: Pre-Commit Secret Detection'); -console.log(' inst_071: Enhanced Pre-Deployment Checklist'); -console.log(' inst_072: Assume Breach - Defense in Depth'); -console.log(''); -console.log('Next steps:'); -console.log(' 1. Sync to MongoDB: node scripts/sync-instructions-to-db.js'); -console.log(' 2. Run credential scan: rg -i "sk-" --hidden'); -console.log(' 3. Install gitleaks: brew install gitleaks (or apt/yum)'); -console.log(' 4. Create pre-commit hook: scripts/install-gitleaks-hook.sh'); -console.log(''); diff --git a/scripts/apply-governance-audit-2025-10-21.js b/scripts/apply-governance-audit-2025-10-21.js deleted file mode 100755 index 44c920a2..00000000 --- a/scripts/apply-governance-audit-2025-10-21.js +++ /dev/null @@ -1,500 +0,0 @@ -#!/usr/bin/env node - -/** - * Apply Governance Audit Recommendations (2025-10-21) - * - * This script implements the recommendations from GOVERNANCE_RULES_AUDIT_2025-10-21.md: - * - Consolidates 12 overlapping rules into 4 consolidated rules - * - Creates 5 new rules to fill coverage gaps - * - Splits inst_024 into 5 granular rules - * - Adjusts persistence levels and quadrant classifications - * - Updates version from 3.5 to 3.6 - */ - -const fs = require('fs'); -const path = require('path'); - -const INSTRUCTION_FILE = path.join(__dirname, '../.claude/instruction-history.json'); - -console.log('═══════════════════════════════════════════════════════════'); -console.log(' GOVERNANCE AUDIT IMPLEMENTATION - 2025-10-21'); -console.log('═══════════════════════════════════════════════════════════\n'); - -// Read current data -console.log('📖 Reading current instruction-history.json...'); -const data = JSON.parse(fs.readFileSync(INSTRUCTION_FILE, 'utf8')); - -console.log(` Version: ${data.version}`); -console.log(` Instructions: ${data.instructions.length}`); -console.log(` Active: ${data.instructions.filter(i => i.active !== false).length}\n`); - -// Step 1: Deprecate rules that will be consolidated or replaced -console.log('🗑️ Step 1: Deprecating rules...'); - -const deprecations = [ - // Consolidated into inst_008_CONSOLIDATED - { id: 'inst_008', reason: 'Consolidated into inst_008_CONSOLIDATED (CSP and security headers)' }, - { id: 'inst_044', reason: 'Consolidated into inst_008_CONSOLIDATED (CSP and security headers)' }, - { id: 'inst_048', reason: 'Consolidated into inst_008_CONSOLIDATED (CSP and security headers)' }, - - // Consolidated into inst_020_CONSOLIDATED - { id: 'inst_020', reason: 'Consolidated into inst_020_CONSOLIDATED (deployment permissions)' }, - { id: 'inst_022', reason: 'Consolidated into inst_020_CONSOLIDATED (deployment permissions)' }, - - // Consolidated into inst_041_CONSOLIDATED - { id: 'inst_041', reason: 'Consolidated into inst_041_CONSOLIDATED (file input validation)' }, - { id: 'inst_042', reason: 'Consolidated into inst_041_CONSOLIDATED (file input validation)' }, - - // Consolidated into inst_063_CONSOLIDATED - { id: 'inst_028', reason: 'Consolidated into inst_063_CONSOLIDATED (public GitHub management)' }, - { id: 'inst_062', reason: 'Consolidated into inst_063_CONSOLIDATED (public GitHub management)' }, - { id: 'inst_063', reason: 'Consolidated into inst_063_CONSOLIDATED (public GitHub management)' }, - - // Replaced by inst_064 - { id: 'inst_007', reason: 'Replaced by inst_064 (framework component usage - more specific)' }, - - // Split into inst_024a/b/c/d/e - { id: 'inst_024', reason: 'Split into inst_024a/b/c/d/e for granular enforcement' } -]; - -deprecations.forEach(({ id, reason }) => { - const rule = data.instructions.find(i => i.id === id); - if (rule) { - rule.active = false; - rule.deprecation_reason = reason; - rule.deprecated_date = '2025-10-21'; - rule.deprecated_session = '2025-10-07-001'; - console.log(` ✓ Deprecated ${id}`); - } else { - console.log(` ✗ WARNING: ${id} not found`); - } -}); - -console.log(''); - -// Step 2: Add consolidated rules -console.log('➕ Step 2: Adding consolidated rules...'); - -const consolidatedRules = [ - { - id: 'inst_008_CONSOLIDATED', - text: 'ALL HTML/JS must comply with Content Security Policy: no inline event handlers (onclick, onload, etc.), no inline scripts, no inline styles. ALL HTTP responses MUST include comprehensive security headers: Content-Security-Policy, Strict-Transport-Security, X-Frame-Options (DENY), X-Content-Type-Options (nosniff), Referrer-Policy (strict-origin-when-cross-origin). Pre-tool execution hook validators (validate-file-write.js, validate-file-edit.js) MUST check CSP compliance before allowing edits and provide specific violation details if blocked.', - quadrant: 'SYSTEM', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'CONSOLIDATED from inst_008, inst_044, inst_048. Single source of truth for CSP and security header requirements. Prevents CSP violations and security header omissions.', - deprecates: ['inst_008', 'inst_044', 'inst_048'], - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - blocking: true, - enforcement_location: 'pre-tool-hooks' - } - }, - { - id: 'inst_020_CONSOLIDATED', - text: 'Web application deployments MUST ensure correct file permissions before going live. Public-facing HTML/CSS/JS: 644 (rw-r--r--), executable scripts: 755 (rwxr-xr-x), admin directories: 750 (rwxr-x---). ALL deployment scripts (rsync, scp, git pull) MUST include automated post-deployment permission correction commands. Verify with "ls -la" before declaring deployment complete. Permission errors are recurring deployment failures - automated correction is mandatory.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'CONSOLIDATED from inst_020, inst_022. Prevents public access to admin directories and execution of static files. Recurring issue required automation mandate.', - deprecates: ['inst_020', 'inst_022'], - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - blocking: true, - automation_required: true - } - }, - { - id: 'inst_041_CONSOLIDATED', - text: 'ALL file inputs (web uploads, email attachments, user-provided files) MUST be validated before processing: (1) File type whitelist validation (reject executables, scripts), (2) Size limits enforced, (3) Content scanning for malware/XSS payloads, (4) Secure storage (GridFS with encryption), (5) Access control (authenticated users only, role-based permissions). Reject and log all suspicious files per inst_046 (security event logging). Never trust client-provided MIME types - verify file signatures.', - quadrant: 'SYSTEM', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'CONSOLIDATED from inst_041, inst_042. Comprehensive file/attachment security validation. Part of security vetting framework.', - deprecates: ['inst_041', 'inst_042'], - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - blocking: true, - security_critical: true - } - }, - { - id: 'inst_063_CONSOLIDATED', - text: 'Public GitHub repository (tractatus-framework) must remain implementation-focused. Prohibited without explicit approval: (1) Governance research documents, (2) Pluralistic deliberation guides, (3) Theoretical frameworks, (4) Project-specific internal documentation, (5) Business strategy documents. Allowed: (1) Technical implementation documentation, (2) API reference guides, (3) Code examples and tutorials, (4) Installation/setup guides, (5) Contribution guidelines. README.md must be reviewed weekly and "Last Updated" date updated when material changes occur. README is primary external interface - must be world-class and current.', - quadrant: 'STRATEGIC', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'CONSOLIDATED from inst_028, inst_062, inst_063. Created after bad actor incident where AI converted implementation docs to authoritarian governance guide. Prevents misrepresentation of framework purpose.', - deprecates: ['inst_028', 'inst_062', 'inst_063'], - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'ADVISORY', - requires_user_approval: true, - review_frequency: 'weekly' - } - } -]; - -consolidatedRules.forEach(rule => { - data.instructions.push(rule); - console.log(` ✓ Added ${rule.id}`); -}); - -console.log(''); - -// Step 3: Add new rules (coverage gaps) -console.log('➕ Step 3: Adding new rules (coverage gaps)...'); - -const newRules = [ - { - id: 'inst_064', - text: 'Tractatus framework components MUST be actively used throughout sessions: (1) ContextPressureMonitor: At session start (baseline), 50k/100k/150k token milestones, after complex multi-file operations, after errors. (2) InstructionPersistenceClassifier: When user gives explicit instruction, configuration specifications, architectural constraints. (3) CrossReferenceValidator: Before database schema changes, configuration modifications, architectural decisions. (4) BoundaryEnforcer: Before privacy policy decisions, ethical trade-offs, values-sensitive content. (5) MetacognitiveVerifier: For operations with 3+ file modifications or 5+ sequential steps. (6) PluralisticDeliberationOrchestrator: When BoundaryEnforcer flags values conflict. Framework fade (components not being used) = CRITICAL FAILURE. Update .claude/session-state.json after each component use with timestamp and validation count.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'CRITICAL ENFORCEMENT GAP - Previously documented but not enforced as rule. Specifies exactly when each component must be used. Replaces vague inst_007.', - replaces: ['inst_007'], - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - framework_critical: true, - failure_mode: 'CRITICAL' - } - }, - { - id: 'inst_065', - text: 'MANDATORY at session start and immediately after conversation compaction: Run "node scripts/session-init.js", then report to user: (1) Server status: curl -s http://localhost:9000/health | jq -r \'.status\' (expect \'ok\'), (2) Framework statistics: session ID, active instructions count, version from .claude/session-state.json and .claude/instruction-history.json, (3) MongoDB status: active rules count from tractatus_dev database. BLOCK all session work until initialization complete and results reported to user. Output results in clean formatted summary before proceeding with any tasks.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Required by CLAUDE.md but not previously enforced as rule. Ensures framework operational before work begins. Critical for session continuity after compaction.', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - blocking: true, - triggers: ['session_start', 'post_compaction'] - } - }, - { - id: 'inst_066', - text: 'ALL git commits MUST use conventional commit format: "type(scope): description". Types: feat (new feature), fix (bug fix), docs (documentation), refactor (code restructure), test (test additions), chore (maintenance). Include Claude Code attribution footer:\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\nCo-Authored-By: Claude \n\nNEVER use "git commit -i" or "git add -i" (interactive modes not supported). When pre-commit hooks modify files, verify commit authorship (git log -1 --format=\'%an %ae\') before amending - NEVER amend other developers\' commits.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Documented in Maintenance Guide but not enforced as rule. Improves git history quality and provides attribution transparency.', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'ADVISORY', - quality_standard: true - } - }, - { - id: 'inst_067', - text: 'BEFORE database operations or port-specific commands: (1) VERIFY current environment (local vs production) from context, (2) VERIFY correct port/database from explicit user instruction OR CLAUDE.md defaults (local: tractatus_dev:27017 on port 9000, production: tractatus_prod:27017 on port 9000), (3) If user specifies non-standard port or database (e.g., port 27027, custom database name), USE EXACT VALUE FROM USER INSTRUCTION - do NOT autocorrect to standard defaults. Pattern recognition bias for standard ports/databases is a known 27027 failure mode where training data associations override explicit instructions. When in doubt, ask user to confirm environment.', - quadrant: 'SYSTEM', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Prevents 27027-type failures where pattern recognition overrides explicit user instructions. Critical for multi-environment operations.', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - failure_prevention: '27027_pattern_bias', - blocking: true - } - }, - { - id: 'inst_068', - text: 'Run tests in these scenarios: (1) Before git commits if tests exist for modified code area, (2) Before all deployments (run full test suite), (3) After refactoring (run affected tests), (4) When user explicitly requests testing. Test failures BLOCK commits and deployments unless user explicitly approves proceeding with failing tests. When creating new features, ask user if tests should be written - do not assume test requirements. Report test results with counts: X passed, Y failed, Z skipped. Use "npm test" for full suite or "npm test -- " for specific tests.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Aligns with world-class quality standard (inst_004). Prevents regressions and maintains code quality.', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - blocking: true, - quality_critical: true - } - } -]; - -newRules.forEach(rule => { - data.instructions.push(rule); - console.log(` ✓ Added ${rule.id}`); -}); - -console.log(''); - -// Step 4: Add split rules (inst_024a-e) -console.log('➕ Step 4: Adding split rules (inst_024a-e)...'); - -const splitRules = [ - { - id: 'inst_024a', - text: 'Before session handoff or closedown: Kill all background processes spawned during session (npm, jest, node, dev servers, file watchers). Use "ps aux | grep -E \\"npm|jest|node\\"" to find processes, "pkill -f " to terminate. Verify cleanup with "ps aux | grep -E \\"npm|jest|node\\"" again (should show no results except grep itself). Update .claude/session-state.json with cleanup timestamp and process count terminated.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Split from inst_024 for granular enforcement. Part of comprehensive closedown protocol.', - part_of: 'inst_024_series', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - closedown_step: 1 - } - }, - { - id: 'inst_024b', - text: 'Before session handoff: Verify .claude/instruction-history.json changes are synced to MongoDB governanceRules collection. If instruction-history.json modified this session, run "node scripts/sync-instructions-to-db.js" to sync. Compare counts: active instructions in JSON vs active rules in database. Report sync status in handoff document: "Synced: X instructions → Y database rules" or "Not needed: No changes this session".', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Split from inst_024 for granular enforcement. Ensures file-database consistency.', - part_of: 'inst_024_series', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - closedown_step: 2 - } - }, - { - id: 'inst_024c', - text: 'Before session handoff: Document complete git status: (1) Current branch, (2) Commits ahead/behind remote (git status shows "Your branch is ahead of origin/main by X commits"), (3) Working tree status (clean vs untracked files), (4) Most recent commits (git log --oneline -5). Include in handoff document with explanations for any untracked files (e.g., "untracked files are INTERNAL project files, NOT for public repo"). If working tree has uncommitted changes, explain why or commit before handoff.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Split from inst_024 for granular enforcement. Provides next session with clear git context.', - part_of: 'inst_024_series', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - closedown_step: 3 - } - }, - { - id: 'inst_024d', - text: 'Before session handoff: Clean temporary artifacts created during session: (1) .memory-test/ directory (if exists from testing), (2) Test databases (mongosh --eval "db.dropDatabase()" on tractatus_test), (3) Stale lock files (check age - if hours old with no process, safe to delete), (4) Temporary scripts in /tmp/. Document what was cleaned and what was intentionally kept (e.g., "package-lock.json kept - legitimate", "mongod.lock kept - server running"). Do NOT delete legitimate lock files for running processes.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Split from inst_024 for granular enforcement. Prevents clutter accumulation across sessions.', - part_of: 'inst_024_series', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'ADVISORY', - closedown_step: 4 - } - }, - { - id: 'inst_024e', - text: 'Create session handoff document as OPTIMAL_STARTUP_PROMPT_.md with: (1) Current system status (server, framework, database, git), (2) Completed tasks with file:line references and verification, (3) In-progress tasks with blockers and next steps, (4) Pending tasks prioritized by user importance, (5) Recent instruction additions/changes with rationale, (6) Known issues and gotchas, (7) Framework health assessment, (8) User decisions needed, (9) Ready-to-use TodoWrite JSON for next session, (10) Recommended startup sequence with exact commands. STOP ALL WORK IMMEDIATELY after creating handoff document - handoff signals NEW session intent, not continuation.', - quadrant: 'OPERATIONAL', - persistence: 'HIGH', - temporal_scope: 'PERMANENT', - session_id: '2025-10-07-001', - notes: 'Split from inst_024 for granular enforcement. Core handoff creation with strict format requirements.', - part_of: 'inst_024_series', - active: true, - created_date: '2025-10-21', - parameters: { - verification_required: 'MANDATORY', - closedown_step: 5, - terminal_action: true - } - } -]; - -splitRules.forEach(rule => { - data.instructions.push(rule); - console.log(` ✓ Added ${rule.id}`); -}); - -console.log(''); - -// Step 5: Adjust persistence levels and quadrant classifications -console.log('🔧 Step 5: Adjusting persistence and quadrants...'); - -const adjustments = [ - { id: 'inst_011', changes: { persistence: 'MEDIUM' }, reason: 'Lowered from HIGH - implementation detail' }, - { id: 'inst_021', changes: { persistence: 'MEDIUM', quadrant: 'TACTICAL' }, reason: 'Lowered from HIGH, reclassified to TACTICAL' }, - { id: 'inst_059', changes: { quadrant: 'TACTICAL' }, reason: 'Reclassified from OPERATIONAL to TACTICAL' }, - { id: 'inst_061', changes: { quadrant: 'TACTICAL' }, reason: 'Reclassified from OPERATIONAL to TACTICAL' }, -]; - -adjustments.forEach(({ id, changes, reason }) => { - const rule = data.instructions.find(i => i.id === id); - if (rule) { - Object.assign(rule, changes); - if (!rule.adjustment_history) rule.adjustment_history = []; - rule.adjustment_history.push({ - date: '2025-10-21', - session: '2025-10-07-001', - changes, - reason - }); - console.log(` ✓ Adjusted ${id}: ${reason}`); - } else { - console.log(` ✗ WARNING: ${id} not found`); - } -}); - -console.log(''); - -// Step 6: Update inst_009 text (Stripe status) -console.log('🔧 Step 6: Updating inst_009 text...'); - -const inst_009 = data.instructions.find(i => i.id === 'inst_009'); -if (inst_009) { - inst_009.text = 'Stripe payment processing is ACTIVE (test keys configured). Email services (verification emails, donation receipts) are deferred until production launch. ProtonBridge email integration is Phase 2+.'; - inst_009.notes = 'Updated 2025-10-21: Stripe fully implemented and active (test keys configured). Email services remain deferred until production launch with ProtonBridge integration planned for Phase 2+.'; - console.log(' ✓ Updated inst_009 text and notes'); -} else { - console.log(' ✗ WARNING: inst_009 not found'); -} - -console.log(''); - -// Step 7: Enhance vague rules -console.log('🔧 Step 7: Enhancing vague rules...'); - -const inst_040 = data.instructions.find(i => i.id === 'inst_040'); -if (inst_040) { - inst_040.text = 'When user says "all" (e.g., "update all pages", "fix all instances", "check all files"), Claude MUST: (1) Use Glob/Grep to find ALL matches, (2) List every item found with file:line references, (3) Confirm with user before proceeding, (4) Track completion of each item. NEVER assume "all" means "a few examples" or "the ones I found first".'; - console.log(' ✓ Enhanced inst_040 with specific examples'); -} else { - console.log(' ✗ WARNING: inst_040 not found'); -} - -const inst_047 = data.instructions.find(i => i.id === 'inst_047'); -if (inst_047) { - inst_047.text = 'NEVER dismiss, downplay, or avoid user requests by claiming "too hard", "too complex", "beyond capabilities". When facing difficult requests: (1) Acknowledge complexity honestly, (2) Break into smaller steps, (3) Identify blockers explicitly, (4) Propose alternative approaches, (5) Ask user for priorities/trade-offs. If truly impossible, explain technical limitations with evidence, not vague dismissal.'; - console.log(' ✓ Enhanced inst_047 with positive guidance'); -} else { - console.log(' ✗ WARNING: inst_047 not found'); -} - -const inst_054 = data.instructions.find(i => i.id === 'inst_054'); -if (inst_054) { - inst_054.text = 'PRE-DEPLOYMENT CHECKLIST (run in order):\n□ 1. CSP Compliance Check [AUTOMATED via hook]\n□ 2. Local Server Test (curl http://localhost:9000/health → 200 OK)\n□ 3. Comprehensive Testing (npm test → all pass)\n□ 4. Permission Verification (ls -la → correct 644/755)\n□ 5. Git Status Clean (no uncommitted changes)\nMark each checkbox before proceeding to next. BLOCK deployment if any step fails.'; - console.log(' ✓ Enhanced inst_054 with checklist format'); -} else { - console.log(' ✗ WARNING: inst_054 not found'); -} - -console.log(''); - -// Step 8: Update version and recalculate stats -console.log('📊 Step 8: Updating version and recalculating stats...'); - -data.version = '3.6'; -data.last_updated = new Date().toISOString(); - -// Recalculate stats -const activeInstructions = data.instructions.filter(i => i.active !== false); - -const quadrantCounts = { - SYSTEM: 0, - STRATEGIC: 0, - OPERATIONAL: 0, - TACTICAL: 0 -}; - -const persistenceCounts = { - HIGH: 0, - MEDIUM: 0, - LOW: 0 -}; - -activeInstructions.forEach(inst => { - if (inst.quadrant) quadrantCounts[inst.quadrant]++; - if (inst.persistence) persistenceCounts[inst.persistence]++; -}); - -data.stats = { - total_instructions: data.instructions.length, - active_instructions: activeInstructions.length, - by_quadrant: quadrantCounts, - by_persistence: persistenceCounts -}; - -console.log(' ✓ Updated to version 3.6'); -console.log(` ✓ Stats: ${data.stats.active_instructions} active / ${data.stats.total_instructions} total`); -console.log(''); - -// Step 9: Write updated file -console.log('💾 Step 9: Writing updated instruction-history.json...'); - -// Create backup first -const backupFile = INSTRUCTION_FILE + '.backup-3.5-' + Date.now(); -fs.copyFileSync(INSTRUCTION_FILE, backupFile); -console.log(` ✓ Backup created: ${path.basename(backupFile)}`); - -fs.writeFileSync(INSTRUCTION_FILE, JSON.stringify(data, null, 2)); -console.log(` ✓ Written to ${path.basename(INSTRUCTION_FILE)}`); -console.log(''); - -// Summary -console.log('═══════════════════════════════════════════════════════════'); -console.log(' SUMMARY'); -console.log('═══════════════════════════════════════════════════════════\n'); - -console.log('📊 CHANGES:'); -console.log(` Version: 3.5 → 3.6`); -console.log(` Total instructions: 54 → ${data.stats.total_instructions}`); -console.log(` Active instructions: 54 → ${data.stats.active_instructions}`); -console.log(` Deprecated: ${deprecations.length} rules`); -console.log(` Added consolidated: ${consolidatedRules.length} rules`); -console.log(` Added new: ${newRules.length} rules`); -console.log(` Added split: ${splitRules.length} rules`); -console.log(` Adjusted: ${adjustments.length} rules`); -console.log(` Enhanced: 3 rules`); -console.log(''); - -console.log('📋 BY QUADRANT:'); -Object.entries(data.stats.by_quadrant).forEach(([q, count]) => { - console.log(` ${q}: ${count}`); -}); -console.log(''); - -console.log('🔒 BY PERSISTENCE:'); -Object.entries(data.stats.by_persistence).forEach(([p, count]) => { - console.log(` ${p}: ${count}`); -}); -console.log(''); - -console.log('✅ Governance audit implementation COMPLETE'); -console.log(''); -console.log('NEXT STEPS:'); -console.log('1. Sync to MongoDB: node scripts/sync-instructions-to-db.js'); -console.log('2. Run framework tests: npm test'); -console.log('3. Verify session initialization: node scripts/session-init.js'); -console.log('');