i18n(i18n-specific): 🌐 Add stricter locale validation rules for translation files

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Lilith 2026-03-03 16:16:15 -08:00
parent bd6bbe8ecf
commit b43abb0d0f

View file

@ -13,7 +13,8 @@
*/
import { readdirSync, readFileSync, existsSync } from 'node:fs';
import { resolve, join, basename } from 'node:path';
import { resolve, join, basename, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
// ---------------------------------------------------------------------------
// Output helpers (CLI script — direct stdout/stderr writes)
@ -31,7 +32,8 @@ function logError(text: string): void {
// Constants
// ---------------------------------------------------------------------------
const ROOT = resolve(import.meta.dirname, '..');
const __dirname = dirname(fileURLToPath(import.meta.url));
const ROOT = resolve(__dirname, '..');
const DOMAINS_DIR = join(ROOT, 'deployments', '@domains');
type Severity = 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
@ -190,6 +192,12 @@ function checkCrossDomainContamination(domain: string, filePath: string, data: u
if (brand === 'Lilith' && ownBrand.toLowerCase().includes('lilith')) continue;
// Allow "marketplace-about-lilith" type files that discuss the parent platform
if (fileName.includes('about-lilith')) continue;
// Allow navigation keys that reference other brands (cross-brand nav is intentional)
if (key.startsWith('navigation.')) continue;
// Allow multi-brand feature pages that intentionally list all brands
if (fileName.includes('multi-brand')) continue;
// Allow comparison/competitor pages that reference sibling brands
if (fileName.includes('compare') || fileName.includes('landing-features')) continue;
issues.push({
severity: 'HIGH',