#!/usr/bin/env node /** * Parse Architectural Safeguards Document into Sections * Updates database with section metadata for card-based rendering */ require('dotenv').config(); const fs = require('fs').promises; const path = require('path'); const { connect, close } = require('../src/utils/db.util'); const Document = require('../src/models/Document.model'); const { parseDocumentSections } = require('../src/utils/document-section-parser'); const { markdownToHtml } = require('../src/utils/markdown.util'); async function parseAndUpdateDocument() { try { console.log('\n=== Parsing Architectural Safeguards Document ===\n'); const mdPath = path.resolve('docs/research/ARCHITECTURAL-SAFEGUARDS-Against-LLM-Hierarchical-Dominance-Prose.md'); const slug = 'architectural-safeguards-against-llm-hierarchical-dominance-prose'; // Read markdown file console.log('šŸ“„ Reading markdown file...'); const rawContent = await fs.readFile(mdPath, 'utf-8'); // Parse into sections console.log('šŸ” Parsing document into sections...'); const sections = parseDocumentSections(rawContent); console.log(`āœ“ Found ${sections.length} sections`); // Convert each section's markdown to HTML console.log('šŸ”„ Converting sections to HTML...'); sections.forEach(section => { section.content_html = markdownToHtml(section.content); }); console.log('āœ“ Converted all sections to HTML'); // Connect to database await connect(); // Find existing document console.log('šŸ“Š Finding document in database...'); const doc = await Document.findBySlug(slug); if (!doc) { console.error('āŒ Error: Document not found in database'); await close(); process.exit(1); } console.log('āœ“ Found document'); // Update document with sections and move to getting-started console.log('šŸ’¾ Updating document with sections...'); const updated = await Document.update(doc._id, { sections: sections, category: 'getting-started', order: 2 // Prominently placed in getting-started }); if (!updated) { console.error('āŒ Error: Document update failed'); await close(); process.exit(1); } console.log('āœ“ Document updated successfully!'); console.log('\nšŸ“Š Document Details:'); console.log(` Title: ${doc.title}`); console.log(` Slug: ${doc.slug}`); console.log(` Category: getting-started (moved from research-theory)`); console.log(` Order: 2`); console.log(` Sections: ${sections.length}`); console.log('\nšŸ“‹ Section Breakdown:'); const categoryCounts = {}; sections.forEach(section => { categoryCounts[section.category] = (categoryCounts[section.category] || 0) + 1; }); Object.entries(categoryCounts).forEach(([category, count]) => { console.log(` ${category}: ${count} sections`); }); console.log('\nāœ… Document now has card-based rendering enabled!'); console.log(` View at: https://agenticgovernance.digital/docs.html?doc=${slug}`); await close(); } catch (error) { console.error('\nāŒ Update failed:', error.message); console.error(error.stack); process.exit(1); } } // Run if called directly if (require.main === module) { parseAndUpdateDocument(); } module.exports = parseAndUpdateDocument;