tractatus/scripts/migrate-value-pluralism-docs.js
TheFlow 0e6be3eaf1 refactor: remove website code and fix critical startup crashes (Phase 8)
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>
2025-10-21 22:17:02 +13:00

95 lines
2.5 KiB
JavaScript
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* Migration: Add visibility and order to value pluralism documents
*
* This migration ensures the 3 value pluralism documents are properly
* configured to display in the docs.html sidebar.
*/
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_prod';
const UPDATES = [
{
slug: 'value-pluralism-faq',
category: 'getting-started',
visibility: 'public',
order: 3
},
{
slug: 'pluralistic-values-research-foundations',
category: 'research-theory',
visibility: 'public',
order: 1
},
{
slug: 'pluralistic-values-deliberation-plan-v2',
category: 'technical-reference',
visibility: 'public',
order: 12
}
];
async function migrate() {
console.log('🔧 Starting value pluralism documents 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');
for (const update of UPDATES) {
const { slug, ...fields } = update;
const result = await collection.updateOne(
{ slug },
{ $set: fields }
);
if (result.matchedCount === 0) {
console.log(` ⚠️ Document not found: ${slug}`);
} else if (result.modifiedCount === 0) {
console.log(` Already up to date: ${slug}`);
} else {
console.log(` ✅ Updated: ${slug}`);
console.log(` - category: ${fields.category}`);
console.log(` - visibility: ${fields.visibility}`);
console.log(` - order: ${fields.order}`);
}
console.log('');
}
// Verify
console.log('🔍 Verification:');
const docs = await collection.find(
{ slug: { $in: UPDATES.map(u => u.slug) } },
{ projection: { slug: 1, category: 1, visibility: 1, order: 1, _id: 0 } }
).toArray();
docs.forEach(doc => {
console.log(` ${doc.slug}:`);
console.log(` category: ${doc.category}`);
console.log(` visibility: ${doc.visibility}`);
console.log(` order: ${doc.order}`);
});
console.log('');
console.log('✨ Migration complete!');
} catch (error) {
console.error('❌ Migration failed:', error);
process.exit(1);
} finally {
await client.close();
}
}
migrate();