#!/usr/bin/env node /** * Fix Category Mismatches Between Dev and Prod * * Harmonizes document categories to canonical values based on document content and purpose */ require('dotenv').config(); const { getDb } = require('../src/utils/db.util'); // Canonical category assignments (based on content analysis) const categoryFixes = { 'architectural-overview-and-research-status': 'research-theory', 'comparison-matrix-claude-code-claudemd-and-tractatus-framework': 'technical-reference', 'executive-brief-tractatus-based-llm-architecture-for-ai-safety': 'research-theory', 'pluralistic-values-research-foundations': 'advanced-topics' }; async function fixCategoryMismatches() { console.log('🔧 Fixing category mismatches...\n'); const db = await getDb(); const collection = db.collection('documents'); let fixedCount = 0; let notFoundCount = 0; for (const [slug, correctCategory] of Object.entries(categoryFixes)) { try { const doc = await collection.findOne({ slug }); if (!doc) { console.log(`⚠️ Not found: ${slug}`); notFoundCount++; continue; } if (doc.category === correctCategory) { console.log(`✓ Already correct: ${slug} (${correctCategory})`); continue; } // Update category await collection.updateOne( { slug }, { $set: { category: correctCategory, 'metadata.date_updated': new Date() } } ); console.log(`✅ Fixed: ${slug}`); console.log(` ${doc.category || 'none'} → ${correctCategory}\n`); fixedCount++; } catch (error) { console.error(`❌ Error fixing ${slug}:`, error.message); } } console.log('='.repeat(60)); console.log('📊 Summary:'); console.log('='.repeat(60)); console.log(`Total documents to fix: ${Object.keys(categoryFixes).length}`); console.log(`✅ Fixed: ${fixedCount}`); console.log(`⚠️ Not found: ${notFoundCount}`); console.log(`✓ Already correct: ${Object.keys(categoryFixes).length - fixedCount - notFoundCount}`); console.log('='.repeat(60)); process.exit(0); } // Run fix fixCategoryMismatches().catch(error => { console.error('❌ Fix failed:', error); process.exit(1); });