diff --git a/scripts/migrate-documents.js b/scripts/migrate-documents.js index 2fd1ad3a..b22d7ea7 100755 --- a/scripts/migrate-documents.js +++ b/scripts/migrate-documents.js @@ -167,10 +167,29 @@ async function processMarkdownFile(filePath, sourcePath) { slug.toLowerCase().includes(pattern) ); - // Check front matter for explicit public field - const isPublic = frontMatter.public !== undefined - ? frontMatter.public === true || frontMatter.public === 'true' - : !isInternal; // Default to public unless it matches internal patterns + // Determine visibility from front matter or default based on patterns + let visibility = frontMatter.visibility || null; + + if (!visibility) { + // Check for legacy public field + if (frontMatter.public !== undefined) { + const isPublic = frontMatter.public === true || frontMatter.public === 'true'; + visibility = isPublic ? 'public' : 'internal'; + } else { + // Default to internal if matches internal patterns, otherwise public + visibility = isInternal ? 'internal' : 'public'; + } + } + + // Validate visibility value + const validVisibility = ['public', 'internal', 'confidential', 'archived']; + if (!validVisibility.includes(visibility)) { + console.warn(`Invalid visibility '${visibility}' for ${filename}, defaulting to 'internal'`); + visibility = 'internal'; + } + + // Determine category from front matter or metadata type + const category = frontMatter.category || metadata.type || 'none'; // Build document object matching Document model schema const doc = { @@ -178,10 +197,11 @@ async function processMarkdownFile(filePath, sourcePath) { slug: slug, quadrant: metadata.quadrant, persistence: 'HIGH', // Default for technical documents + visibility: visibility, + category: category, content_html: htmlContent, content_markdown: content, toc: tableOfContents, - public: isPublic, metadata: { author: metadata.author, version: metadata.version,