CRITICAL FIX: Server would CRASH ON STARTUP (multiple import errors)
REMOVED (2 scripts):
1. scripts/framework-watchdog.js
- Monitored .claude/session-state.json (OUR Claude Code setup)
- Monitored .claude/token-checkpoints.json (OUR file structure)
- Implementers won't have our .claude/ directory
2. scripts/init-db.js
- Created website collections: blog_posts, media_inquiries, case_submissions
- Created website collections: resources, moderation_queue, users, citations
- Created website collections: translations, koha_donations
- Next steps referenced deleted scripts (npm run seed:admin)
REWRITTEN (2 files):
src/models/index.js (29 lines → 27 lines)
- REMOVED imports: Document, BlogPost, MediaInquiry, CaseSubmission, Resource
- REMOVED imports: ModerationQueue, User (all deleted in Phase 2)
- KEPT imports: AuditLog, DeliberationSession, GovernanceLog, GovernanceRule
- KEPT imports: Precedent, Project, SessionState, VariableValue, VerificationLog
- Result: Only framework models exported
src/server.js (284 lines → 163 lines, 43% reduction)
- REMOVED: Imports to deleted middleware (csrf-protection, response-sanitization)
- REMOVED: Stripe webhook handling (/api/koha/webhook)
- REMOVED: Static file caching (for deleted public/ directory)
- REMOVED: Static file serving (public/ deleted in Phase 6)
- REMOVED: CSRF token endpoint
- REMOVED: Website homepage with "auth, documents, blog, admin" references
- REMOVED: Instruction sync (scripts/sync-instructions-to-db.js reference)
- REMOVED: Hardcoded log path (${process.env.HOME}/var/log/tractatus/...)
- REMOVED: Website-specific security middleware
- KEPT: Security headers, rate limiting, CORS, body parsers
- KEPT: API routes, governance services, MongoDB connections
- RESULT: Clean framework-only server
RESULT: Repository can now start without crashes, all imports resolve
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
390 lines
9.2 KiB
JavaScript
Executable file
390 lines
9.2 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
||
|
||
/**
|
||
* Migration: Comprehensive Document Recategorization
|
||
*
|
||
* This migration:
|
||
* 1. Renames "Value Pluralism FAQ" to "Understanding Value Pluralism"
|
||
* 2. Recategorizes all documents into proper categories
|
||
* 3. Restores relevant archived documents to public visibility
|
||
* 4. Assigns proper order values for intuitive sidebar organization
|
||
*/
|
||
|
||
require('dotenv').config();
|
||
const { MongoClient } = require('mongodb');
|
||
|
||
const MONGO_URI = process.env.MONGODB_URI || process.env.MONGO_URI || 'mongodb://localhost:27017';
|
||
const DB_NAME = process.env.MONGODB_DB || process.env.MONGO_DB || 'tractatus_dev';
|
||
|
||
// Document updates: { slug, updates }
|
||
const DOCUMENT_UPDATES = [
|
||
// ========================================
|
||
// GETTING STARTED
|
||
// ========================================
|
||
{
|
||
slug: 'introduction-to-the-tractatus-framework',
|
||
updates: {
|
||
category: 'getting-started',
|
||
visibility: 'public',
|
||
order: 1
|
||
}
|
||
},
|
||
{
|
||
slug: 'architectural-overview-and-research-status',
|
||
updates: {
|
||
category: 'getting-started',
|
||
visibility: 'public',
|
||
order: 2
|
||
}
|
||
},
|
||
{
|
||
slug: 'core-concepts-of-the-tractatus-framework',
|
||
updates: {
|
||
category: 'getting-started',
|
||
visibility: 'public',
|
||
order: 3
|
||
}
|
||
},
|
||
{
|
||
slug: 'tractatus-ai-safety-framework-core-values-and-principles',
|
||
updates: {
|
||
category: 'getting-started',
|
||
visibility: 'public',
|
||
order: 4
|
||
}
|
||
},
|
||
{
|
||
slug: 'tractatus-agentic-governance-system-glossary-of-terms',
|
||
updates: {
|
||
category: 'getting-started',
|
||
visibility: 'public',
|
||
order: 5
|
||
}
|
||
},
|
||
|
||
// ========================================
|
||
// TECHNICAL REFERENCE
|
||
// ========================================
|
||
{
|
||
slug: 'technical-architecture',
|
||
updates: {
|
||
category: 'technical-reference',
|
||
visibility: 'public',
|
||
order: 1
|
||
}
|
||
},
|
||
{
|
||
slug: 'implementation-guide',
|
||
updates: {
|
||
category: 'technical-reference',
|
||
visibility: 'public',
|
||
order: 2
|
||
}
|
||
},
|
||
{
|
||
slug: 'tractatus-framework-implementation-guide',
|
||
updates: {
|
||
category: 'technical-reference',
|
||
visibility: 'public',
|
||
order: 3
|
||
}
|
||
},
|
||
{
|
||
slug: 'api-reference-complete',
|
||
updates: {
|
||
category: 'technical-reference',
|
||
visibility: 'public',
|
||
order: 4
|
||
}
|
||
},
|
||
{
|
||
slug: 'api-javascript-examples',
|
||
updates: {
|
||
category: 'technical-reference',
|
||
visibility: 'public',
|
||
order: 5
|
||
}
|
||
},
|
||
{
|
||
slug: 'api-python-examples',
|
||
updates: {
|
||
category: 'technical-reference',
|
||
visibility: 'public',
|
||
order: 6
|
||
}
|
||
},
|
||
{
|
||
slug: 'openapi-specification',
|
||
updates: {
|
||
category: 'technical-reference',
|
||
visibility: 'public',
|
||
order: 7
|
||
}
|
||
},
|
||
|
||
// ========================================
|
||
// THEORY & RESEARCH
|
||
// ========================================
|
||
{
|
||
slug: 'research-foundations-scholarly-review-and-context',
|
||
updates: {
|
||
category: 'research-theory',
|
||
visibility: 'public',
|
||
order: 1
|
||
}
|
||
},
|
||
{
|
||
slug: 'organizational-theory-foundations-of-the-tractatus-framework',
|
||
updates: {
|
||
category: 'research-theory',
|
||
visibility: 'public',
|
||
order: 2
|
||
}
|
||
},
|
||
{
|
||
slug: 'pluralistic-values-research-foundations',
|
||
updates: {
|
||
category: 'research-theory',
|
||
visibility: 'public',
|
||
order: 3
|
||
}
|
||
},
|
||
{
|
||
slug: 'research-topic-rule-proliferation-and-transactional-overhead-in-ai-governance',
|
||
updates: {
|
||
category: 'research-theory',
|
||
visibility: 'public',
|
||
order: 4
|
||
}
|
||
},
|
||
{
|
||
slug: 'research-topic-concurrent-session-architecture-limitations-in-claude-code-governance',
|
||
updates: {
|
||
category: 'research-theory',
|
||
visibility: 'public',
|
||
order: 5
|
||
}
|
||
},
|
||
|
||
// ========================================
|
||
// ADVANCED TOPICS
|
||
// ========================================
|
||
{
|
||
slug: 'value-pluralism-faq',
|
||
updates: {
|
||
title: 'Understanding Value Pluralism in Tractatus',
|
||
category: 'advanced-topics',
|
||
visibility: 'public',
|
||
order: 1
|
||
}
|
||
},
|
||
{
|
||
slug: 'pluralistic-values-deliberation-plan-v2',
|
||
updates: {
|
||
category: 'advanced-topics',
|
||
visibility: 'public',
|
||
order: 2
|
||
}
|
||
},
|
||
{
|
||
slug: 'comparison-matrix-claude-code-claudemd-and-tractatus-framework',
|
||
updates: {
|
||
category: 'advanced-topics',
|
||
visibility: 'public',
|
||
order: 3
|
||
}
|
||
},
|
||
{
|
||
slug: 'research-scope-feasibility-of-llm-integrated-tractatus-framework',
|
||
updates: {
|
||
category: 'advanced-topics',
|
||
visibility: 'public',
|
||
order: 4
|
||
}
|
||
},
|
||
|
||
// ========================================
|
||
// CASE STUDIES
|
||
// ========================================
|
||
{
|
||
slug: 'the-27027-incident-a-case-study-in-pattern-recognition-bias',
|
||
updates: {
|
||
category: 'case-studies',
|
||
visibility: 'public',
|
||
order: 1
|
||
}
|
||
},
|
||
{
|
||
slug: 'when-frameworks-fail-and-why-thats-ok',
|
||
updates: {
|
||
category: 'case-studies',
|
||
visibility: 'public',
|
||
order: 2
|
||
}
|
||
},
|
||
{
|
||
slug: 'our-framework-in-action-detecting-and-correcting-ai-fabrications',
|
||
updates: {
|
||
category: 'case-studies',
|
||
visibility: 'public',
|
||
order: 3
|
||
}
|
||
},
|
||
{
|
||
slug: 'real-world-ai-governance-a-case-study-in-framework-failure-and-recovery',
|
||
updates: {
|
||
category: 'case-studies',
|
||
visibility: 'public',
|
||
order: 4
|
||
}
|
||
},
|
||
{
|
||
slug: 'framework-governance-in-action-pre-publication-security-audit',
|
||
updates: {
|
||
category: 'case-studies',
|
||
visibility: 'public',
|
||
order: 5
|
||
}
|
||
},
|
||
{
|
||
slug: 'case-studies-real-world-llm-failure-modes',
|
||
updates: {
|
||
category: 'case-studies',
|
||
visibility: 'public',
|
||
order: 6
|
||
}
|
||
},
|
||
|
||
// ========================================
|
||
// BUSINESS & LEADERSHIP
|
||
// ========================================
|
||
{
|
||
slug: 'executive-brief-tractatus-based-llm-architecture-for-ai-safety',
|
||
updates: {
|
||
category: 'business-leadership',
|
||
visibility: 'public',
|
||
order: 1
|
||
}
|
||
},
|
||
{
|
||
slug: 'ai-governance-business-case-template-tractatus-framework',
|
||
updates: {
|
||
category: 'business-leadership',
|
||
visibility: 'public',
|
||
order: 2
|
||
}
|
||
},
|
||
{
|
||
slug: 'implementation-roadmap-24-month-deployment-plan',
|
||
updates: {
|
||
category: 'business-leadership',
|
||
visibility: 'public',
|
||
order: 3
|
||
}
|
||
},
|
||
|
||
// ========================================
|
||
// ARCHIVE (outdated/superseded)
|
||
// ========================================
|
||
{
|
||
slug: 'phase-5-poc-session-1-summary',
|
||
updates: {
|
||
category: 'archived',
|
||
visibility: 'archived',
|
||
order: 999
|
||
}
|
||
},
|
||
{
|
||
slug: 'phase-5-poc-session-2-summary',
|
||
updates: {
|
||
category: 'archived',
|
||
visibility: 'archived',
|
||
order: 999
|
||
}
|
||
},
|
||
|
||
// All other Phase 2 documents - stay archived
|
||
// All session handoffs - stay archived
|
||
// Test reports - stay archived
|
||
// Blog outlines - stay archived
|
||
// Duplicate/superseded documents - stay archived
|
||
];
|
||
|
||
async function migrate() {
|
||
console.log('🔧 Starting comprehensive document categorization migration...');
|
||
console.log(` Database: ${DB_NAME}`);
|
||
console.log('');
|
||
|
||
const client = new MongoClient(MONGO_URI);
|
||
|
||
try {
|
||
await client.connect();
|
||
const db = client.db(DB_NAME);
|
||
const collection = db.collection('documents');
|
||
|
||
let updated = 0;
|
||
let notFound = 0;
|
||
let unchanged = 0;
|
||
|
||
for (const { slug, updates } of DOCUMENT_UPDATES) {
|
||
const result = await collection.updateOne(
|
||
{ slug },
|
||
{ $set: updates }
|
||
);
|
||
|
||
if (result.matchedCount === 0) {
|
||
console.log(` ⚠️ Document not found: ${slug}`);
|
||
notFound++;
|
||
} else if (result.modifiedCount === 0) {
|
||
console.log(` ℹ️ Already up to date: ${slug}`);
|
||
unchanged++;
|
||
} else {
|
||
console.log(` ✅ Updated: ${slug}`);
|
||
if (updates.title) {
|
||
console.log(` - title: ${updates.title}`);
|
||
}
|
||
console.log(` - category: ${updates.category}`);
|
||
console.log(` - visibility: ${updates.visibility}`);
|
||
console.log(` - order: ${updates.order}`);
|
||
updated++;
|
||
}
|
||
}
|
||
|
||
console.log('');
|
||
console.log('📊 Migration Summary:');
|
||
console.log(` ✅ Updated: ${updated}`);
|
||
console.log(` ℹ️ Unchanged: ${unchanged}`);
|
||
console.log(` ⚠️ Not found: ${notFound}`);
|
||
console.log('');
|
||
|
||
// Verification by category
|
||
console.log('🔍 Verification - Documents by Category:');
|
||
const publicDocs = await collection.find({ visibility: 'public' }).sort({ category: 1, order: 1 }).toArray();
|
||
|
||
const byCategory = {};
|
||
publicDocs.forEach(doc => {
|
||
if (!byCategory[doc.category]) {
|
||
byCategory[doc.category] = [];
|
||
}
|
||
byCategory[doc.category].push(doc);
|
||
});
|
||
|
||
Object.keys(byCategory).sort().forEach(cat => {
|
||
console.log(`\n ${cat}:`);
|
||
byCategory[cat].forEach(doc => {
|
||
console.log(` [${doc.order}] ${doc.title}`);
|
||
});
|
||
});
|
||
|
||
console.log('');
|
||
console.log('✨ Migration complete!');
|
||
|
||
} catch (error) {
|
||
console.error('❌ Migration failed:', error);
|
||
process.exit(1);
|
||
} finally {
|
||
await client.close();
|
||
}
|
||
}
|
||
|
||
migrate();
|