let d = import "../defaults.ncl" in d.make_mode String { id = "validate-content", trigger = "Validate bilingual content integrity: diff EN vs ES routes, verify content files exist for both languages, and check FTL translation-key parity. Enforces the bilingual-parity axiom.", preconditions = [ "code/site/config/routes/ contains language-specific route config files", "code/site/content/ exists", "rg (ripgrep) available on PATH", ], steps = [ { id = "diff-routes", action = "Compare EN and ES route configurations under code/site/config/routes/. Extract route paths from both language config files and report asymmetries (routes present in one language but not the other).", actor = 'Both, on_error = { strategy = 'Continue }, }, { id = "count-content", action = "Count content files per language and report any language whose count trails the other, with the specific gap. These become content-coverage publication blockers.", cmd = "for lang in en es; do printf '%s: ' \"$lang\"; find code/site/content/$lang -name '*.md' 2>/dev/null | wc -l; done", actor = 'Both, depends_on = [{ step = "diff-routes" }], on_error = { strategy = 'Continue }, }, { id = "diff-ftl-keys", action = "Compare Fluent FTL translation keys between EN and ES locales. Report keys present in one locale but missing in the other.", cmd = "diff <(rg '^[a-z]' code/site/i18n/locales/en/ -h --no-line-number 2>/dev/null | sort) <(rg '^[a-z]' code/site/i18n/locales/es/ -h --no-line-number 2>/dev/null | sort)", actor = 'Both, depends_on = [{ step = "diff-routes" }], on_error = { strategy = 'Continue }, }, { id = "report", action = "Generate a content integrity report: route symmetry, content-file completeness, FTL key coverage. Classify missing content as warnings and missing routes as errors against the bilingual-parity gate.", actor = 'Both, depends_on = [ { step = "count-content" }, { step = "diff-ftl-keys" }, ], on_error = { strategy = 'Stop }, }, ], }