diff --git a/.githooks/verify-browser.js b/.githooks/verify-browser.js index 6f4c28c72..e05e5d904 100755 --- a/.githooks/verify-browser.js +++ b/.githooks/verify-browser.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-C6, F-C1 * @purpose-statement Verifies browser availability for Puppeteer-based integration tests - * @pipeline manual — legacy browser validator invoked by .githooks/verify.sh when run directly + * @pipeline manual — developer tool * @usage node .githooks/verify-browser.js [flags] */ /** diff --git a/.githooks/verify.sh b/.githooks/verify.sh index be2d306fc..da267e207 100755 --- a/.githooks/verify.sh +++ b/.githooks/verify.sh @@ -6,7 +6,7 @@ # @owner docs # @needs E-C6, F-C1 # @purpose-statement Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files -# @pipeline manual — legacy pre-commit sub-hook retained for on-demand verification +# @pipeline manual — developer tool # @usage bash .githooks/verify.sh [flags] # Verification script for pre-commit hook # Runs various validation checks on staged files diff --git a/docs-guide/indexes/scripts-index.mdx b/docs-guide/indexes/scripts-index.mdx index 5a6386b88..24b8099b5 100644 --- a/docs-guide/indexes/scripts-index.mdx +++ b/docs-guide/indexes/scripts-index.mdx @@ -135,7 +135,7 @@ Run command: node tests/unit/script-docs.test.js --write --rebuild-indexes | `tools/scripts/dev/update-all-og-images.js` | Bulk OG image updater — updates og:image across all v2 pages | `node tools/scripts/dev/update-all-og-images.js [flags]` | docs | | `tools/scripts/dev/update-og-image.js` | Single OG image updater — updates og:image for one page | `node tools/scripts/dev/update-og-image.js [flags]` | docs | | `tools/scripts/docs-quality-and-freshness-audit.js` | Content freshness audit — checks for TODO/TBD/Coming Soon markers, thin pages, stale content | `node tools/scripts/docs-quality-and-freshness-audit.js [flags]` | docs | -| `tools/scripts/enforce-generated-file-banners.js` | Enforce standardized hidden/visible generated banners and frontmatter across generated MDX outputs. | `* node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged` | docs | +| `tools/scripts/enforce-generated-file-banners.js` | * @pipeline P1, P3 | `* node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged` | docs | | `tools/scripts/enforcers/pr/check-component-immutability.js` | Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label. | `node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main` | docs | | `tools/scripts/enforcers/pr/check-pr-template.js` | Enforces that PR descriptions include required change and rationale sections before merge | `PR_BODY="..." node tools/scripts/enforcers/pr/check-pr-template.js` | docs | | `tools/scripts/generate-ai-sitemap.js` | AI sitemap generator — produces AI-optimised sitemap files. Dual-mode: --check (enforcer) / --write (generator). | `node tools/scripts/generate-ai-sitemap.js [flags]` | docs | diff --git a/tasks/reports/repo-ops/REPAIR_REPORT_LATEST.json b/tasks/reports/repo-ops/REPAIR_REPORT_LATEST.json index 0c8735904..cdb6a90f6 100644 --- a/tasks/reports/repo-ops/REPAIR_REPORT_LATEST.json +++ b/tasks/reports/repo-ops/REPAIR_REPORT_LATEST.json @@ -1,21 +1,21 @@ { - "date": "2026-03-10T10:30:25.786Z", - "mode": "dry-run", + "date": "2026-03-12T04:28:50.746Z", + "mode": "fix", "strict": false, "pre_repair": { - "total_scripts": 210, + "total_scripts": 216, "grade_A": 0, - "grade_B": 53, - "grade_C": 156, + "grade_B": 75, + "grade_C": 140, "grade_F": 1, - "pipeline_mismatches": 34, + "pipeline_mismatches": 9, "not_in_json": 0, "phantom_json": 0 }, "repairs_applied": { - "json_phantoms_removed": 16, + "json_phantoms_removed": 0, "json_entries_added": 0, - "json_entries_updated": 210, + "json_entries_updated": 0, "headers_category_added": 0, "headers_purpose_added": 0, "headers_owner_added": 0, @@ -24,28 +24,15 @@ "headers_scope_added": 0, "headers_needs_added": 0, "headers_purpose_statement_added": 0, - "headers_pipeline_corrected": 55, + "headers_pipeline_corrected": 54, "indexes_regenerated": true, - "total_fixes": 281, + "total_fixes": 108, "files_modified": [ - ".githooks/script-index.md", ".githooks/verify-browser.js", ".githooks/verify.sh", - ".github/script-index.md", - "docs-guide/indexes/scripts-index.md", "docs-guide/indexes/scripts-index.mdx", - "snippets/automations/script-index.md", - "tasks/reports/script-classifications.json", - "tasks/scripts/script-index.md", - "tests/run-all.js", - "tests/script-index.md", - "tests/unit/audit-script-inventory-repair-rules.test.js", - "tests/unit/component-governance-generators.test.js", "tests/unit/component-governance-utils.test.js", "tests/unit/components/TEMPLATE.test.js", - "tests/unit/repair-governance.test.js", - "tools/config/script-index.md", - "tools/lib/component-governance-utils.js", "tools/lib/docs-index-utils.js", "tools/lib/docs-usefulness/config-validator.js", "tools/lib/docs-usefulness/journey-check.js", @@ -68,11 +55,9 @@ "tools/lib/generated-file-banners.js", "tools/lib/script-governance-config.js", "tools/lib/script-header-utils.js", - "tools/lib/script-index.md", "tools/notion/install-local-sync-hook.sh", "tools/notion/local-post-commit-sync.sh", "tools/notion/remove-local-sync-hook.sh", - "tools/notion/script-index.md", "tools/script-index.md", "tools/scripts/add-framework-headers.js", "tools/scripts/audit-tasks-folders.js", @@ -114,9 +99,7 @@ "tools/scripts/i18n/test/mdx-translate.test.js", "tools/scripts/i18n/test/provenance.test.js", "tools/scripts/i18n/test/provider-openrouter.test.js", - "tools/scripts/mint-dev.sh", "tools/scripts/new-script.js", - "tools/scripts/orchestrators/repair-governance.js", "tools/scripts/publish-v2-internal-reports.js", "tools/scripts/remediators/assets/migrate-assets-to-branch.js", "tools/scripts/remediators/components/repair-component-metadata.js", @@ -141,12 +124,12 @@ ] }, "post_repair": { - "total_scripts": 210, + "total_scripts": 216, "grade_A": 0, - "grade_B": 53, - "grade_C": 156, + "grade_B": 75, + "grade_C": 140, "grade_F": 1, - "pipeline_mismatches": 34, + "pipeline_mismatches": 8, "not_in_json": 0, "phantom_json": 0 }, @@ -196,29 +179,25 @@ { "path": ".github/scripts/fetch-forum-data.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { "path": ".github/scripts/fetch-ghost-blog-data.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { "path": ".github/scripts/fetch-youtube-data.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { "path": ".github/scripts/project-showcase-sync.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -245,28 +224,14 @@ "@scope" ] }, - { - "path": "tests/integration/openapi-reference-audit.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, { "path": "tests/integration/v2-link-audit.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tests/integration/v2-link-audit.selftest.js", "missing": [ "@scope" ] }, { - "path": "tests/integration/v2-wcag-audit.js", + "path": "tests/integration/v2-link-audit.selftest.js", "missing": [ "@scope" ] @@ -277,24 +242,6 @@ "@scope" ] }, - { - "path": "tests/run-all.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/run-pr-checks.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tests/unit/audit-script-inventory-repair-rules.test.js", - "missing": [ - "@scope" - ] - }, { "path": "tests/unit/codex-commit.test.js", "missing": [ @@ -325,12 +272,6 @@ "@scope" ] }, - { - "path": "tests/unit/component-governance-generators.test.js", - "missing": [ - "@scope" - ] - }, { "path": "tests/unit/component-governance-utils.test.js", "missing": [ @@ -356,9 +297,8 @@ ] }, { - "path": "tests/unit/docs-navigation.test.js", + "path": "tests/unit/docs-path-sync.test.js", "missing": [ - "@scope", "@pipeline" ] }, @@ -368,12 +308,6 @@ "@scope" ] }, - { - "path": "tests/unit/lpd-scoped-mint-dev.test.js", - "missing": [ - "@scope" - ] - }, { "path": "tests/unit/mdx-component-runtime-smoke.test.js", "missing": [ @@ -428,12 +362,6 @@ "@scope" ] }, - { - "path": "tests/unit/repair-governance.test.js", - "missing": [ - "@scope" - ] - }, { "path": "tests/unit/repair-spelling.test.js", "missing": [ @@ -464,30 +392,12 @@ "@scope" ] }, - { - "path": "tests/unit/v2-link-audit.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/v2-wcag-audit.test.js", - "missing": [ - "@scope" - ] - }, { "path": "tests/unit/validate-codex-task-contract.test.js", "missing": [ "@scope" ] }, - { - "path": "tests/utils/file-walker.js", - "missing": [ - "@scope" - ] - }, { "path": "tests/utils/mdx-parser.js", "missing": [ @@ -551,8 +461,7 @@ { "path": "tools/scripts/audit-component-usage.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -582,8 +491,7 @@ { "path": "tools/scripts/check-codex-pr-overlap.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -643,8 +551,7 @@ { "path": "tools/scripts/component-layout-governance.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -689,12 +596,6 @@ "@scope" ] }, - { - "path": "tools/scripts/dev/generate-mint-dev-scope.js", - "missing": [ - "@scope" - ] - }, { "path": "tools/scripts/dev/replace-og-image.py", "missing": [ @@ -734,8 +635,7 @@ { "path": "tools/scripts/docs-quality-and-freshness-audit.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -748,12 +648,6 @@ "@purpose-statement" ] }, - { - "path": "tools/scripts/enforcers/pr/check-component-immutability.js", - "missing": [ - "@pipeline" - ] - }, { "path": "tools/scripts/enforcers/pr/check-pr-template.js", "missing": [ @@ -763,8 +657,7 @@ { "path": "tools/scripts/generate-ai-sitemap.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -800,15 +693,13 @@ { "path": "tools/scripts/generate-docs-index.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { "path": "tools/scripts/generate-llms-files.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -820,8 +711,7 @@ { "path": "tools/scripts/i18n/generate-localized-docs-json.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -941,19 +831,11 @@ { "path": "tools/scripts/i18n/translate-docs.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { "path": "tools/scripts/i18n/validate-generated.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/mint-dev.sh", "missing": [ "@scope" ] @@ -964,12 +846,6 @@ "@scope" ] }, - { - "path": "tools/scripts/orchestrators/repair-governance.js", - "missing": [ - "@pipeline" - ] - }, { "path": "tools/scripts/publish-v2-internal-reports.js", "missing": [ @@ -994,6 +870,12 @@ "@scope" ] }, + { + "path": "tools/scripts/remediators/content/sync-docs-paths.js", + "missing": [ + "@pipeline" + ] + }, { "path": "tools/scripts/repo-audit-orchestrator.js", "missing": [ @@ -1015,8 +897,7 @@ { "path": "tools/scripts/snippets/fetch-external-docs.sh", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -1052,8 +933,7 @@ { "path": "tools/scripts/snippets/generate-seo.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -1065,8 +945,7 @@ { "path": "tools/scripts/style-and-language-homogenizer-en-gb.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { @@ -1078,27 +957,13 @@ { "path": "tools/scripts/test-v2-pages.js", "missing": [ - "@scope", - "@pipeline" + "@scope" ] }, { "path": "tools/scripts/validate-codex-task-contract.js", "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/validators/components/check-component-css.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/validators/components/check-component-docs.js", - "missing": [ - "@pipeline" + "@scope" ] }, { @@ -1114,15 +979,9 @@ ] }, { - "path": "tools/scripts/validators/content/check-anchor-usage.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/content/check-description-quality.js", + "path": "tools/scripts/validators/content/check-docs-path-sync.js", "missing": [ - "@scope" + "@pipeline" ] }, { @@ -1143,24 +1002,12 @@ "@scope" ] }, - { - "path": "tools/scripts/validators/content/check-page-endings.js", - "missing": [ - "@scope" - ] - }, { "path": "tools/scripts/validators/content/check-proper-nouns.js", "missing": [ "@scope" ] }, - { - "path": "tools/scripts/validators/governance/audit-script-inventory.js", - "missing": [ - "@pipeline" - ] - }, { "path": "tools/scripts/validators/governance/check-agent-docs-freshness.js", "missing": [ @@ -1186,12 +1033,12 @@ ] } ], - "verification": "SKIPPED (dry-run)", + "verification": "PASS", "warnings": [], "improvement": { "grade_A_delta": "+0", "grade_F_delta": "+0", - "fixes_applied": 281, - "remaining_human_items": 168 + "fixes_applied": 108, + "remaining_human_items": 149 } } diff --git a/tasks/reports/repo-ops/REPAIR_REPORT_LATEST.md b/tasks/reports/repo-ops/REPAIR_REPORT_LATEST.md index 772e8d0b7..03822e0d5 100644 --- a/tasks/reports/repo-ops/REPAIR_REPORT_LATEST.md +++ b/tasks/reports/repo-ops/REPAIR_REPORT_LATEST.md @@ -1,23 +1,23 @@ # Governance Repair Report -- Date: 2026-03-10T10:30:25.786Z -- Mode: dry-run -- Verification: SKIPPED (dry-run) +- Date: 2026-03-12T04:28:50.746Z +- Mode: fix +- Verification: PASS ## Pre Repair -- Total scripts: 210 -- Grade A/B/C/F: 0/53/156/1 -- Pipeline mismatches: 34 +- Total scripts: 216 +- Grade A/B/C/F: 0/75/140/1 +- Pipeline mismatches: 9 - Not in JSON: 0 - Phantom JSON: 0 ## Repairs Applied -- Total fixes: 281 -- JSON phantoms removed: 16 +- Total fixes: 108 +- JSON phantoms removed: 0 - JSON entries added: 0 -- JSON entries updated: 210 +- JSON entries updated: 0 - Header category added: 0 - Header purpose added: 0 - Header owner added: 0 @@ -26,29 +26,16 @@ - Header scope added: 0 - Header needs added: 0 - Header purpose-statement added: 0 -- Header pipeline corrected: 55 +- Header pipeline corrected: 54 - Indexes regenerated: true ### Files Modified -- .githooks/script-index.md - .githooks/verify-browser.js - .githooks/verify.sh -- .github/script-index.md -- docs-guide/indexes/scripts-index.md - docs-guide/indexes/scripts-index.mdx -- snippets/automations/script-index.md -- tasks/reports/script-classifications.json -- tasks/scripts/script-index.md -- tests/run-all.js -- tests/script-index.md -- tests/unit/audit-script-inventory-repair-rules.test.js -- tests/unit/component-governance-generators.test.js - tests/unit/component-governance-utils.test.js - tests/unit/components/TEMPLATE.test.js -- tests/unit/repair-governance.test.js -- tools/config/script-index.md -- tools/lib/component-governance-utils.js - tools/lib/docs-index-utils.js - tools/lib/docs-usefulness/config-validator.js - tools/lib/docs-usefulness/journey-check.js @@ -71,11 +58,9 @@ - tools/lib/generated-file-banners.js - tools/lib/script-governance-config.js - tools/lib/script-header-utils.js -- tools/lib/script-index.md - tools/notion/install-local-sync-hook.sh - tools/notion/local-post-commit-sync.sh - tools/notion/remove-local-sync-hook.sh -- tools/notion/script-index.md - tools/script-index.md - tools/scripts/add-framework-headers.js - tools/scripts/audit-tasks-folders.js @@ -117,9 +102,7 @@ - tools/scripts/i18n/test/mdx-translate.test.js - tools/scripts/i18n/test/provenance.test.js - tools/scripts/i18n/test/provider-openrouter.test.js -- tools/scripts/mint-dev.sh - tools/scripts/new-script.js -- tools/scripts/orchestrators/repair-governance.js - tools/scripts/publish-v2-internal-reports.js - tools/scripts/remediators/assets/migrate-assets-to-branch.js - tools/scripts/remediators/components/repair-component-metadata.js @@ -144,9 +127,9 @@ ## Post Repair -- Total scripts: 210 -- Grade A/B/C/F: 0/53/156/1 -- Pipeline mismatches: 34 +- Total scripts: 216 +- Grade A/B/C/F: 0/75/140/1 +- Pipeline mismatches: 8 - Not in JSON: 0 - Phantom JSON: 0 @@ -159,35 +142,28 @@ - .githooks/server-manager.js: @scope - .githooks/verify-browser.js: @scope - .githooks/verify.sh: @scope -- .github/scripts/fetch-forum-data.js: @scope, @pipeline -- .github/scripts/fetch-ghost-blog-data.js: @scope, @pipeline -- .github/scripts/fetch-youtube-data.js: @scope, @pipeline -- .github/scripts/project-showcase-sync.js: @scope, @pipeline +- .github/scripts/fetch-forum-data.js: @scope +- .github/scripts/fetch-ghost-blog-data.js: @scope +- .github/scripts/fetch-youtube-data.js: @scope +- .github/scripts/project-showcase-sync.js: @scope - tasks/scripts/audit-python.py: @scope - tests/integration/browser.test.js: @scope - tests/integration/domain-pages-audit.js: @scope - tests/integration/mdx-component-runtime-smoke.js: @scope -- tests/integration/openapi-reference-audit.js: @scope, @pipeline -- tests/integration/v2-link-audit.js: @scope, @pipeline +- tests/integration/v2-link-audit.js: @scope - tests/integration/v2-link-audit.selftest.js: @scope -- tests/integration/v2-wcag-audit.js: @scope - tests/integration/v2-wcag-audit.selftest.js: @scope -- tests/run-all.js: @scope -- tests/run-pr-checks.js: @pipeline -- tests/unit/audit-script-inventory-repair-rules.test.js: @scope - tests/unit/codex-commit.test.js: @scope - tests/unit/codex-safe-merge-with-stash.test.js: @scope - tests/unit/codex-skill-sync.test.js: @scope - tests/unit/codex-task-cleanup.test.js: @scope - tests/unit/codex-task-preflight.test.js: @scope -- tests/unit/component-governance-generators.test.js: @scope - tests/unit/component-governance-utils.test.js: @scope - tests/unit/components/TEMPLATE.test.js: @scope - tests/unit/create-codex-pr.test.js: @scope - tests/unit/docs-guide-sot.test.js: @scope -- tests/unit/docs-navigation.test.js: @scope, @pipeline +- tests/unit/docs-path-sync.test.js: @pipeline - tests/unit/links-imports.test.js: @scope -- tests/unit/lpd-scoped-mint-dev.test.js: @scope - tests/unit/mdx-component-runtime-smoke.test.js: @scope - tests/unit/mdx-component-scope.test.js: @scope - tests/unit/mdx-guards.test.js: @scope @@ -197,16 +173,12 @@ - tests/unit/openapi-reference-audit.test.js: @scope - tests/unit/openapi-rolling-issue.test.js: @scope - tests/unit/quality.test.js: @scope -- tests/unit/repair-governance.test.js: @scope - tests/unit/repair-spelling.test.js: @scope - tests/unit/repo-audit-pipeline.test.js: @scope - tests/unit/script-docs.test.js: @scope - tests/unit/spelling.test.js: @scope - tests/unit/style-guide.test.js: @scope -- tests/unit/v2-link-audit.test.js: @scope -- tests/unit/v2-wcag-audit.test.js: @scope - tests/unit/validate-codex-task-contract.test.js: @scope -- tests/utils/file-walker.js: @scope - tests/utils/mdx-parser.js: @scope - tests/utils/mintignore.js: @scope - tests/utils/openapi-rolling-issue.js: @scope @@ -217,12 +189,12 @@ - tools/lib/load-minimatch.js: @scope - tools/scripts/add-pagetype-mechanical.js: @scope - tools/scripts/assign-purpose-metadata.js: @scope -- tools/scripts/audit-component-usage.js: @scope, @pipeline +- tools/scripts/audit-component-usage.js: @scope - tools/scripts/audit-media-assets.js: @scope - tools/scripts/audit-scripts.js: @scope - tools/scripts/audit-tasks-folders.js: @scope - tools/scripts/audit-v2-usefulness.js: @scope -- tools/scripts/check-codex-pr-overlap.js: @scope, @pipeline +- tools/scripts/check-codex-pr-overlap.js: @scope - tools/scripts/check-no-ai-stash.sh: @scope - tools/scripts/cleanup-quarantine-manager.js: @scope - tools/scripts/codex-commit.js: @scope @@ -232,7 +204,7 @@ - tools/scripts/codex/task-finalize.js: @scope - tools/scripts/codex/task-preflight.js: @scope - tools/scripts/codex/validate-locks.js: @scope -- tools/scripts/component-layout-governance.js: @scope, @pipeline +- tools/scripts/component-layout-governance.js: @scope - tools/scripts/convert-rss-to-mdx.js: @scope - tools/scripts/create-codex-pr.js: @scope - tools/scripts/cross-agent-packager.js: @scope @@ -240,27 +212,25 @@ - tools/scripts/dev/add-callouts.js: @scope - tools/scripts/dev/batch-update-og-image.sh: @scope - tools/scripts/dev/ensure-mint-watcher-patch.sh: @scope -- tools/scripts/dev/generate-mint-dev-scope.js: @scope - tools/scripts/dev/replace-og-image.py: @scope - tools/scripts/dev/seo-generator-safe.js: @scope - tools/scripts/dev/test-add-callouts.js: @scope - tools/scripts/dev/test-seo-generator.js: @scope - tools/scripts/dev/update-all-og-images.js: @scope - tools/scripts/dev/update-og-image.js: @scope -- tools/scripts/docs-quality-and-freshness-audit.js: @scope, @pipeline +- tools/scripts/docs-quality-and-freshness-audit.js: @scope - tools/scripts/enforce-generated-file-banners.js: @category, @purpose, @scope, @needs, @purpose-statement -- tools/scripts/enforcers/pr/check-component-immutability.js: @pipeline - tools/scripts/enforcers/pr/check-pr-template.js: @scope -- tools/scripts/generate-ai-sitemap.js: @scope, @pipeline +- tools/scripts/generate-ai-sitemap.js: @scope - tools/scripts/generate-component-docs.js: @pipeline - tools/scripts/generate-component-registry.js: @pipeline - tools/scripts/generate-content-gap-reconciliation.js: @scope - tools/scripts/generate-docs-guide-indexes.js: @scope - tools/scripts/generate-docs-guide-pages-index.js: @scope -- tools/scripts/generate-docs-index.js: @scope, @pipeline -- tools/scripts/generate-llms-files.js: @scope, @pipeline +- tools/scripts/generate-docs-index.js: @scope +- tools/scripts/generate-llms-files.js: @scope - tools/scripts/generate-pages-index.js: @scope -- tools/scripts/i18n/generate-localized-docs-json.js: @scope, @pipeline +- tools/scripts/i18n/generate-localized-docs-json.js: @scope - tools/scripts/i18n/lib/common.js: @scope - tools/scripts/i18n/lib/config.js: @scope - tools/scripts/i18n/lib/docs-json-localizer.js: @scope @@ -280,42 +250,36 @@ - tools/scripts/i18n/test/mdx-translate.test.js: @scope - tools/scripts/i18n/test/provenance.test.js: @scope - tools/scripts/i18n/test/provider-openrouter.test.js: @scope -- tools/scripts/i18n/translate-docs.js: @scope, @pipeline -- tools/scripts/i18n/validate-generated.js: @scope, @pipeline -- tools/scripts/mint-dev.sh: @scope +- tools/scripts/i18n/translate-docs.js: @scope +- tools/scripts/i18n/validate-generated.js: @scope - tools/scripts/new-script.js: @scope -- tools/scripts/orchestrators/repair-governance.js: @pipeline - tools/scripts/publish-v2-internal-reports.js: @scope - tools/scripts/remediators/assets/migrate-assets-to-branch.js: @pipeline - tools/scripts/remediators/components/repair-component-metadata.js: @pipeline - tools/scripts/remediators/content/repair-mdx-safe-markdown.js: @scope +- tools/scripts/remediators/content/sync-docs-paths.js: @pipeline - tools/scripts/repo-audit-orchestrator.js: @scope - tools/scripts/scan-component-imports.js: @pipeline - tools/scripts/script-footprint-and-usage-audit.js: @scope -- tools/scripts/snippets/fetch-external-docs.sh: @scope, @pipeline +- tools/scripts/snippets/fetch-external-docs.sh: @scope - tools/scripts/snippets/fetch-lpt-exchanges.sh: @scope - tools/scripts/snippets/fetch-openapi-specs.sh: @scope - tools/scripts/snippets/generate-api-docs.sh: @scope - tools/scripts/snippets/generate-data/scripts/generate-glossary.js: @scope - tools/scripts/snippets/generate-data/scripts/terminology-search.js: @scope -- tools/scripts/snippets/generate-seo.js: @scope, @pipeline +- tools/scripts/snippets/generate-seo.js: @scope - tools/scripts/snippets/test-scripts.sh: @scope -- tools/scripts/style-and-language-homogenizer-en-gb.js: @scope, @pipeline +- tools/scripts/style-and-language-homogenizer-en-gb.js: @scope - tools/scripts/sync-codex-skills.js: @scope -- tools/scripts/test-v2-pages.js: @scope, @pipeline -- tools/scripts/validate-codex-task-contract.js: @scope, @pipeline -- tools/scripts/validators/components/check-component-css.js: @pipeline -- tools/scripts/validators/components/check-component-docs.js: @pipeline +- tools/scripts/test-v2-pages.js: @scope +- tools/scripts/validate-codex-task-contract.js: @scope - tools/scripts/validators/components/check-mdx-component-scope.js: @scope - tools/scripts/validators/components/check-naming-conventions.js: @scope -- tools/scripts/validators/content/check-anchor-usage.js: @scope -- tools/scripts/validators/content/check-description-quality.js: @scope +- tools/scripts/validators/content/check-docs-path-sync.js: @pipeline - tools/scripts/validators/content/check-double-headers.js: @scope - tools/scripts/validators/content/check-grammar-en-gb.js: @scope - tools/scripts/validators/content/check-mdx-safe-markdown.js: @scope -- tools/scripts/validators/content/check-page-endings.js: @scope - tools/scripts/validators/content/check-proper-nouns.js: @scope -- tools/scripts/validators/governance/audit-script-inventory.js: @pipeline - tools/scripts/validators/governance/check-agent-docs-freshness.js: @scope - tools/scripts/verify-pay-orc-gate-finalize.sh: @scope - tools/scripts/verify/.verify-large-change.sh: @scope @@ -325,6 +289,6 @@ - Grade A delta: +0 - Grade F delta: +0 -- Fixes applied: 281 -- Remaining human items: 168 +- Fixes applied: 108 +- Remaining human items: 149 diff --git a/tasks/reports/repo-ops/SCRIPT_INVENTORY_FULL.json b/tasks/reports/repo-ops/SCRIPT_INVENTORY_FULL.json index 725aad5c6..9b5333e57 100644 --- a/tasks/reports/repo-ops/SCRIPT_INVENTORY_FULL.json +++ b/tasks/reports/repo-ops/SCRIPT_INVENTORY_FULL.json @@ -1,37 +1,37 @@ { - "generated_at": "2026-03-10T10:30:25.722Z", - "mode": "dry-run", + "generated_at": "2026-03-12T04:28:50.703Z", + "mode": "audit", "output_dir": "tasks/reports/repo-ops", "summary": { - "total_scripts": 210, + "total_scripts": 216, "by_trigger": { "Unmanaged": 0, - "Orphaned": 23, - "P1": 32, - "P2": 1, - "P3": 2, - "P5": 0, - "P6": 0, - "Indirect": 63, - "Manual": 89 + "Orphaned": 3, + "P1": 34, + "P2": 9, + "P3": 3, + "P5": 7, + "P6": 5, + "Indirect": 65, + "Manual": 90 }, "grade_distribution": { "A": 0, - "B": 53, - "C": 156, + "B": 75, + "C": 140, "F": 1 }, "pipeline_verification": { - "MATCH": 176, - "MISMATCH": 34, + "MATCH": 208, + "MISMATCH": 8, "MISSING": 0 }, "classification_sync": { - "in_json": 210, + "in_json": 216, "not_in_json": 0, "phantom": 0 }, - "output_chain_count": 1 + "output_chain_count": 0 }, "groups": { "Unmanaged": { @@ -43,45 +43,43 @@ "label": "Orphaned", "scripts": [ { - "path": "tools/scripts/snippets/generate-seo.js", - "script": "generate-seo", + "path": "tools/scripts/generate-component-docs.js", + "script": "generate-component-docs", "category": "generator", - "purpose": "feature:seo", - "scope": "tools/scripts", + "purpose": "governance:index-management", + "scope": "generated-output", "owner": "docs", - "needs": "E-R19, F-R7", - "purpose_statement": "SEO generator — generates SEO metadata (title, description, keywords) for v2 pages from content analysis", - "pipeline_declared": "P6 (on-demand, SEO refresh)", - "usage": "node tools/scripts/snippets/generate-seo.js [flags]", - "header": "/**\n * @script generate-seo\n * @category generator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement SEO generator — generates SEO metadata (title, description, keywords) for v2 pages from content analysis\n * @pipeline P6 (on-demand, SEO refresh)\n * @usage node tools/scripts/snippets/generate-seo.js [flags]\n */", + "needs": "R-R10", + "purpose_statement": "Generates published component library MDX pages from the registry. Replaces update-component-library.sh.", + "pipeline_declared": "P6 (on-demand)", + "usage": "node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ]", + "header": "/**\n * @script generate-component-docs\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10\n * @purpose-statement Generates published component library MDX pages from the registry. Replaces update-component-library.sh.\n * @pipeline P6 (on-demand)\n * @usage node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "generate-seo" - }, - { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "generate-seo:dry-run" + "type": "script", + "caller": "tests/unit/component-governance-generators.test.js", + "pipeline": "indirect" } ], "outputs": [ { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "output_path": "tools/scripts/.editorial-cache.json", + "type": "generated-output", + "call": "writeFileSync" + }, + { + "output_path": "tools/scripts/update-component-library.sh", + "type": "generated-output", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "tools/scripts/.editorial-cache.json, tools/scripts/update-component-library.sh", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -90,43 +88,36 @@ "pipeline_verified": "MISMATCH:phantom claim P6", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: generate-seo); manual (npm script: generate-seo:dry-run)", - "grade": "C", + "pipeline_actual": "indirect via tests/unit/component-governance-generators.test.js", + "grade": "B", "flags": [ - "invalid-scope", "phantom-pipeline" ], "trigger_group": "Orphaned" }, { - "path": "tools/scripts/i18n/generate-localized-docs-json.js", - "script": "generate-localized-docs-json", - "category": "generator", - "purpose": "feature:translation", - "scope": "docs.json, tools/scripts/i18n", + "path": "tools/scripts/remediators/assets/migrate-assets-to-branch.js", + "script": "migrate-assets-to-branch", + "category": "remediator", + "purpose": "governance:repo-health", + "scope": "full-repo", "owner": "docs", - "needs": "F-R6, F-R7", - "purpose_statement": "Locale docs.json generator — produces localised docs.json variants from route-map and source docs.json", - "pipeline_declared": "P6 (on-demand, translation pipeline)", - "usage": "node tools/scripts/i18n/generate-localized-docs-json.js [flags]", - "header": "/**\n * @script generate-localized-docs-json\n * @category generator\n * @purpose feature:translation\n * @scope docs.json, tools/scripts/i18n\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Locale docs.json generator — produces localised docs.json variants from route-map and source docs.json\n * @pipeline P6 (on-demand, translation pipeline)\n * @usage node tools/scripts/i18n/generate-localized-docs-json.js [flags]\n */", + "needs": "R-R14", + "purpose_statement": "Reads the media-audit manifest, migrates flagged assets to docs-v2-assets, and rewrites MDX/JSX references to raw GitHub URLs.", + "pipeline_declared": "P6 (on-demand)", + "usage": "node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run", + "header": "/**\n * @script migrate-assets-to-branch\n * @category remediator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14\n * @purpose-statement Reads the media-audit manifest, migrates flagged assets to docs-v2-assets, and rewrites MDX/JSX references to raw GitHub URLs.\n * @pipeline P6 (on-demand)\n * @dualmode --dry-run (show what would change) | --write (execute migration)\n * @usage node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/test/cli-guardrails.test.js", + "caller": "tests/unit/migrate-assets-to-branch.test.js", "pipeline": "indirect" - }, - { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "i18n:docs-json" } ], "outputs": [ @@ -145,131 +136,152 @@ "pipeline_verified": "MISMATCH:phantom claim P6", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/test/cli-guardrails.test.js; manual (npm script: i18n:docs-json)", - "grade": "C", + "pipeline_actual": "indirect via tests/unit/migrate-assets-to-branch.test.js", + "grade": "B", "flags": [ - "invalid-scope", "phantom-pipeline" ], "trigger_group": "Orphaned" }, { - "path": "tools/scripts/i18n/translate-docs.js", - "script": "translate-docs", - "category": "generator", - "purpose": "feature:translation", - "scope": "tools/scripts/i18n, docs.json, v2", + "path": "tools/scripts/validators/content/check-docs-path-sync.js", + "script": "check-docs-path-sync", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "staged", "owner": "docs", - "needs": "F-R6, F-R7", - "purpose_statement": "Translation generator — translates v2 MDX pages to target languages via OpenRouter API", - "pipeline_declared": "P6 (on-demand, translation pipeline)", - "usage": "node tools/scripts/i18n/translate-docs.js [flags]", - "header": "/**\n * @script translate-docs\n * @category generator\n * @purpose feature:translation\n * @scope tools/scripts/i18n, docs.json, v2\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Translation generator — translates v2 MDX pages to target languages via OpenRouter API\n * @pipeline P6 (on-demand, translation pipeline)\n * @usage node tools/scripts/i18n/translate-docs.js [flags]\n */", + "needs": "E-C1, R-R14", + "purpose_statement": "Docs path sync validator — detects staged page moves that require docs.json or governed path reference rewrites.", + "pipeline_declared": "P1, P6", + "usage": "node tools/scripts/validators/content/check-docs-path-sync.js --staged", + "header": "/**\n * @script check-docs-path-sync\n * @category validator\n * @purpose qa:repo-health\n * @scope staged\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Docs path sync validator — detects staged page moves that require docs.json or governed path reference rewrites.\n * @pipeline P1, P6\n * @dualmode --check (validator) | --json (machine-readable report)\n * @usage node tools/scripts/validators/content/check-docs-path-sync.js --staged\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/test/cli-guardrails.test.js", + "caller": "tests/unit/docs-path-sync.test.js", "pipeline": "indirect" - }, - { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "i18n:translate" } ], "outputs": [ { - "output_path": "", + "output_path": "stdout", "type": "stdout", - "call": "writeJson" + "call": "console" } ], - "outputs_display": "", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MISMATCH:phantom claim P1, P6", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/test/cli-guardrails.test.js; manual (npm script: i18n:translate)", - "grade": "C", + "pipeline_actual": "indirect via tests/unit/docs-path-sync.test.js", + "grade": "B", "flags": [ - "invalid-scope", "phantom-pipeline" ], "trigger_group": "Orphaned" - }, + } + ], + "count": 3 + }, + "P1": { + "label": "P1 - Commit gate", + "scripts": [ { - "path": "tools/scripts/i18n/validate-generated.js", - "script": "validate-generated", - "category": "validator", - "purpose": "feature:translation", - "scope": "tools/scripts/i18n, v2", + "path": "tools/scripts/enforce-generated-file-banners.js", + "script": "enforce-generated-file-banners", + "category": "* @purpose", + "purpose": "* @scope tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js", + "scope": "tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js", "owner": "docs", - "needs": "F-R6, F-R7", - "purpose_statement": "Generated localisation validator — checks generated translated MDX files and route-map outputs for integrity", - "pipeline_declared": "P6", - "usage": "node tools/scripts/i18n/validate-generated.js [flags]", - "header": "/**\n * @script validate-generated\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts/i18n, v2\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Generated localisation validator — checks generated translated MDX files and route-map outputs for integrity\n * @pipeline P6\n * @usage node tools/scripts/i18n/validate-generated.js [flags]\n */", + "needs": "* @purpose-statement", + "purpose_statement": "* @pipeline P1, P3", + "pipeline_declared": "P1, P3", + "usage": "* node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged", + "header": "/**\n * @script enforce-generated-file-banners\n * @category \n * @purpose \n * @scope tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js\n * @owner docs\n * @needs \n * @purpose-statement \n * @pipeline P1, P3\n * @usage * node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, - "category_valid": true, - "purpose_valid": true, + "category_valid": false, + "purpose_valid": false, "scope_valid": false, "triggers": [ + { + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" + }, + { + "type": "script", + "caller": ".githooks/pre-commit", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/run-pr-checks.js", + "pipeline": "indirect" + }, { "type": "npm-script", - "caller": "tools/package.json", + "caller": "tests/package.json", "pipeline": "manual", - "script_name": "i18n:validate" + "script_name": "test:generated-banners" } ], "outputs": [ { - "output_path": "stdout", + "output_path": "", "type": "stdout", - "call": "console" + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "", "downstream_consumers": [], "downstream_display": "No", "in_json": true, - "category_match": true, - "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "category_match": false, + "purpose_match": false, + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: i18n:validate)", - "grade": "C", + "pipeline_actual": "P1 (pre-commit); P3 via run-pr-checks; indirect via .githooks/pre-commit; indirect via tests/run-pr-checks.js; manual (npm script: test:generated-banners)", + "grade": "F", "flags": [ + "invalid-category", + "invalid-purpose", "invalid-scope", - "phantom-pipeline" + "header-json-category-mismatch", + "header-json-purpose-mismatch" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/check-codex-pr-overlap.js", - "script": "check-codex-pr-overlap", + "path": "tools/scripts/check-no-ai-stash.sh", + "script": "check-no-ai-stash", "category": "enforcer", "purpose": "governance:agent-governance", - "scope": "tools/scripts, .github/workflows, codex PR governance", + "scope": "tools/scripts, .githooks/pre-commit", "owner": "docs", "needs": "R-R27, R-R30", - "purpose_statement": "PR enforcer — checks for conflicting codex PRs targeting the same files/branches", - "pipeline_declared": "P3 (PR, Track B)", - "usage": "node tools/scripts/check-codex-pr-overlap.js [flags]", - "header": "/**\n * @script check-codex-pr-overlap\n * @category enforcer\n * @purpose governance:agent-governance\n * @scope tools/scripts, .github/workflows, codex PR governance\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement PR enforcer — checks for conflicting codex PRs targeting the same files/branches\n * @pipeline P3 (PR, Track B)\n * @usage node tools/scripts/check-codex-pr-overlap.js [flags]\n */", + "purpose_statement": "AI stash enforcer — blocks push if AI temporary/stash files are present in working tree", + "pipeline_declared": "P1, P2", + "usage": "bash tools/scripts/check-no-ai-stash.sh [flags]", + "header": "# @script check-no-ai-stash\n# @category enforcer\n# @purpose governance:agent-governance\n# @scope tools/scripts, .githooks/pre-commit\n# @owner docs\n# @needs R-R27, R-R30\n# @purpose-statement AI stash enforcer — blocks push if AI temporary/stash files are present in working tree\n# @pipeline P1, P2\n# @usage bash tools/scripts/check-no-ai-stash.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -278,47 +290,50 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" - } - ], - "outputs": [ + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "type": "pre-push", + "caller": ".githooks/pre-push", + "pipeline": "P2" + }, + { + "type": "script", + "caller": ".githooks/pre-push", + "pipeline": "indirect" } ], - "outputs_display": "stdout only", + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P1 (pre-commit); P2 (pre-push); indirect via .githooks/pre-push", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/generate-ai-sitemap.js", - "script": "generate-ai-sitemap", - "category": "generator", - "purpose": "governance:index-management", - "scope": "tools/scripts, docs.json, v2", + "path": "tools/scripts/codex/validate-locks.js", + "script": "codex/validate-locks", + "category": "enforcer", + "purpose": "governance:agent-governance", + "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", "owner": "docs", - "needs": "R-R16, R-R17", - "purpose_statement": "AI sitemap generator — produces AI-optimised sitemap files. Dual-mode: --check (enforcer) / --write (generator).", - "pipeline_declared": "P2, P3, P6", - "usage": "node tools/scripts/generate-ai-sitemap.js [flags]", - "header": "/**\n * @script generate-ai-sitemap\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs.json, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement AI sitemap generator — produces AI-optimised sitemap files. Dual-mode: --check (enforcer) / --write (generator).\n * @pipeline P2, P3, P6\n * @dualmode --check (enforcer) | --write (generator)\n * @usage node tools/scripts/generate-ai-sitemap.js [flags]\n */", + "needs": "R-R27, R-R30", + "purpose_statement": "Codex lock validator — checks for stale or conflicting lock files before push", + "pipeline_declared": "P1 (commit), P2 (push)", + "usage": "node tools/scripts/codex/validate-locks.js [flags]", + "header": "/**\n * @script codex/validate-locks\n * @category enforcer\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex lock validator — checks for stale or conflicting lock files before push\n * @pipeline P1 (commit), P2 (push)\n * @usage node tools/scripts/codex/validate-locks.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -327,100 +342,56 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" - } - ], - "outputs": [ + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, { - "output_path": "tools/scripts/sitemap-ai.xml", - "type": "generated-output", - "call": "writeFileSync" - } - ], - "outputs_display": "tools/scripts/sitemap-ai.xml", - "downstream_consumers": [], - "downstream_display": "No", - "in_json": true, - "category_match": true, - "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3, P6", - "declared_pipeline_set": {}, - "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope", - "phantom-pipeline" - ], - "trigger_group": "Orphaned" - }, - { - "path": "tools/scripts/generate-component-docs.js", - "script": "generate-component-docs", - "category": "generator", - "purpose": "governance:index-management", - "scope": "generated-output", - "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Generates published component library MDX pages from the registry. Replaces update-component-library.sh.", - "pipeline_declared": "P6 (on-demand)", - "usage": "node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ]", - "header": "/**\n * @script generate-component-docs\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10\n * @purpose-statement Generates published component library MDX pages from the registry. Replaces update-component-library.sh.\n * @pipeline P6 (on-demand)\n * @usage node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ]\n */", - "header_field_count": 8, - "has_any_header": true, - "has_framework_header": true, - "category_valid": true, - "purpose_valid": true, - "scope_valid": true, - "triggers": [ + "type": "pre-push", + "caller": ".githooks/pre-push", + "pipeline": "P2" + }, { "type": "script", - "caller": "tests/unit/component-governance-generators.test.js", + "caller": ".githooks/pre-push", "pipeline": "indirect" } ], "outputs": [ { - "output_path": "tools/scripts/.editorial-cache.json", - "type": "generated-output", - "call": "writeFileSync" - }, - { - "output_path": "tools/scripts/update-component-library.sh", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tools/scripts/.editorial-cache.json, tools/scripts/update-component-library.sh", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/component-governance-generators.test.js", - "grade": "B", + "pipeline_actual": "P1 (pre-commit); P2 (pre-push); indirect via .githooks/pre-push", + "grade": "C", "flags": [ - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/generate-llms-files.js", - "script": "generate-llms-files", - "category": "generator", - "purpose": "governance:index-management", - "scope": "tools/scripts, docs.json, v2", + "path": "tools/scripts/validate-codex-task-contract.js", + "script": "validate-codex-task-contract", + "category": "enforcer", + "purpose": "governance:agent-governance", + "scope": "tools/scripts, .codex/task-contract.yaml, tests/config/codex-issue-policy.json, .github/pull_request_template.md, .github/pull-request-template-v2.md", "owner": "docs", - "needs": "R-R16, R-R17", - "purpose_statement": "LLMs file generator — produces llms.txt and llms-full.txt for AI consumption. Dual-mode: --check / --write.", - "pipeline_declared": "P2, P3, P6", - "usage": "node tools/scripts/generate-llms-files.js [flags]", - "header": "/**\n * @script generate-llms-files\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs.json, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement LLMs file generator — produces llms.txt and llms-full.txt for AI consumption. Dual-mode: --check / --write.\n * @pipeline P2, P3, P6\n * @dualmode --check (enforcer) | --write (generator)\n * @usage node tools/scripts/generate-llms-files.js [flags]\n */", + "needs": "R-R27, R-R30", + "purpose_statement": "Codex task contract enforcer — validates branch naming, task files, PR body, and issue state for codex branches", + "pipeline_declared": "P1 (commit), P2 (push), P3 (PR, Track B)", + "usage": "node tools/scripts/validate-codex-task-contract.js [flags]", + "header": "/**\n * @script validate-codex-task-contract\n * @category enforcer\n * @purpose governance:agent-governance\n * @scope tools/scripts, .codex/task-contract.yaml, tests/config/codex-issue-policy.json, .github/pull_request_template.md, .github/pull-request-template-v2.md\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex task contract enforcer — validates branch naming, task files, PR body, and issue state for codex branches\n * @pipeline P1 (commit), P2 (push), P3 (PR, Track B)\n * @usage node tools/scripts/validate-codex-task-contract.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -429,68 +400,30 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" - } - ], - "outputs": [ + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, { - "output_path": "", - "type": "stdout", - "call": "writeFileSync" + "type": "pre-push", + "caller": ".githooks/pre-push", + "pipeline": "P2" }, { - "output_path": "tools/scripts/llms.txt", - "type": "generated-output", - "call": "writeFile" + "type": "workflow-pr", + "caller": ".github/workflows/codex-governance.yml", + "workflow": "Codex Governance", + "pipeline": "P3" }, { - "output_path": "tools/scripts/llms-full.txt", - "type": "generated-output", - "call": "writeFile" - } - ], - "outputs_display": ", tools/scripts/llms.txt, tools/scripts/llms-full.txt", - "downstream_consumers": [], - "downstream_display": "No", - "in_json": true, - "category_match": true, - "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3, P6", - "declared_pipeline_set": {}, - "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope", - "phantom-pipeline" - ], - "trigger_group": "Orphaned" - }, - { - "path": "tools/scripts/enforcers/pr/check-component-immutability.js", - "script": "check-component-immutability", - "category": "enforcer", - "purpose": "governance:repo-health", - "scope": "changed", - "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label.", - "pipeline_declared": "P2, P3", - "usage": "node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main", - "header": "/**\n * @script check-component-immutability\n * @category enforcer\n * @purpose governance:repo-health\n * @scope changed\n * @owner docs\n * @needs R-R10\n * @purpose-statement Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label.\n * @pipeline P2, P3\n * @usage node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main\n */", - "header_field_count": 8, - "has_any_header": true, - "has_framework_header": true, - "category_valid": true, - "purpose_valid": true, - "scope_valid": true, - "triggers": [ + "type": "script", + "caller": ".githooks/pre-commit", + "pipeline": "indirect" + }, { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "script", + "caller": ".githooks/pre-push", + "pipeline": "indirect" } ], "outputs": [ @@ -506,28 +439,28 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", - "grade": "B", + "pipeline_actual": "P1 (pre-commit); P2 (pre-push); P3 (Codex Governance); indirect via .githooks/pre-commit; indirect via .githooks/pre-push", + "grade": "C", "flags": [ - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/orchestrators/repair-governance.js", - "script": "repair-governance", - "category": "orchestrator", - "purpose": "governance:repo-health", - "scope": "full-repo", + "path": "tools/scripts/generate-component-registry.js", + "script": "generate-component-registry", + "category": "generator", + "purpose": "governance:index-management", + "scope": "single-domain", "owner": "docs", - "needs": "R-R14, R-R18, R-C6", - "purpose_statement": "Chains audit, safe repair, verification, and reporting into a single self-healing governance pipeline.", - "pipeline_declared": "P5 (scheduled, weekly), P6 (on-demand), manual", - "usage": "node tools/scripts/orchestrators/repair-governance.js [--dry-run] [--auto-commit] [--report-only] [--strict]", - "header": "/**\n * @script repair-governance\n * @category orchestrator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Chains audit, safe repair, verification, and reporting into a single self-healing governance pipeline.\n * @pipeline P5 (scheduled, weekly), P6 (on-demand), manual\n * @dualmode --report-only | --dry-run | default fix mode\n * @usage node tools/scripts/orchestrators/repair-governance.js [--dry-run] [--auto-commit] [--report-only] [--strict]\n */", + "needs": "R-R10", + "purpose_statement": "Parses JSDoc from all component exports and produces component-registry.json.", + "pipeline_declared": "P1, P2, P3", + "usage": "node tools/scripts/generate-component-registry.js [--validate-only]", + "header": "/**\n * @script generate-component-registry\n * @category generator\n * @purpose governance:index-management\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Parses JSDoc from all component exports and produces component-registry.json.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/generate-component-registry.js [--validate-only]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -535,53 +468,93 @@ "purpose_valid": true, "scope_valid": true, "triggers": [ + { + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" + }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, { "type": "script", - "caller": "tests/unit/repair-governance.test.js", + "caller": ".githooks/pre-commit", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/component-governance-generators.test.js", "pipeline": "indirect" }, { "type": "npm-script", "caller": "tools/package.json", "pipeline": "manual", - "script_name": "repair:governance" + "script_name": "registry:components" } ], "outputs": [ { - "output_path": "", - "type": "stdout", - "call": "writeFileSync" + "output_path": "tools/scripts/component-registry.json", + "type": "generated-output", + "call": "writeJson" + }, + { + "output_path": "tools/scripts/component-registry-schema.json", + "type": "generated-output", + "call": "writeJson" } ], - "outputs_display": "", + "outputs_display": "tools/scripts/component-registry.json, tools/scripts/component-registry-schema.json", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MISMATCH:undeclared automation P5, P6", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/repair-governance.test.js; manual (npm script: repair:governance)", + "pipeline_actual": "P1 (pre-commit); P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite); P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js; manual (npm script: registry:components)", "grade": "B", "flags": [ - "phantom-pipeline" + "undeclared-automation" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/remediators/assets/migrate-assets-to-branch.js", - "script": "migrate-assets-to-branch", - "category": "remediator", - "purpose": "governance:repo-health", - "scope": "full-repo", + "path": "tools/scripts/generate-docs-guide-components-index.js", + "script": "generate-docs-guide-components-index", + "category": "generator", + "purpose": "governance:index-management", + "scope": "generated-output", "owner": "docs", - "needs": "R-R14", - "purpose_statement": "Reads the media-audit manifest, migrates flagged assets to docs-v2-assets, and rewrites MDX/JSX references to raw GitHub URLs.", - "pipeline_declared": "P6 (on-demand)", - "usage": "node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run", - "header": "/**\n * @script migrate-assets-to-branch\n * @category remediator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14\n * @purpose-statement Reads the media-audit manifest, migrates flagged assets to docs-v2-assets, and rewrites MDX/JSX references to raw GitHub URLs.\n * @pipeline P6 (on-demand)\n * @dualmode --dry-run (show what would change) | --write (execute migration)\n * @usage node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run\n */", + "needs": "R-R10, R-R16, R-R17", + "purpose_statement": "Generates components-index.mdx in docs-guide/indexes/ from component-registry.json and component-usage-map.json.", + "pipeline_declared": "P1 (commit — auto-regenerated when components staged)", + "usage": "node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check]", + "header": "/**\n * @script generate-docs-guide-components-index\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10, R-R16, R-R17\n * @purpose-statement Generates components-index.mdx in docs-guide/indexes/ from component-registry.json and component-usage-map.json.\n * @pipeline P1 (commit — auto-regenerated when components staged)\n * @usage node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -589,9 +562,14 @@ "purpose_valid": true, "scope_valid": true, "triggers": [ + { + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, { "type": "script", - "caller": "tests/unit/migrate-assets-to-branch.test.js", + "caller": ".githooks/pre-commit", "pipeline": "indirect" } ], @@ -608,28 +586,26 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/migrate-assets-to-branch.test.js", + "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit", "grade": "B", - "flags": [ - "phantom-pipeline" - ], - "trigger_group": "Orphaned" + "flags": [], + "trigger_group": "P1" }, { - "path": ".github/scripts/fetch-forum-data.js", - "script": "fetch-forum-data", - "category": "automation", - "purpose": "infrastructure:data-feeds", - "scope": ".github/scripts", + "path": "tools/scripts/generate-docs-index.js", + "script": "generate-docs-index", + "category": "generator", + "purpose": "governance:index-management", + "scope": "tools/scripts, tools/lib, v2, docs.json, root", "owner": "docs", - "needs": "F-R1", - "purpose_statement": "Fetches latest topics and posts from Livepeer Forum API, writes to snippets/automations/forum/", - "pipeline_declared": "P5, P6", - "usage": "node .github/scripts/fetch-forum-data.js [flags]", - "header": "/**\n * @script fetch-forum-data\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope .github/scripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement Fetches latest topics and posts from Livepeer Forum API, writes to snippets/automations/forum/\n * @pipeline P5, P6\n * @usage node .github/scripts/fetch-forum-data.js [flags]\n */", + "needs": "R-R16, R-R17", + "purpose_statement": "Docs index generator — produces docs-index.json from v2 frontmatter and docs.json. Dual-mode: --check (enforcer) / --write (generator). Most-called script in the repo.", + "pipeline_declared": "P1, P2, P3, P6", + "usage": "node tools/scripts/generate-docs-index.js [flags]", + "header": "/**\n * @script generate-docs-index\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, tools/lib, v2, docs.json, root\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Docs index generator — produces docs-index.json from v2 frontmatter and docs.json. Dual-mode: --check (enforcer) / --write (generator). Most-called script in the repo.\n * @pipeline P1, P2, P3, P6\n * @dualmode --check (enforcer) | --write (generator)\n * @usage node tools/scripts/generate-docs-index.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -638,52 +614,97 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/check-docs-index.yml", + "workflow": "Check Docs Index", + "pipeline": "P2" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/generate-docs-index.yml", + "workflow": "Generate Docs Index", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/check-docs-index.yml", + "workflow": "Check Docs Index", + "pipeline": "P3" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/check-docs-index.yml", + "workflow": "Check Docs Index", + "pipeline": "P6" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/generate-docs-index.yml", + "workflow": "Generate Docs Index", + "pipeline": "P6" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" + }, + { + "type": "script", + "caller": ".githooks/pre-commit", + "pipeline": "indirect" } ], "outputs": [ { - "output_path": ".github/scripts/snippets/automations/forum", - "type": "directory", - "call": "mkdirSync" + "output_path": "tools/scripts/docs-index.json", + "type": "generated-output", + "call": "writeFileSync" }, { - "output_path": ".github/scripts/snippets/automations/forum/forumData.jsx", + "output_path": "tools/scripts/missing-frontmatter.md", "type": "generated-output", "call": "writeFileSync" + }, + { + "output_path": "", + "type": "stdout", + "call": "writeFileSync" } ], - "outputs_display": ".github/scripts/snippets/automations/forum, .github/scripts/snippets/automations/forum/forumData.jsx", + "outputs_display": "tools/scripts/docs-index.json, tools/scripts/missing-frontmatter.md, ", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P1 (pre-commit); P2 (Check Docs Index); P2 (Generate Docs Index); P3 (Check Docs Index); P6 (Check Docs Index); P6 (Generate Docs Index); P6 (Docs Translation Pipeline); indirect via .githooks/pre-commit", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": ".github/scripts/fetch-ghost-blog-data.js", - "script": "fetch-ghost-blog-data", - "category": "automation", - "purpose": "infrastructure:data-feeds", - "scope": ".github/scripts", + "path": "tools/scripts/generate-pages-index.js", + "script": "generate-pages-index", + "category": "generator", + "purpose": "governance:index-management", + "scope": "tools/scripts, v2", "owner": "docs", - "needs": "F-R1", - "purpose_statement": "Fetches blog posts from Ghost CMS API, writes to snippets/automations/blog/", - "pipeline_declared": "P5, P6", - "usage": "node .github/scripts/fetch-ghost-blog-data.js [flags]", - "header": "/**\n * @script fetch-ghost-blog-data\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope .github/scripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement Fetches blog posts from Ghost CMS API, writes to snippets/automations/blog/\n * @pipeline P5, P6\n * @usage node .github/scripts/fetch-ghost-blog-data.js [flags]\n */", + "needs": "R-R16, R-R17", + "purpose_statement": "Pages index generator — generates and verifies section-style index.mdx files for v2 docs folders plus root aggregate index", + "pipeline_declared": "P1", + "usage": "node tools/scripts/generate-pages-index.js [flags]", + "header": "/**\n * @script generate-pages-index\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Pages index generator — generates and verifies section-style index.mdx files for v2 docs folders plus root aggregate index\n * @pipeline P1\n * @dualmode --check (enforcer) | --write (generator)\n * @usage node tools/scripts/generate-pages-index.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -692,112 +713,179 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "script", + "caller": "tests/run-all.js", + "pipeline": "indirect" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:pages-index" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:pages-index:write" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:pages-index:rebuild" } ], "outputs": [ { - "output_path": ".github/scripts/snippets/automations/blog", - "type": "directory", - "call": "mkdirSync" - }, - { - "output_path": ".github/scripts/snippets/automations/blog/ghostBlogData.jsx", - "type": "generated-output", + "output_path": "", + "type": "stdout", "call": "writeFileSync" } ], - "outputs_display": ".github/scripts/snippets/automations/blog, .github/scripts/snippets/automations/blog/ghostBlogData.jsx", + "outputs_display": "", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P1 (pre-commit); P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:pages-index); manual (npm script: test:pages-index:write); manual (npm script: test:pages-index:rebuild)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": ".github/scripts/fetch-youtube-data.js", - "script": "fetch-youtube-data", - "category": "automation", - "purpose": "infrastructure:data-feeds", - "scope": ".github/scripts", + "path": "tools/scripts/scan-component-imports.js", + "script": "scan-component-imports", + "category": "generator", + "purpose": "governance:index-management", + "scope": "generated-output", "owner": "docs", - "needs": "F-R1", - "purpose_statement": "Fetches video data from YouTube Data API, writes to snippets/automations/youtube/", - "pipeline_declared": "P5, P6", - "usage": "node .github/scripts/fetch-youtube-data.js [flags]", - "header": "/**\n * @script fetch-youtube-data\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope .github/scripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement Fetches video data from YouTube Data API, writes to snippets/automations/youtube/\n * @pipeline P5, P6\n * @usage node .github/scripts/fetch-youtube-data.js [flags]\n */", + "needs": "R-R10", + "purpose_statement": "Scans MDX imports to produce component-usage-map.json and detect @usedIn drift.", + "pipeline_declared": "P6", + "usage": "node tools/scripts/scan-component-imports.js [--verify]", + "header": "/**\n * @script scan-component-imports\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10\n * @purpose-statement Scans MDX imports to produce component-usage-map.json and detect @usedIn drift.\n * @pipeline P6\n * @usage node tools/scripts/scan-component-imports.js [--verify]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, + { + "type": "script", + "caller": ".githooks/pre-commit", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/component-governance-generators.test.js", + "pipeline": "indirect" } ], "outputs": [ { - "output_path": ".github/scripts/snippets/automations/youtube/youtubeData.jsx", + "output_path": "tools/scripts/component-usage-map.json", "type": "generated-output", "call": "writeFileSync" } ], - "outputs_display": ".github/scripts/snippets/automations/youtube/youtubeData.jsx", + "outputs_display": "tools/scripts/component-usage-map.json", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MISMATCH:undeclared automation P1, P5", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", - "grade": "C", + "pipeline_actual": "P1 (pre-commit); P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js", + "grade": "B", "flags": [ - "invalid-scope", - "phantom-pipeline" + "undeclared-automation" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": ".github/scripts/project-showcase-sync.js", - "script": "project-showcase-sync", - "category": "automation", - "purpose": "infrastructure:data-feeds", - "scope": ".github/scripts", + "path": "tools/scripts/remediators/components/repair-component-metadata.js", + "script": "repair-component-metadata", + "category": "remediator", + "purpose": "governance:repo-health", + "scope": "single-domain", "owner": "docs", - "needs": "F-R1", - "purpose_statement": "Fetches project showcase data from external source, writes to snippets/automations/showcase/", - "pipeline_declared": "P5, P6", - "usage": "node .github/scripts/project-showcase-sync.js [flags]", - "header": "/**\n * @script project-showcase-sync\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope .github/scripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement Fetches project showcase data from external source, writes to snippets/automations/showcase/\n * @pipeline P5, P6\n * @usage node .github/scripts/project-showcase-sync.js [flags]\n */", + "needs": "R-R10", + "purpose_statement": "Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components.", + "pipeline_declared": "P1 (commit — runs when components staged), P6 (on-demand)", + "usage": "node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged]", + "header": "/**\n * @script repair-component-metadata\n * @category remediator\n * @purpose governance:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components.\n * @pipeline P1 (commit — runs when components staged), P6 (on-demand)\n * @usage node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, + { + "type": "script", + "caller": ".githooks/pre-commit", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/component-governance-generators.test.js", + "pipeline": "indirect" } ], "outputs": [ @@ -813,116 +901,100 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MISMATCH:undeclared automation P5", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", - "grade": "C", + "pipeline_actual": "P1 (pre-commit); P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js", + "grade": "B", "flags": [ - "invalid-scope", - "phantom-pipeline" + "undeclared-automation" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/snippets/fetch-external-docs.sh", - "script": "fetch-external-docs", - "category": "automation", - "purpose": "infrastructure:data-feeds", - "scope": "tools/scripts", - "owner": "docs", - "needs": "F-R1", - "purpose_statement": "External docs fetcher — pulls doc fragments from external GitHub repos into snippets/data/ for inclusion in builds", - "pipeline_declared": "P2, P3", - "usage": "bash tools/scripts/snippets/fetch-external-docs.sh [flags]", - "header": "# @script fetch-external-docs\n# @category automation\n# @purpose infrastructure:data-feeds\n# @scope tools/scripts\n# @owner docs\n# @needs F-R1\n# @purpose-statement External docs fetcher — pulls doc fragments from external GitHub repos into snippets/data/ for inclusion in builds\n# @pipeline P2, P3\n# @usage bash tools/scripts/snippets/fetch-external-docs.sh [flags]\n# Pre-build script to fetch external markdown files\n# Run this before building the docs to ensure external content is up-to-date\n# Sanitizes markdown to be MDX-compatible", + "path": "tools/scripts/validators/governance/audit-script-inventory.js", + "script": "audit-script-inventory", + "category": "validator", + "purpose": "governance:repo-health", + "scope": "full-repo", + "owner": "docs", + "needs": "R-R14, R-R18, R-C6", + "purpose_statement": "Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category.", + "pipeline_declared": "P1 (commit), indirect", + "usage": "node tools/scripts/validators/governance/audit-script-inventory.js [--json] [--md] [--output ] [--verbose]", + "header": "/**\n * @script audit-script-inventory\n * @category validator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category.\n * @pipeline P1 (commit), indirect\n * @usage node tools/scripts/validators/governance/audit-script-inventory.js [--json] [--md] [--output ] [--verbose]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ + { + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, { "type": "script", - "caller": "tools/scripts/mint-dev.sh", + "caller": ".githooks/pre-commit", "pipeline": "indirect" }, { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "fetch-docs" + "type": "script", + "caller": "tests/unit/audit-script-inventory-repair-rules.test.js", + "pipeline": "indirect" }, { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "prebuild" + "type": "script", + "caller": "tools/scripts/validators/governance/review-governance-repair-checklist.js", + "pipeline": "indirect" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs": [ + { + "output_path": "", + "type": "stdout", + "call": "writeFileSync" + } + ], + "outputs_display": "", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/mint-dev.sh; manual (npm script: fetch-docs); manual (npm script: prebuild)", - "grade": "C", - "flags": [ - "invalid-scope", - "phantom-pipeline" - ], - "trigger_group": "Orphaned" + "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/audit-script-inventory-repair-rules.test.js; indirect via tools/scripts/validators/governance/review-governance-repair-checklist.js", + "grade": "B", + "flags": [], + "trigger_group": "P1" }, { - "path": "tests/run-pr-checks.js", - "script": "run-pr-checks", + "path": ".githooks/pre-commit", + "script": "pre-commit", "category": "orchestrator", "purpose": "infrastructure:pipeline-orchestration", - "scope": "changed", + "scope": ".githooks", "owner": "docs", "needs": "R-R29", - "purpose_statement": "PR orchestrator — runs changed-file scoped validation checks for pull request CI. Dispatches per-file validators based on PR diff.", - "pipeline_declared": "P2, P3", - "usage": "node tests/run-pr-checks.js [flags]", - "header": "/**\n * @script run-pr-checks\n * @category orchestrator\n * @purpose infrastructure:pipeline-orchestration\n * @scope changed\n * @owner docs\n * @needs R-R29\n * @purpose-statement PR orchestrator — runs changed-file scoped validation checks for pull request CI. Dispatches per-file validators based on PR diff.\n * @pipeline P2, P3\n * @usage node tests/run-pr-checks.js [flags]\n */", + "purpose_statement": "Pre-commit hook orchestrator — runs structural checks, unit tests, codex validation, and docs-index freshness check before allowing commit", + "pipeline_declared": "P1 (commit, hook entry point)", + "usage": "bash .githooks/pre-commit [flags]", + "header": "# @script pre-commit\n# @category orchestrator\n# @purpose infrastructure:pipeline-orchestration\n# @scope .githooks\n# @owner docs\n# @needs R-R29\n# @purpose-statement Pre-commit hook orchestrator — runs structural checks, unit tests, codex validation, and docs-index freshness check before allowing commit\n# @pipeline P1 (commit, hook entry point)\n# @usage bash .githooks/pre-commit [flags]\n# Pre-commit hook to enforce style guide compliance\n# Checks for common violations before allowing commits\n#\n# To install this hook, run:\n# cp .githooks/pre-commit .git/hooks/pre-commit\n# chmod +x .git/hooks/pre-commit\n#\n# Bypass flags (use sparingly):\n# SKIP_STRUCTURE_CHECK=1 - Skip root directory and snippets structure checks\n# SKIP_STYLE_CHECK=1 - Skip style guide compliance checks\n# SKIP_VERIFICATION=1 - Skip verification scripts\n# SKIP_TESTS=1 - Skip test suite\n# SKIP_ALL=1 - Skip all checks (use with extreme caution)\n#\n# Human-only override flags:\n# --trailer \"allowlist-edit=true\" - Allow editing .allowlist file (HUMANS ONLY - AIs must never use this)\n# ALLOWLIST_EDIT=1 - Legacy fallback for automation contexts\n# --trailer \"allow-deletions=true\" - Allow file deletions (HUMANS ONLY - AIs must never use this)\n# ALLOW_DELETIONS=1 - Legacy fallback for automation contexts", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { - "type": "script", - "caller": "tests/unit/create-codex-pr.test.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/unit/usefulness-rubric.test.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/unit/validate-codex-task-contract.test.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/codex/task-preflight.js", - "pipeline": "indirect" - }, - { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:pr" + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" } ], "outputs": [ @@ -938,83 +1010,114 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/create-codex-pr.test.js; indirect via tests/unit/usefulness-rubric.test.js; indirect via tests/unit/validate-codex-task-contract.test.js; indirect via tools/scripts/codex/task-preflight.js; manual (npm script: test:pr)", - "grade": "B", + "pipeline_actual": "P1 (pre-commit)", + "grade": "C", "flags": [ - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/docs-quality-and-freshness-audit.js", - "script": "docs-quality-and-freshness-audit", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tools/scripts, v2, tasks/reports/quality-accessibility", + "path": "tests/run-all.js", + "script": "run-all", + "category": "orchestrator", + "purpose": "infrastructure:pipeline-orchestration", + "scope": "full-repo", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Content freshness audit — checks for TODO/TBD/Coming Soon markers, thin pages, stale content", - "pipeline_declared": "P5, P6", - "usage": "node tools/scripts/docs-quality-and-freshness-audit.js [flags]", - "header": "/**\n * @script docs-quality-and-freshness-audit\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts, v2, tasks/reports/quality-accessibility\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Content freshness audit — checks for TODO/TBD/Coming Soon markers, thin pages, stale content\n * @pipeline P5, P6\n * @usage node tools/scripts/docs-quality-and-freshness-audit.js [flags]\n */", + "needs": "R-R29", + "purpose_statement": "Test orchestrator — dispatches all unit test suites. Called by pre-commit hook and npm test.", + "pipeline_declared": "P1, P2, P3", + "usage": "node tests/run-all.js [flags]", + "header": "/**\n * @script run-all\n * @category orchestrator\n * @purpose infrastructure:pipeline-orchestration\n * @scope full-repo\n * @owner docs\n * @needs R-R29\n * @purpose-statement Test orchestrator — dispatches all unit test suites. Called by pre-commit hook and npm test.\n * @pipeline P1, P2, P3\n * @usage node tests/run-all.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ + { + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2", + "via_script": "test" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P2", + "via_script": "test" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3", + "via_script": "test" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P3", + "via_script": "test" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test" + }, { "type": "npm-script", "caller": "tools/package.json", "pipeline": "manual", - "script_name": "audit:docs-quality" + "script_name": "test" } ], "outputs": [ { - "output_path": "tools/scripts/${STAGE_ID}.json", - "type": "generated-output", - "call": "writeFileSync" - }, - { - "output_path": "tools/scripts/${STAGE_ID}.md", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tools/scripts/${STAGE_ID}.json, tools/scripts/${STAGE_ID}.md", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: audit:docs-quality)", - "grade": "C", - "flags": [ - "invalid-scope", - "phantom-pipeline" - ], - "trigger_group": "Orphaned" + "pipeline_actual": "P1 (pre-commit); P2 (Docs CI - Content Quality Suite); P2 (Docs CI - V2 Browser Sweep); P3 (Docs CI - Content Quality Suite); P3 (Docs CI - V2 Browser Sweep); manual (npm script: test); manual (npm script: test)", + "grade": "B", + "flags": [], + "trigger_group": "P1" }, { - "path": "tools/scripts/audit-component-usage.js", - "script": "audit-component-usage", + "path": "tests/integration/browser.test.js", + "script": "browser.test", "category": "validator", - "purpose": "qa:repo-health", - "scope": "tools/scripts", + "purpose": "qa:content-quality", + "scope": "tests", "owner": "docs", - "needs": "E-C1, R-R14", - "purpose_statement": "Component usage auditor — scans pages for component usage patterns and reports statistics", - "pipeline_declared": "P5, P6", - "usage": "node tools/scripts/audit-component-usage.js [flags]", - "header": "/**\n * @script audit-component-usage\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Component usage auditor — scans pages for component usage patterns and reports statistics\n * @pipeline P5, P6\n * @usage node tools/scripts/audit-component-usage.js [flags]\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Puppeteer browser integration test — renders pages from docs.json and checks for console errors, load failures, and visual regressions", + "pipeline_declared": "P1", + "usage": "node tests/integration/browser.test.js [flags]", + "header": "/**\n * @script browser.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Puppeteer browser integration test — renders pages from docs.json and checks for console errors, load failures, and visual regressions\n * @pipeline P1\n * @dualmode dual-mode (document flags)\n * @usage node tests/integration/browser.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1023,102 +1126,153 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "script", + "caller": "tests/run-all.js", + "pipeline": "indirect" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:browser" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "test:browser" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "test:browser:all" } ], "outputs": [ { - "output_path": "tools/scripts/component-usage-audit.json", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tools/scripts/component-usage-audit.json", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:browser); manual (npm script: test:browser); manual (npm script: test:browser:all)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/component-layout-governance.js", - "script": "component-layout-governance", + "path": "tests/integration/v2-wcag-audit.js", + "script": "v2-wcag-audit", "category": "validator", - "purpose": "qa:repo-health", - "scope": "tools/scripts, v2, tools/config/component-layout-profile.json", + "purpose": "qa:content-quality", + "scope": "v2-content", "owner": "docs", - "needs": "E-C1, R-R14", - "purpose_statement": "Component layout governance validator — checks v2 page layouts against approved component contracts", - "pipeline_declared": "P5, P6", - "usage": "node tools/scripts/component-layout-governance.js [flags]", - "header": "/**\n * @script component-layout-governance\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, v2, tools/config/component-layout-profile.json\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Component layout governance validator — checks v2 page layouts against approved component contracts\n * @pipeline P5, P6\n * @usage node tools/scripts/component-layout-governance.js [flags]\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "WCAG accessibility audit for v2 pages — checks heading hierarchy, alt text, ARIA. Supports --fix mode for auto-repair.", + "pipeline_declared": "P1", + "usage": "node tests/integration/v2-wcag-audit.js [flags]", + "header": "/**\n * @script v2-wcag-audit\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement WCAG accessibility audit for v2 pages — checks heading hierarchy, alt text, ARIA. Supports --fix mode for auto-repair.\n * @pipeline P1\n * @usage node tests/integration/v2-wcag-audit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ + { + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "script", + "caller": "tests/integration/v2-wcag-audit.selftest.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/run-all.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/v2-wcag-audit.test.js", + "pipeline": "indirect" + }, { "type": "npm-script", - "caller": "tools/package.json", + "caller": "tests/package.json", "pipeline": "manual", - "script_name": "audit:component-layout" + "script_name": "test:wcag" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:wcag:staged" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:wcag:nofix" } ], "outputs": [ { - "output_path": "tools/scripts/${STAGE_ID}.json", - "type": "generated-output", - "call": "writeFileSync" - }, - { - "output_path": "tools/scripts/${STAGE_ID}.md", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tools/scripts/${STAGE_ID}.json, tools/scripts/${STAGE_ID}.md", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: audit:component-layout)", - "grade": "C", - "flags": [ - "invalid-scope", - "phantom-pipeline" - ], - "trigger_group": "Orphaned" + "pipeline_actual": "P1 (pre-commit); P1 via run-all; indirect via tests/integration/v2-wcag-audit.selftest.js; indirect via tests/run-all.js; indirect via tests/unit/v2-wcag-audit.test.js; manual (npm script: test:wcag); manual (npm script: test:wcag:staged); manual (npm script: test:wcag:nofix)", + "grade": "B", + "flags": [], + "trigger_group": "P1" }, { - "path": "tests/integration/openapi-reference-audit.js", - "script": "openapi-reference-audit", + "path": "tests/unit/mdx-guards.test.js", + "script": "mdx-guards.test", "category": "validator", - "purpose": "tooling:api-spec", - "scope": "tests/integration, v2, api, .github/workflows", + "purpose": "qa:content-quality", + "scope": "tests, v2/pages, snippets/pages, snippets/snippetsWiki", "owner": "docs", - "needs": "F-R17", - "purpose_statement": "Comprehensive OpenAPI spec validation — checks references, schemas, examples. Supports --strict (validate), --fix (repair), and report modes.", - "pipeline_declared": "P2, P3, P5, P6", - "usage": "node tests/integration/openapi-reference-audit.js [flags]", - "header": "/**\n * @script openapi-reference-audit\n * @category validator\n * @purpose tooling:api-spec\n * @scope tests/integration, v2, api, .github/workflows\n * @owner docs\n * @needs F-R17\n * @purpose-statement Comprehensive OpenAPI spec validation — checks references, schemas, examples. Supports --strict (validate), --fix (repair), and report modes.\n * @pipeline P2, P3, P5, P6\n * @dualmode --strict (enforcer) | --fix (remediator)\n * @usage node tests/integration/openapi-reference-audit.js [flags]\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Enforces MDX guardrails — globals imports, math delimiters, markdown table line breaks", + "pipeline_declared": "P1, P3", + "usage": "node tests/unit/mdx-guards.test.js [flags]", + "header": "/**\n * @script mdx-guards.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests, v2/pages, snippets/pages, snippets/snippetsWiki\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Enforces MDX guardrails — globals imports, math delimiters, markdown table line breaks\n * @pipeline P1, P3\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/mdx-guards.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1126,16 +1280,31 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" + }, { "type": "script", - "caller": "tests/unit/openapi-reference-audit.test.js", + "caller": "tests/run-all.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/run-pr-checks.js", "pipeline": "indirect" }, { "type": "npm-script", "caller": "tests/package.json", "pipeline": "manual", - "script_name": "test:openapi:audit" + "script_name": "test:mdx:guards" } ], "outputs": [ @@ -1151,29 +1320,28 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3, P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/openapi-reference-audit.test.js; manual (npm script: test:openapi:audit)", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:mdx:guards)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/style-and-language-homogenizer-en-gb.js", - "script": "style-and-language-homogenizer-en-gb", - "category": "remediator", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts, v2, tools/config/style-language-profile-en-gb.json", + "path": "tests/unit/mdx-safe-markdown.test.js", + "script": "mdx-safe-markdown.test", + "category": "validator", + "purpose": "qa:content-quality", + "scope": "tests/unit, tests/fixtures/mdx-safe-markdown, tools/lib, tools/scripts/remediators/content, tools/scripts/validators/content", "owner": "docs", - "needs": "E-C6, F-C1", - "purpose_statement": "EN-GB style homogeniser — finds and fixes American English spellings, style guide violations, and formatting inconsistencies across v2 content", - "pipeline_declared": "P6 (on-demand, repair)", - "usage": "node tools/scripts/style-and-language-homogenizer-en-gb.js [flags]", - "header": "/**\n * @script style-and-language-homogenizer-en-gb\n * @category remediator\n * @purpose tooling:dev-tools\n * @scope tools/scripts, v2, tools/config/style-language-profile-en-gb.json\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement EN-GB style homogeniser — finds and fixes American English spellings, style guide violations, and formatting inconsistencies across v2 content\n * @pipeline P6 (on-demand, repair)\n * @usage node tools/scripts/style-and-language-homogenizer-en-gb.js [flags]\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Fixture-driven unit tests for repo-wide MDX-safe markdown repair and validation helpers.", + "pipeline_declared": "P1 (commit, via run-all)", + "usage": "node tests/unit/mdx-safe-markdown.test.js", + "header": "/**\n * @script mdx-safe-markdown.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests/unit, tests/fixtures/mdx-safe-markdown, tools/lib, tools/scripts/remediators/content, tools/scripts/validators/content\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Fixture-driven unit tests for repo-wide MDX-safe markdown repair and validation helpers.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/mdx-safe-markdown.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1181,54 +1349,58 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "script", + "caller": "tests/run-all.js", + "pipeline": "indirect" + }, { "type": "npm-script", - "caller": "tools/package.json", + "caller": "tests/package.json", "pipeline": "manual", - "script_name": "audit:language-en-gb" + "script_name": "test:mdx:safe:unit" } ], "outputs": [ { - "output_path": "tools/scripts/${STAGE_ID}.json", - "type": "generated-output", - "call": "writeFileSync" - }, - { - "output_path": "tools/scripts/${STAGE_ID}.md", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tools/scripts/${STAGE_ID}.json, tools/scripts/${STAGE_ID}.md", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: audit:language-en-gb)", + "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:mdx:safe:unit)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P1" }, { - "path": "tools/scripts/test-v2-pages.js", - "script": "test-v2-pages", - "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts", + "path": "tests/unit/mdx.test.js", + "script": "mdx.test", + "category": "validator", + "purpose": "qa:content-quality", + "scope": "tests", "owner": "docs", - "needs": "E-C6, F-C1", - "purpose_statement": "V2 page tester — validates v2 pages via Puppeteer browser rendering", - "pipeline_declared": "P2, P3", - "usage": "node tools/scripts/test-v2-pages.js [flags]", - "header": "/**\n * @script test-v2-pages\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement V2 page tester — validates v2 pages via Puppeteer browser rendering\n * @pipeline P2, P3\n * @usage node tools/scripts/test-v2-pages.js [flags]\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Validates MDX syntax and structure — checks for parse errors, invalid JSX, broken components", + "pipeline_declared": "P1, P3", + "usage": "node tests/unit/mdx.test.js [flags]", + "header": "/**\n * @script mdx.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Validates MDX syntax and structure — checks for parse errors, invalid JSX, broken components\n * @pipeline P1, P3\n * @usage node tests/unit/mdx.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1237,85 +1409,83 @@ "scope_valid": false, "triggers": [ { - "type": "script", - "caller": "tests/integration/browser.test.js", - "pipeline": "indirect" + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" }, { "type": "script", - "caller": "tests/integration/v2-wcag-audit.js", + "caller": "tests/run-all.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tests/integration/v2-wcag-audit.selftest.js", + "caller": "tests/run-pr-checks.js", "pipeline": "indirect" }, { "type": "npm-script", - "caller": "tools/package.json", + "caller": "tests/package.json", "pipeline": "manual", - "script_name": "test:v2-pages" + "script_name": "test:mdx" }, { "type": "npm-script", "caller": "tools/package.json", "pipeline": "manual", - "script_name": "test:all-pages" + "script_name": "test:mdx" } ], "outputs": [ { - "output_path": "tools/scripts/v2-page-test-report.json", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tools/scripts/v2-page-test-report.json", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/integration/browser.test.js; indirect via tests/integration/v2-wcag-audit.js; indirect via tests/integration/v2-wcag-audit.selftest.js; manual (npm script: test:v2-pages); manual (npm script: test:all-pages)", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:mdx); manual (npm script: test:mdx)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" - } - ], - "count": 23 - }, - "P1": { - "label": "P1 - Commit gate", - "scripts": [ + "trigger_group": "P1" + }, { - "path": "tools/scripts/enforce-generated-file-banners.js", - "script": "enforce-generated-file-banners", - "category": "", - "purpose": "", - "scope": "tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js", + "path": "tests/unit/quality.test.js", + "script": "quality.test", + "category": "validator", + "purpose": "qa:content-quality", + "scope": "tests", "owner": "docs", - "needs": "", - "purpose_statement": "", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", - "usage": "* node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged", - "header": "/**\n * @script enforce-generated-file-banners\n * @summary Enforce standardized hidden/visible generated banners and frontmatter across generated MDX outputs.\n * @owner docs\n * @scope tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n *\n * @usage\n * node tools/scripts/enforce-generated-file-banners.js --check\n * node tools/scripts/enforce-generated-file-banners.js --write\n * node tools/scripts/enforce-generated-file-banners.js --check --staged\n *\n * @inputs\n * --check Validate generated banner/frontmatter policy without writing files.\n * --write Run generators and normalize generated outputs before validation.\n * --staged Restrict validation to generated/banner-relevant staged files when available.\n *\n * @outputs\n * - Console validation summary\n *\n * @exit-codes\n * 0 = policy checks passed\n * 1 = one or more policy checks failed\n *\n * @examples\n * node tools/scripts/enforce-generated-file-banners.js --check\n * node tools/scripts/enforce-generated-file-banners.js --write\n * node tools/scripts/enforce-generated-file-banners.js --check --staged\n *\n * @notes\n * i18n localized files must keep codex-i18n provenance. Visible generation Note parity follows source English pages.\n */", - "header_field_count": 4, + "needs": "E-R1, R-R11", + "purpose_statement": "Content quality checks — validates frontmatter completeness, thin content detection, placeholder flagging", + "pipeline_declared": "P1, P3", + "usage": "node tests/unit/quality.test.js [flags]", + "header": "/**\n * @script quality.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Content quality checks — validates frontmatter completeness, thin content detection, placeholder flagging\n * @pipeline P1, P3\n * @usage node tests/unit/quality.test.js [flags]\n */", + "header_field_count": 8, "has_any_header": true, - "has_framework_header": false, - "category_valid": false, - "purpose_valid": false, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", + "type": "runner", + "caller": "tests/run-all.js", "pipeline": "P1" }, { @@ -1325,7 +1495,7 @@ }, { "type": "script", - "caller": ".githooks/pre-commit", + "caller": "tests/run-all.js", "pipeline": "indirect" }, { @@ -1337,52 +1507,50 @@ "type": "npm-script", "caller": "tests/package.json", "pipeline": "manual", - "script_name": "test:generated-banners" + "script_name": "test:quality" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "test:quality" } ], "outputs": [ { - "output_path": "", + "output_path": "stdout", "type": "stdout", - "call": "writeFileSync" + "call": "console" } ], - "outputs_display": "", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, - "category_match": false, - "purpose_match": false, - "pipeline_verified": "MISMATCH:undeclared automation P1, P3", + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P3 via run-pr-checks; indirect via .githooks/pre-commit; indirect via tests/run-pr-checks.js; manual (npm script: test:generated-banners)", - "grade": "F", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:quality); manual (npm script: test:quality)", + "grade": "C", "flags": [ - "missing-framework-header", - "missing-category", - "missing-purpose", - "invalid-scope", - "missing-needs", - "missing-purpose-statement", - "header-json-category-mismatch", - "header-json-purpose-mismatch", - "undeclared-automation" + "invalid-scope" ], "trigger_group": "P1" }, { - "path": "tools/scripts/check-no-ai-stash.sh", - "script": "check-no-ai-stash", - "category": "enforcer", - "purpose": "governance:agent-governance", - "scope": "tools/scripts, .githooks/pre-commit", + "path": "tests/unit/spelling.test.js", + "script": "spelling.test", + "category": "validator", + "purpose": "qa:content-quality", + "scope": "tests", "owner": "docs", - "needs": "R-R27, R-R30", - "purpose_statement": "AI stash enforcer — blocks push if AI temporary/stash files are present in working tree", - "pipeline_declared": "P1, P2", - "usage": "bash tools/scripts/check-no-ai-stash.sh [flags]", - "header": "# @script check-no-ai-stash\n# @category enforcer\n# @purpose governance:agent-governance\n# @scope tools/scripts, .githooks/pre-commit\n# @owner docs\n# @needs R-R27, R-R30\n# @purpose-statement AI stash enforcer — blocks push if AI temporary/stash files are present in working tree\n# @pipeline P1, P2\n# @usage bash tools/scripts/check-no-ai-stash.sh [flags]", + "needs": "E-R1, R-R11", + "purpose_statement": "Spelling check — validates content against custom dictionary with en-GB rules", + "pipeline_declared": "P1, P3", + "usage": "node tests/unit/spelling.test.js [flags]", + "header": "/**\n * @script spelling.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Spelling check — validates content against custom dictionary with en-GB rules\n * @pipeline P1, P3\n * @usage node tests/unit/spelling.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1391,23 +1559,51 @@ "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", + "type": "runner", + "caller": "tests/run-all.js", "pipeline": "P1" }, { - "type": "pre-push", - "caller": ".githooks/pre-push", - "pipeline": "P2" + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" }, { "type": "script", - "caller": ".githooks/pre-push", + "caller": "tests/run-all.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/run-pr-checks.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/repair-spelling.test.js", "pipeline": "indirect" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:spell" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "test:spell" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs": [ + { + "output_path": "stdout", + "type": "stdout", + "call": "console" + } + ], + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -1416,7 +1612,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P2 (pre-push); indirect via .githooks/pre-push", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; indirect via tests/unit/repair-spelling.test.js; manual (npm script: test:spell); manual (npm script: test:spell)", "grade": "C", "flags": [ "invalid-scope" @@ -1424,17 +1620,17 @@ "trigger_group": "P1" }, { - "path": "tools/scripts/codex/validate-locks.js", - "script": "codex/validate-locks", - "category": "enforcer", - "purpose": "governance:agent-governance", - "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", + "path": "tests/unit/style-guide.test.js", + "script": "style-guide.test", + "category": "validator", + "purpose": "qa:content-quality", + "scope": "tests", "owner": "docs", - "needs": "R-R27, R-R30", - "purpose_statement": "Codex lock validator — checks for stale or conflicting lock files before push", - "pipeline_declared": "P1 (commit), P2 (push)", - "usage": "node tools/scripts/codex/validate-locks.js [flags]", - "header": "/**\n * @script codex/validate-locks\n * @category enforcer\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex lock validator — checks for stale or conflicting lock files before push\n * @pipeline P1 (commit), P2 (push)\n * @usage node tools/scripts/codex/validate-locks.js [flags]\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Style guide compliance — checks en-GB conventions, heading case, formatting rules", + "pipeline_declared": "P1, P3", + "usage": "node tests/unit/style-guide.test.js [flags]", + "header": "/**\n * @script style-guide.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Style guide compliance — checks en-GB conventions, heading case, formatting rules\n * @pipeline P1, P3\n * @usage node tests/unit/style-guide.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1443,19 +1639,36 @@ "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", + "type": "runner", + "caller": "tests/run-all.js", "pipeline": "P1" }, { - "type": "pre-push", - "caller": ".githooks/pre-push", - "pipeline": "P2" + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" }, { "type": "script", - "caller": ".githooks/pre-push", + "caller": "tests/run-all.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/run-pr-checks.js", "pipeline": "indirect" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:style" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "test:style" } ], "outputs": [ @@ -1474,7 +1687,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P2 (pre-push); indirect via .githooks/pre-push", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:style); manual (npm script: test:style)", "grade": "C", "flags": [ "invalid-scope" @@ -1482,17 +1695,17 @@ "trigger_group": "P1" }, { - "path": "tools/scripts/validate-codex-task-contract.js", - "script": "validate-codex-task-contract", - "category": "enforcer", - "purpose": "governance:agent-governance", - "scope": "tools/scripts, .codex/task-contract.yaml, tests/config/codex-issue-policy.json, .github/pull_request_template.md, .github/pull-request-template-v2.md", + "path": "tools/scripts/remediators/content/repair-mdx-safe-markdown.js", + "script": "repair-mdx-safe-markdown", + "category": "remediator", + "purpose": "qa:content-quality", + "scope": "tools/scripts/remediators/content, first-party markdown/mdx files", "owner": "docs", - "needs": "R-R27, R-R30", - "purpose_statement": "Codex task contract enforcer — validates branch naming, task files, PR body, and issue state for codex branches", - "pipeline_declared": "P1 (commit), P2 (push), P3 (PR, Track B)", - "usage": "node tools/scripts/validate-codex-task-contract.js [flags]", - "header": "/**\n * @script validate-codex-task-contract\n * @category enforcer\n * @purpose governance:agent-governance\n * @scope tools/scripts, .codex/task-contract.yaml, tests/config/codex-issue-policy.json, .github/pull_request_template.md, .github/pull-request-template-v2.md\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex task contract enforcer — validates branch naming, task files, PR body, and issue state for codex branches\n * @pipeline P1 (commit), P2 (push), P3 (PR, Track B)\n * @usage node tools/scripts/validate-codex-task-contract.js [flags]\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Auto-repairs deterministic MDX-unsafe markdown patterns across first-party markdown and MDX content.", + "pipeline_declared": "P1", + "usage": "node tools/scripts/remediators/content/repair-mdx-safe-markdown.js --dry-run [--staged|--files a,b]", + "header": "/**\n * @script repair-mdx-safe-markdown\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts/remediators/content, first-party markdown/mdx files\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Auto-repairs deterministic MDX-unsafe markdown patterns across first-party markdown and MDX content.\n * @pipeline P1\n * @dualmode --dry-run (validator) | --write (remediator)\n * @usage node tools/scripts/remediators/content/repair-mdx-safe-markdown.js --dry-run [--staged|--files a,b]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1506,19 +1719,16 @@ "pipeline": "P1" }, { - "type": "pre-push", - "caller": ".githooks/pre-push", - "pipeline": "P2" - }, - { - "type": "script", - "caller": ".githooks/pre-commit", - "pipeline": "indirect" + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "repair:mdx-safe-markdown" }, { - "type": "script", - "caller": ".githooks/pre-push", - "pipeline": "indirect" + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "repair:mdx-safe-markdown:dry-run" } ], "outputs": [ @@ -1534,213 +1744,202 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P2 (pre-push); indirect via .githooks/pre-commit; indirect via .githooks/pre-push", + "pipeline_actual": "P1 (pre-commit); manual (npm script: repair:mdx-safe-markdown); manual (npm script: repair:mdx-safe-markdown:dry-run)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], "trigger_group": "P1" }, { - "path": "tools/scripts/generate-component-registry.js", - "script": "generate-component-registry", - "category": "generator", - "purpose": "governance:index-management", - "scope": "single-domain", + "path": "tools/scripts/validators/content/check-mdx-safe-markdown.js", + "script": "check-mdx-safe-markdown", + "category": "validator", + "purpose": "qa:content-quality", + "scope": "tools/scripts/validators/content, first-party markdown/mdx files", "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Parses JSDoc from all component exports and produces component-registry.json.", - "pipeline_declared": "P1, P2, P3", - "usage": "node tools/scripts/generate-component-registry.js [--validate-only]", - "header": "/**\n * @script generate-component-registry\n * @category generator\n * @purpose governance:index-management\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Parses JSDoc from all component exports and produces component-registry.json.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/generate-component-registry.js [--validate-only]\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Validates first-party markdown and MDX content for repo-wide MDX-safe syntax, including parse failures and deterministic unsafe patterns.", + "pipeline_declared": "P1, P3", + "usage": "node tools/scripts/validators/content/check-mdx-safe-markdown.js [--staged|--files a,b] [--json]", + "header": "/**\n * @script check-mdx-safe-markdown\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, first-party markdown/mdx files\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Validates first-party markdown and MDX content for repo-wide MDX-safe syntax, including parse failures and deterministic unsafe patterns.\n * @pipeline P1, P3\n * @dualmode --staged (changed-file scope) | --files (explicit scope) | default full-repo\n * @usage node tools/scripts/validators/content/check-mdx-safe-markdown.js [--staged|--files a,b] [--json]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "pre-commit", "caller": ".githooks/pre-commit", "pipeline": "P1" }, + { + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" + }, { "type": "script", - "caller": ".githooks/pre-commit", + "caller": "tests/run-all.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tests/unit/component-governance-generators.test.js", + "caller": "tests/run-pr-checks.js", "pipeline": "indirect" }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:mdx:safe" + }, { "type": "npm-script", "caller": "tools/package.json", "pipeline": "manual", - "script_name": "registry:components" + "script_name": "test:mdx:safe" } ], "outputs": [ { - "output_path": "tools/scripts/component-registry.json", - "type": "generated-output", - "call": "writeJson" - }, - { - "output_path": "tools/scripts/component-registry-schema.json", - "type": "generated-output", - "call": "writeJson" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tools/scripts/component-registry.json, tools/scripts/component-registry-schema.json", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js; manual (npm script: registry:components)", - "grade": "B", + "pipeline_actual": "P1 (pre-commit); P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:mdx:safe); manual (npm script: test:mdx:safe)", + "grade": "C", "flags": [ - "phantom-pipeline" + "invalid-scope" ], "trigger_group": "P1" }, { - "path": "tools/scripts/generate-docs-guide-components-index.js", - "script": "generate-docs-guide-components-index", - "category": "generator", - "purpose": "governance:index-management", - "scope": "generated-output", - "owner": "docs", - "needs": "R-R10, R-R16, R-R17", - "purpose_statement": "Generates components-index.mdx in docs-guide/indexes/ from component-registry.json and component-usage-map.json.", - "pipeline_declared": "P1 (commit — auto-regenerated when components staged)", - "usage": "node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check]", - "header": "/**\n * @script generate-docs-guide-components-index\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10, R-R16, R-R17\n * @purpose-statement Generates components-index.mdx in docs-guide/indexes/ from component-registry.json and component-usage-map.json.\n * @pipeline P1 (commit — auto-regenerated when components staged)\n * @usage node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check]\n */", + "path": "tests/integration/v2-link-audit.js", + "script": "v2-link-audit", + "category": "validator", + "purpose": "qa:link-integrity", + "scope": "tests", + "owner": "docs", + "needs": "E-R12, E-R14", + "purpose_statement": "Comprehensive V2 MDX link audit — checks internal links, external links, anchor refs. Supports --staged, --full, --strict, --write-links modes.", + "pipeline_declared": "P1, P5, P6", + "usage": "node tests/integration/v2-link-audit.js [flags]", + "header": "/**\n * @script v2-link-audit\n * @category validator\n * @purpose qa:link-integrity\n * @scope tests\n * @owner docs\n * @needs E-R12, E-R14\n * @purpose-statement Comprehensive V2 MDX link audit — checks internal links, external links, anchor refs. Supports --staged, --full, --strict, --write-links modes.\n * @pipeline P1, P5, P6\n * @dualmode --full (validator) | --write-links (remediator)\n * @usage node tests/integration/v2-link-audit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "pre-commit", "caller": ".githooks/pre-commit", "pipeline": "P1" }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/v2-external-link-audit.yml", + "workflow": "V2 External Link Audit (Advisory)", + "pipeline": "P5", + "cron": "0 4 * * *" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/v2-external-link-audit.yml", + "workflow": "V2 External Link Audit (Advisory)", + "pipeline": "P6" + }, { "type": "script", - "caller": ".githooks/pre-commit", + "caller": "tests/integration/v2-link-audit.selftest.js", "pipeline": "indirect" - } - ], - "outputs": [ - { - "output_path": "stdout", - "type": "stdout", - "call": "console" - } - ], - "outputs_display": "stdout only", - "downstream_consumers": [], - "downstream_display": "No", - "in_json": true, - "category_match": true, - "purpose_match": true, - "pipeline_verified": "MATCH", - "declared_pipeline_set": {}, - "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit", - "grade": "B", - "flags": [], - "trigger_group": "P1" - }, - { - "path": "tools/scripts/generate-docs-index.js", - "script": "generate-docs-index", - "category": "generator", - "purpose": "governance:index-management", - "scope": "tools/scripts, tools/lib, v2, docs.json, root", - "owner": "docs", - "needs": "R-R16, R-R17", - "purpose_statement": "Docs index generator — produces docs-index.json from v2 frontmatter and docs.json. Dual-mode: --check (enforcer) / --write (generator). Most-called script in the repo.", - "pipeline_declared": "P1, P2, P3, P6", - "usage": "node tools/scripts/generate-docs-index.js [flags]", - "header": "/**\n * @script generate-docs-index\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, tools/lib, v2, docs.json, root\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Docs index generator — produces docs-index.json from v2 frontmatter and docs.json. Dual-mode: --check (enforcer) / --write (generator). Most-called script in the repo.\n * @pipeline P1, P2, P3, P6\n * @dualmode --check (enforcer) | --write (generator)\n * @usage node tools/scripts/generate-docs-index.js [flags]\n */", - "header_field_count": 8, - "has_any_header": true, - "has_framework_header": true, - "category_valid": true, - "purpose_valid": true, - "scope_valid": false, - "triggers": [ + }, { - "type": "pre-commit", - "caller": ".githooks/pre-commit", - "pipeline": "P1" + "type": "script", + "caller": "tests/unit/create-codex-pr.test.js", + "pipeline": "indirect" }, { "type": "script", - "caller": ".githooks/pre-commit", + "caller": "tests/unit/v2-link-audit.test.js", "pipeline": "indirect" - } - ], - "outputs": [ + }, { - "output_path": "tools/scripts/docs-index.json", - "type": "generated-output", - "call": "writeFileSync" + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:link-audit" }, { - "output_path": "tools/scripts/missing-frontmatter.md", - "type": "generated-output", - "call": "writeFileSync" + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:link-audit:staged" }, { - "output_path": "", - "type": "stdout", + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:link-audit:external" + } + ], + "outputs": [ + { + "output_path": "tests/integration/hrefs.jsx", + "type": "generated-output", "call": "writeFileSync" } ], - "outputs_display": "tools/scripts/docs-index.json, tools/scripts/missing-frontmatter.md, ", + "outputs_display": "tests/integration/hrefs.jsx", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit", + "pipeline_actual": "P1 (pre-commit); P5 (V2 External Link Audit (Advisory) cron 0 4 * * *); P6 (V2 External Link Audit (Advisory)); indirect via tests/integration/v2-link-audit.selftest.js; indirect via tests/unit/create-codex-pr.test.js; indirect via tests/unit/v2-link-audit.test.js; manual (npm script: test:link-audit); manual (npm script: test:link-audit:staged); manual (npm script: test:link-audit:external)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], "trigger_group": "P1" }, { - "path": "tools/scripts/generate-pages-index.js", - "script": "generate-pages-index", - "category": "generator", - "purpose": "governance:index-management", - "scope": "tools/scripts, v2", + "path": "tests/unit/links-imports.test.js", + "script": "links-imports.test", + "category": "validator", + "purpose": "qa:link-integrity", + "scope": "tests", "owner": "docs", - "needs": "R-R16, R-R17", - "purpose_statement": "Pages index generator — generates and verifies section-style index.mdx files for v2 docs folders plus root aggregate index", - "pipeline_declared": "P1", - "usage": "node tools/scripts/generate-pages-index.js [flags]", - "header": "/**\n * @script generate-pages-index\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Pages index generator — generates and verifies section-style index.mdx files for v2 docs folders plus root aggregate index\n * @pipeline P1\n * @dualmode --check (enforcer) | --write (generator)\n * @usage node tools/scripts/generate-pages-index.js [flags]\n */", + "needs": "E-R12, E-R14", + "purpose_statement": "Validates MDX internal links and snippet import paths are resolvable", + "pipeline_declared": "P1, P3", + "usage": "node tests/unit/links-imports.test.js [flags]", + "header": "/**\n * @script links-imports.test\n * @category validator\n * @purpose qa:link-integrity\n * @scope tests\n * @owner docs\n * @needs E-R12, E-R14\n * @purpose-statement Validates MDX internal links and snippet import paths are resolvable\n * @pipeline P1, P3\n * @usage node tests/unit/links-imports.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1749,14 +1948,14 @@ "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", + "type": "runner", + "caller": "tests/run-all.js", "pipeline": "P1" }, { "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" }, { "type": "script", @@ -1764,32 +1963,31 @@ "pipeline": "indirect" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:pages-index" + "type": "script", + "caller": "tests/run-pr-checks.js", + "pipeline": "indirect" }, { "type": "npm-script", "caller": "tests/package.json", "pipeline": "manual", - "script_name": "test:pages-index:write" + "script_name": "test:links" }, { "type": "npm-script", - "caller": "tests/package.json", + "caller": "tools/package.json", "pipeline": "manual", - "script_name": "test:pages-index:rebuild" + "script_name": "test:links" } ], "outputs": [ { - "output_path": "", + "output_path": "stdout", "type": "stdout", - "call": "writeFileSync" + "call": "console" } ], - "outputs_display": "", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -1798,7 +1996,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:pages-index); manual (npm script: test:pages-index:write); manual (npm script: test:pages-index:rebuild)", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:links); manual (npm script: test:links)", "grade": "C", "flags": [ "invalid-scope" @@ -1806,17 +2004,17 @@ "trigger_group": "P1" }, { - "path": "tools/scripts/scan-component-imports.js", - "script": "scan-component-imports", - "category": "generator", - "purpose": "governance:index-management", - "scope": "generated-output", + "path": "tests/unit/component-governance-generators.test.js", + "script": "component-governance-generators.test", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "full-repo", "owner": "docs", "needs": "R-R10", - "purpose_statement": "Scans MDX imports to produce component-usage-map.json and detect @usedIn drift.", - "pipeline_declared": "P6", - "usage": "node tools/scripts/scan-component-imports.js [--verify]", - "header": "/**\n * @script scan-component-imports\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10\n * @purpose-statement Scans MDX imports to produce component-usage-map.json and detect @usedIn drift.\n * @pipeline P6\n * @usage node tools/scripts/scan-component-imports.js [--verify]\n */", + "purpose_statement": "Verifies component governance generators produce coherent registry, usage-map, and docs outputs.", + "pipeline_declared": "P1 (commit, via run-all)", + "usage": "node tests/unit/component-governance-generators.test.js", + "header": "/**\n * @script component-governance-generators.test\n * @category validator\n * @purpose qa:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R10\n * @purpose-statement Verifies component governance generators produce coherent registry, usage-map, and docs outputs.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/component-governance-generators.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1825,115 +2023,114 @@ "scope_valid": true, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", + "type": "runner", + "caller": "tests/run-all.js", "pipeline": "P1" }, { "type": "script", - "caller": ".githooks/pre-commit", + "caller": "tests/run-all.js", "pipeline": "indirect" }, { - "type": "script", - "caller": "tests/unit/component-governance-generators.test.js", - "pipeline": "indirect" + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:components:governance" } ], "outputs": [ { - "output_path": "tools/scripts/component-usage-map.json", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tools/scripts/component-usage-map.json", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6; undeclared automation P1", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js", + "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:components:governance)", "grade": "B", - "flags": [ - "phantom-pipeline", - "undeclared-automation" - ], + "flags": [], "trigger_group": "P1" }, { - "path": "tools/scripts/remediators/components/repair-component-metadata.js", - "script": "repair-component-metadata", - "category": "remediator", - "purpose": "governance:repo-health", - "scope": "single-domain", + "path": "tests/unit/component-governance-utils.test.js", + "script": "component-governance-utils.test", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "tests", "owner": "docs", "needs": "R-R10", - "purpose_statement": "Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components.", - "pipeline_declared": "P1 (commit — runs when components staged), P6 (on-demand)", - "usage": "node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged]", - "header": "/**\n * @script repair-component-metadata\n * @category remediator\n * @purpose governance:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components.\n * @pipeline P1 (commit — runs when components staged), P6 (on-demand)\n * @usage node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged]\n */", + "purpose_statement": "Verifies shared component governance utility parsing, scanning, and archive exclusion behavior.", + "pipeline_declared": "P1 (commit, via run-all)", + "usage": "node tests/unit/component-governance-utils.test.js", + "header": "/**\n * @script component-governance-utils.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Verifies shared component governance utility parsing, scanning, and archive exclusion behavior.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/component-governance-utils.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", + "type": "runner", + "caller": "tests/run-all.js", "pipeline": "P1" }, { "type": "script", - "caller": ".githooks/pre-commit", + "caller": "tests/run-all.js", "pipeline": "indirect" }, { - "type": "script", - "caller": "tests/unit/component-governance-generators.test.js", - "pipeline": "indirect" + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:components:governance" } ], "outputs": [ { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "output_path": "tests/unit/styling-scan.jsx", + "type": "generated-output", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "tests/unit/styling-scan.jsx", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js", - "grade": "B", + "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:components:governance)", + "grade": "C", "flags": [ - "phantom-pipeline" + "invalid-scope" ], "trigger_group": "P1" }, { - "path": "tools/scripts/validators/governance/audit-script-inventory.js", - "script": "audit-script-inventory", + "path": "tests/unit/docs-navigation.test.js", + "script": "docs-navigation.test", "category": "validator", - "purpose": "governance:repo-health", + "purpose": "qa:repo-health", "scope": "full-repo", "owner": "docs", - "needs": "R-R14, R-R18, R-C6", - "purpose_statement": "Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category.", - "pipeline_declared": "manual", - "usage": "node tools/scripts/validators/governance/audit-script-inventory.js [--json] [--md] [--output ] [--verbose]", - "header": "/**\n * @script audit-script-inventory\n * @category validator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category.\n * @pipeline manual\n * @usage node tools/scripts/validators/governance/audit-script-inventory.js [--json] [--md] [--output ] [--verbose]\n */", + "needs": "E-C1, R-R14", + "purpose_statement": "Validates docs.json page-entry syntax, reports missing routes, warns on orphaned canonical v2 pages, suggests remaps, and optionally applies approved remaps", + "pipeline_declared": "P1, P3, P6", + "usage": "node tests/unit/docs-navigation.test.js [flags]", + "header": "/**\n * @script docs-navigation.test\n * @category validator\n * @purpose qa:repo-health\n * @scope full-repo\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Validates docs.json page-entry syntax, reports missing routes, warns on orphaned canonical v2 pages, suggests remaps, and optionally applies approved remaps\n * @pipeline P1, P3, P6\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/docs-navigation.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -1942,109 +2139,140 @@ "scope_valid": true, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", + "type": "runner", + "caller": "tests/run-all.js", "pipeline": "P1" }, { - "type": "script", - "caller": ".githooks/pre-commit", - "pipeline": "indirect" + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" }, { "type": "script", - "caller": "tests/unit/audit-script-inventory-repair-rules.test.js", + "caller": "tests/run-all.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/validators/governance/review-governance-repair-checklist.js", + "caller": "tests/run-pr-checks.js", "pipeline": "indirect" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:docs-nav" + }, + { + "type": "npm-script", + "caller": "tests/package.json", + "pipeline": "manual", + "script_name": "test:docs-nav:write" } ], "outputs": [ { - "output_path": "", - "type": "stdout", + "output_path": "tests/unit/tasks/reports/navigation-links/navigation-report.json", + "type": "generated-output", + "call": "writeFileSync" + }, + { + "output_path": "tests/unit/tasks/reports/navigation-links/navigation-report.md", + "type": "generated-output", "call": "writeFileSync" } ], - "outputs_display": "", + "outputs_display": "tests/unit/tasks/reports/navigation-links/navigation-report.json, tests/unit/tasks/reports/navigation-links/navigation-report.md", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:undeclared automation P1", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/audit-script-inventory-repair-rules.test.js; indirect via tools/scripts/validators/governance/review-governance-repair-checklist.js", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; P6 (Docs Translation Pipeline); indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:docs-nav); manual (npm script: test:docs-nav:write)", "grade": "B", - "flags": [ - "undeclared-automation" - ], + "flags": [], "trigger_group": "P1" }, { - "path": ".githooks/pre-commit", - "script": "pre-commit", - "category": "orchestrator", - "purpose": "infrastructure:pipeline-orchestration", - "scope": ".githooks", + "path": "tests/unit/docs-path-sync.test.js", + "script": "docs-path-sync.test", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "full-repo", "owner": "docs", - "needs": "R-R29", - "purpose_statement": "Pre-commit hook orchestrator — runs structural checks, unit tests, codex validation, and docs-index freshness check before allowing commit", - "pipeline_declared": "P1 (commit, hook entry point)", - "usage": "bash .githooks/pre-commit [flags]", - "header": "# @script pre-commit\n# @category orchestrator\n# @purpose infrastructure:pipeline-orchestration\n# @scope .githooks\n# @owner docs\n# @needs R-R29\n# @purpose-statement Pre-commit hook orchestrator — runs structural checks, unit tests, codex validation, and docs-index freshness check before allowing commit\n# @pipeline P1 (commit, hook entry point)\n# @usage bash .githooks/pre-commit [flags]\n# Pre-commit hook to enforce style guide compliance\n# Checks for common violations before allowing commits\n#\n# To install this hook, run:\n# cp .githooks/pre-commit .git/hooks/pre-commit\n# chmod +x .git/hooks/pre-commit\n#\n# Bypass flags (use sparingly):\n# SKIP_STRUCTURE_CHECK=1 - Skip root directory and snippets structure checks\n# SKIP_STYLE_CHECK=1 - Skip style guide compliance checks\n# SKIP_VERIFICATION=1 - Skip verification scripts\n# SKIP_TESTS=1 - Skip test suite\n# SKIP_ALL=1 - Skip all checks (use with extreme caution)\n#\n# Human-only override flags:\n# --trailer \"allowlist-edit=true\" - Allow editing .allowlist file (HUMANS ONLY - AIs must never use this)\n# ALLOWLIST_EDIT=1 - Legacy fallback for automation contexts\n# --trailer \"allow-deletions=true\" - Allow file deletions (HUMANS ONLY - AIs must never use this)\n# ALLOW_DELETIONS=1 - Legacy fallback for automation contexts", + "needs": "E-C1, R-R14", + "purpose_statement": "Unit tests for docs path sync — validates staged move detection, deterministic docs.json/reference rewrites, validator behavior, and remediator write mode.", + "pipeline_declared": "P1, P2, P3", + "usage": "node tests/unit/docs-path-sync.test.js", + "header": "/**\n * @script docs-path-sync.test\n * @category validator\n * @purpose qa:repo-health\n * @scope full-repo\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Unit tests for docs path sync — validates staged move detection, deterministic docs.json/reference rewrites, validator behavior, and remediator write mode.\n * @pipeline P1, P2, P3\n * @dualmode --check (validator) | fixture-driven script execution\n * @usage node tests/unit/docs-path-sync.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", + "type": "runner", + "caller": "tests/run-all.js", "pipeline": "P1" + }, + { + "type": "script", + "caller": "tests/run-all.js", + "pipeline": "indirect" } ], "outputs": [ { - "output_path": "stdout", + "output_path": "", "type": "stdout", - "call": "console" + "call": "writeFile" + }, + { + "output_path": "", + "type": "stdout", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": ", ", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MATCH", + "pipeline_verified": "MISMATCH:phantom claim P2, P3", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit)", - "grade": "C", + "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js", + "grade": "B", "flags": [ - "invalid-scope" + "phantom-pipeline" ], "trigger_group": "P1" }, { - "path": "tests/run-all.js", - "script": "run-all", - "category": "orchestrator", - "purpose": "infrastructure:pipeline-orchestration", - "scope": "tests", + "path": "tests/unit/script-docs.test.js", + "script": "script-docs-test", + "category": "validator", + "purpose": "qa:repo-health", + "scope": ".githooks, .github/scripts, tests, tools/scripts, tasks/scripts, docs-guide/indexes/scripts-index.mdx", "owner": "docs", - "needs": "R-R29", - "purpose_statement": "Test orchestrator — dispatches all unit test suites. Called by pre-commit hook and npm test.", - "pipeline_declared": "P1 (commit, orchestrator)", - "usage": "node tests/run-all.js [flags]", - "header": "/**\n * @script run-all\n * @category orchestrator\n * @purpose infrastructure:pipeline-orchestration\n * @scope tests\n * @owner docs\n * @needs R-R29\n * @purpose-statement Test orchestrator — dispatches all unit test suites. Called by pre-commit hook and npm test.\n * @pipeline P1 (commit, orchestrator)\n * @usage node tests/run-all.js [flags]\n */", + "needs": "E-C1, R-R14", + "purpose_statement": "Enforces script header schema, keeps group script indexes in sync, and builds aggregate script index", + "pipeline_declared": "P1, P3", + "usage": "node tests/unit/script-docs.test.js [flags]", + "header": "/**\n * @script script-docs-test\n * @category validator\n * @purpose qa:repo-health\n * @scope .githooks, .github/scripts, tests, tools/scripts, tasks/scripts, docs-guide/indexes/scripts-index.mdx\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Enforces script header schema, keeps group script indexes in sync, and builds aggregate script index\n * @pipeline P1, P3\n * @dualmode --check (validator) | --write --rebuild-indexes (generator)\n * @usage node tests/unit/script-docs.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -2058,26 +2286,50 @@ "pipeline": "P1" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test" + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" + }, + { + "type": "script", + "caller": ".githooks/pre-commit", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/run-all.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/run-pr-checks.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/docs-guide-sot.test.js", + "pipeline": "indirect" }, { "type": "npm-script", - "caller": "tools/package.json", + "caller": "tests/package.json", "pipeline": "manual", - "script_name": "test" + "script_name": "test:scripts" } ], "outputs": [ { - "output_path": "stdout", + "output_path": "", "type": "stdout", - "call": "console" + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -2086,7 +2338,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); manual (npm script: test); manual (npm script: test)", + "pipeline_actual": "P1 (pre-commit); P1 via run-all; P3 via run-pr-checks; indirect via .githooks/pre-commit; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; indirect via tests/unit/docs-guide-sot.test.js; manual (npm script: test:scripts)", "grade": "C", "flags": [ "invalid-scope" @@ -2094,51 +2346,33 @@ "trigger_group": "P1" }, { - "path": "tests/integration/browser.test.js", - "script": "browser.test", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests", + "path": "tools/scripts/remediators/content/sync-docs-paths.js", + "script": "sync-docs-paths", + "category": "remediator", + "purpose": "qa:repo-health", + "scope": "staged", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Puppeteer browser integration test — renders pages from docs.json and checks for console errors, load failures, and visual regressions", - "pipeline_declared": "P1", - "usage": "node tests/integration/browser.test.js [flags]", - "header": "/**\n * @script browser.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Puppeteer browser integration test — renders pages from docs.json and checks for console errors, load failures, and visual regressions\n * @pipeline P1\n * @dualmode dual-mode (document flags)\n * @usage node tests/integration/browser.test.js [flags]\n */", + "needs": "E-C1, R-R14", + "purpose_statement": "Docs path sync remediator — applies deterministic docs.json and governed reference rewrites for moved docs pages.", + "pipeline_declared": "P1, P6", + "usage": "node tools/scripts/remediators/content/sync-docs-paths.js --staged --dry-run", + "header": "/**\n * @script sync-docs-paths\n * @category remediator\n * @purpose qa:repo-health\n * @scope staged\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Docs path sync remediator — applies deterministic docs.json and governed reference rewrites for moved docs pages.\n * @pipeline P1, P6\n * @dualmode --dry-run (validator) | --write (remediator)\n * @usage node tools/scripts/remediators/content/sync-docs-paths.js --staged --dry-run\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", + "type": "pre-commit", + "caller": ".githooks/pre-commit", "pipeline": "P1" }, { "type": "script", - "caller": "tests/run-all.js", + "caller": "tests/unit/docs-path-sync.test.js", "pipeline": "indirect" - }, - { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:browser" - }, - { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "test:browser" - }, - { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "test:browser:all" } ], "outputs": [ @@ -2154,34 +2388,34 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MATCH", + "pipeline_verified": "MISMATCH:phantom claim P6", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:browser); manual (npm script: test:browser); manual (npm script: test:browser:all)", - "grade": "C", + "pipeline_actual": "P1 (pre-commit); indirect via tests/unit/docs-path-sync.test.js", + "grade": "B", "flags": [ - "invalid-scope" + "phantom-pipeline" ], "trigger_group": "P1" }, { - "path": "tests/integration/v2-wcag-audit.js", - "script": "v2-wcag-audit", + "path": "tools/scripts/validators/components/check-component-css.js", + "script": "check-component-css", "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests/integration, tests/utils, tasks/reports, v2", + "purpose": "qa:repo-health", + "scope": "single-domain", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "WCAG accessibility audit for v2 pages — checks heading hierarchy, alt text, ARIA. Supports --fix mode for auto-repair.", - "pipeline_declared": "P1", - "usage": "node tests/integration/v2-wcag-audit.js [flags]", - "header": "/**\n * @script v2-wcag-audit\n * @category validator\n * @purpose qa:content-quality\n * @scope tests/integration, tests/utils, tasks/reports, v2\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement WCAG accessibility audit for v2 pages — checks heading hierarchy, alt text, ARIA. Supports --fix mode for auto-repair.\n * @pipeline P1\n * @usage node tests/integration/v2-wcag-audit.js [flags]\n */", + "needs": "R-R10", + "purpose_statement": "Validates component files against component governance styling rules.", + "pipeline_declared": "P1, P2, P3", + "usage": "node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help]", + "header": "/**\n * @script check-component-css\n * @category validator\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates component files against component governance styling rules.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "pre-commit", @@ -2189,42 +2423,16 @@ "pipeline": "P1" }, { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" - }, - { - "type": "script", - "caller": "tests/integration/v2-wcag-audit.selftest.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/unit/v2-wcag-audit.test.js", - "pipeline": "indirect" - }, - { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:wcag" - }, - { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:wcag:staged" + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:wcag:nofix" + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" } ], "outputs": [ @@ -2243,57 +2451,46 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P1 via run-all; indirect via tests/integration/v2-wcag-audit.selftest.js; indirect via tests/run-all.js; indirect via tests/unit/v2-wcag-audit.test.js; manual (npm script: test:wcag); manual (npm script: test:wcag:staged); manual (npm script: test:wcag:nofix)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "pipeline_actual": "P1 (pre-commit); P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite)", + "grade": "B", + "flags": [], "trigger_group": "P1" }, { - "path": "tests/unit/mdx-guards.test.js", - "script": "mdx-guards.test", + "path": "tools/scripts/validators/components/check-component-docs.js", + "script": "check-component-docs", "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests, v2/pages, snippets/pages, snippets/snippetsWiki", + "purpose": "qa:repo-health", + "scope": "single-domain", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Enforces MDX guardrails — globals imports, math delimiters, markdown table line breaks", - "pipeline_declared": "P1, P3", - "usage": "node tests/unit/mdx-guards.test.js [flags]", - "header": "/**\n * @script mdx-guards.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests, v2/pages, snippets/pages, snippets/snippetsWiki\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Enforces MDX guardrails — globals imports, math delimiters, markdown table line breaks\n * @pipeline P1, P3\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/mdx-guards.test.js [flags]\n */", + "needs": "R-R10", + "purpose_statement": "Validates component JSDoc coverage, prop documentation, docs-entry coverage, and governance metadata.", + "pipeline_declared": "P1, P2, P3", + "usage": "node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help]", + "header": "/**\n * @script check-component-docs\n * @category validator\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates component JSDoc coverage, prop documentation, docs-entry coverage, and governance metadata.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", + "type": "pre-commit", + "caller": ".githooks/pre-commit", "pipeline": "P1" }, { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" - }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:mdx:guards" + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" } ], "outputs": [ @@ -2312,25 +2509,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:mdx:guards)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "pipeline_actual": "P1 (pre-commit); P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite)", + "grade": "B", + "flags": [], "trigger_group": "P1" }, { - "path": "tests/unit/mdx-safe-markdown.test.js", - "script": "mdx-safe-markdown.test", + "path": "tools/scripts/validators/components/check-naming-conventions.js", + "script": "check-naming-conventions", "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests/unit, tests/fixtures/mdx-safe-markdown, tools/lib, tools/scripts/remediators/content, tools/scripts/validators/content", + "purpose": "qa:repo-health", + "scope": "tools/scripts/validators/components, tests/run-all.js, tests/run-pr-checks.js, snippets/components", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Fixture-driven unit tests for repo-wide MDX-safe markdown repair and validation helpers.", - "pipeline_declared": "P1 (commit, via run-all)", - "usage": "node tests/unit/mdx-safe-markdown.test.js", - "header": "/**\n * @script mdx-safe-markdown.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests/unit, tests/fixtures/mdx-safe-markdown, tools/lib, tools/scripts/remediators/content, tools/scripts/validators/content\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Fixture-driven unit tests for repo-wide MDX-safe markdown repair and validation helpers.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/mdx-safe-markdown.test.js\n */", + "needs": "R-R10", + "purpose_statement": "Validates active component filenames against directory-aware file naming and PascalCase exports under snippets/components.", + "pipeline_declared": "P1, P3", + "usage": "node tools/scripts/validators/components/check-naming-conventions.js [--path snippets/components] [--files path[,path...]] [--mode migration|strict-camel]", + "header": "/**\n * @script check-naming-conventions\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts/validators/components, tests/run-all.js, tests/run-pr-checks.js, snippets/components\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates active component filenames against directory-aware file naming and PascalCase exports under snippets/components.\n * @pipeline P1, P3\n * @usage node tools/scripts/validators/components/check-naming-conventions.js [--path snippets/components] [--files path[,path...]] [--mode migration|strict-camel]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -2343,16 +2538,20 @@ "caller": "tests/run-all.js", "pipeline": "P1" }, + { + "type": "runner", + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" + }, { "type": "script", "caller": "tests/run-all.js", "pipeline": "indirect" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:mdx:safe:unit" + "type": "script", + "caller": "tests/run-pr-checks.js", + "pipeline": "indirect" } ], "outputs": [ @@ -2371,25 +2570,31 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:mdx:safe:unit)", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js", "grade": "C", "flags": [ "invalid-scope" ], "trigger_group": "P1" - }, + } + ], + "count": 34 + }, + "P2": { + "label": "P2 - Push gate", + "scripts": [ { - "path": "tests/unit/mdx.test.js", - "script": "mdx.test", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests", + "path": "tools/scripts/generate-ai-sitemap.js", + "script": "generate-ai-sitemap", + "category": "generator", + "purpose": "governance:index-management", + "scope": "tools/scripts, docs.json, v2", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Validates MDX syntax and structure — checks for parse errors, invalid JSX, broken components", - "pipeline_declared": "P1, P3", - "usage": "node tests/unit/mdx.test.js [flags]", - "header": "/**\n * @script mdx.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Validates MDX syntax and structure — checks for parse errors, invalid JSX, broken components\n * @pipeline P1, P3\n * @usage node tests/unit/mdx.test.js [flags]\n */", + "needs": "R-R16, R-R17", + "purpose_statement": "AI sitemap generator — produces AI-optimised sitemap files. Dual-mode: --check (enforcer) / --write (generator).", + "pipeline_declared": "P2, P3, P6", + "usage": "node tools/scripts/generate-ai-sitemap.js [flags]", + "header": "/**\n * @script generate-ai-sitemap\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs.json, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement AI sitemap generator — produces AI-optimised sitemap files. Dual-mode: --check (enforcer) / --write (generator).\n * @pipeline P2, P3, P6\n * @dualmode --check (enforcer) | --write (generator)\n * @usage node tools/scripts/generate-ai-sitemap.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -2398,46 +2603,38 @@ "scope_valid": false, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" - }, - { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" - }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" + "type": "workflow-push", + "caller": ".github/workflows/generate-ai-sitemap.yml", + "workflow": "Generate AI Sitemap", + "pipeline": "P2" }, { - "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" + "type": "workflow-push", + "caller": ".github/workflows/verify-ai-sitemap.yml", + "workflow": "Verify AI Sitemap", + "pipeline": "P2" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:mdx" + "type": "workflow-pr", + "caller": ".github/workflows/verify-ai-sitemap.yml", + "workflow": "Verify AI Sitemap", + "pipeline": "P3" }, { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "test:mdx" + "type": "workflow-dispatch", + "caller": ".github/workflows/generate-ai-sitemap.yml", + "workflow": "Generate AI Sitemap", + "pipeline": "P6" } ], "outputs": [ { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "output_path": "tools/scripts/sitemap-ai.xml", + "type": "generated-output", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "tools/scripts/sitemap-ai.xml", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -2446,25 +2643,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:mdx); manual (npm script: test:mdx)", + "pipeline_actual": "P2 (Generate AI Sitemap); P2 (Verify AI Sitemap); P3 (Verify AI Sitemap); P6 (Generate AI Sitemap)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P1" + "trigger_group": "P2" }, { - "path": "tests/unit/quality.test.js", - "script": "quality.test", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests", + "path": "tools/scripts/generate-llms-files.js", + "script": "generate-llms-files", + "category": "generator", + "purpose": "governance:index-management", + "scope": "tools/scripts, docs.json, v2", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Content quality checks — validates frontmatter completeness, thin content detection, placeholder flagging", - "pipeline_declared": "P1, P3", - "usage": "node tests/unit/quality.test.js [flags]", - "header": "/**\n * @script quality.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Content quality checks — validates frontmatter completeness, thin content detection, placeholder flagging\n * @pipeline P1, P3\n * @usage node tests/unit/quality.test.js [flags]\n */", + "needs": "R-R16, R-R17", + "purpose_statement": "LLMs file generator — produces llms.txt and llms-full.txt for AI consumption. Dual-mode: --check / --write.", + "pipeline_declared": "P2, P3, P6", + "usage": "node tools/scripts/generate-llms-files.js [flags]", + "header": "/**\n * @script generate-llms-files\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs.json, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement LLMs file generator — produces llms.txt and llms-full.txt for AI consumption. Dual-mode: --check / --write.\n * @pipeline P2, P3, P6\n * @dualmode --check (enforcer) | --write (generator)\n * @usage node tools/scripts/generate-llms-files.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -2473,46 +2670,48 @@ "scope_valid": false, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" - }, - { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" - }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" + "type": "workflow-push", + "caller": ".github/workflows/generate-llms-files.yml", + "workflow": "Generate llms.txt", + "pipeline": "P2" }, { - "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" + "type": "workflow-push", + "caller": ".github/workflows/verify-llms-files.yml", + "workflow": "Verify llms.txt Files", + "pipeline": "P2" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:quality" + "type": "workflow-pr", + "caller": ".github/workflows/verify-llms-files.yml", + "workflow": "Verify llms.txt Files", + "pipeline": "P3" }, { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "test:quality" + "type": "workflow-dispatch", + "caller": ".github/workflows/generate-llms-files.yml", + "workflow": "Generate llms.txt", + "pipeline": "P6" } ], "outputs": [ { - "output_path": "stdout", + "output_path": "", "type": "stdout", - "call": "console" + "call": "writeFileSync" + }, + { + "output_path": "tools/scripts/llms.txt", + "type": "generated-output", + "call": "writeFile" + }, + { + "output_path": "tools/scripts/llms-full.txt", + "type": "generated-output", + "call": "writeFile" } ], - "outputs_display": "stdout only", + "outputs_display": ", tools/scripts/llms.txt, tools/scripts/llms-full.txt", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -2521,78 +2720,124 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:quality); manual (npm script: test:quality)", + "pipeline_actual": "P2 (Generate llms.txt); P2 (Verify llms.txt Files); P3 (Verify llms.txt Files); P6 (Generate llms.txt)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P1" + "trigger_group": "P2" }, { - "path": "tests/unit/spelling.test.js", - "script": "spelling.test", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests", + "path": "tools/scripts/enforcers/pr/check-component-immutability.js", + "script": "check-component-immutability", + "category": "enforcer", + "purpose": "governance:repo-health", + "scope": "changed", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Spelling check — validates content against custom dictionary with en-GB rules", - "pipeline_declared": "P1, P3", - "usage": "node tests/unit/spelling.test.js [flags]", - "header": "/**\n * @script spelling.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Spelling check — validates content against custom dictionary with en-GB rules\n * @pipeline P1, P3\n * @usage node tests/unit/spelling.test.js [flags]\n */", + "needs": "R-R10", + "purpose_statement": "Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label.", + "pipeline_declared": "P2, P3", + "usage": "node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main", + "header": "/**\n * @script check-component-immutability\n * @category enforcer\n * @purpose governance:repo-health\n * @scope changed\n * @owner docs\n * @needs R-R10\n * @purpose-statement Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label.\n * @pipeline P2, P3\n * @usage node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" }, { - "type": "runner", - "caller": "tests/run-pr-checks.js", + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", "pipeline": "P3" - }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" - }, + } + ], + "outputs": [ { - "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" - }, + "output_path": "stdout", + "type": "stdout", + "call": "console" + } + ], + "outputs_display": "stdout only", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite)", + "grade": "B", + "flags": [], + "trigger_group": "P2" + }, + { + "path": "tools/scripts/orchestrators/repair-governance.js", + "script": "repair-governance", + "category": "orchestrator", + "purpose": "governance:repo-health", + "scope": "full-repo", + "owner": "docs", + "needs": "R-R14, R-R18, R-C6", + "purpose_statement": "Chains audit, safe repair, verification, and reporting into a single self-healing governance pipeline.", + "pipeline_declared": "P2 (push), P5 (scheduled, weekly), P6 (on-demand), manual", + "usage": "node tools/scripts/orchestrators/repair-governance.js [--dry-run] [--auto-commit] [--report-only] [--strict]", + "header": "/**\n * @script repair-governance\n * @category orchestrator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Chains audit, safe repair, verification, and reporting into a single self-healing governance pipeline.\n * @pipeline P2 (push), P5 (scheduled, weekly), P6 (on-demand), manual\n * @dualmode --report-only | --dry-run | default fix mode\n * @usage node tools/scripts/orchestrators/repair-governance.js [--dry-run] [--auto-commit] [--report-only] [--strict]\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ { - "type": "script", - "caller": "tests/unit/repair-spelling.test.js", - "pipeline": "indirect" + "type": "workflow-push", + "caller": ".github/workflows/governance-sync.yml", + "workflow": "Governance sync (post-merge)", + "pipeline": "P2" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:spell" + "type": "workflow-schedule", + "caller": ".github/workflows/repair-governance.yml", + "workflow": "Governance Repair", + "pipeline": "P5", + "cron": "0 5 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/repair-governance.yml", + "workflow": "Governance Repair", + "pipeline": "P6" + }, + { + "type": "script", + "caller": "tests/unit/repair-governance.test.js", + "pipeline": "indirect" }, { "type": "npm-script", "caller": "tools/package.json", "pipeline": "manual", - "script_name": "test:spell" + "script_name": "repair:governance" } ], "outputs": [ { - "output_path": "stdout", + "output_path": "", "type": "stdout", - "call": "console" + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -2601,25 +2846,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; indirect via tests/unit/repair-spelling.test.js; manual (npm script: test:spell); manual (npm script: test:spell)", - "grade": "C", - "flags": [ - "invalid-scope" - ], - "trigger_group": "P1" + "pipeline_actual": "P2 (Governance sync (post-merge)); P5 (Governance Repair cron 0 5 * * 1); P6 (Governance Repair); indirect via tests/unit/repair-governance.test.js; manual (npm script: repair:governance)", + "grade": "B", + "flags": [], + "trigger_group": "P2" }, { - "path": "tests/unit/style-guide.test.js", - "script": "style-guide.test", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests", + "path": "tools/scripts/snippets/fetch-external-docs.sh", + "script": "fetch-external-docs", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": "tools/scripts", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Style guide compliance — checks en-GB conventions, heading case, formatting rules", - "pipeline_declared": "P1, P3", - "usage": "node tests/unit/style-guide.test.js [flags]", - "header": "/**\n * @script style-guide.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Style guide compliance — checks en-GB conventions, heading case, formatting rules\n * @pipeline P1, P3\n * @usage node tests/unit/style-guide.test.js [flags]\n */", + "needs": "F-R1", + "purpose_statement": "External docs fetcher — pulls doc fragments from external GitHub repos into snippets/data/ for inclusion in builds", + "pipeline_declared": "P2, P3", + "usage": "bash tools/scripts/snippets/fetch-external-docs.sh [flags]", + "header": "# @script fetch-external-docs\n# @category automation\n# @purpose infrastructure:data-feeds\n# @scope tools/scripts\n# @owner docs\n# @needs F-R1\n# @purpose-statement External docs fetcher — pulls doc fragments from external GitHub repos into snippets/data/ for inclusion in builds\n# @pipeline P2, P3\n# @usage bash tools/scripts/snippets/fetch-external-docs.sh [flags]\n# Pre-build script to fetch external markdown files\n# Run this before building the docs to ensure external content is up-to-date\n# Sanitizes markdown to be MDX-compatible", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -2628,46 +2871,55 @@ "scope_valid": false, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" }, { - "type": "runner", - "caller": "tests/run-pr-checks.js", + "type": "workflow-push", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/broken-links.yml", + "workflow": "Check Broken Links", "pipeline": "P3" }, { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P3" }, { "type": "script", - "caller": "tests/run-pr-checks.js", + "caller": "tools/scripts/mint-dev.sh", "pipeline": "indirect" }, { "type": "npm-script", - "caller": "tests/package.json", + "caller": "tools/package.json", "pipeline": "manual", - "script_name": "test:style" + "script_name": "fetch-docs" }, { "type": "npm-script", "caller": "tools/package.json", "pipeline": "manual", - "script_name": "test:style" - } - ], - "outputs": [ - { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "script_name": "prebuild" } ], - "outputs_display": "stdout only", + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -2676,25 +2928,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:style); manual (npm script: test:style)", + "pipeline_actual": "P2 (Docs CI - Content Quality Suite); P2 (Docs CI - V2 Browser Sweep); P3 (Check Broken Links); P3 (Docs CI - Content Quality Suite); P3 (Docs CI - V2 Browser Sweep); indirect via tools/scripts/mint-dev.sh; manual (npm script: fetch-docs); manual (npm script: prebuild)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P1" + "trigger_group": "P2" }, { - "path": "tools/scripts/remediators/content/repair-mdx-safe-markdown.js", - "script": "repair-mdx-safe-markdown", - "category": "remediator", - "purpose": "qa:content-quality", - "scope": "tools/scripts/remediators/content, first-party markdown/mdx files", + "path": ".githooks/pre-push", + "script": "pre-push", + "category": "orchestrator", + "purpose": "infrastructure:pipeline-orchestration", + "scope": ".githooks, tools/scripts/validate-codex-task-contract.js, .codex/task-contract.yaml", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Auto-repairs deterministic MDX-unsafe markdown patterns across first-party markdown and MDX content.", - "pipeline_declared": "P1", - "usage": "node tools/scripts/remediators/content/repair-mdx-safe-markdown.js --dry-run [--staged|--files a,b]", - "header": "/**\n * @script repair-mdx-safe-markdown\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts/remediators/content, first-party markdown/mdx files\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Auto-repairs deterministic MDX-unsafe markdown patterns across first-party markdown and MDX content.\n * @pipeline P1\n * @dualmode --dry-run (validator) | --write (remediator)\n * @usage node tools/scripts/remediators/content/repair-mdx-safe-markdown.js --dry-run [--staged|--files a,b]\n */", + "needs": "R-R29", + "purpose_statement": "Pre-push hook — blocks push if AI stash files present, codex locks stale, or task contract invalid", + "pipeline_declared": "P2 (push, hook entry point)", + "usage": "bash .githooks/pre-push [flags]", + "header": "# @script pre-push\n# @category orchestrator\n# @purpose infrastructure:pipeline-orchestration\n# @scope .githooks, tools/scripts/validate-codex-task-contract.js, .codex/task-contract.yaml\n# @owner docs\n# @needs R-R29\n# @purpose-statement Pre-push hook — blocks push if AI stash files present, codex locks stale, or task contract invalid\n# @pipeline P2 (push, hook entry point)\n# @usage bash .githooks/pre-push [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -2703,31 +2955,13 @@ "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", - "pipeline": "P1" - }, - { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "repair:mdx-safe-markdown" - }, - { - "type": "npm-script", - "caller": "tools/package.json", - "pipeline": "manual", - "script_name": "repair:mdx-safe-markdown:dry-run" - } - ], - "outputs": [ - { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "type": "pre-push", + "caller": ".githooks/pre-push", + "pipeline": "P2" } ], - "outputs_display": "stdout only", + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -2736,68 +2970,71 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); manual (npm script: repair:mdx-safe-markdown); manual (npm script: repair:mdx-safe-markdown:dry-run)", + "pipeline_actual": "P2 (pre-push)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P1" + "trigger_group": "P2" }, { - "path": "tools/scripts/validators/content/check-mdx-safe-markdown.js", - "script": "check-mdx-safe-markdown", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tools/scripts/validators/content, first-party markdown/mdx files", + "path": "tests/run-pr-checks.js", + "script": "run-pr-checks", + "category": "orchestrator", + "purpose": "infrastructure:pipeline-orchestration", + "scope": "changed", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Validates first-party markdown and MDX content for repo-wide MDX-safe syntax, including parse failures and deterministic unsafe patterns.", - "pipeline_declared": "P1, P3", - "usage": "node tools/scripts/validators/content/check-mdx-safe-markdown.js [--staged|--files a,b] [--json]", - "header": "/**\n * @script check-mdx-safe-markdown\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, first-party markdown/mdx files\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Validates first-party markdown and MDX content for repo-wide MDX-safe syntax, including parse failures and deterministic unsafe patterns.\n * @pipeline P1, P3\n * @dualmode --staged (changed-file scope) | --files (explicit scope) | default full-repo\n * @usage node tools/scripts/validators/content/check-mdx-safe-markdown.js [--staged|--files a,b] [--json]\n */", + "needs": "R-R29", + "purpose_statement": "PR orchestrator — runs changed-file scoped validation checks for pull request CI. Dispatches per-file validators based on PR diff.", + "pipeline_declared": "P2, P3", + "usage": "node tests/run-pr-checks.js [flags]", + "header": "/**\n * @script run-pr-checks\n * @category orchestrator\n * @purpose infrastructure:pipeline-orchestration\n * @scope changed\n * @owner docs\n * @needs R-R29\n * @purpose-statement PR orchestrator — runs changed-file scoped validation checks for pull request CI. Dispatches per-file validators based on PR diff.\n * @pipeline P2, P3\n * @usage node tests/run-pr-checks.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", - "pipeline": "P1" + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2", + "via_script": "test:pr" }, { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3", + "via_script": "test:pr" }, { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" + "type": "script", + "caller": "tests/unit/create-codex-pr.test.js", + "pipeline": "indirect" }, { "type": "script", - "caller": "tests/run-all.js", + "caller": "tests/unit/usefulness-rubric.test.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tests/run-pr-checks.js", + "caller": "tests/unit/validate-codex-task-contract.test.js", "pipeline": "indirect" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:mdx:safe" + "type": "script", + "caller": "tools/scripts/codex/task-preflight.js", + "pipeline": "indirect" }, { "type": "npm-script", - "caller": "tools/package.json", + "caller": "tests/package.json", "pipeline": "manual", - "script_name": "test:mdx:safe" + "script_name": "test:pr" } ], "outputs": [ @@ -2816,107 +3053,100 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:mdx:safe); manual (npm script: test:mdx:safe)", - "grade": "C", - "flags": [ - "invalid-scope" - ], - "trigger_group": "P1" + "pipeline_actual": "P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite); indirect via tests/unit/create-codex-pr.test.js; indirect via tests/unit/usefulness-rubric.test.js; indirect via tests/unit/validate-codex-task-contract.test.js; indirect via tools/scripts/codex/task-preflight.js; manual (npm script: test:pr)", + "grade": "B", + "flags": [], + "trigger_group": "P2" }, { - "path": "tests/integration/v2-link-audit.js", - "script": "v2-link-audit", + "path": "tests/integration/openapi-reference-audit.js", + "script": "openapi-reference-audit", "category": "validator", - "purpose": "qa:link-integrity", - "scope": "tests", + "purpose": "tooling:api-spec", + "scope": "full-repo", "owner": "docs", - "needs": "E-R12, E-R14", - "purpose_statement": "Comprehensive V2 MDX link audit — checks internal links, external links, anchor refs. Supports --staged, --full, --strict, --write-links modes.", - "pipeline_declared": "P1, P5, P6", - "usage": "node tests/integration/v2-link-audit.js [flags]", - "header": "/**\n * @script v2-link-audit\n * @category validator\n * @purpose qa:link-integrity\n * @scope tests\n * @owner docs\n * @needs E-R12, E-R14\n * @purpose-statement Comprehensive V2 MDX link audit — checks internal links, external links, anchor refs. Supports --staged, --full, --strict, --write-links modes.\n * @pipeline P1, P5, P6\n * @dualmode --full (validator) | --write-links (remediator)\n * @usage node tests/integration/v2-link-audit.js [flags]\n */", + "needs": "F-R17", + "purpose_statement": "Comprehensive OpenAPI spec validation — checks references, schemas, examples. Supports --strict (validate), --fix (repair), and report modes.", + "pipeline_declared": "P2, P3, P5, P6", + "usage": "node tests/integration/openapi-reference-audit.js [flags]", + "header": "/**\n * @script openapi-reference-audit\n * @category validator\n * @purpose tooling:api-spec\n * @scope full-repo\n * @owner docs\n * @needs F-R17\n * @purpose-statement Comprehensive OpenAPI spec validation — checks references, schemas, examples. Supports --strict (validate), --fix (repair), and report modes.\n * @pipeline P2, P3, P5, P6\n * @dualmode --strict (enforcer) | --fix (remediator)\n * @usage node tests/integration/openapi-reference-audit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", - "pipeline": "P1" - }, - { - "type": "script", - "caller": "tests/integration/v2-link-audit.selftest.js", - "pipeline": "indirect" + "type": "workflow-push", + "caller": ".github/workflows/openapi-reference-validation.yml", + "workflow": "OpenAPI Reference Validation", + "pipeline": "P2" }, { - "type": "script", - "caller": "tests/unit/create-codex-pr.test.js", - "pipeline": "indirect" + "type": "workflow-pr", + "caller": ".github/workflows/openapi-reference-validation.yml", + "workflow": "OpenAPI Reference Validation", + "pipeline": "P3" }, { - "type": "script", - "caller": "tests/unit/v2-link-audit.test.js", - "pipeline": "indirect" + "type": "workflow-schedule", + "caller": ".github/workflows/openapi-reference-validation.yml", + "workflow": "OpenAPI Reference Validation", + "pipeline": "P5", + "cron": "35 4 * * *" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:link-audit" + "type": "workflow-dispatch", + "caller": ".github/workflows/openapi-reference-validation.yml", + "workflow": "OpenAPI Reference Validation", + "pipeline": "P6" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:link-audit:staged" + "type": "script", + "caller": "tests/unit/openapi-reference-audit.test.js", + "pipeline": "indirect" }, { "type": "npm-script", "caller": "tests/package.json", "pipeline": "manual", - "script_name": "test:link-audit:external" + "script_name": "test:openapi:audit" } ], "outputs": [ { - "output_path": "tests/integration/hrefs.jsx", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tests/integration/hrefs.jsx", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via tests/integration/v2-link-audit.selftest.js; indirect via tests/unit/create-codex-pr.test.js; indirect via tests/unit/v2-link-audit.test.js; manual (npm script: test:link-audit); manual (npm script: test:link-audit:staged); manual (npm script: test:link-audit:external)", - "grade": "C", - "flags": [ - "invalid-scope", - "phantom-pipeline" - ], - "trigger_group": "P1" + "pipeline_actual": "P2 (OpenAPI Reference Validation); P3 (OpenAPI Reference Validation); P5 (OpenAPI Reference Validation cron 35 4 * * *); P6 (OpenAPI Reference Validation); indirect via tests/unit/openapi-reference-audit.test.js; manual (npm script: test:openapi:audit)", + "grade": "B", + "flags": [], + "trigger_group": "P2" }, { - "path": "tests/unit/links-imports.test.js", - "script": "links-imports.test", - "category": "validator", - "purpose": "qa:link-integrity", - "scope": "tests", + "path": "tools/scripts/test-v2-pages.js", + "script": "test-v2-pages", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "tools/scripts", "owner": "docs", - "needs": "E-R12, E-R14", - "purpose_statement": "Validates MDX internal links and snippet import paths are resolvable", - "pipeline_declared": "P1, P3", - "usage": "node tests/unit/links-imports.test.js [flags]", - "header": "/**\n * @script links-imports.test\n * @category validator\n * @purpose qa:link-integrity\n * @scope tests\n * @owner docs\n * @needs E-R12, E-R14\n * @purpose-statement Validates MDX internal links and snippet import paths are resolvable\n * @pipeline P1, P3\n * @usage node tests/unit/links-imports.test.js [flags]\n */", + "needs": "E-C6, F-C1", + "purpose_statement": "V2 page tester — validates v2 pages via Puppeteer browser rendering", + "pipeline_declared": "P2, P3", + "usage": "node tools/scripts/test-v2-pages.js [flags]", + "header": "/**\n * @script test-v2-pages\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement V2 page tester — validates v2 pages via Puppeteer browser rendering\n * @pipeline P2, P3\n * @usage node tools/scripts/test-v2-pages.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -2925,46 +3155,55 @@ "scope_valid": false, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" + "type": "workflow-push", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P2", + "via_script": "test:v2-pages" }, { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" + "type": "workflow-pr", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P3", + "via_script": "test:v2-pages" }, { "type": "script", - "caller": "tests/run-all.js", + "caller": "tests/integration/browser.test.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tests/run-pr-checks.js", + "caller": "tests/integration/v2-wcag-audit.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/integration/v2-wcag-audit.selftest.js", "pipeline": "indirect" }, { "type": "npm-script", - "caller": "tests/package.json", + "caller": "tools/package.json", "pipeline": "manual", - "script_name": "test:links" + "script_name": "test:v2-pages" }, { "type": "npm-script", "caller": "tools/package.json", "pipeline": "manual", - "script_name": "test:links" + "script_name": "test:all-pages" } ], "outputs": [ { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "output_path": "tools/scripts/v2-page-test-report.json", + "type": "generated-output", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "tools/scripts/v2-page-test-report.json", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -2973,25 +3212,31 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:links); manual (npm script: test:links)", + "pipeline_actual": "P2 (Docs CI - V2 Browser Sweep); P3 (Docs CI - V2 Browser Sweep); indirect via tests/integration/browser.test.js; indirect via tests/integration/v2-wcag-audit.js; indirect via tests/integration/v2-wcag-audit.selftest.js; manual (npm script: test:v2-pages); manual (npm script: test:all-pages)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P1" - }, + "trigger_group": "P2" + } + ], + "count": 9 + }, + "P3": { + "label": "P3 - PR gate", + "scripts": [ { - "path": "tests/unit/component-governance-generators.test.js", - "script": "component-governance-generators.test", - "category": "validator", - "purpose": "qa:repo-health", - "scope": "tests", + "path": "tools/scripts/check-codex-pr-overlap.js", + "script": "check-codex-pr-overlap", + "category": "enforcer", + "purpose": "governance:agent-governance", + "scope": "tools/scripts, .github/workflows, codex PR governance", "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Verifies component governance generators produce coherent registry, usage-map, and docs outputs.", - "pipeline_declared": "P1 (commit, via run-all)", - "usage": "node tests/unit/component-governance-generators.test.js", - "header": "/**\n * @script component-governance-generators.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Verifies component governance generators produce coherent registry, usage-map, and docs outputs.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/component-governance-generators.test.js\n */", + "needs": "R-R27, R-R30", + "purpose_statement": "PR enforcer — checks for conflicting codex PRs targeting the same files/branches", + "pipeline_declared": "P3 (PR, Track B)", + "usage": "node tools/scripts/check-codex-pr-overlap.js [flags]", + "header": "/**\n * @script check-codex-pr-overlap\n * @category enforcer\n * @purpose governance:agent-governance\n * @scope tools/scripts, .github/workflows, codex PR governance\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement PR enforcer — checks for conflicting codex PRs targeting the same files/branches\n * @pipeline P3 (PR, Track B)\n * @usage node tools/scripts/check-codex-pr-overlap.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3000,20 +3245,10 @@ "scope_valid": false, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" - }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" - }, - { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:components:governance" + "type": "workflow-pr", + "caller": ".github/workflows/codex-governance.yml", + "workflow": "Codex Governance", + "pipeline": "P3" } ], "outputs": [ @@ -3032,165 +3267,137 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:components:governance)", + "pipeline_actual": "P3 (Codex Governance)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P1" + "trigger_group": "P3" }, { - "path": "tests/unit/component-governance-utils.test.js", - "script": "component-governance-utils.test", - "category": "validator", - "purpose": "qa:repo-health", - "scope": "tests", + "path": "tests/unit/usefulness-journey.test.js", + "script": "usefulness-journey.test", + "category": "utility", + "purpose": "qa:content-quality", + "scope": "full-repo", "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Verifies shared component governance utility parsing, scanning, and archive exclusion behavior.", - "pipeline_declared": "P1 (commit, via run-all)", - "usage": "node tests/unit/component-governance-utils.test.js", - "header": "/**\n * @script component-governance-utils.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Verifies shared component governance utility parsing, scanning, and archive exclusion behavior.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/component-governance-utils.test.js\n */", + "needs": "R-R14, R-C6", + "purpose_statement": "Tests journey-check evaluation logic against fixture pages.", + "pipeline_declared": "P3", + "usage": "node tests/unit/usefulness-journey.test.js", + "header": "/**\n * @script usefulness-journey.test\n * @category utility\n * @purpose qa:content-quality\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Tests journey-check evaluation logic against fixture pages.\n * @pipeline P3\n * @usage node tests/unit/usefulness-journey.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" + "caller": "tests/run-pr-checks.js", + "pipeline": "P3" }, { "type": "script", - "caller": "tests/run-all.js", + "caller": "tests/run-pr-checks.js", "pipeline": "indirect" - }, - { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:components:governance" } ], "outputs": [ { - "output_path": "tests/unit/styling-scan.jsx", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tests/unit/styling-scan.jsx", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, - "category_match": true, + "category_match": false, "purpose_match": true, "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:components:governance)", - "grade": "C", + "pipeline_actual": "P3 via run-pr-checks; indirect via tests/run-pr-checks.js", + "grade": "B", "flags": [ - "invalid-scope" + "header-json-category-mismatch" ], - "trigger_group": "P1" + "trigger_group": "P3" }, { - "path": "tests/unit/docs-navigation.test.js", - "script": "docs-navigation.test", - "category": "validator", - "purpose": "qa:repo-health", - "scope": "tests, docs.json", + "path": "tests/unit/usefulness-rubric.test.js", + "script": "usefulness-rubric.test", + "category": "utility", + "purpose": "qa:content-quality", + "scope": "full-repo", "owner": "docs", - "needs": "E-C1, R-R14", - "purpose_statement": "Validates docs.json page-entry syntax, reports missing routes, warns on orphaned canonical v2 pages, suggests remaps, and optionally applies approved remaps", - "pipeline_declared": "P1, P3, P6", - "usage": "node tests/unit/docs-navigation.test.js [flags]", - "header": "/**\n * @script docs-navigation.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests, docs.json\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Validates docs.json page-entry syntax, reports missing routes, warns on orphaned canonical v2 pages, suggests remaps, and optionally applies approved remaps\n * @pipeline P1, P3, P6\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/docs-navigation.test.js [flags]\n */", + "needs": "R-R14, R-C6", + "purpose_statement": "Tests rubric-based scoring logic against fixture pages.", + "pipeline_declared": "P3", + "usage": "node tests/unit/usefulness-rubric.test.js", + "header": "/**\n * @script usefulness-rubric.test\n * @category utility\n * @purpose qa:content-quality\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Tests rubric-based scoring logic against fixture pages.\n * @pipeline P3\n * @usage node tests/unit/usefulness-rubric.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ - { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" - }, { "type": "runner", "caller": "tests/run-pr-checks.js", "pipeline": "P3" }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" - }, { "type": "script", "caller": "tests/run-pr-checks.js", "pipeline": "indirect" - }, - { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:docs-nav" - }, - { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:docs-nav:write" } ], "outputs": [ { - "output_path": "tests/unit/tasks/reports/navigation-links/navigation-report.json", - "type": "generated-output", - "call": "writeFileSync" - }, - { - "output_path": "tests/unit/tasks/reports/navigation-links/navigation-report.md", - "type": "generated-output", - "call": "writeFileSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": "tests/unit/tasks/reports/navigation-links/navigation-report.json, tests/unit/tasks/reports/navigation-links/navigation-report.md", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, - "category_match": true, + "category_match": false, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:docs-nav); manual (npm script: test:docs-nav:write)", - "grade": "C", + "pipeline_actual": "P3 via run-pr-checks; indirect via tests/run-pr-checks.js", + "grade": "B", "flags": [ - "invalid-scope", - "phantom-pipeline" + "header-json-category-mismatch" ], - "trigger_group": "P1" - }, + "trigger_group": "P3" + } + ], + "count": 3 + }, + "P5": { + "label": "P5 - Scheduled", + "scripts": [ { - "path": "tests/unit/script-docs.test.js", - "script": "script-docs-test", - "category": "validator", - "purpose": "qa:repo-health", - "scope": ".githooks, .github/scripts, tests, tools/scripts, tasks/scripts, docs-guide/indexes/scripts-index.mdx", + "path": ".github/scripts/fetch-forum-data.js", + "script": "fetch-forum-data", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": ".github/scripts", "owner": "docs", - "needs": "E-C1, R-R14", - "purpose_statement": "Enforces script header schema, keeps group script indexes in sync, and builds aggregate script index", - "pipeline_declared": "P1, P3", - "usage": "node tests/unit/script-docs.test.js [flags]", - "header": "/**\n * @script script-docs-test\n * @category validator\n * @purpose qa:repo-health\n * @scope .githooks, .github/scripts, tests, tools/scripts, tasks/scripts, docs-guide/indexes/scripts-index.mdx\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Enforces script header schema, keeps group script indexes in sync, and builds aggregate script index\n * @pipeline P1, P3\n * @dualmode --check (validator) | --write --rebuild-indexes (generator)\n * @usage node tests/unit/script-docs.test.js [flags]\n */", + "needs": "F-R1", + "purpose_statement": "Fetches latest topics and posts from Livepeer Forum API, writes to snippets/automations/forum/", + "pipeline_declared": "P5, P6", + "usage": "node .github/scripts/fetch-forum-data.js [flags]", + "header": "/**\n * @script fetch-forum-data\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope .github/scripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement Fetches latest topics and posts from Livepeer Forum API, writes to snippets/automations/forum/\n * @pipeline P5, P6\n * @usage node .github/scripts/fetch-forum-data.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3199,50 +3406,32 @@ "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", - "pipeline": "P1" - }, - { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" - }, - { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" - }, - { - "type": "script", - "caller": ".githooks/pre-commit", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" + "type": "workflow-schedule", + "caller": ".github/workflows/update-forum-data.yml", + "workflow": "Update Forum Data", + "pipeline": "P5", + "cron": "0 0 * * *" }, { - "type": "npm-script", - "caller": "tests/package.json", - "pipeline": "manual", - "script_name": "test:scripts" + "type": "workflow-dispatch", + "caller": ".github/workflows/update-forum-data.yml", + "workflow": "Update Forum Data", + "pipeline": "P6" } ], "outputs": [ { - "output_path": "", - "type": "stdout", + "output_path": ".github/scripts/snippets/automations/forum", + "type": "directory", + "call": "mkdirSync" + }, + { + "output_path": ".github/scripts/snippets/automations/forum/forumData.jsx", + "type": "generated-output", "call": "writeFileSync" } ], - "outputs_display": "", + "outputs_display": ".github/scripts/snippets/automations/forum, .github/scripts/snippets/automations/forum/forumData.jsx", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -3251,121 +3440,142 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P1 via run-all; P3 via run-pr-checks; indirect via .githooks/pre-commit; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:scripts)", + "pipeline_actual": "P5 (Update Forum Data cron 0 0 * * *); P6 (Update Forum Data)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P1" + "trigger_group": "P5" }, { - "path": "tools/scripts/validators/components/check-component-css.js", - "script": "check-component-css", - "category": "validator", - "purpose": "qa:repo-health", - "scope": "single-domain", + "path": ".github/scripts/fetch-ghost-blog-data.js", + "script": "fetch-ghost-blog-data", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": ".github/scripts", "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Validates component files against component governance styling rules.", - "pipeline_declared": "P1, P2, P3", - "usage": "node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help]", - "header": "/**\n * @script check-component-css\n * @category validator\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates component files against component governance styling rules.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help]\n */", + "needs": "F-R1", + "purpose_statement": "Fetches blog posts from Ghost CMS API, writes to snippets/automations/blog/", + "pipeline_declared": "P5, P6", + "usage": "node .github/scripts/fetch-ghost-blog-data.js [flags]", + "header": "/**\n * @script fetch-ghost-blog-data\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope .github/scripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement Fetches blog posts from Ghost CMS API, writes to snippets/automations/blog/\n * @pipeline P5, P6\n * @usage node .github/scripts/fetch-ghost-blog-data.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", - "pipeline": "P1" + "type": "workflow-schedule", + "caller": ".github/workflows/update-ghost-blog-data.yml", + "workflow": "Update Ghost Blog Data", + "pipeline": "P5", + "cron": "0 0 * * *" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/update-ghost-blog-data.yml", + "workflow": "Update Ghost Blog Data", + "pipeline": "P6" } ], "outputs": [ { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "output_path": ".github/scripts/snippets/automations/blog", + "type": "directory", + "call": "mkdirSync" + }, + { + "output_path": ".github/scripts/snippets/automations/blog/ghostBlogData.jsx", + "type": "generated-output", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": ".github/scripts/snippets/automations/blog, .github/scripts/snippets/automations/blog/ghostBlogData.jsx", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit)", - "grade": "B", + "pipeline_actual": "P5 (Update Ghost Blog Data cron 0 0 * * *); P6 (Update Ghost Blog Data)", + "grade": "C", "flags": [ - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "P1" + "trigger_group": "P5" }, { - "path": "tools/scripts/validators/components/check-component-docs.js", - "script": "check-component-docs", - "category": "validator", - "purpose": "qa:repo-health", - "scope": "single-domain", + "path": ".github/scripts/fetch-youtube-data.js", + "script": "fetch-youtube-data", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": ".github/scripts", "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Validates component JSDoc coverage, prop documentation, docs-entry coverage, and governance metadata.", - "pipeline_declared": "P1, P2, P3", - "usage": "node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help]", - "header": "/**\n * @script check-component-docs\n * @category validator\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates component JSDoc coverage, prop documentation, docs-entry coverage, and governance metadata.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help]\n */", + "needs": "F-R1", + "purpose_statement": "Fetches video data from YouTube Data API, writes to snippets/automations/youtube/", + "pipeline_declared": "P5, P6", + "usage": "node .github/scripts/fetch-youtube-data.js [flags]", + "header": "/**\n * @script fetch-youtube-data\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope .github/scripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement Fetches video data from YouTube Data API, writes to snippets/automations/youtube/\n * @pipeline P5, P6\n * @usage node .github/scripts/fetch-youtube-data.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { - "type": "pre-commit", - "caller": ".githooks/pre-commit", - "pipeline": "P1" + "type": "workflow-schedule", + "caller": ".github/workflows/update-youtube-data.yml", + "workflow": "Update YouTube Data", + "pipeline": "P5", + "cron": "0 0 * * 0" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/update-youtube-data.yml", + "workflow": "Update YouTube Data", + "pipeline": "P6" } ], "outputs": [ { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "output_path": ".github/scripts/snippets/automations/youtube/youtubeData.jsx", + "type": "generated-output", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": ".github/scripts/snippets/automations/youtube/youtubeData.jsx", "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit)", - "grade": "B", + "pipeline_actual": "P5 (Update YouTube Data cron 0 0 * * 0); P6 (Update YouTube Data)", + "grade": "C", "flags": [ - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "P1" + "trigger_group": "P5" }, { - "path": "tools/scripts/validators/components/check-naming-conventions.js", - "script": "check-naming-conventions", - "category": "validator", - "purpose": "qa:repo-health", - "scope": "tools/scripts/validators/components, tests/run-all.js, tests/run-pr-checks.js, snippets/components", + "path": ".github/scripts/project-showcase-sync.js", + "script": "project-showcase-sync", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": ".github/scripts", "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Validates active component filenames against directory-aware file naming and PascalCase exports under snippets/components.", - "pipeline_declared": "P1, P3", - "usage": "node tools/scripts/validators/components/check-naming-conventions.js [--path snippets/components] [--files path[,path...]] [--mode migration|strict-camel]", - "header": "/**\n * @script check-naming-conventions\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts/validators/components, tests/run-all.js, tests/run-pr-checks.js, snippets/components\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates active component filenames against directory-aware file naming and PascalCase exports under snippets/components.\n * @pipeline P1, P3\n * @usage node tools/scripts/validators/components/check-naming-conventions.js [--path snippets/components] [--files path[,path...]] [--mode migration|strict-camel]\n */", + "needs": "F-R1", + "purpose_statement": "Fetches project showcase data from external source, writes to snippets/automations/showcase/", + "pipeline_declared": "P5, P6", + "usage": "node .github/scripts/project-showcase-sync.js [flags]", + "header": "/**\n * @script project-showcase-sync\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope .github/scripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement Fetches project showcase data from external source, writes to snippets/automations/showcase/\n * @pipeline P5, P6\n * @usage node .github/scripts/project-showcase-sync.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3374,24 +3584,17 @@ "scope_valid": false, "triggers": [ { - "type": "runner", - "caller": "tests/run-all.js", - "pipeline": "P1" - }, - { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" - }, - { - "type": "script", - "caller": "tests/run-all.js", - "pipeline": "indirect" + "type": "workflow-schedule", + "caller": ".github/workflows/project-showcase-sync.yml", + "workflow": "Project Showcase Sync", + "pipeline": "P5", + "cron": "*/15 * * * *" }, { - "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" + "type": "workflow-dispatch", + "caller": ".github/workflows/project-showcase-sync.yml", + "workflow": "Project Showcase Sync", + "pipeline": "P6" } ], "outputs": [ @@ -3410,31 +3613,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js", + "pipeline_actual": "P5 (Project Showcase Sync cron */15 * * * *); P6 (Project Showcase Sync)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P1" - } - ], - "count": 32 - }, - "P2": { - "label": "P2 - Push gate", - "scripts": [ + "trigger_group": "P5" + }, { - "path": ".githooks/pre-push", - "script": "pre-push", - "category": "orchestrator", - "purpose": "infrastructure:pipeline-orchestration", - "scope": ".githooks, tools/scripts/validate-codex-task-contract.js, .codex/task-contract.yaml", + "path": "tools/scripts/docs-quality-and-freshness-audit.js", + "script": "docs-quality-and-freshness-audit", + "category": "validator", + "purpose": "qa:content-quality", + "scope": "tools/scripts, v2, tasks/reports/quality-accessibility", "owner": "docs", - "needs": "R-R29", - "purpose_statement": "Pre-push hook — blocks push if AI stash files present, codex locks stale, or task contract invalid", - "pipeline_declared": "P2 (push, hook entry point)", - "usage": "bash .githooks/pre-push [flags]", - "header": "# @script pre-push\n# @category orchestrator\n# @purpose infrastructure:pipeline-orchestration\n# @scope .githooks, tools/scripts/validate-codex-task-contract.js, .codex/task-contract.yaml\n# @owner docs\n# @needs R-R29\n# @purpose-statement Pre-push hook — blocks push if AI stash files present, codex locks stale, or task contract invalid\n# @pipeline P2 (push, hook entry point)\n# @usage bash .githooks/pre-push [flags]", + "needs": "E-R1, R-R11", + "purpose_statement": "Content freshness audit — checks for TODO/TBD/Coming Soon markers, thin pages, stale content", + "pipeline_declared": "P5, P6", + "usage": "node tools/scripts/docs-quality-and-freshness-audit.js [flags]", + "header": "/**\n * @script docs-quality-and-freshness-audit\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts, v2, tasks/reports/quality-accessibility\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Content freshness audit — checks for TODO/TBD/Coming Soon markers, thin pages, stale content\n * @pipeline P5, P6\n * @usage node tools/scripts/docs-quality-and-freshness-audit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3443,13 +3640,38 @@ "scope_valid": false, "triggers": [ { - "type": "pre-push", - "caller": ".githooks/pre-push", - "pipeline": "P2" + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "audit:docs-quality" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs": [ + { + "output_path": "tools/scripts/${STAGE_ID}.json", + "type": "generated-output", + "call": "writeFileSync" + }, + { + "output_path": "tools/scripts/${STAGE_ID}.md", + "type": "generated-output", + "call": "writeFileSync" + } + ], + "outputs_display": "tools/scripts/${STAGE_ID}.json, tools/scripts/${STAGE_ID}.md", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -3458,153 +3680,154 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P2 (pre-push)", + "pipeline_actual": "P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); manual (npm script: audit:docs-quality)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "P2" - } - ], - "count": 1 - }, - "P3": { - "label": "P3 - PR gate", - "scripts": [ + "trigger_group": "P5" + }, { - "path": "tests/unit/usefulness-journey.test.js", - "script": "usefulness-journey.test", - "category": "utility", - "purpose": "qa:content-quality", - "scope": "full-repo", + "path": "tools/scripts/audit-component-usage.js", + "script": "audit-component-usage", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "tools/scripts", "owner": "docs", - "needs": "R-R14, R-C6", - "purpose_statement": "Tests journey-check evaluation logic against fixture pages.", - "pipeline_declared": "P3", - "usage": "node tests/unit/usefulness-journey.test.js", - "header": "/**\n * @script usefulness-journey.test\n * @category utility\n * @purpose qa:content-quality\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Tests journey-check evaluation logic against fixture pages.\n * @pipeline P3\n * @usage node tests/unit/usefulness-journey.test.js\n */", + "needs": "E-C1, R-R14", + "purpose_statement": "Component usage auditor — scans pages for component usage patterns and reports statistics", + "pipeline_declared": "P5, P6", + "usage": "node tools/scripts/audit-component-usage.js [flags]", + "header": "/**\n * @script audit-component-usage\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Component usage auditor — scans pages for component usage patterns and reports statistics\n * @pipeline P5, P6\n * @usage node tools/scripts/audit-component-usage.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" }, { - "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" } ], "outputs": [ { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "output_path": "tools/scripts/component-usage-audit.json", + "type": "generated-output", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "tools/scripts/component-usage-audit.json", "downstream_consumers": [], "downstream_display": "No", "in_json": true, - "category_match": false, + "category_match": true, "purpose_match": true, "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P3 via run-pr-checks; indirect via tests/run-pr-checks.js", - "grade": "B", + "pipeline_actual": "P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check)", + "grade": "C", "flags": [ - "header-json-category-mismatch" + "invalid-scope" ], - "trigger_group": "P3" + "trigger_group": "P5" }, { - "path": "tests/unit/usefulness-rubric.test.js", - "script": "usefulness-rubric.test", - "category": "utility", - "purpose": "qa:content-quality", - "scope": "full-repo", + "path": "tools/scripts/component-layout-governance.js", + "script": "component-layout-governance", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "tools/scripts, v2, tools/config/component-layout-profile.json", "owner": "docs", - "needs": "R-R14, R-C6", - "purpose_statement": "Tests rubric-based scoring logic against fixture pages.", - "pipeline_declared": "P3", - "usage": "node tests/unit/usefulness-rubric.test.js", - "header": "/**\n * @script usefulness-rubric.test\n * @category utility\n * @purpose qa:content-quality\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Tests rubric-based scoring logic against fixture pages.\n * @pipeline P3\n * @usage node tests/unit/usefulness-rubric.test.js\n */", + "needs": "E-C1, R-R14", + "purpose_statement": "Component layout governance validator — checks v2 page layouts against approved component contracts", + "pipeline_declared": "P5, P6", + "usage": "node tools/scripts/component-layout-governance.js [flags]", + "header": "/**\n * @script component-layout-governance\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, v2, tools/config/component-layout-profile.json\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Component layout governance validator — checks v2 page layouts against approved component contracts\n * @pipeline P5, P6\n * @usage node tools/scripts/component-layout-governance.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { - "type": "runner", - "caller": "tests/run-pr-checks.js", - "pipeline": "P3" + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" }, { - "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "audit:component-layout" } ], "outputs": [ { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "output_path": "tools/scripts/${STAGE_ID}.json", + "type": "generated-output", + "call": "writeFileSync" + }, + { + "output_path": "tools/scripts/${STAGE_ID}.md", + "type": "generated-output", + "call": "writeFileSync" } ], - "outputs_display": "stdout only", + "outputs_display": "tools/scripts/${STAGE_ID}.json, tools/scripts/${STAGE_ID}.md", "downstream_consumers": [], "downstream_display": "No", "in_json": true, - "category_match": false, + "category_match": true, "purpose_match": true, "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P3 via run-pr-checks; indirect via tests/run-pr-checks.js", - "grade": "B", + "pipeline_actual": "P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); manual (npm script: audit:component-layout)", + "grade": "C", "flags": [ - "header-json-category-mismatch" + "invalid-scope" ], - "trigger_group": "P3" + "trigger_group": "P5" } ], - "count": 2 - }, - "P5": { - "label": "P5 - Scheduled", - "scripts": [], - "count": 0 + "count": 7 }, "P6": { "label": "P6 - On-demand", - "scripts": [], - "count": 0 - }, - "Indirect": { - "label": "Indirect - Library", "scripts": [ { - "path": "tools/scripts/dev/seo-generator-safe.js", - "script": "seo-generator-safe", + "path": "tools/scripts/snippets/generate-seo.js", + "script": "generate-seo", "category": "generator", "purpose": "feature:seo", "scope": "tools/scripts", "owner": "docs", "needs": "E-R19, F-R7", - "purpose_statement": "Safe SEO generator — generates SEO metadata with dry-run and rollback safety", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", - "usage": "node tools/scripts/dev/seo-generator-safe.js [flags]", - "header": "/**\n * @script seo-generator-safe\n * @category generator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Safe SEO generator — generates SEO metadata with dry-run and rollback safety\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/seo-generator-safe.js [flags]\n */", + "purpose_statement": "SEO generator — generates SEO metadata (title, description, keywords) for v2 pages from content analysis", + "pipeline_declared": "P6 (on-demand, SEO refresh)", + "usage": "node tools/scripts/snippets/generate-seo.js [flags]", + "header": "/**\n * @script generate-seo\n * @category generator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement SEO generator — generates SEO metadata (title, description, keywords) for v2 pages from content analysis\n * @pipeline P6 (on-demand, SEO refresh)\n * @usage node tools/scripts/snippets/generate-seo.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3613,19 +3836,32 @@ "scope_valid": false, "triggers": [ { - "type": "script", - "caller": "tools/scripts/dev/test-seo-generator.js", - "pipeline": "indirect" + "type": "workflow-dispatch", + "caller": ".github/workflows/seo-refresh.yml", + "workflow": "SEO Metadata Refresh", + "pipeline": "P6" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "generate-seo" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "generate-seo:dry-run" } ], "outputs": [ { - "output_path": "", + "output_path": "stdout", "type": "stdout", - "call": "writeFileSync" + "call": "console" } ], - "outputs_display": "", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -3634,25 +3870,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/dev/test-seo-generator.js", + "pipeline_actual": "P6 (SEO Metadata Refresh); manual (npm script: generate-seo); manual (npm script: generate-seo:dry-run)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "Indirect" + "trigger_group": "P6" }, { - "path": "tools/scripts/dev/update-og-image.js", - "script": "update-og-image", - "category": "remediator", - "purpose": "feature:seo", - "scope": "tools/scripts", + "path": "tools/scripts/i18n/generate-localized-docs-json.js", + "script": "generate-localized-docs-json", + "category": "generator", + "purpose": "feature:translation", + "scope": "docs.json, tools/scripts/i18n", "owner": "docs", - "needs": "E-R19, F-R7", - "purpose_statement": "Single OG image updater — updates og:image for one page", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", - "usage": "node tools/scripts/dev/update-og-image.js [flags]", - "header": "/**\n * @script update-og-image\n * @category remediator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Single OG image updater — updates og:image for one page\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/update-og-image.js [flags]\n */", + "needs": "F-R6, F-R7", + "purpose_statement": "Locale docs.json generator — produces localised docs.json variants from route-map and source docs.json", + "pipeline_declared": "P6 (on-demand, translation pipeline)", + "usage": "node tools/scripts/i18n/generate-localized-docs-json.js [flags]", + "header": "/**\n * @script generate-localized-docs-json\n * @category generator\n * @purpose feature:translation\n * @scope docs.json, tools/scripts/i18n\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Locale docs.json generator — produces localised docs.json variants from route-map and source docs.json\n * @pipeline P6 (on-demand, translation pipeline)\n * @usage node tools/scripts/i18n/generate-localized-docs-json.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3660,10 +3896,22 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" + }, { "type": "script", - "caller": "tools/scripts/dev/batch-update-og-image.sh", + "caller": "tools/scripts/i18n/test/cli-guardrails.test.js", "pipeline": "indirect" + }, + { + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "i18n:docs-json" } ], "outputs": [ @@ -3682,25 +3930,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/dev/batch-update-og-image.sh", + "pipeline_actual": "P6 (Docs Translation Pipeline); indirect via tools/scripts/i18n/test/cli-guardrails.test.js; manual (npm script: i18n:docs-json)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "Indirect" + "trigger_group": "P6" }, { - "path": "tools/scripts/i18n/lib/common.js", - "script": "common", - "category": "utility", + "path": "tools/scripts/i18n/translate-docs.js", + "script": "translate-docs", + "category": "generator", "purpose": "feature:translation", - "scope": "tools/scripts", + "scope": "tools/scripts/i18n, docs.json, v2", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "i18n shared utilities — common helper functions for translation pipeline", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/common.js [flags]", - "header": "/**\n * @script common\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement i18n shared utilities — common helper functions for translation pipeline\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/common.js [flags]\n */", + "purpose_statement": "Translation generator — translates v2 MDX pages to target languages via OpenRouter API", + "pipeline_declared": "P6 (on-demand, translation pipeline)", + "usage": "node tools/scripts/i18n/translate-docs.js [flags]", + "header": "/**\n * @script translate-docs\n * @category generator\n * @purpose feature:translation\n * @scope tools/scripts/i18n, docs.json, v2\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Translation generator — translates v2 MDX pages to target languages via OpenRouter API\n * @pipeline P6 (on-demand, translation pipeline)\n * @usage node tools/scripts/i18n/translate-docs.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3709,48 +3957,31 @@ "scope_valid": false, "triggers": [ { - "type": "script", - "caller": "tools/scripts/i18n/generate-localized-docs-json.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/lib/config.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/lib/docs-json-localizer.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/lib/docs-routes.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/lib/path-utils.js", - "pipeline": "indirect" + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" }, { "type": "script", - "caller": "tools/scripts/i18n/lib/provider-openrouter.js", + "caller": "tools/scripts/i18n/test/cli-guardrails.test.js", "pipeline": "indirect" }, { - "type": "script", - "caller": "tools/scripts/i18n/translate-docs.js", - "pipeline": "indirect" - }, + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "i18n:translate" + } + ], + "outputs": [ { - "type": "script", - "caller": "tools/scripts/i18n/validate-generated.js", - "pipeline": "indirect" + "output_path": "", + "type": "stdout", + "call": "writeJson" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs_display": "", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -3759,55 +3990,53 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/lib/config.js; indirect via tools/scripts/i18n/lib/docs-json-localizer.js; indirect via tools/scripts/i18n/lib/docs-routes.js; indirect via tools/scripts/i18n/lib/path-utils.js; indirect via tools/scripts/i18n/lib/provider-openrouter.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", + "pipeline_actual": "P6 (Docs Translation Pipeline); indirect via tools/scripts/i18n/test/cli-guardrails.test.js; manual (npm script: i18n:translate)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "Indirect" + "trigger_group": "P6" }, { - "path": "tools/scripts/i18n/lib/config.js", - "script": "config", - "category": "utility", + "path": "tools/scripts/i18n/validate-generated.js", + "script": "validate-generated", + "category": "validator", "purpose": "feature:translation", - "scope": "tools/scripts", + "scope": "tools/scripts/i18n, v2", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "i18n configuration — language codes, locale paths, translation settings", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/config.js [flags]", - "header": "/**\n * @script config\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement i18n configuration — language codes, locale paths, translation settings\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/config.js [flags]\n */", - "header_field_count": 8, - "has_any_header": true, - "has_framework_header": true, + "purpose_statement": "Generated localisation validator — checks generated translated MDX files and route-map outputs for integrity", + "pipeline_declared": "P6", + "usage": "node tools/scripts/i18n/validate-generated.js [flags]", + "header": "/**\n * @script validate-generated\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts/i18n, v2\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Generated localisation validator — checks generated translated MDX files and route-map outputs for integrity\n * @pipeline P6\n * @usage node tools/scripts/i18n/validate-generated.js [flags]\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, "category_valid": true, "purpose_valid": true, "scope_valid": false, "triggers": [ { - "type": "script", - "caller": "tools/scripts/enforce-generated-file-banners.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/generate-localized-docs-json.js", - "pipeline": "indirect" + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" }, { - "type": "script", - "caller": "tools/scripts/i18n/translate-docs.js", - "pipeline": "indirect" - }, + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "i18n:validate" + } + ], + "outputs": [ { - "type": "script", - "caller": "tools/scripts/i18n/validate-generated.js", - "pipeline": "indirect" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -3816,25 +4045,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/enforce-generated-file-banners.js; indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", + "pipeline_actual": "P6 (Docs Translation Pipeline); manual (npm script: i18n:validate)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "Indirect" + "trigger_group": "P6" }, { - "path": "tools/scripts/i18n/lib/docs-json-localizer.js", - "script": "docs-json-localizer", - "category": "utility", - "purpose": "feature:translation", - "scope": "tools/scripts", + "path": "tools/scripts/style-and-language-homogenizer-en-gb.js", + "script": "style-and-language-homogenizer-en-gb", + "category": "remediator", + "purpose": "tooling:dev-tools", + "scope": "tools/scripts, v2, tools/config/style-language-profile-en-gb.json", "owner": "docs", - "needs": "F-R6, F-R7", - "purpose_statement": "docs.json localiser engine — transforms docs.json navigation for locale variants", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/docs-json-localizer.js [flags]", - "header": "/**\n * @script docs-json-localizer\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement docs.json localiser engine — transforms docs.json navigation for locale variants\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/docs-json-localizer.js [flags]\n */", + "needs": "E-C6, F-C1", + "purpose_statement": "EN-GB style homogeniser — finds and fixes American English spellings, style guide violations, and formatting inconsistencies across v2 content", + "pipeline_declared": "P6 (on-demand, repair)", + "usage": "node tools/scripts/style-and-language-homogenizer-en-gb.js [flags]", + "header": "/**\n * @script style-and-language-homogenizer-en-gb\n * @category remediator\n * @purpose tooling:dev-tools\n * @scope tools/scripts, v2, tools/config/style-language-profile-en-gb.json\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement EN-GB style homogeniser — finds and fixes American English spellings, style guide violations, and formatting inconsistencies across v2 content\n * @pipeline P6 (on-demand, repair)\n * @usage node tools/scripts/style-and-language-homogenizer-en-gb.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3843,18 +4072,31 @@ "scope_valid": false, "triggers": [ { - "type": "script", - "caller": "tools/scripts/i18n/generate-localized-docs-json.js", - "pipeline": "indirect" + "type": "workflow-dispatch", + "caller": ".github/workflows/style-homogenise.yml", + "workflow": "EN-GB Style Homogenisation", + "pipeline": "P6" }, { - "type": "script", - "caller": "tools/scripts/i18n/test/docs-json-localizer.test.js", - "pipeline": "indirect" + "type": "npm-script", + "caller": "tools/package.json", + "pipeline": "manual", + "script_name": "audit:language-en-gb" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs": [ + { + "output_path": "tools/scripts/${STAGE_ID}.json", + "type": "generated-output", + "call": "writeFileSync" + }, + { + "output_path": "tools/scripts/${STAGE_ID}.md", + "type": "generated-output", + "call": "writeFileSync" + } + ], + "outputs_display": "tools/scripts/${STAGE_ID}.json, tools/scripts/${STAGE_ID}.md", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -3863,25 +4105,31 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/test/docs-json-localizer.test.js", + "pipeline_actual": "P6 (EN-GB Style Homogenisation); manual (npm script: audit:language-en-gb)", "grade": "C", "flags": [ "invalid-scope" ], - "trigger_group": "Indirect" - }, + "trigger_group": "P6" + } + ], + "count": 5 + }, + "Indirect": { + "label": "Indirect - Library", + "scripts": [ { - "path": "tools/scripts/i18n/lib/docs-routes.js", - "script": "docs-routes", - "category": "utility", - "purpose": "feature:translation", + "path": "tools/scripts/dev/seo-generator-safe.js", + "script": "seo-generator-safe", + "category": "generator", + "purpose": "feature:seo", "scope": "tools/scripts", "owner": "docs", - "needs": "F-R6, F-R7", - "purpose_statement": "docs route resolver — maps page paths to locale-aware routes", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/docs-routes.js [flags]", - "header": "/**\n * @script docs-routes\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement docs route resolver — maps page paths to locale-aware routes\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/docs-routes.js [flags]\n */", + "needs": "E-R19, F-R7", + "purpose_statement": "Safe SEO generator — generates SEO metadata with dry-run and rollback safety", + "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "usage": "node tools/scripts/dev/seo-generator-safe.js [flags]", + "header": "/**\n * @script seo-generator-safe\n * @category generator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Safe SEO generator — generates SEO metadata with dry-run and rollback safety\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/seo-generator-safe.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3891,22 +4139,18 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/generate-localized-docs-json.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/translate-docs.js", + "caller": "tools/scripts/dev/test-seo-generator.js", "pipeline": "indirect" - }, + } + ], + "outputs": [ { - "type": "script", - "caller": "tools/scripts/i18n/validate-generated.js", - "pipeline": "indirect" + "output_path": "", + "type": "stdout", + "call": "writeFileSync" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs_display": "", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -3915,7 +4159,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", + "pipeline_actual": "indirect via tools/scripts/dev/test-seo-generator.js", "grade": "C", "flags": [ "invalid-scope" @@ -3923,17 +4167,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/i18n/lib/frontmatter.js", - "script": "frontmatter", - "category": "utility", - "purpose": "feature:translation", + "path": "tools/scripts/dev/update-og-image.js", + "script": "update-og-image", + "category": "remediator", + "purpose": "feature:seo", "scope": "tools/scripts", "owner": "docs", - "needs": "F-R6, F-R7", - "purpose_statement": "Frontmatter parser/writer — reads and writes MDX frontmatter for translation", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/frontmatter.js [flags]", - "header": "/**\n * @script frontmatter\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Frontmatter parser/writer — reads and writes MDX frontmatter for translation\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/frontmatter.js [flags]\n */", + "needs": "E-R19, F-R7", + "purpose_statement": "Single OG image updater — updates og:image for one page", + "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "usage": "node tools/scripts/dev/update-og-image.js [flags]", + "header": "/**\n * @script update-og-image\n * @category remediator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Single OG image updater — updates og:image for one page\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/update-og-image.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -3943,27 +4187,18 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/test/frontmatter.test.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/test/provenance.test.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/translate-docs.js", + "caller": "tools/scripts/dev/batch-update-og-image.sh", "pipeline": "indirect" - }, + } + ], + "outputs": [ { - "type": "script", - "caller": "tools/scripts/i18n/validate-generated.js", - "pipeline": "indirect" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -3972,7 +4207,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/test/frontmatter.test.js; indirect via tools/scripts/i18n/test/provenance.test.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", + "pipeline_actual": "indirect via tools/scripts/dev/batch-update-og-image.sh", "grade": "C", "flags": [ "invalid-scope" @@ -3980,17 +4215,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/i18n/lib/mdx-parser.js", - "script": "mdx-parser", + "path": "tools/scripts/i18n/lib/common.js", + "script": "common", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "MDX parser for i18n — extracts translatable content blocks from MDX", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/mdx-parser.js [flags]", - "header": "/**\n * @script mdx-parser\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement MDX parser for i18n — extracts translatable content blocks from MDX\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/mdx-parser.js [flags]\n */", + "purpose_statement": "i18n shared utilities — common helper functions for translation pipeline", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/common.js [flags]", + "header": "/**\n * @script common\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement i18n shared utilities — common helper functions for translation pipeline\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/common.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4000,17 +4235,42 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/lib/mdx-translate.js", + "caller": "tools/scripts/i18n/generate-localized-docs-json.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/i18n/validate-generated.js", + "caller": "tools/scripts/i18n/lib/config.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/remediators/content/repair-spelling.js", + "caller": "tools/scripts/i18n/lib/docs-json-localizer.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/lib/docs-routes.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/lib/path-utils.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/lib/provider-openrouter.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/translate-docs.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/validate-generated.js", "pipeline": "indirect" } ], @@ -4024,7 +4284,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/lib/mdx-translate.js; indirect via tools/scripts/i18n/validate-generated.js; indirect via tools/scripts/remediators/content/repair-spelling.js", + "pipeline_actual": "indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/lib/config.js; indirect via tools/scripts/i18n/lib/docs-json-localizer.js; indirect via tools/scripts/i18n/lib/docs-routes.js; indirect via tools/scripts/i18n/lib/path-utils.js; indirect via tools/scripts/i18n/lib/provider-openrouter.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", "grade": "C", "flags": [ "invalid-scope" @@ -4032,17 +4292,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/i18n/lib/mdx-translate.js", - "script": "mdx-translate", + "path": "tools/scripts/i18n/lib/config.js", + "script": "config", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "MDX translation engine — applies translations to MDX content blocks", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/mdx-translate.js [flags]", - "header": "/**\n * @script mdx-translate\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement MDX translation engine — applies translations to MDX content blocks\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/mdx-translate.js [flags]\n */", + "purpose_statement": "i18n configuration — language codes, locale paths, translation settings", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/config.js [flags]", + "header": "/**\n * @script config\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement i18n configuration — language codes, locale paths, translation settings\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/config.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4052,22 +4312,22 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/lib/docs-json-localizer.js", + "caller": "tools/scripts/enforce-generated-file-banners.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/i18n/lib/frontmatter.js", + "caller": "tools/scripts/i18n/generate-localized-docs-json.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/i18n/test/mdx-translate.test.js", + "caller": "tools/scripts/i18n/translate-docs.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/i18n/translate-docs.js", + "caller": "tools/scripts/i18n/validate-generated.js", "pipeline": "indirect" } ], @@ -4081,7 +4341,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/lib/docs-json-localizer.js; indirect via tools/scripts/i18n/lib/frontmatter.js; indirect via tools/scripts/i18n/test/mdx-translate.test.js; indirect via tools/scripts/i18n/translate-docs.js", + "pipeline_actual": "indirect via tools/scripts/enforce-generated-file-banners.js; indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", "grade": "C", "flags": [ "invalid-scope" @@ -4089,17 +4349,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/i18n/lib/path-utils.js", - "script": "path-utils", + "path": "tools/scripts/i18n/lib/docs-json-localizer.js", + "script": "docs-json-localizer", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "Path utilities for i18n — locale-aware path resolution and mapping", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/path-utils.js [flags]", - "header": "/**\n * @script path-utils\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Path utilities for i18n — locale-aware path resolution and mapping\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/path-utils.js [flags]\n */", + "purpose_statement": "docs.json localiser engine — transforms docs.json navigation for locale variants", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/docs-json-localizer.js [flags]", + "header": "/**\n * @script docs-json-localizer\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement docs.json localiser engine — transforms docs.json navigation for locale variants\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/docs-json-localizer.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4109,22 +4369,12 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/lib/docs-json-localizer.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/lib/docs-routes.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/lib/mdx-translate.js", + "caller": "tools/scripts/i18n/generate-localized-docs-json.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/i18n/translate-docs.js", + "caller": "tools/scripts/i18n/test/docs-json-localizer.test.js", "pipeline": "indirect" } ], @@ -4138,7 +4388,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/lib/docs-json-localizer.js; indirect via tools/scripts/i18n/lib/docs-routes.js; indirect via tools/scripts/i18n/lib/mdx-translate.js; indirect via tools/scripts/i18n/translate-docs.js", + "pipeline_actual": "indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/test/docs-json-localizer.test.js", "grade": "C", "flags": [ "invalid-scope" @@ -4146,17 +4396,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/i18n/lib/provenance.js", - "script": "provenance", + "path": "tools/scripts/i18n/lib/docs-routes.js", + "script": "docs-routes", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "Translation provenance tracker — records source, timestamp, and provider for each translated segment", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/provenance.js [flags]", - "header": "/**\n * @script provenance\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Translation provenance tracker — records source, timestamp, and provider for each translated segment\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/provenance.js [flags]\n */", + "purpose_statement": "docs route resolver — maps page paths to locale-aware routes", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/docs-routes.js [flags]", + "header": "/**\n * @script docs-routes\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement docs route resolver — maps page paths to locale-aware routes\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/docs-routes.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4166,22 +4416,7 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/enforce-generated-file-banners.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-component-docs.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/lib/docs-routes.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/i18n/test/provenance.test.js", + "caller": "tools/scripts/i18n/generate-localized-docs-json.js", "pipeline": "indirect" }, { @@ -4205,7 +4440,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/enforce-generated-file-banners.js; indirect via tools/scripts/generate-component-docs.js; indirect via tools/scripts/i18n/lib/docs-routes.js; indirect via tools/scripts/i18n/test/provenance.test.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", + "pipeline_actual": "indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", "grade": "C", "flags": [ "invalid-scope" @@ -4213,17 +4448,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/i18n/lib/provider-mock.js", - "script": "provider-mock", + "path": "tools/scripts/i18n/lib/frontmatter.js", + "script": "frontmatter", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "Mock translation provider — returns placeholder translations for testing without API calls", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/provider-mock.js [flags]", - "header": "/**\n * @script provider-mock\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Mock translation provider — returns placeholder translations for testing without API calls\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/provider-mock.js [flags]\n */", + "purpose_statement": "Frontmatter parser/writer — reads and writes MDX frontmatter for translation", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/frontmatter.js [flags]", + "header": "/**\n * @script frontmatter\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Frontmatter parser/writer — reads and writes MDX frontmatter for translation\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/frontmatter.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4233,7 +4468,22 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/lib/providers.js", + "caller": "tools/scripts/i18n/test/frontmatter.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/test/provenance.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/translate-docs.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/validate-generated.js", "pipeline": "indirect" } ], @@ -4247,7 +4497,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/lib/providers.js", + "pipeline_actual": "indirect via tools/scripts/i18n/test/frontmatter.test.js; indirect via tools/scripts/i18n/test/provenance.test.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", "grade": "C", "flags": [ "invalid-scope" @@ -4255,17 +4505,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/i18n/lib/provider-openrouter.js", - "script": "provider-openrouter", + "path": "tools/scripts/i18n/lib/mdx-parser.js", + "script": "mdx-parser", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "OpenRouter translation provider — calls OpenRouter API for actual translations", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/provider-openrouter.js [flags]", - "header": "/**\n * @script provider-openrouter\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement OpenRouter translation provider — calls OpenRouter API for actual translations\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/provider-openrouter.js [flags]\n */", + "purpose_statement": "MDX parser for i18n — extracts translatable content blocks from MDX", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/mdx-parser.js [flags]", + "header": "/**\n * @script mdx-parser\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement MDX parser for i18n — extracts translatable content blocks from MDX\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/mdx-parser.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4275,12 +4525,17 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/lib/providers.js", + "caller": "tools/scripts/i18n/lib/mdx-translate.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/i18n/test/provider-openrouter.test.js", + "caller": "tools/scripts/i18n/validate-generated.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/remediators/content/repair-spelling.js", "pipeline": "indirect" } ], @@ -4294,7 +4549,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/lib/providers.js; indirect via tools/scripts/i18n/test/provider-openrouter.test.js", + "pipeline_actual": "indirect via tools/scripts/i18n/lib/mdx-translate.js; indirect via tools/scripts/i18n/validate-generated.js; indirect via tools/scripts/remediators/content/repair-spelling.js", "grade": "C", "flags": [ "invalid-scope" @@ -4302,17 +4557,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/i18n/lib/providers.js", - "script": "providers", + "path": "tools/scripts/i18n/lib/mdx-translate.js", + "script": "mdx-translate", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "owner": "docs", "needs": "F-R6, F-R7", - "purpose_statement": "Provider registry — selects translation provider (OpenRouter or mock) based on configuration", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/scripts/i18n/lib/providers.js [flags]", - "header": "/**\n * @script providers\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Provider registry — selects translation provider (OpenRouter or mock) based on configuration\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/providers.js [flags]\n */", + "purpose_statement": "MDX translation engine — applies translations to MDX content blocks", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/mdx-translate.js [flags]", + "header": "/**\n * @script mdx-translate\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement MDX translation engine — applies translations to MDX content blocks\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/mdx-translate.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4322,12 +4577,17 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/i18n/generate-localized-docs-json.js", + "caller": "tools/scripts/i18n/lib/docs-json-localizer.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/i18n/test/provider-openrouter.test.js", + "caller": "tools/scripts/i18n/lib/frontmatter.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/test/mdx-translate.test.js", "pipeline": "indirect" }, { @@ -4346,7 +4606,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/test/provider-openrouter.test.js; indirect via tools/scripts/i18n/translate-docs.js", + "pipeline_actual": "indirect via tools/scripts/i18n/lib/docs-json-localizer.js; indirect via tools/scripts/i18n/lib/frontmatter.js; indirect via tools/scripts/i18n/test/mdx-translate.test.js; indirect via tools/scripts/i18n/translate-docs.js", "grade": "C", "flags": [ "invalid-scope" @@ -4354,17 +4614,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/codex/lock-release.js", - "script": "codex/lock-release", + "path": "tools/scripts/i18n/lib/path-utils.js", + "script": "path-utils", "category": "utility", - "purpose": "governance:agent-governance", - "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", + "purpose": "feature:translation", + "scope": "tools/scripts", "owner": "docs", - "needs": "R-R27, R-R30", - "purpose_statement": "Codex lock release utility — releases stale codex lock files", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", - "usage": "node tools/scripts/codex/lock-release.js [flags]", - "header": "/**\n * @script codex/lock-release\n * @category utility\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex lock release utility — releases stale codex lock files\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/codex/lock-release.js [flags]\n */", + "needs": "F-R6, F-R7", + "purpose_statement": "Path utilities for i18n — locale-aware path resolution and mapping", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/path-utils.js [flags]", + "header": "/**\n * @script path-utils\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Path utilities for i18n — locale-aware path resolution and mapping\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/path-utils.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4374,23 +4634,27 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/codex-safe-merge-with-stash.js", + "caller": "tools/scripts/i18n/lib/docs-json-localizer.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/codex/task-finalize.js", + "caller": "tools/scripts/i18n/lib/docs-routes.js", "pipeline": "indirect" - } - ], - "outputs": [ + }, { - "output_path": "tools/scripts/codex/.codex/locks-local", - "type": "directory", - "call": "writeFileSync" + "type": "script", + "caller": "tools/scripts/i18n/lib/mdx-translate.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/translate-docs.js", + "pipeline": "indirect" } ], - "outputs_display": "tools/scripts/codex/.codex/locks-local", + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4399,7 +4663,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/codex-safe-merge-with-stash.js; indirect via tools/scripts/codex/task-finalize.js", + "pipeline_actual": "indirect via tools/scripts/i18n/lib/docs-json-localizer.js; indirect via tools/scripts/i18n/lib/docs-routes.js; indirect via tools/scripts/i18n/lib/mdx-translate.js; indirect via tools/scripts/i18n/translate-docs.js", "grade": "C", "flags": [ "invalid-scope" @@ -4407,17 +4671,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/codex/task-cleanup.js", - "script": "codex/task-cleanup", + "path": "tools/scripts/i18n/lib/provenance.js", + "script": "provenance", "category": "utility", - "purpose": "governance:agent-governance", - "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", + "purpose": "feature:translation", + "scope": "tools/scripts", "owner": "docs", - "needs": "R-R27, R-R30", - "purpose_statement": "Codex task cleanup utility — reports and prunes merged clean worktrees plus stale local codex branches after merge", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", - "usage": "node tools/scripts/codex/task-cleanup.js [flags]", - "header": "/**\n * @script codex/task-cleanup\n * @category utility\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex task cleanup utility — reports and prunes merged clean worktrees plus stale local codex branches after merge\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/codex/task-cleanup.js [flags]\n */", + "needs": "F-R6, F-R7", + "purpose_statement": "Translation provenance tracker — records source, timestamp, and provider for each translated segment", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/provenance.js [flags]", + "header": "/**\n * @script provenance\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Translation provenance tracker — records source, timestamp, and provider for each translated segment\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/provenance.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4427,28 +4691,37 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/codex-safe-merge-with-stash.js", + "caller": "tools/scripts/enforce-generated-file-banners.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/codex/lock-release.js", + "caller": "tools/scripts/generate-component-docs.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/codex/task-finalize.js", + "caller": "tools/scripts/i18n/lib/docs-routes.js", "pipeline": "indirect" - } - ], - "outputs": [ + }, { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "type": "script", + "caller": "tools/scripts/i18n/test/provenance.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/translate-docs.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/validate-generated.js", + "pipeline": "indirect" } ], - "outputs_display": "stdout only", + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4457,7 +4730,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/codex-safe-merge-with-stash.js; indirect via tools/scripts/codex/lock-release.js; indirect via tools/scripts/codex/task-finalize.js", + "pipeline_actual": "indirect via tools/scripts/enforce-generated-file-banners.js; indirect via tools/scripts/generate-component-docs.js; indirect via tools/scripts/i18n/lib/docs-routes.js; indirect via tools/scripts/i18n/test/provenance.test.js; indirect via tools/scripts/i18n/translate-docs.js; indirect via tools/scripts/i18n/validate-generated.js", "grade": "C", "flags": [ "invalid-scope" @@ -4465,17 +4738,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/codex/task-finalize.js", - "script": "codex/task-finalize", - "category": "enforcer", - "purpose": "governance:agent-governance", - "scope": "tools/scripts/codex, tools/scripts/validate-codex-task-contract.js, tools/scripts/verify-pay-orc-gate-finalize.sh", + "path": "tools/scripts/i18n/lib/provider-mock.js", + "script": "provider-mock", + "category": "utility", + "purpose": "feature:translation", + "scope": "tools/scripts", "owner": "docs", - "needs": "R-R27, R-R30", - "purpose_statement": "Codex task finaliser — enforces task completion requirements before closing", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", - "usage": "node tools/scripts/codex/task-finalize.js [flags]", - "header": "/**\n * @script codex/task-finalize\n * @category enforcer\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, tools/scripts/validate-codex-task-contract.js, tools/scripts/verify-pay-orc-gate-finalize.sh\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex task finaliser — enforces task completion requirements before closing\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/codex/task-finalize.js [flags]\n */", + "needs": "F-R6, F-R7", + "purpose_statement": "Mock translation provider — returns placeholder translations for testing without API calls", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/provider-mock.js [flags]", + "header": "/**\n * @script provider-mock\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Mock translation provider — returns placeholder translations for testing without API calls\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/provider-mock.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4485,18 +4758,12 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/codex-safe-merge-with-stash.js", + "caller": "tools/scripts/i18n/lib/providers.js", "pipeline": "indirect" } ], - "outputs": [ - { - "output_path": "stdout", - "type": "stdout", - "call": "console" - } - ], - "outputs_display": "stdout only", + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4505,7 +4772,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/codex-safe-merge-with-stash.js", + "pipeline_actual": "indirect via tools/scripts/i18n/lib/providers.js", "grade": "C", "flags": [ "invalid-scope" @@ -4513,17 +4780,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/codex/task-preflight.js", - "script": "codex/task-preflight", - "category": "generator", - "purpose": "governance:agent-governance", - "scope": "tools/scripts/codex, .codex/task-contract.yaml, .codex/locks-local", + "path": "tools/scripts/i18n/lib/provider-openrouter.js", + "script": "provider-openrouter", + "category": "utility", + "purpose": "feature:translation", + "scope": "tools/scripts", "owner": "docs", - "needs": "R-R27, R-R30", - "purpose_statement": "Codex task preflight — generates task setup files and validates preconditions", - "pipeline_declared": "manual — codex setup tool referenced by .githooks/pre-commit guidance, not auto-executed", - "usage": "node tools/scripts/codex/task-preflight.js [flags]", - "header": "/**\n * @script codex/task-preflight\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, .codex/task-contract.yaml, .codex/locks-local\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex task preflight — generates task setup files and validates preconditions\n * @pipeline manual — codex setup tool referenced by .githooks/pre-commit guidance, not auto-executed\n * @usage node tools/scripts/codex/task-preflight.js [flags]\n */", + "needs": "F-R6, F-R7", + "purpose_statement": "OpenRouter translation provider — calls OpenRouter API for actual translations", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/provider-openrouter.js [flags]", + "header": "/**\n * @script provider-openrouter\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement OpenRouter translation provider — calls OpenRouter API for actual translations\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/provider-openrouter.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4533,28 +4800,17 @@ "triggers": [ { "type": "script", - "caller": ".githooks/pre-commit", + "caller": "tools/scripts/i18n/lib/providers.js", "pipeline": "indirect" - } - ], - "outputs": [ - { - "output_path": "tools/scripts/codex/.codex/locks-local", - "type": "directory", - "call": "mkdirSync" - }, - { - "output_path": "tools/scripts/codex/${lock.lock_id}.json", - "type": "generated-output", - "call": "writeFileSync" }, { - "output_path": "tools/scripts/codex/.codex/locks-local", - "type": "directory", - "call": "writeFileSync" - } - ], - "outputs_display": "tools/scripts/codex/.codex/locks-local, tools/scripts/codex/${lock.lock_id}.json, tools/scripts/codex/.codex/locks-local", + "type": "script", + "caller": "tools/scripts/i18n/test/provider-openrouter.test.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4563,7 +4819,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via .githooks/pre-commit", + "pipeline_actual": "indirect via tools/scripts/i18n/lib/providers.js; indirect via tools/scripts/i18n/test/provider-openrouter.test.js", "grade": "C", "flags": [ "invalid-scope" @@ -4571,17 +4827,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-index-utils.js", - "script": "docs-index-utils", + "path": "tools/scripts/i18n/lib/providers.js", + "script": "providers", "category": "utility", - "purpose": "governance:index-management", - "scope": "tools/lib, tools/scripts, v2", + "purpose": "feature:translation", + "scope": "tools/scripts", "owner": "docs", - "needs": "R-R16, R-R17", - "purpose_statement": "Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/lib/docs-index-utils.js [flags]", - "header": "/**\n * @script docs-index-utils\n * @category utility\n * @purpose governance:index-management\n * @scope tools/lib, tools/scripts, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/lib/docs-index-utils.js [flags]\n */", + "needs": "F-R6, F-R7", + "purpose_statement": "Provider registry — selects translation provider (OpenRouter or mock) based on configuration", + "pipeline_declared": "indirect — library module", + "usage": "node tools/scripts/i18n/lib/providers.js [flags]", + "header": "/**\n * @script providers\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Provider registry — selects translation provider (OpenRouter or mock) based on configuration\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/providers.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4591,22 +4847,17 @@ "triggers": [ { "type": "script", - "caller": "tools/notion/sync-v2-en-canonical.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-ai-sitemap.js", + "caller": "tools/scripts/i18n/generate-localized-docs-json.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/generate-content-gap-reconciliation.js", + "caller": "tools/scripts/i18n/test/provider-openrouter.test.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/generate-docs-index.js", + "caller": "tools/scripts/i18n/translate-docs.js", "pipeline": "indirect" } ], @@ -4620,7 +4871,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/notion/sync-v2-en-canonical.js; indirect via tools/scripts/generate-ai-sitemap.js; indirect via tools/scripts/generate-content-gap-reconciliation.js; indirect via tools/scripts/generate-docs-index.js", + "pipeline_actual": "indirect via tools/scripts/i18n/generate-localized-docs-json.js; indirect via tools/scripts/i18n/test/provider-openrouter.test.js; indirect via tools/scripts/i18n/translate-docs.js", "grade": "C", "flags": [ "invalid-scope" @@ -4628,67 +4879,43 @@ "trigger_group": "Indirect" }, { - "path": "tools/lib/generated-file-banners.js", - "script": "generated-file-banners", + "path": "tools/scripts/codex/lock-release.js", + "script": "codex/lock-release", "category": "utility", - "purpose": "governance:index-management", - "scope": "full-repo", + "purpose": "governance:agent-governance", + "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", "owner": "docs", - "needs": "R-R16, R-R17", - "purpose_statement": "Generated file banner template — provides standard banner text for auto-generated files", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", - "usage": "node tools/lib/generated-file-banners.js [flags]", - "header": "/**\n * @script generated-file-banners\n * @category utility\n * @purpose governance:index-management\n * @scope full-repo\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generated file banner template — provides standard banner text for auto-generated files\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/lib/generated-file-banners.js [flags]\n */", + "needs": "R-R27, R-R30", + "purpose_statement": "Codex lock release utility — releases stale codex lock files", + "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "usage": "node tools/scripts/codex/lock-release.js [flags]", + "header": "/**\n * @script codex/lock-release\n * @category utility\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex lock release utility — releases stale codex lock files\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/codex/lock-release.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "script", - "caller": "tests/unit/script-docs.test.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/enforce-generated-file-banners.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-component-docs.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-docs-guide-components-index.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-docs-guide-indexes.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-docs-guide-pages-index.js", + "caller": "tools/scripts/codex-safe-merge-with-stash.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/generate-pages-index.js", + "caller": "tools/scripts/codex/task-finalize.js", "pipeline": "indirect" - }, + } + ], + "outputs": [ { - "type": "script", - "caller": "tools/scripts/i18n/translate-docs.js", - "pipeline": "indirect" + "output_path": "tools/scripts/codex/.codex/locks-local", + "type": "directory", + "call": "writeFileSync" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs_display": "tools/scripts/codex/.codex/locks-local", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4697,73 +4924,56 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/script-docs.test.js; indirect via tools/scripts/enforce-generated-file-banners.js; indirect via tools/scripts/generate-component-docs.js; indirect via tools/scripts/generate-docs-guide-components-index.js; indirect via tools/scripts/generate-docs-guide-indexes.js; indirect via tools/scripts/generate-docs-guide-pages-index.js; indirect via tools/scripts/generate-pages-index.js; indirect via tools/scripts/i18n/translate-docs.js", - "grade": "B", - "flags": [], + "pipeline_actual": "indirect via tools/scripts/codex-safe-merge-with-stash.js; indirect via tools/scripts/codex/task-finalize.js", + "grade": "C", + "flags": [ + "invalid-scope" + ], "trigger_group": "Indirect" }, { - "path": "tools/lib/component-governance-utils.js", - "script": "component-governance-utils", + "path": "tools/scripts/codex/task-cleanup.js", + "script": "codex/task-cleanup", "category": "utility", - "purpose": "governance:repo-health", - "scope": "single-domain", + "purpose": "governance:agent-governance", + "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", "owner": "docs", - "needs": "R-R10", - "purpose_statement": "Shared parsing and validation utilities for component governance scripts.", - "pipeline_declared": "indirect", - "usage": "const utils = require('../lib/component-governance-utils');", - "header": "/**\n * @script component-governance-utils\n * @category utility\n * @purpose governance:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Shared parsing and validation utilities for component governance scripts.\n * @pipeline indirect\n * @usage const utils = require('../lib/component-governance-utils');\n */", + "needs": "R-R27, R-R30", + "purpose_statement": "Codex task cleanup utility — reports and prunes merged clean worktrees plus stale local codex branches after merge", + "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "usage": "node tools/scripts/codex/task-cleanup.js [flags]", + "header": "/**\n * @script codex/task-cleanup\n * @category utility\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex task cleanup utility — reports and prunes merged clean worktrees plus stale local codex branches after merge\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/codex/task-cleanup.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "script", - "caller": "tests/unit/component-governance-utils.test.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-component-docs.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-component-registry.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/generate-docs-guide-components-index.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/remediators/components/repair-component-metadata.js", + "caller": "tools/scripts/codex-safe-merge-with-stash.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/scan-component-imports.js", + "caller": "tools/scripts/codex/lock-release.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/validators/components/check-component-css.js", + "caller": "tools/scripts/codex/task-finalize.js", "pipeline": "indirect" - }, + } + ], + "outputs": [ { - "type": "script", - "caller": "tools/scripts/validators/components/check-component-docs.js", - "pipeline": "indirect" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4772,58 +4982,46 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/component-governance-utils.test.js; indirect via tools/scripts/generate-component-docs.js; indirect via tools/scripts/generate-component-registry.js; indirect via tools/scripts/generate-docs-guide-components-index.js; indirect via tools/scripts/remediators/components/repair-component-metadata.js; indirect via tools/scripts/scan-component-imports.js; indirect via tools/scripts/validators/components/check-component-css.js; indirect via tools/scripts/validators/components/check-component-docs.js", - "grade": "B", - "flags": [], + "pipeline_actual": "indirect via tools/scripts/codex-safe-merge-with-stash.js; indirect via tools/scripts/codex/lock-release.js; indirect via tools/scripts/codex/task-finalize.js", + "grade": "C", + "flags": [ + "invalid-scope" + ], "trigger_group": "Indirect" }, { - "path": "tools/lib/script-governance-config.js", - "script": "script-governance-config", - "category": "utility", - "purpose": "governance:repo-health", - "scope": "full-repo", + "path": "tools/scripts/codex/task-finalize.js", + "script": "codex/task-finalize", + "category": "enforcer", + "purpose": "governance:agent-governance", + "scope": "tools/scripts/codex, tools/scripts/validate-codex-task-contract.js, tools/scripts/verify-pay-orc-gate-finalize.sh", "owner": "docs", - "needs": "R-R14, R-R18, R-C6", - "purpose_statement": "Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo.", - "pipeline_declared": "indirect -- library module", - "usage": "const config = require('../lib/script-governance-config');", - "header": "/**\n * @script script-governance-config\n * @category utility\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo.\n * @pipeline indirect -- library module\n * @usage const config = require('../lib/script-governance-config');\n */", + "needs": "R-R27, R-R30", + "purpose_statement": "Codex task finaliser — enforces task completion requirements before closing", + "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "usage": "node tools/scripts/codex/task-finalize.js [flags]", + "header": "/**\n * @script codex/task-finalize\n * @category enforcer\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, tools/scripts/validate-codex-task-contract.js, tools/scripts/verify-pay-orc-gate-finalize.sh\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex task finaliser — enforces task completion requirements before closing\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/codex/task-finalize.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/unit/script-docs.test.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/orchestrators/repair-governance.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tools/scripts/validators/governance/audit-script-inventory.js", + "caller": "tools/scripts/codex-safe-merge-with-stash.js", "pipeline": "indirect" - }, + } + ], + "outputs": [ { - "type": "script", - "caller": "tools/scripts/validators/governance/review-governance-repair-checklist.js", - "pipeline": "indirect" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4832,53 +5030,56 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/run-pr-checks.js; indirect via tests/unit/script-docs.test.js; indirect via tools/scripts/orchestrators/repair-governance.js; indirect via tools/scripts/validators/governance/audit-script-inventory.js; indirect via tools/scripts/validators/governance/review-governance-repair-checklist.js", - "grade": "B", - "flags": [], + "pipeline_actual": "indirect via tools/scripts/codex-safe-merge-with-stash.js", + "grade": "C", + "flags": [ + "invalid-scope" + ], "trigger_group": "Indirect" }, { - "path": "tools/lib/script-header-utils.js", - "script": "script-header-utils", - "category": "utility", - "purpose": "governance:repo-health", - "scope": "full-repo", + "path": "tools/scripts/codex/task-preflight.js", + "script": "codex/task-preflight", + "category": "generator", + "purpose": "governance:agent-governance", + "scope": "tools/scripts/codex, .codex/task-contract.yaml, .codex/locks-local", "owner": "docs", - "needs": "R-R14, R-R18", - "purpose_statement": "Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source.", - "pipeline_declared": "indirect - library module", - "usage": "const { extractLeadingScriptHeader } = require('../lib/script-header-utils');", - "header": "/**\n * @script script-header-utils\n * @category utility\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18\n * @purpose-statement Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source.\n * @pipeline indirect - library module\n * @usage const { extractLeadingScriptHeader } = require('../lib/script-header-utils');\n */", + "needs": "R-R27, R-R30", + "purpose_statement": "Codex task preflight — generates task setup files and validates preconditions", + "pipeline_declared": "manual — codex setup tool referenced by .githooks/pre-commit guidance, not auto-executed", + "usage": "node tools/scripts/codex/task-preflight.js [flags]", + "header": "/**\n * @script codex/task-preflight\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts/codex, .codex/task-contract.yaml, .codex/locks-local\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex task preflight — generates task setup files and validates preconditions\n * @pipeline manual — codex setup tool referenced by .githooks/pre-commit guidance, not auto-executed\n * @usage node tools/scripts/codex/task-preflight.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "script", - "caller": "tests/run-pr-checks.js", - "pipeline": "indirect" - }, - { - "type": "script", - "caller": "tests/unit/script-docs.test.js", + "caller": ".githooks/pre-commit", "pipeline": "indirect" + } + ], + "outputs": [ + { + "output_path": "tools/scripts/codex/.codex/locks-local", + "type": "directory", + "call": "mkdirSync" }, { - "type": "script", - "caller": "tools/scripts/audit-scripts.js", - "pipeline": "indirect" + "output_path": "tools/scripts/codex/${lock.lock_id}.json", + "type": "generated-output", + "call": "writeFileSync" }, { - "type": "script", - "caller": "tools/scripts/validators/governance/audit-script-inventory.js", - "pipeline": "indirect" + "output_path": "tools/scripts/codex/.codex/locks-local", + "type": "directory", + "call": "writeFileSync" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs_display": "tools/scripts/codex/.codex/locks-local, tools/scripts/codex/${lock.lock_id}.json, tools/scripts/codex/.codex/locks-local", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4887,23 +5088,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/run-pr-checks.js; indirect via tests/unit/script-docs.test.js; indirect via tools/scripts/audit-scripts.js; indirect via tools/scripts/validators/governance/audit-script-inventory.js", - "grade": "B", - "flags": [], + "pipeline_actual": "indirect via .githooks/pre-commit", + "grade": "C", + "flags": [ + "invalid-scope" + ], "trigger_group": "Indirect" }, { - "path": "tools/scripts/audit-media-assets.js", - "script": "audit-media-assets", + "path": "tools/lib/docs-index-utils.js", + "script": "docs-index-utils", "category": "utility", - "purpose": "governance:repo-health", - "scope": "tools/scripts, tasks/reports/media-audit", + "purpose": "governance:index-management", + "scope": "tools/lib, tools/scripts, v2", "owner": "docs", - "needs": "R-R14", - "purpose_statement": "Audits repo media assets, references, ignore leakage, and externalized asset branch inventory.", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", - "usage": "node tools/scripts/audit-media-assets.js [flags]", - "header": "/**\n * @script audit-media-assets\n * @category utility\n * @purpose governance:repo-health\n * @scope tools/scripts, tasks/reports/media-audit\n * @owner docs\n * @needs R-R14\n * @purpose-statement Audits repo media assets, references, ignore leakage, and externalized asset branch inventory.\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/audit-media-assets.js [flags]\n */", + "needs": "R-R16, R-R17", + "purpose_statement": "Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging", + "pipeline_declared": "indirect — library module", + "usage": "node tools/lib/docs-index-utils.js [flags]", + "header": "/**\n * @script docs-index-utils\n * @category utility\n * @purpose governance:index-management\n * @scope tools/lib, tools/scripts, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging\n * @pipeline indirect — library module\n * @usage node tools/lib/docs-index-utils.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -4913,68 +5116,27 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/remediators/assets/migrate-assets-to-branch.js", + "caller": "tools/notion/sync-v2-en-canonical.js", "pipeline": "indirect" - } - ], - "outputs": [ + }, { - "output_path": "stdout", - "type": "stdout", - "call": "console" - } - ], - "outputs_display": "stdout only", - "downstream_consumers": [], - "downstream_display": "No", - "in_json": true, - "category_match": false, - "purpose_match": false, - "pipeline_verified": "MATCH", - "declared_pipeline_set": {}, - "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/remediators/assets/migrate-assets-to-branch.js", - "grade": "C", - "flags": [ - "invalid-scope", - "header-json-category-mismatch", - "header-json-purpose-mismatch" - ], - "trigger_group": "Indirect" - }, - { - "path": "tests/integration/mdx-component-runtime-smoke.js", - "script": "mdx-component-runtime-smoke", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests/integration, .githooks/server-manager.js, tests/run-pr-checks.js", - "owner": "docs", - "needs": "E-R1, R-R29", - "purpose_statement": "Smoke-tests sentinel MDX routes for runtime component failures, focused on page-killing render errors from MDX-imported JSX modules.", - "pipeline_declared": "manual", - "usage": "node tests/integration/mdx-component-runtime-smoke.js [--routes route[,route...]] [--base-url http://localhost:3000]", - "header": "/**\n * @script mdx-component-runtime-smoke\n * @category validator\n * @purpose qa:content-quality\n * @scope tests/integration, .githooks/server-manager.js, tests/run-pr-checks.js\n * @owner docs\n * @needs E-R1, R-R29\n * @purpose-statement Smoke-tests sentinel MDX routes for runtime component failures, focused on page-killing render errors from MDX-imported JSX modules.\n * @pipeline manual\n * @usage node tests/integration/mdx-component-runtime-smoke.js [--routes route[,route...]] [--base-url http://localhost:3000]\n */", - "header_field_count": 8, - "has_any_header": true, - "has_framework_header": true, - "category_valid": true, - "purpose_valid": true, - "scope_valid": false, - "triggers": [ + "type": "script", + "caller": "tools/scripts/generate-ai-sitemap.js", + "pipeline": "indirect" + }, { "type": "script", - "caller": "tests/unit/mdx-component-runtime-smoke.test.js", + "caller": "tools/scripts/generate-content-gap-reconciliation.js", "pipeline": "indirect" - } - ], - "outputs": [ + }, { - "output_path": "stdout", - "type": "stdout", - "call": "console" + "type": "script", + "caller": "tools/scripts/generate-docs-index.js", + "pipeline": "indirect" } ], - "outputs_display": "stdout only", + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -4983,7 +5145,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/mdx-component-runtime-smoke.test.js", + "pipeline_actual": "indirect via tools/notion/sync-v2-en-canonical.js; indirect via tools/scripts/generate-ai-sitemap.js; indirect via tools/scripts/generate-content-gap-reconciliation.js; indirect via tools/scripts/generate-docs-index.js", "grade": "C", "flags": [ "invalid-scope" @@ -4991,32 +5153,67 @@ "trigger_group": "Indirect" }, { - "path": "tests/utils/spell-checker.js", - "script": "spell-checker", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tests", + "path": "tools/lib/generated-file-banners.js", + "script": "generated-file-banners", + "category": "utility", + "purpose": "governance:index-management", + "scope": "full-repo", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Spell checker utility — checks text against custom dictionary with en-GB locale support", + "needs": "R-R16, R-R17", + "purpose_statement": "Generated file banner template — provides standard banner text for auto-generated files", "pipeline_declared": "indirect — library module", - "usage": "node tests/utils/spell-checker.js [flags]", - "header": "/**\n * @script spell-checker\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Spell checker utility — checks text against custom dictionary with en-GB locale support\n * @pipeline indirect — library module\n * @dualmode dual-mode (document flags)\n * @usage node tests/utils/spell-checker.js [flags]\n */", + "usage": "node tools/lib/generated-file-banners.js [flags]", + "header": "/**\n * @script generated-file-banners\n * @category utility\n * @purpose governance:index-management\n * @scope full-repo\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generated file banner template — provides standard banner text for auto-generated files\n * @pipeline indirect — library module\n * @usage node tools/lib/generated-file-banners.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "script", - "caller": "tests/unit/spelling.test.js", + "caller": "tests/unit/docs-guide-sot.test.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/remediators/content/repair-spelling.js", + "caller": "tests/unit/script-docs.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/enforce-generated-file-banners.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/generate-component-docs.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/generate-docs-guide-components-index.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/generate-docs-guide-indexes.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/generate-docs-guide-pages-index.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/generate-pages-index.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/i18n/translate-docs.js", "pipeline": "indirect" } ], @@ -5030,25 +5227,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/spelling.test.js; indirect via tools/scripts/remediators/content/repair-spelling.js", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "pipeline_actual": "indirect via tests/unit/docs-guide-sot.test.js; indirect via tests/unit/script-docs.test.js; indirect via tools/scripts/enforce-generated-file-banners.js; indirect via tools/scripts/generate-component-docs.js; indirect via tools/scripts/generate-docs-guide-components-index.js; indirect via tools/scripts/generate-docs-guide-indexes.js; indirect via tools/scripts/generate-docs-guide-pages-index.js; indirect via tools/scripts/generate-pages-index.js; indirect via tools/scripts/i18n/translate-docs.js", + "grade": "B", + "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/scoring.js", - "script": "scoring", + "path": "tools/lib/component-governance-utils.js", + "script": "component-governance-utils", "category": "utility", - "purpose": "qa:content-quality", + "purpose": "governance:repo-health", "scope": "single-domain", "owner": "docs", - "needs": "R-R14", - "purpose_statement": "Aggregates rule scores into a final usefulness score per page.", - "pipeline_declared": "indirect — library module", - "usage": "const { score } = require('../lib/docs-usefulness/scoring');", - "header": "/**\n * @script scoring\n * @category utility\n * @purpose qa:content-quality\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement Aggregates rule scores into a final usefulness score per page.\n * @pipeline indirect — library module\n * @usage const { score } = require('../lib/docs-usefulness/scoring');\n */", + "needs": "R-R10", + "purpose_statement": "Shared parsing and validation utilities for component governance scripts.", + "pipeline_declared": "indirect", + "usage": "const utils = require('../lib/component-governance-utils');", + "header": "/**\n * @script component-governance-utils\n * @category utility\n * @purpose governance:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Shared parsing and validation utilities for component governance scripts.\n * @pipeline indirect\n * @usage const utils = require('../lib/component-governance-utils');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5058,22 +5253,42 @@ "triggers": [ { "type": "script", - "caller": "tests/unit/usefulness-rubric.test.js", + "caller": "tests/unit/component-governance-utils.test.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/notion/sync-v2-en-canonical.js", + "caller": "tools/scripts/generate-component-docs.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/assign-purpose-metadata.js", + "caller": "tools/scripts/generate-component-registry.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/audit-v2-usefulness.js", + "caller": "tools/scripts/generate-docs-guide-components-index.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/remediators/components/repair-component-metadata.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/scan-component-imports.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/components/check-component-css.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/components/check-component-docs.js", "pipeline": "indirect" } ], @@ -5087,23 +5302,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/notion/sync-v2-en-canonical.js; indirect via tools/scripts/assign-purpose-metadata.js; indirect via tools/scripts/audit-v2-usefulness.js", + "pipeline_actual": "indirect via tests/unit/component-governance-utils.test.js; indirect via tools/scripts/generate-component-docs.js; indirect via tools/scripts/generate-component-registry.js; indirect via tools/scripts/generate-docs-guide-components-index.js; indirect via tools/scripts/remediators/components/repair-component-metadata.js; indirect via tools/scripts/scan-component-imports.js; indirect via tools/scripts/validators/components/check-component-css.js; indirect via tools/scripts/validators/components/check-component-docs.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/mdx-safe-markdown.js", - "script": "mdx-safe-markdown", + "path": "tools/lib/docs-publishability.js", + "script": "docs-publishability", "category": "utility", - "purpose": "qa:content-quality", - "scope": "full-repo", + "purpose": "governance:repo-health", + "scope": "v2-content", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Shared MDX-safe markdown helpers that collect first-party markdown files, detect unsafe patterns, and apply deterministic repairs.", - "pipeline_declared": "indirect -- library module", - "usage": "node tools/lib/mdx-safe-markdown.js [flags]", - "header": "/**\n * @script mdx-safe-markdown\n * @category utility\n * @purpose qa:content-quality\n * @scope full-repo\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Shared MDX-safe markdown helpers that collect first-party markdown files, detect unsafe patterns, and apply deterministic repairs.\n * @pipeline indirect -- library module\n * @usage node tools/lib/mdx-safe-markdown.js [flags]\n */", + "needs": "E-C6, F-C1", + "purpose_statement": "Shared path publishability rules for v2 docs content and tooling.", + "pipeline_declared": "indirect", + "usage": "const { isExcludedV2ExperimentalPath } = require('../lib/docs-publishability');", + "header": "/**\n * @script docs-publishability\n * @category utility\n * @purpose governance:repo-health\n * @scope v2-content\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Shared path publishability rules for v2 docs content and tooling.\n * @pipeline indirect\n * @usage const { isExcludedV2ExperimentalPath } = require('../lib/docs-publishability');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5113,27 +5328,32 @@ "triggers": [ { "type": "script", - "caller": "tests/run-pr-checks.js", + "caller": "tests/integration/openapi-reference-audit.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tests/unit/mdx-safe-markdown.test.js", + "caller": "tests/unit/docs-navigation.test.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/generate-component-governance-remediation-reports.js", + "caller": "tests/utils/file-walker.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/remediators/content/repair-mdx-safe-markdown.js", + "caller": "tools/lib/component-governance-utils.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/validators/content/check-mdx-safe-markdown.js", + "caller": "tools/scripts/validators/content/check-anchor-usage.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/content/check-page-endings.js", "pipeline": "indirect" } ], @@ -5147,38 +5367,148 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/run-pr-checks.js; indirect via tests/unit/mdx-safe-markdown.test.js; indirect via tools/scripts/generate-component-governance-remediation-reports.js; indirect via tools/scripts/remediators/content/repair-mdx-safe-markdown.js; indirect via tools/scripts/validators/content/check-mdx-safe-markdown.js", + "pipeline_actual": "indirect via tests/integration/openapi-reference-audit.js; indirect via tests/unit/docs-navigation.test.js; indirect via tests/utils/file-walker.js; indirect via tools/lib/component-governance-utils.js; indirect via tools/scripts/validators/content/check-anchor-usage.js; indirect via tools/scripts/validators/content/check-page-endings.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/scripts/audit-v2-usefulness.js", - "script": "audit-v2-usefulness", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tools/scripts, v2, tasks/reports, tools/config", + "path": "tools/lib/script-governance-config.js", + "script": "script-governance-config", + "category": "utility", + "purpose": "governance:repo-health", + "scope": "full-repo", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Usefulness auditor — scores v2 MDX pages on human and agent usefulness with source-weighted 2026 accuracy verification", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", - "usage": "node tools/scripts/audit-v2-usefulness.js [flags]", - "header": "/**\n * @script audit-v2-usefulness\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts, v2, tasks/reports, tools/config\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Usefulness auditor — scores v2 MDX pages on human and agent usefulness with source-weighted 2026 accuracy verification\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/audit-v2-usefulness.js [flags]\n */", + "needs": "R-R14, R-R18, R-C6", + "purpose_statement": "Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo.", + "pipeline_declared": "indirect -- library module", + "usage": "const config = require('../lib/script-governance-config');", + "header": "/**\n * @script script-governance-config\n * @category utility\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo.\n * @pipeline indirect -- library module\n * @usage const config = require('../lib/script-governance-config');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "script", - "caller": "tests/unit/usefulness-rubric.test.js", + "caller": "tests/run-pr-checks.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/docs-quality-and-freshness-audit.js", + "caller": "tests/unit/script-docs.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/orchestrators/repair-governance.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/governance/audit-script-inventory.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/governance/review-governance-repair-checklist.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tests/run-pr-checks.js; indirect via tests/unit/script-docs.test.js; indirect via tools/scripts/orchestrators/repair-governance.js; indirect via tools/scripts/validators/governance/audit-script-inventory.js; indirect via tools/scripts/validators/governance/review-governance-repair-checklist.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, + { + "path": "tools/lib/script-header-utils.js", + "script": "script-header-utils", + "category": "utility", + "purpose": "governance:repo-health", + "scope": "full-repo", + "owner": "docs", + "needs": "R-R14, R-R18", + "purpose_statement": "Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source.", + "pipeline_declared": "indirect - library module", + "usage": "const { extractLeadingScriptHeader } = require('../lib/script-header-utils');", + "header": "/**\n * @script script-header-utils\n * @category utility\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18\n * @purpose-statement Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source.\n * @pipeline indirect - library module\n * @usage const { extractLeadingScriptHeader } = require('../lib/script-header-utils');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tests/run-pr-checks.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/script-docs.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/audit-scripts.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/governance/audit-script-inventory.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tests/run-pr-checks.js; indirect via tests/unit/script-docs.test.js; indirect via tools/scripts/audit-scripts.js; indirect via tools/scripts/validators/governance/audit-script-inventory.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, + { + "path": "tools/scripts/audit-media-assets.js", + "script": "audit-media-assets", + "category": "utility", + "purpose": "governance:repo-health", + "scope": "tools/scripts, tasks/reports/media-audit", + "owner": "docs", + "needs": "R-R14", + "purpose_statement": "Audits repo media assets, references, ignore leakage, and externalized asset branch inventory.", + "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "usage": "node tools/scripts/audit-media-assets.js [flags]", + "header": "/**\n * @script audit-media-assets\n * @category utility\n * @purpose governance:repo-health\n * @scope tools/scripts, tasks/reports/media-audit\n * @owner docs\n * @needs R-R14\n * @purpose-statement Audits repo media assets, references, ignore leakage, and externalized asset branch inventory.\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/audit-media-assets.js [flags]\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": false, + "triggers": [ + { + "type": "script", + "caller": "tools/scripts/remediators/assets/migrate-assets-to-branch.js", "pipeline": "indirect" } ], @@ -5193,30 +5523,32 @@ "downstream_consumers": [], "downstream_display": "No", "in_json": true, - "category_match": true, - "purpose_match": true, + "category_match": false, + "purpose_match": false, "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/scripts/docs-quality-and-freshness-audit.js", + "pipeline_actual": "indirect via tools/scripts/remediators/assets/migrate-assets-to-branch.js", "grade": "C", "flags": [ - "invalid-scope" + "invalid-scope", + "header-json-category-mismatch", + "header-json-purpose-mismatch" ], "trigger_group": "Indirect" }, { - "path": "tools/scripts/dev/add-callouts.js", - "script": "add-callouts", - "category": "remediator", + "path": "tests/integration/mdx-component-runtime-smoke.js", + "script": "mdx-component-runtime-smoke", + "category": "validator", "purpose": "qa:content-quality", - "scope": "tools/scripts", + "scope": "tests/integration, .githooks/server-manager.js, tests/run-pr-checks.js", "owner": "docs", - "needs": "E-R1, R-R11", - "purpose_statement": "Callout inserter — adds Note/Tip/Warning callout components to MDX files based on content patterns", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", - "usage": "node tools/scripts/dev/add-callouts.js [flags]", - "header": "/**\n * @script add-callouts\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Callout inserter — adds Note/Tip/Warning callout components to MDX files based on content patterns\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/add-callouts.js [flags]\n */", + "needs": "E-R1, R-R29", + "purpose_statement": "Smoke-tests sentinel MDX routes for runtime component failures, focused on page-killing render errors from MDX-imported JSX modules.", + "pipeline_declared": "manual", + "usage": "node tests/integration/mdx-component-runtime-smoke.js [--routes route[,route...]] [--base-url http://localhost:3000]", + "header": "/**\n * @script mdx-component-runtime-smoke\n * @category validator\n * @purpose qa:content-quality\n * @scope tests/integration, .githooks/server-manager.js, tests/run-pr-checks.js\n * @owner docs\n * @needs E-R1, R-R29\n * @purpose-statement Smoke-tests sentinel MDX routes for runtime component failures, focused on page-killing render errors from MDX-imported JSX modules.\n * @pipeline manual\n * @usage node tests/integration/mdx-component-runtime-smoke.js [--routes route[,route...]] [--base-url http://localhost:3000]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5226,7 +5558,7 @@ "triggers": [ { "type": "script", - "caller": "tools/scripts/dev/test-add-callouts.js", + "caller": "tests/unit/mdx-component-runtime-smoke.test.js", "pipeline": "indirect" } ], @@ -5246,7 +5578,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/dev/test-add-callouts.js", + "pipeline_actual": "indirect via tests/unit/mdx-component-runtime-smoke.test.js", "grade": "C", "flags": [ "invalid-scope" @@ -5254,43 +5586,37 @@ "trigger_group": "Indirect" }, { - "path": "tools/scripts/remediators/content/repair-spelling.js", - "script": "repair-spelling", - "category": "remediator", + "path": "tests/utils/spell-checker.js", + "script": "spell-checker", + "category": "validator", "purpose": "qa:content-quality", - "scope": "v2-content", + "scope": "tests", "owner": "docs", - "needs": "R-R2", - "purpose_statement": "Auto-corrects spelling errors using the shared cspell configuration. Safe, dictionary-based corrections only.", - "pipeline_declared": "manual", - "usage": "node tools/scripts/remediators/content/repair-spelling.js --dry-run", - "header": "/**\n * @script repair-spelling\n * @category remediator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs R-R2\n * @purpose-statement Auto-corrects spelling errors using the shared cspell configuration. Safe, dictionary-based corrections only.\n * @pipeline manual\n * @dualmode --dry-run (validator: show corrections) | --write (remediator: apply corrections)\n * @usage node tools/scripts/remediators/content/repair-spelling.js --dry-run\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Spell checker utility — checks text against custom dictionary with en-GB locale support", + "pipeline_declared": "indirect — library module", + "usage": "node tests/utils/spell-checker.js [flags]", + "header": "/**\n * @script spell-checker\n * @category validator\n * @purpose qa:content-quality\n * @scope tests\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Spell checker utility — checks text against custom dictionary with en-GB locale support\n * @pipeline indirect — library module\n * @dualmode dual-mode (document flags)\n * @usage node tests/utils/spell-checker.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "script", - "caller": "tests/unit/repair-spelling.test.js", + "caller": "tests/unit/spelling.test.js", "pipeline": "indirect" - } - ], - "outputs": [ - { - "output_path": "tools/scripts/remediators/content/before.mdx", - "type": "generated-output", - "call": "writeFileSync" }, { - "output_path": "tools/scripts/remediators/content/after.mdx", - "type": "generated-output", - "call": "writeFileSync" + "type": "script", + "caller": "tools/scripts/remediators/content/repair-spelling.js", + "pipeline": "indirect" } ], - "outputs_display": "tools/scripts/remediators/content/before.mdx, tools/scripts/remediators/content/after.mdx", + "outputs": [], + "outputs_display": "none detected", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -5299,23 +5625,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/repair-spelling.test.js", - "grade": "B", - "flags": [], + "pipeline_actual": "indirect via tests/unit/spelling.test.js; indirect via tools/scripts/remediators/content/repair-spelling.js", + "grade": "C", + "flags": [ + "invalid-scope" + ], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/config-validator.js", - "script": "config-validator", + "path": "tools/lib/docs-usefulness/scoring.js", + "script": "scoring", "category": "utility", - "purpose": "qa:repo-health", + "purpose": "qa:content-quality", "scope": "single-domain", "owner": "docs", - "needs": "R-R14, R-C6", - "purpose_statement": "Validates docs-usefulness config structure and field completeness.", - "pipeline_declared": "indirect -- library module", - "usage": "const { validateConfig } = require('../lib/docs-usefulness/config-validator');", - "header": "/**\n * @script config-validator\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Validates docs-usefulness config structure and field completeness.\n * @pipeline indirect -- library module\n * @usage const { validateConfig } = require('../lib/docs-usefulness/config-validator');\n */", + "needs": "R-R14", + "purpose_statement": "Aggregates rule scores into a final usefulness score per page.", + "pipeline_declared": "indirect — library module", + "usage": "const { score } = require('../lib/docs-usefulness/scoring');", + "header": "/**\n * @script scoring\n * @category utility\n * @purpose qa:content-quality\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement Aggregates rule scores into a final usefulness score per page.\n * @pipeline indirect — library module\n * @usage const { score } = require('../lib/docs-usefulness/scoring');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5325,12 +5653,12 @@ "triggers": [ { "type": "script", - "caller": "tests/unit/usefulness-journey.test.js", + "caller": "tests/unit/usefulness-rubric.test.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tests/unit/usefulness-rubric.test.js", + "caller": "tools/notion/sync-v2-en-canonical.js", "pipeline": "indirect" }, { @@ -5354,23 +5682,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/usefulness-journey.test.js; indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/scripts/assign-purpose-metadata.js; indirect via tools/scripts/audit-v2-usefulness.js", + "pipeline_actual": "indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/notion/sync-v2-en-canonical.js; indirect via tools/scripts/assign-purpose-metadata.js; indirect via tools/scripts/audit-v2-usefulness.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/journey-check.js", - "script": "journey-check", + "path": "tools/lib/mdx-safe-markdown.js", + "script": "mdx-safe-markdown", "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain", + "purpose": "qa:content-quality", + "scope": "full-repo", "owner": "docs", - "needs": "R-R14, R-C6", - "purpose_statement": "Evaluates docs pages against user journey completeness criteria.", + "needs": "E-R1, R-R11", + "purpose_statement": "Shared MDX-safe markdown helpers that collect first-party markdown files, detect unsafe patterns, and apply deterministic repairs.", "pipeline_declared": "indirect -- library module", - "usage": "const { checkJourney } = require('../lib/docs-usefulness/journey-check');", - "header": "/**\n * @script journey-check\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Evaluates docs pages against user journey completeness criteria.\n * @pipeline indirect -- library module\n * @usage const { checkJourney } = require('../lib/docs-usefulness/journey-check');\n */", + "usage": "node tools/lib/mdx-safe-markdown.js [flags]", + "header": "/**\n * @script mdx-safe-markdown\n * @category utility\n * @purpose qa:content-quality\n * @scope full-repo\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Shared MDX-safe markdown helpers that collect first-party markdown files, detect unsafe patterns, and apply deterministic repairs.\n * @pipeline indirect -- library module\n * @usage node tools/lib/mdx-safe-markdown.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5380,18 +5708,33 @@ "triggers": [ { "type": "script", - "caller": "tests/unit/usefulness-journey.test.js", + "caller": "tests/run-pr-checks.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/audit-v2-usefulness.js", + "caller": "tests/unit/mdx-safe-markdown.test.js", "pipeline": "indirect" - } - ], - "outputs": [], - "outputs_display": "none detected", - "downstream_consumers": [], + }, + { + "type": "script", + "caller": "tools/scripts/generate-component-governance-remediation-reports.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/remediators/content/repair-mdx-safe-markdown.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/content/check-mdx-safe-markdown.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], "downstream_display": "No", "in_json": true, "category_match": true, @@ -5399,29 +5742,29 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/usefulness-journey.test.js; indirect via tools/scripts/audit-v2-usefulness.js", + "pipeline_actual": "indirect via tests/run-pr-checks.js; indirect via tests/unit/mdx-safe-markdown.test.js; indirect via tools/scripts/generate-component-governance-remediation-reports.js; indirect via tools/scripts/remediators/content/repair-mdx-safe-markdown.js; indirect via tools/scripts/validators/content/check-mdx-safe-markdown.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/llm-evaluator.js", - "script": "llm-evaluator", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain", + "path": "tools/scripts/audit-v2-usefulness.js", + "script": "audit-v2-usefulness", + "category": "validator", + "purpose": "qa:content-quality", + "scope": "tools/scripts, v2, tasks/reports, tools/config", "owner": "docs", - "needs": "R-R14", - "purpose_statement": "Wraps LLM API calls for rubric-based page quality evaluation.", - "pipeline_declared": "indirect -- library module", - "usage": "const { evaluate } = require('../lib/docs-usefulness/llm-evaluator');", - "header": "/**\n * @script llm-evaluator\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement Wraps LLM API calls for rubric-based page quality evaluation.\n * @pipeline indirect -- library module\n * @usage const { evaluate } = require('../lib/docs-usefulness/llm-evaluator');\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Usefulness auditor — scores v2 MDX pages on human and agent usefulness with source-weighted 2026 accuracy verification", + "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "usage": "node tools/scripts/audit-v2-usefulness.js [flags]", + "header": "/**\n * @script audit-v2-usefulness\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts, v2, tasks/reports, tools/config\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Usefulness auditor — scores v2 MDX pages on human and agent usefulness with source-weighted 2026 accuracy verification\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/audit-v2-usefulness.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "script", @@ -5430,18 +5773,18 @@ }, { "type": "script", - "caller": "tools/scripts/audit-v2-usefulness.js", + "caller": "tools/scripts/docs-quality-and-freshness-audit.js", "pipeline": "indirect" } ], "outputs": [ { - "output_path": ".cache/llm-usefulness", - "type": "directory", - "call": "mkdirSync" + "output_path": "stdout", + "type": "stdout", + "call": "console" } ], - "outputs_display": ".cache/llm-usefulness", + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -5450,38 +5793,46 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/scripts/audit-v2-usefulness.js", - "grade": "B", - "flags": [], + "pipeline_actual": "indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/scripts/docs-quality-and-freshness-audit.js", + "grade": "C", + "flags": [ + "invalid-scope" + ], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/changelog.js", - "script": "prompts/changelog", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain", + "path": "tools/scripts/dev/add-callouts.js", + "script": "add-callouts", + "category": "remediator", + "purpose": "qa:content-quality", + "scope": "tools/scripts", "owner": "docs", - "needs": "R-R14", - "purpose_statement": "LLM prompt template for changelog page-type usefulness evaluation.", - "pipeline_declared": "indirect -- library module", - "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/changelog');", - "header": "/**\n * @script prompts/changelog\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for changelog page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/changelog');\n */", + "needs": "E-R1, R-R11", + "purpose_statement": "Callout inserter — adds Note/Tip/Warning callout components to MDX files based on content patterns", + "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "usage": "node tools/scripts/dev/add-callouts.js [flags]", + "header": "/**\n * @script add-callouts\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Callout inserter — adds Note/Tip/Warning callout components to MDX files based on content patterns\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/add-callouts.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": true, + "scope_valid": false, "triggers": [ { "type": "script", - "caller": "tools/lib/docs-usefulness/prompts/index.js", + "caller": "tools/scripts/dev/test-add-callouts.js", "pipeline": "indirect" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs": [ + { + "output_path": "stdout", + "type": "stdout", + "call": "console" + } + ], + "outputs_display": "stdout only", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -5490,23 +5841,25 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", - "grade": "B", - "flags": [], + "pipeline_actual": "indirect via tools/scripts/dev/test-add-callouts.js", + "grade": "C", + "flags": [ + "invalid-scope" + ], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/concept.js", - "script": "prompts/concept", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain", + "path": "tools/scripts/remediators/content/repair-spelling.js", + "script": "repair-spelling", + "category": "remediator", + "purpose": "qa:content-quality", + "scope": "v2-content", "owner": "docs", - "needs": "R-R14", - "purpose_statement": "LLM prompt template for concept page-type usefulness evaluation.", - "pipeline_declared": "indirect -- library module", - "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/concept');", - "header": "/**\n * @script prompts/concept\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for concept page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/concept');\n */", + "needs": "R-R2", + "purpose_statement": "Auto-corrects spelling errors using the shared cspell configuration. Safe, dictionary-based corrections only.", + "pipeline_declared": "manual", + "usage": "node tools/scripts/remediators/content/repair-spelling.js --dry-run", + "header": "/**\n * @script repair-spelling\n * @category remediator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs R-R2\n * @purpose-statement Auto-corrects spelling errors using the shared cspell configuration. Safe, dictionary-based corrections only.\n * @pipeline manual\n * @dualmode --dry-run (validator: show corrections) | --write (remediator: apply corrections)\n * @usage node tools/scripts/remediators/content/repair-spelling.js --dry-run\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5516,12 +5869,23 @@ "triggers": [ { "type": "script", - "caller": "tools/lib/docs-usefulness/prompts/index.js", + "caller": "tests/unit/repair-spelling.test.js", "pipeline": "indirect" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs": [ + { + "output_path": "tools/scripts/remediators/content/before.mdx", + "type": "generated-output", + "call": "writeFileSync" + }, + { + "output_path": "tools/scripts/remediators/content/after.mdx", + "type": "generated-output", + "call": "writeFileSync" + } + ], + "outputs_display": "tools/scripts/remediators/content/before.mdx, tools/scripts/remediators/content/after.mdx", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -5530,23 +5894,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "pipeline_actual": "indirect via tests/unit/repair-spelling.test.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/faq.js", - "script": "prompts/faq", + "path": "tools/lib/docs-usefulness/config-validator.js", + "script": "config-validator", "category": "utility", "purpose": "qa:repo-health", "scope": "single-domain", "owner": "docs", - "needs": "R-R14", - "purpose_statement": "LLM prompt template for faq page-type usefulness evaluation.", + "needs": "R-R14, R-C6", + "purpose_statement": "Validates docs-usefulness config structure and field completeness.", "pipeline_declared": "indirect -- library module", - "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/faq');", - "header": "/**\n * @script prompts/faq\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for faq page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/faq');\n */", + "usage": "const { validateConfig } = require('../lib/docs-usefulness/config-validator');", + "header": "/**\n * @script config-validator\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Validates docs-usefulness config structure and field completeness.\n * @pipeline indirect -- library module\n * @usage const { validateConfig } = require('../lib/docs-usefulness/config-validator');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5556,7 +5920,22 @@ "triggers": [ { "type": "script", - "caller": "tools/lib/docs-usefulness/prompts/index.js", + "caller": "tests/unit/usefulness-journey.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/usefulness-rubric.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/assign-purpose-metadata.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/audit-v2-usefulness.js", "pipeline": "indirect" } ], @@ -5570,23 +5949,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "pipeline_actual": "indirect via tests/unit/usefulness-journey.test.js; indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/scripts/assign-purpose-metadata.js; indirect via tools/scripts/audit-v2-usefulness.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/glossary.js", - "script": "prompts/glossary", + "path": "tools/lib/docs-usefulness/journey-check.js", + "script": "journey-check", "category": "utility", "purpose": "qa:repo-health", "scope": "single-domain", "owner": "docs", - "needs": "R-R14", - "purpose_statement": "LLM prompt template for glossary page-type usefulness evaluation.", + "needs": "R-R14, R-C6", + "purpose_statement": "Evaluates docs pages against user journey completeness criteria.", "pipeline_declared": "indirect -- library module", - "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/glossary');", - "header": "/**\n * @script prompts/glossary\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for glossary page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/glossary');\n */", + "usage": "const { checkJourney } = require('../lib/docs-usefulness/journey-check');", + "header": "/**\n * @script journey-check\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Evaluates docs pages against user journey completeness criteria.\n * @pipeline indirect -- library module\n * @usage const { checkJourney } = require('../lib/docs-usefulness/journey-check');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5596,7 +5975,12 @@ "triggers": [ { "type": "script", - "caller": "tools/lib/docs-usefulness/prompts/index.js", + "caller": "tests/unit/usefulness-journey.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/audit-v2-usefulness.js", "pipeline": "indirect" } ], @@ -5610,23 +5994,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "pipeline_actual": "indirect via tests/unit/usefulness-journey.test.js; indirect via tools/scripts/audit-v2-usefulness.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/how_to.js", - "script": "prompts/how_to", + "path": "tools/lib/docs-usefulness/llm-evaluator.js", + "script": "llm-evaluator", "category": "utility", "purpose": "qa:repo-health", "scope": "single-domain", "owner": "docs", "needs": "R-R14", - "purpose_statement": "LLM prompt template for how_to page-type usefulness evaluation.", + "purpose_statement": "Wraps LLM API calls for rubric-based page quality evaluation.", "pipeline_declared": "indirect -- library module", - "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/how_to');", - "header": "/**\n * @script prompts/how_to\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for how_to page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/how_to');\n */", + "usage": "const { evaluate } = require('../lib/docs-usefulness/llm-evaluator');", + "header": "/**\n * @script llm-evaluator\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement Wraps LLM API calls for rubric-based page quality evaluation.\n * @pipeline indirect -- library module\n * @usage const { evaluate } = require('../lib/docs-usefulness/llm-evaluator');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5636,12 +6020,23 @@ "triggers": [ { "type": "script", - "caller": "tools/lib/docs-usefulness/prompts/index.js", + "caller": "tests/unit/usefulness-rubric.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/audit-v2-usefulness.js", "pipeline": "indirect" } ], - "outputs": [], - "outputs_display": "none detected", + "outputs": [ + { + "output_path": ".cache/llm-usefulness", + "type": "directory", + "call": "mkdirSync" + } + ], + "outputs_display": ".cache/llm-usefulness", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -5650,23 +6045,23 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "pipeline_actual": "indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/scripts/audit-v2-usefulness.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/landing.js", - "script": "prompts/landing", + "path": "tools/lib/docs-usefulness/prompts/changelog.js", + "script": "prompts/changelog", "category": "utility", "purpose": "qa:repo-health", "scope": "single-domain", "owner": "docs", "needs": "R-R14", - "purpose_statement": "LLM prompt template for landing page-type usefulness evaluation.", + "purpose_statement": "LLM prompt template for changelog page-type usefulness evaluation.", "pipeline_declared": "indirect -- library module", - "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/landing');", - "header": "/**\n * @script prompts/landing\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for landing page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/landing');\n */", + "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/changelog');", + "header": "/**\n * @script prompts/changelog\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for changelog page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/changelog');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5696,17 +6091,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/overview.js", - "script": "prompts/overview", + "path": "tools/lib/docs-usefulness/prompts/concept.js", + "script": "prompts/concept", "category": "utility", "purpose": "qa:repo-health", "scope": "single-domain", "owner": "docs", "needs": "R-R14", - "purpose_statement": "LLM prompt template for overview page-type usefulness evaluation.", + "purpose_statement": "LLM prompt template for concept page-type usefulness evaluation.", "pipeline_declared": "indirect -- library module", - "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/overview');", - "header": "/**\n * @script prompts/overview\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for overview page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/overview');\n */", + "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/concept');", + "header": "/**\n * @script prompts/concept\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for concept page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/concept');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5736,17 +6131,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/reference.js", - "script": "prompts/reference", + "path": "tools/lib/docs-usefulness/prompts/faq.js", + "script": "prompts/faq", "category": "utility", "purpose": "qa:repo-health", "scope": "single-domain", "owner": "docs", "needs": "R-R14", - "purpose_statement": "LLM prompt template for reference page-type usefulness evaluation.", + "purpose_statement": "LLM prompt template for faq page-type usefulness evaluation.", "pipeline_declared": "indirect -- library module", - "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/reference');", - "header": "/**\n * @script prompts/reference\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for reference page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/reference');\n */", + "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/faq');", + "header": "/**\n * @script prompts/faq\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for faq page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/faq');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -5776,8 +6171,208 @@ "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/prompts/troubleshooting.js", - "script": "prompts/troubleshooting", + "path": "tools/lib/docs-usefulness/prompts/glossary.js", + "script": "prompts/glossary", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "owner": "docs", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for glossary page-type usefulness evaluation.", + "pipeline_declared": "indirect -- library module", + "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/glossary');", + "header": "/**\n * @script prompts/glossary\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for glossary page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/glossary');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tools/lib/docs-usefulness/prompts/index.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, + { + "path": "tools/lib/docs-usefulness/prompts/how_to.js", + "script": "prompts/how_to", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "owner": "docs", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for how_to page-type usefulness evaluation.", + "pipeline_declared": "indirect -- library module", + "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/how_to');", + "header": "/**\n * @script prompts/how_to\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for how_to page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/how_to');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tools/lib/docs-usefulness/prompts/index.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, + { + "path": "tools/lib/docs-usefulness/prompts/landing.js", + "script": "prompts/landing", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "owner": "docs", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for landing page-type usefulness evaluation.", + "pipeline_declared": "indirect -- library module", + "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/landing');", + "header": "/**\n * @script prompts/landing\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for landing page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/landing');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tools/lib/docs-usefulness/prompts/index.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, + { + "path": "tools/lib/docs-usefulness/prompts/overview.js", + "script": "prompts/overview", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "owner": "docs", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for overview page-type usefulness evaluation.", + "pipeline_declared": "indirect -- library module", + "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/overview');", + "header": "/**\n * @script prompts/overview\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for overview page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/overview');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tools/lib/docs-usefulness/prompts/index.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, + { + "path": "tools/lib/docs-usefulness/prompts/reference.js", + "script": "prompts/reference", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "owner": "docs", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for reference page-type usefulness evaluation.", + "pipeline_declared": "indirect -- library module", + "usage": "const { getPrompt } = require('../lib/docs-usefulness/prompts/reference');", + "header": "/**\n * @script prompts/reference\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14\n * @purpose-statement LLM prompt template for reference page-type usefulness evaluation.\n * @pipeline indirect -- library module\n * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/reference');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tools/lib/docs-usefulness/prompts/index.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tools/lib/docs-usefulness/prompts/index.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, + { + "path": "tools/lib/docs-usefulness/prompts/troubleshooting.js", + "script": "prompts/troubleshooting", "category": "utility", "purpose": "qa:repo-health", "scope": "single-domain", @@ -6064,6 +6659,62 @@ ], "trigger_group": "Indirect" }, + { + "path": "tools/scripts/lib/docs-path-sync.js", + "script": "docs-path-sync", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "full-repo", + "owner": "docs", + "needs": "E-C1, R-R14", + "purpose_statement": "Shared docs path sync library — detects staged page moves, plans deterministic route rewrites, and applies governed docs.json/path reference updates.", + "pipeline_declared": "indirect -- library module", + "usage": "const sync = require('./docs-path-sync');", + "header": "/**\n * @script docs-path-sync\n * @category utility\n * @purpose qa:repo-health\n * @scope full-repo\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Shared docs path sync library — detects staged page moves, plans deterministic route rewrites, and applies governed docs.json/path reference updates.\n * @pipeline indirect -- library module\n * @usage const sync = require('./docs-path-sync');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tests/unit/docs-path-sync.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/remediators/content/sync-docs-paths.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/content/check-docs-path-sync.js", + "pipeline": "indirect" + } + ], + "outputs": [ + { + "output_path": "", + "type": "stdout", + "call": "writeJson" + } + ], + "outputs_display": "", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tests/unit/docs-path-sync.test.js; indirect via tools/scripts/remediators/content/sync-docs-paths.js; indirect via tools/scripts/validators/content/check-docs-path-sync.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, { "path": "tools/scripts/validators/components/check-mdx-component-scope.js", "script": "check-mdx-component-scope", @@ -6201,17 +6852,17 @@ ], "outputs": [ { - "output_path": ".githooks/mint-dev-test.log", + "output_path": ".githooks/mint-dev-test-${REPO_KEY}.log", "type": "generated-output", "call": "createWriteStream" }, { - "output_path": ".githooks/mint-dev-test.pid", + "output_path": ".githooks/mint-dev-test-${REPO_KEY}.pid", "type": "generated-output", "call": "writeFileSync" } ], - "outputs_display": ".githooks/mint-dev-test.log, .githooks/mint-dev-test.pid", + "outputs_display": ".githooks/mint-dev-test-${REPO_KEY}.log, .githooks/mint-dev-test-${REPO_KEY}.pid", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -6232,19 +6883,19 @@ "script": "file-walker", "category": "utility", "purpose": "tooling:dev-tools", - "scope": "tests", + "scope": "full-repo", "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "File tree walker — recursively finds files matching patterns. Used by pre-commit hook and validators.", "pipeline_declared": "indirect — library module", "usage": "node tests/utils/file-walker.js [flags]", - "header": "/**\n * @script file-walker\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tests\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement File tree walker — recursively finds files matching patterns. Used by pre-commit hook and validators.\n * @pipeline indirect — library module\n * @dualmode dual-mode (document flags)\n * @usage node tests/utils/file-walker.js [flags]\n */", + "header": "/**\n * @script file-walker\n * @category utility\n * @purpose tooling:dev-tools\n * @scope full-repo\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement File tree walker — recursively finds files matching patterns. Used by pre-commit hook and validators.\n * @pipeline indirect — library module\n * @dualmode dual-mode (document flags)\n * @usage node tests/utils/file-walker.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "script", @@ -6353,10 +7004,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "indirect via .githooks/verify-browser.js; indirect via tests/integration/browser.test.js; indirect via tests/integration/domain-pages-audit.js; indirect via tests/integration/v2-link-audit.js; indirect via tests/integration/v2-wcag-audit.js; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; indirect via tests/unit/links-imports.test.js; indirect via tests/unit/mdx.test.js; indirect via tests/unit/quality.test.js; indirect via tests/unit/spelling.test.js; indirect via tests/unit/style-guide.test.js; indirect via tests/unit/v2-wcag-audit.test.js; indirect via tools/scripts/assign-purpose-metadata.js; indirect via tools/scripts/audit-v2-usefulness.js; indirect via tools/scripts/remediators/content/repair-spelling.js; indirect via tools/scripts/validators/components/check-mdx-component-scope.js; indirect via tools/scripts/validators/content/check-double-headers.js; indirect via tools/scripts/validators/content/check-proper-nouns.js", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Indirect" }, { @@ -6926,19 +7575,19 @@ "script": "generate-mint-dev-scope", "category": "generator", "purpose": "tooling:dev-tools", - "scope": "tools/scripts/dev, docs.json, .mintignore", + "scope": "full-repo", "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Mint dev scope generator — creates a scoped docs.json for running mint dev on a subset of pages", "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", "usage": "node tools/scripts/dev/generate-mint-dev-scope.js [flags]", - "header": "/**\n * @script generate-mint-dev-scope\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts/dev, docs.json, .mintignore\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Mint dev scope generator — creates a scoped docs.json for running mint dev on a subset of pages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/generate-mint-dev-scope.js [flags]\n */", + "header": "/**\n * @script generate-mint-dev-scope\n * @category generator\n * @purpose tooling:dev-tools\n * @scope full-repo\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Mint dev scope generator — creates a scoped docs.json for running mint dev on a subset of pages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/generate-mint-dev-scope.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "script", @@ -6963,14 +7612,12 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "indirect via tests/unit/lpd-scoped-mint-dev.test.js", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Indirect" } ], - "count": 63 + "count": 65 }, "Manual": { "label": "Manual - CLI only", @@ -6984,9 +7631,9 @@ "owner": "docs", "needs": "E-R19, F-R7", "purpose_statement": "Batch OG image updater — updates og:image meta tags across multiple pages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — developer tool", "usage": "bash tools/scripts/dev/batch-update-og-image.sh [flags]", - "header": "# @script batch-update-og-image\n# @category remediator\n# @purpose feature:seo\n# @scope tools/scripts\n# @owner docs\n# @needs E-R19, F-R7\n# @purpose-statement Batch OG image updater — updates og:image meta tags across multiple pages\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/dev/batch-update-og-image.sh [flags]", + "header": "# @script batch-update-og-image\n# @category remediator\n# @purpose feature:seo\n# @scope tools/scripts\n# @owner docs\n# @needs E-R19, F-R7\n# @purpose-statement Batch OG image updater — updates og:image meta tags across multiple pages\n# @pipeline manual — developer tool\n# @usage bash tools/scripts/dev/batch-update-og-image.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7026,9 +7673,9 @@ "owner": "docs", "needs": "E-R19, F-R7", "purpose_statement": "OG image replacer — replaces og:image path in a single page frontmatter", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — developer tool", "usage": "python3 tools/scripts/dev/replace-og-image.py [flags]", - "header": "# @script replace-og-image\n# @category remediator\n# @purpose feature:seo\n# @scope tools/scripts\n# @owner docs\n# @needs E-R19, F-R7\n# @purpose-statement OG image replacer — replaces og:image path in a single page frontmatter\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage python3 tools/scripts/dev/replace-og-image.py [flags]", + "header": "# @script replace-og-image\n# @category remediator\n# @purpose feature:seo\n# @scope tools/scripts\n# @owner docs\n# @needs E-R19, F-R7\n# @purpose-statement OG image replacer — replaces og:image path in a single page frontmatter\n# @pipeline manual — developer tool\n# @usage python3 tools/scripts/dev/replace-og-image.py [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7068,9 +7715,9 @@ "owner": "docs", "needs": "E-R19, F-R7", "purpose_statement": "Test for seo-generator — validates SEO generation logic", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/dev/test-seo-generator.js [flags]", - "header": "/**\n * @script test-seo-generator\n * @category generator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Test for seo-generator — validates SEO generation logic\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/dev/test-seo-generator.js [flags]\n */", + "header": "/**\n * @script test-seo-generator\n * @category generator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Test for seo-generator — validates SEO generation logic\n * @pipeline manual — developer tool\n * @usage node tools/scripts/dev/test-seo-generator.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7116,9 +7763,9 @@ "owner": "docs", "needs": "E-R19, F-R7", "purpose_statement": "Bulk OG image updater — updates og:image across all v2 pages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/dev/update-all-og-images.js [flags]", - "header": "/**\n * @script update-all-og-images\n * @category remediator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Bulk OG image updater — updates og:image across all v2 pages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/update-all-og-images.js [flags]\n */", + "header": "/**\n * @script update-all-og-images\n * @category remediator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Bulk OG image updater — updates og:image across all v2 pages\n * @pipeline manual — developer tool\n * @usage node tools/scripts/dev/update-all-og-images.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7164,9 +7811,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Mintlify language toggle checker — validates Mintlify version supports language toggle feature", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test-mintlify-version-language-toggle.js [flags]", - "header": "/**\n * @script test-mintlify-version-language-toggle\n * @category enforcer\n * @purpose feature:translation\n * @scope tools/scripts/i18n, docs.json, v2\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Mintlify language toggle checker — validates Mintlify version supports language toggle feature\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test-mintlify-version-language-toggle.js [flags]\n */", + "header": "/**\n * @script test-mintlify-version-language-toggle\n * @category enforcer\n * @purpose feature:translation\n * @scope tools/scripts/i18n, docs.json, v2\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Mintlify language toggle checker — validates Mintlify version supports language toggle feature\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test-mintlify-version-language-toggle.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7212,9 +7859,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests i18n CLI guardrails — validates argument validation and safety checks", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/cli-guardrails.test.js [flags]", - "header": "/**\n * @script cli-guardrails.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests i18n CLI guardrails — validates argument validation and safety checks\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/i18n/test/cli-guardrails.test.js [flags]\n */", + "header": "/**\n * @script cli-guardrails.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests i18n CLI guardrails — validates argument validation and safety checks\n * @pipeline manual — not yet in pipeline\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/i18n/test/cli-guardrails.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7260,9 +7907,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests docs-json-localizer — validates locale docs.json transformation logic", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/docs-json-localizer.test.js [flags]", - "header": "/**\n * @script docs-json-localizer.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests docs-json-localizer — validates locale docs.json transformation logic\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/docs-json-localizer.test.js [flags]\n */", + "header": "/**\n * @script docs-json-localizer.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests docs-json-localizer — validates locale docs.json transformation logic\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/docs-json-localizer.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7302,9 +7949,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests frontmatter parser — validates frontmatter read/write roundtrip", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/frontmatter.test.js [flags]", - "header": "/**\n * @script frontmatter.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests frontmatter parser — validates frontmatter read/write roundtrip\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/frontmatter.test.js [flags]\n */", + "header": "/**\n * @script frontmatter.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests frontmatter parser — validates frontmatter read/write roundtrip\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/frontmatter.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7344,9 +7991,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests MDX translation — validates content block translation logic", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/mdx-translate.test.js [flags]", - "header": "/**\n * @script mdx-translate.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests MDX translation — validates content block translation logic\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/mdx-translate.test.js [flags]\n */", + "header": "/**\n * @script mdx-translate.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests MDX translation — validates content block translation logic\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/mdx-translate.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7386,9 +8033,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests provenance tracker — validates translation provenance recording", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/provenance.test.js [flags]", - "header": "/**\n * @script provenance.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests provenance tracker — validates translation provenance recording\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/provenance.test.js [flags]\n */", + "header": "/**\n * @script provenance.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests provenance tracker — validates translation provenance recording\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/provenance.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7428,9 +8075,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests OpenRouter provider — validates API call logic and response parsing", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/provider-openrouter.test.js [flags]", - "header": "/**\n * @script provider-openrouter.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests OpenRouter provider — validates API call logic and response parsing\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/provider-openrouter.test.js [flags]\n */", + "header": "/**\n * @script provider-openrouter.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests OpenRouter provider — validates API call logic and response parsing\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/provider-openrouter.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7821,9 +8468,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Codex commit helper — audits codex branch state and generates compliant commit messages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/codex-commit.js [flags]", - "header": "/**\n * @script codex-commit\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, .githooks, ai-tools/ai-rules\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex commit helper — audits codex branch state and generates compliant commit messages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/codex-commit.js [flags]\n */", + "header": "/**\n * @script codex-commit\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, .githooks, ai-tools/ai-rules\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex commit helper — audits codex branch state and generates compliant commit messages\n * @pipeline manual — not yet in pipeline\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/codex-commit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7869,9 +8516,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Deprecated compatibility shim — blocks stash-based Codex merge flow and directs users to task-finalize, lock-release, and task-cleanup", - "pipeline_declared": "manual — compatibility shim only", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/codex-safe-merge-with-stash.js [flags]", - "header": "/**\n * @script codex-safe-merge-with-stash\n * @category utility\n * @purpose governance:agent-governance\n * @scope tools/scripts, tools/scripts/codex\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Deprecated compatibility shim — blocks stash-based Codex merge flow and directs users to task-finalize, lock-release, and task-cleanup\n * @pipeline manual — compatibility shim only\n * @usage node tools/scripts/codex-safe-merge-with-stash.js [flags]\n */", + "header": "/**\n * @script codex-safe-merge-with-stash\n * @category utility\n * @purpose governance:agent-governance\n * @scope tools/scripts, tools/scripts/codex\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Deprecated compatibility shim — blocks stash-based Codex merge flow and directs users to task-finalize, lock-release, and task-cleanup\n * @pipeline manual — developer tool\n * @usage node tools/scripts/codex-safe-merge-with-stash.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7917,9 +8564,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Codex PR creator — generates codex PR with correct branch naming, labels, and body template", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/create-codex-pr.js [flags]", - "header": "/**\n * @script create-codex-pr\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex PR creator — generates codex PR with correct branch naming, labels, and body template\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/create-codex-pr.js [flags]\n */", + "header": "/**\n * @script create-codex-pr\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex PR creator — generates codex PR with correct branch naming, labels, and body template\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/create-codex-pr.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -7966,9 +8613,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Cross-agent packager — bundles audit reports and repo state into agent-consumable packages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/cross-agent-packager.js [flags]", - "header": "/**\n * @script cross-agent-packager\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, ai-tools/ai-skills/catalog, ai-tools/agent-packs\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Cross-agent packager — bundles audit reports and repo state into agent-consumable packages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/cross-agent-packager.js [flags]\n */", + "header": "/**\n * @script cross-agent-packager\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, ai-tools/ai-skills/catalog, ai-tools/agent-packs\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Cross-agent packager — bundles audit reports and repo state into agent-consumable packages\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/cross-agent-packager.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -8030,9 +8677,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Codex skills sync — synchronises skill definition files between local and remote sources. Supports --check mode.", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/sync-codex-skills.js [flags]", - "header": "/**\n * @script sync-codex-skills\n * @category automation\n * @purpose governance:agent-governance\n * @scope tools/scripts, ai-tools/ai-skills/templates, tests/unit/codex-skill-sync.test.js\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex skills sync — synchronises skill definition files between local and remote sources. Supports --check mode.\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/sync-codex-skills.js [flags]\n */", + "header": "/**\n * @script sync-codex-skills\n * @category automation\n * @purpose governance:agent-governance\n * @scope tools/scripts, ai-tools/ai-skills/templates, tests/unit/codex-skill-sync.test.js\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex skills sync — synchronises skill definition files between local and remote sources. Supports --check mode.\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/sync-codex-skills.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -8181,9 +8828,9 @@ "owner": "docs", "needs": "R-R16, R-R17", "purpose_statement": "Generates docs-guide workflow/template indexes and optionally verifies freshness", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/generate-docs-guide-indexes.js [flags]", - "header": "/**\n * @script generate-docs-guide-indexes\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs-guide, .github/workflows, .github/ISSUE_TEMPLATE\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generates docs-guide workflow/template indexes and optionally verifies freshness\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/generate-docs-guide-indexes.js [flags]\n */", + "header": "/**\n * @script generate-docs-guide-indexes\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs-guide, .github/workflows, .github/ISSUE_TEMPLATE\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generates docs-guide workflow/template indexes and optionally verifies freshness\n * @pipeline manual — not yet in pipeline\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/generate-docs-guide-indexes.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -8230,9 +8877,9 @@ "owner": "docs", "needs": "R-R16, R-R17", "purpose_statement": "Generates the docs-guide pages index", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/generate-docs-guide-pages-index.js [flags]", - "header": "/**\n * @script generate-docs-guide-pages-index\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs-guide/indexes/pages-index.mdx, v2/index.mdx, docs.json\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generates the docs-guide pages index\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/generate-docs-guide-pages-index.js [flags]\n */", + "header": "/**\n * @script generate-docs-guide-pages-index\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs-guide/indexes/pages-index.mdx, v2/index.mdx, docs.json\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generates the docs-guide pages index\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/generate-docs-guide-pages-index.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -8274,19 +8921,19 @@ "script": "repair-governance.test", "category": "validator", "purpose": "governance:repo-health", - "scope": "tests/unit, tools/scripts/orchestrators/repair-governance.js, .github/workflows/repair-governance.yml", + "scope": "single-file", "owner": "docs", "needs": "R-R14, R-R18, R-C6", "purpose_statement": "Tests repair-governance.js for safe dry-run, fix, rollback, strict exit handling, and workflow contract coverage.", "pipeline_declared": "manual", "usage": "node tests/unit/repair-governance.test.js", - "header": "/**\n * @script repair-governance.test\n * @category validator\n * @purpose governance:repo-health\n * @scope tests/unit, tools/scripts/orchestrators/repair-governance.js, .github/workflows/repair-governance.yml\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Tests repair-governance.js for safe dry-run, fix, rollback, strict exit handling, and workflow contract coverage.\n * @pipeline manual\n * @usage node tests/unit/repair-governance.test.js\n */", + "header": "/**\n * @script repair-governance.test\n * @category validator\n * @purpose governance:repo-health\n * @scope single-file\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Tests repair-governance.js for safe dry-run, fix, rollback, strict exit handling, and workflow contract coverage.\n * @pipeline manual\n * @usage node tests/unit/repair-governance.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -8311,10 +8958,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -8328,7 +8973,7 @@ "purpose_statement": "Inserts or extends framework headers on all repo scripts from classification data.", "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", "usage": "node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run", - "header": "/**\n * @script add-framework-headers\n * @summary Insert or verify governance framework metadata headers from classification JSON.\n * @category generator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14\n * @purpose-statement Inserts or extends framework headers on all repo scripts from classification data.\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run\n *\n * @inputs\n * --data --dry-run|--write|--verify [--filter ] [--exclude-subdirs] [--force]\n *\n * @outputs\n * - Console summary with files processed, updated, skipped, and errors\n *\n * @exit-codes\n * 0 = success\n * 1 = argument, I/O, parse, or verification failure\n *\n * @examples\n * node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run\n * node tools/scripts/add-framework-headers.js --data script-classifications.json --filter tools/scripts --write\n *\n * @notes\n * Tool-only migration utility; it does not execute repo-wide header rewrites unless explicitly run.\n */", + "header": "/**\n * @script add-framework-headers\n * @category generator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14\n * @purpose-statement Inserts or extends framework headers on all repo scripts from classification data.\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -8422,7 +9067,7 @@ "purpose_statement": "Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied.", "pipeline_declared": "manual", "usage": "node tools/scripts/validators/governance/review-governance-repair-checklist.js [--output ] [--json] [--md]", - "header": "/**\n * @script review-governance-repair-checklist\n * @category validator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18\n * @purpose-statement Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied.\n * @pipeline manual\n * @dualmode --json | --md | default both\n * @usage node tools/scripts/validators/governance/review-governance-repair-checklist.js [--output ] [--json] [--md]\n */", + "header": "/**\n * @script review-governance-repair-checklist\n * @category validator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18\n * @purpose-statement Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied.\n * @pipeline manual\n * @dualmode --json | --md | default both\n * @usage node tools/scripts/validators/governance/review-governance-repair-checklist.js [--output ] [--json] [--md]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -8507,9 +9152,9 @@ "owner": "docs", "needs": "F-R1", "purpose_statement": "RSS-to-MDX converter — imports RSS feed items and converts to MDX page format", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/convert-rss-to-mdx.js [flags]", - "header": "/**\n * @script convert-rss-to-mdx\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope tools/scripts, v2/internal/assets/transcripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement RSS-to-MDX converter — imports RSS feed items and converts to MDX page format\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/convert-rss-to-mdx.js [flags]\n */", + "header": "/**\n * @script convert-rss-to-mdx\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope tools/scripts, v2/internal/assets/transcripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement RSS-to-MDX converter — imports RSS feed items and converts to MDX page format\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/convert-rss-to-mdx.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -8555,9 +9200,9 @@ "owner": "docs", "needs": "F-R1", "purpose_statement": "LPT exchange data fetcher — pulls exchange listing data for LPT token pages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/snippets/fetch-lpt-exchanges.sh [flags]", - "header": "# @script fetch-lpt-exchanges\n# @category automation\n# @purpose infrastructure:data-feeds\n# @scope tools/scripts\n# @owner docs\n# @needs F-R1\n# @purpose-statement LPT exchange data fetcher — pulls exchange listing data for LPT token pages\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/snippets/fetch-lpt-exchanges.sh [flags]\n# Fetch LPT exchange listings from CoinGecko API and append to lpt-exchanges.mdx\n# Usage: ./tools/scripts/snippets/fetch-lpt-exchanges.sh", + "header": "# @script fetch-lpt-exchanges\n# @category automation\n# @purpose infrastructure:data-feeds\n# @scope tools/scripts\n# @owner docs\n# @needs F-R1\n# @purpose-statement LPT exchange data fetcher — pulls exchange listing data for LPT token pages\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/snippets/fetch-lpt-exchanges.sh [flags]\n# Fetch LPT exchange listings from CoinGecko API and append to lpt-exchanges.mdx\n# Usage: ./tools/scripts/snippets/fetch-lpt-exchanges.sh", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -8864,19 +9509,19 @@ "script": "v2-wcag-audit.test", "category": "validator", "purpose": "qa:content-quality", - "scope": "tests/unit, tests/integration", + "scope": "v2-content", "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "Unit tests for v2-wcag-audit.js — tests individual WCAG rules", "pipeline_declared": "manual — not yet in pipeline", "usage": "node tests/unit/v2-wcag-audit.test.js [flags]", - "header": "/**\n * @script v2-wcag-audit.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests/unit, tests/integration\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Unit tests for v2-wcag-audit.js — tests individual WCAG rules\n * @pipeline manual — not yet in pipeline\n * @usage node tests/unit/v2-wcag-audit.test.js [flags]\n */", + "header": "/**\n * @script v2-wcag-audit.test\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Unit tests for v2-wcag-audit.js — tests individual WCAG rules\n * @pipeline manual — not yet in pipeline\n * @usage node tests/unit/v2-wcag-audit.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "npm-script", @@ -8902,10 +9547,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (npm script: test:wcag:unit)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -9015,9 +9658,9 @@ "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "Test for add-callouts.js — validates callout insertion logic against fixtures", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/dev/test-add-callouts.js [flags]", - "header": "/**\n * @script test-add-callouts\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Test for add-callouts.js — validates callout insertion logic against fixtures\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/dev/test-add-callouts.js [flags]\n */", + "header": "/**\n * @script test-add-callouts\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Test for add-callouts.js — validates callout insertion logic against fixtures\n * @pipeline manual — developer tool\n * @usage node tools/scripts/dev/test-add-callouts.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -9059,19 +9702,19 @@ "script": "check-anchor-usage", "category": "validator", "purpose": "qa:content-quality", - "scope": "tools/scripts/validators/content, v2", + "scope": "v2-content", "owner": "docs", "needs": "R-R14, R-C6", "purpose_statement": "Validates same-page anchor links in maintained v2 MDX files against heading IDs on the same page", "pipeline_declared": "manual, ci", "usage": "node tools/scripts/validators/content/check-anchor-usage.js [--json] [--scope ]", - "header": "/**\n * @script check-anchor-usage\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, v2\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Validates same-page anchor links in maintained v2 MDX files against heading IDs on the same page\n * @pipeline manual, ci\n * @usage node tools/scripts/validators/content/check-anchor-usage.js [--json] [--scope ]\n */", + "header": "/**\n * @script check-anchor-usage\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Validates same-page anchor links in maintained v2 MDX files against heading IDs on the same page\n * @pipeline manual, ci\n * @usage node tools/scripts/validators/content/check-anchor-usage.js [--json] [--scope ]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -9096,10 +9739,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -9107,19 +9748,19 @@ "script": "check-description-quality", "category": "validator", "purpose": "qa:content-quality", - "scope": "tools/scripts/validators/content, v2", + "scope": "v2-content", "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "Validates English v2 frontmatter descriptions for SEO length, boilerplate openings, and duplicate reuse", "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", "usage": "node tools/scripts/validators/content/check-description-quality.js [--path ] [--strict]", - "header": "/**\n * @script check-description-quality\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, v2\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Validates English v2 frontmatter descriptions for SEO length, boilerplate openings, and duplicate reuse\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/validators/content/check-description-quality.js [--path ] [--strict]\n */", + "header": "/**\n * @script check-description-quality\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Validates English v2 frontmatter descriptions for SEO length, boilerplate openings, and duplicate reuse\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/validators/content/check-description-quality.js [--path ] [--strict]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -9144,10 +9785,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -9209,7 +9848,7 @@ "purpose_statement": "Deterministic UK English grammar checker for prose content with optional conservative autofix for safe rules.", "pipeline_declared": "manual/CI validator for English v2 docs and explicit content files", "usage": "node tools/scripts/validators/content/check-grammar-en-gb.js [--scope full|changed] [--file ] [--fix] [--strict]", - "header": "/**\n * @script check-grammar-en-gb\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, tools/script-index.md, tests/script-index.md, docs-guide/indexes/scripts-index.mdx, v2\n * @owner docs\n * @needs SE-1-11, S-1.15\n * @purpose-statement Deterministic UK English grammar checker for prose content with optional conservative autofix for safe rules.\n * @pipeline manual/CI validator for English v2 docs and explicit content files\n * @dualmode --check (default) | --fix (safe in-place rewrites)\n * @usage node tools/scripts/validators/content/check-grammar-en-gb.js [--scope full|changed] [--file ] [--fix] [--strict]\n */", + "header": "/**\n * @script check-grammar-en-gb\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, tools/script-index.md, tests/script-index.md, docs-guide/indexes/scripts-index.mdx, v2\n * @owner docs\n * @needs SE-1-11, S-1.15\n * @purpose-statement Deterministic UK English grammar checker for prose content with optional conservative autofix for safe rules.\n * @pipeline manual/CI validator for English v2 docs and explicit content files\n * @dualmode --check (default) | --fix (safe in-place rewrites)\n * @usage node tools/scripts/validators/content/check-grammar-en-gb.js [--scope full|changed] [--file ] [--fix] [--strict]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -9251,19 +9890,19 @@ "script": "check-page-endings", "category": "validator", "purpose": "qa:content-quality", - "scope": "tools/scripts/validators/content, v2", + "scope": "v2-content", "owner": "docs", "needs": "R-R14", "purpose_statement": "Validates that English v2 MDX pages end with an approved navigational or closing element", "pipeline_declared": "manual, ci", "usage": "node tools/scripts/validators/content/check-page-endings.js [--fix] [--json]", - "header": "/**\n * @script check-page-endings\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, v2\n * @owner docs\n * @needs R-R14\n * @purpose-statement Validates that English v2 MDX pages end with an approved navigational or closing element\n * @pipeline manual, ci\n * @usage node tools/scripts/validators/content/check-page-endings.js [--fix] [--json]\n */", + "header": "/**\n * @script check-page-endings\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs R-R14\n * @purpose-statement Validates that English v2 MDX pages end with an approved navigational or closing element\n * @pipeline manual, ci\n * @usage node tools/scripts/validators/content/check-page-endings.js [--fix] [--json]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -9288,10 +9927,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -9351,9 +9988,9 @@ "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "WCAG repair shared logic — common repair functions used by WCAG audit fix mode", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/wcag-repair-common.js [flags]", - "header": "/**\n * @script wcag-repair-common\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts, tests/integration, tasks/reports, v2\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement WCAG repair shared logic — common repair functions used by WCAG audit fix mode\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/wcag-repair-common.js [flags]\n */", + "header": "/**\n * @script wcag-repair-common\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts, tests/integration, tasks/reports, v2\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement WCAG repair shared logic — common repair functions used by WCAG audit fix mode\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/wcag-repair-common.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -9444,19 +10081,19 @@ "script": "v2-link-audit.test", "category": "validator", "purpose": "qa:link-integrity", - "scope": "tests/unit, tests/integration", + "scope": "v2-content", "owner": "docs", "needs": "E-R12, E-R14", "purpose_statement": "Unit tests for v2-link-audit.js — tests individual link checking rules", "pipeline_declared": "manual — not yet in pipeline", "usage": "node tests/unit/v2-link-audit.test.js [flags]", - "header": "/**\n * @script v2-link-audit.test\n * @category validator\n * @purpose qa:link-integrity\n * @scope tests/unit, tests/integration\n * @owner docs\n * @needs E-R12, E-R14\n * @purpose-statement Unit tests for v2-link-audit.js — tests individual link checking rules\n * @pipeline manual — not yet in pipeline\n * @dualmode --full (validator) | --write-links (remediator)\n * @usage node tests/unit/v2-link-audit.test.js [flags]\n */", + "header": "/**\n * @script v2-link-audit.test\n * @category validator\n * @purpose qa:link-integrity\n * @scope v2-content\n * @owner docs\n * @needs E-R12, E-R14\n * @purpose-statement Unit tests for v2-link-audit.js — tests individual link checking rules\n * @pipeline manual — not yet in pipeline\n * @dualmode --full (validator) | --write-links (remediator)\n * @usage node tests/unit/v2-link-audit.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "npm-script", @@ -9487,10 +10124,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (npm script: test:link-audit:unit)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -9612,19 +10247,19 @@ "script": "audit-script-inventory-repair-rules.test", "category": "validator", "purpose": "qa:repo-health", - "scope": "tests/unit, tools/scripts/validators/governance", + "scope": "single-file", "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety.", "pipeline_declared": "manual (not yet in pipeline)", "usage": "node tests/unit/audit-script-inventory-repair-rules.test.js", - "header": "/**\n * @script audit-script-inventory-repair-rules.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests/unit, tools/scripts/validators/governance\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety.\n * @pipeline manual (not yet in pipeline)\n * @usage node tests/unit/audit-script-inventory-repair-rules.test.js\n */", + "header": "/**\n * @script audit-script-inventory-repair-rules.test\n * @category validator\n * @purpose qa:repo-health\n * @scope single-file\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety.\n * @pipeline manual (not yet in pipeline)\n * @usage node tests/unit/audit-script-inventory-repair-rules.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -9649,10 +10284,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -9666,7 +10299,7 @@ "purpose_statement": "Template for category-scoped component unit tests.", "pipeline_declared": "manual", "usage": "node tests/unit/components/TEMPLATE.test.js", - "header": "/**\n * @script component-template.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Template for category-scoped component unit tests.\n * @pipeline manual\n * @usage node tests/unit/components/TEMPLATE.test.js\n */", + "header": "/**\n * @script component-template.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Template for category-scoped component unit tests.\n * @pipeline manual\n * @usage node tests/unit/components/TEMPLATE.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -9960,9 +10593,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Tasks folder auditor — checks tasks/ structure, normalises report locations, applies recommendations with conflict-safe moves", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/audit-tasks-folders.js [flags]", - "header": "/**\n * @script audit-tasks-folders\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, tasks\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Tasks folder auditor — checks tasks/ structure, normalises report locations, applies recommendations with conflict-safe moves\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/audit-tasks-folders.js [flags]\n */", + "header": "/**\n * @script audit-tasks-folders\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, tasks\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Tasks folder auditor — checks tasks/ structure, normalises report locations, applies recommendations with conflict-safe moves\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/audit-tasks-folders.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10063,9 +10696,9 @@ "owner": "docs", "needs": "R-R10, R-R29", "purpose_statement": "Generates component-governance remediation reports from the approved audit and live repo state, including defensive-rendering guidance for MDX-facing components.", - "pipeline_declared": "manual", + "pipeline_declared": "manual — report generation", "usage": "node tools/scripts/generate-component-governance-remediation-reports.js [flags]", - "header": "/**\n * @script generate-component-governance-remediation-reports\n * @category generator\n * @purpose qa:repo-health\n * @summary Generate Phase 2a remediation reports from the approved component-governance audit and live repo state.\n * @owner docs\n * @scope generated-output\n * @needs R-R10, R-R29\n * @purpose-statement Generates component-governance remediation reports from the approved audit and live repo state, including defensive-rendering guidance for MDX-facing components.\n * @pipeline manual\n * @usage node tools/scripts/generate-component-governance-remediation-reports.js [flags]\n *\n * @inputs\n * --audit-file (default: tasks/reports/component-governance-audit.md)\n * --output-dir (default: tasks/reports)\n * --reports (default: all)\n * --strict / --no-strict (default: strict)\n *\n * @outputs\n * - tasks/reports/migration-impact-report.md\n * - tasks/reports/colour-remediation-report.md\n * - tasks/reports/style-css-token-audit.md\n * - tasks/reports/defensive-rendering-remediation-report.md\n *\n * @exit-codes\n * 0 = reports generated successfully\n * 1 = invalid args, audit drift that blocks strict mode, or runtime failure\n *\n * @examples\n * node tools/scripts/generate-component-governance-remediation-reports.js\n * node tools/scripts/generate-component-governance-remediation-reports.js --reports migration,defensive\n * node tools/scripts/generate-component-governance-remediation-reports.js --no-strict\n *\n * @notes\n * Phase 2a is read-only for runtime docs/component source. This script only reads repo state and writes report artefacts.\n */", + "header": "/**\n * @script generate-component-governance-remediation-reports\n * @category generator\n * @purpose qa:repo-health\n * @scope generated-output\n * @owner docs\n * @needs R-R10, R-R29\n * @purpose-statement Generates component-governance remediation reports from the approved audit and live repo state, including defensive-rendering guidance for MDX-facing components.\n * @pipeline manual — report generation\n * @usage node tools/scripts/generate-component-governance-remediation-reports.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10110,9 +10743,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Script scaffolder — creates a new script file prefilled with the required docs header template", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/new-script.js [flags]", - "header": "/**\n * @script new-script\n * @category generator\n * @purpose qa:repo-health\n * @scope tools/scripts, tests/unit/script-docs.test.js\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Script scaffolder — creates a new script file prefilled with the required docs header template\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/new-script.js [flags]\n */", + "header": "/**\n * @script new-script\n * @category generator\n * @purpose qa:repo-health\n * @scope tools/scripts, tests/unit/script-docs.test.js\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Script scaffolder — creates a new script file prefilled with the required docs header template\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/new-script.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10158,9 +10791,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Report publisher — publishes v2 internal audit reports to configured output locations", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/publish-v2-internal-reports.js [flags]", - "header": "/**\n * @script publish-v2-internal-reports\n * @category automation\n * @purpose qa:repo-health\n * @scope tools/scripts, tools/config, v2/internal, docs.json, tasks/reports, tests/reports\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Report publisher — publishes v2 internal audit reports to configured output locations\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/publish-v2-internal-reports.js [flags]\n */", + "header": "/**\n * @script publish-v2-internal-reports\n * @category automation\n * @purpose qa:repo-health\n * @scope tools/scripts, tools/config, v2/internal, docs.json, tasks/reports, tests/reports\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Report publisher — publishes v2 internal audit reports to configured output locations\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/publish-v2-internal-reports.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10187,10 +10820,8 @@ } ], "outputs_display": "tools/scripts/reports, tools/scripts/docs.json", - "downstream_consumers": [ - "tools/scripts/generate-component-governance-remediation-reports.js" - ], - "downstream_display": "Yes: tools/scripts/generate-component-governance-remediation-reports.js", + "downstream_consumers": [], + "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, @@ -10213,9 +10844,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Script footprint auditor — analyses script file sizes, dependencies, and usage patterns across the repo", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/script-footprint-and-usage-audit.js [flags]", - "header": "/**\n * @script script-footprint-and-usage-audit\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, tests, tasks/reports, ai-tools/ai-skills\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Script footprint auditor — analyses script file sizes, dependencies, and usage patterns across the repo\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/script-footprint-and-usage-audit.js [flags]\n */", + "header": "/**\n * @script script-footprint-and-usage-audit\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, tests, tasks/reports, ai-tools/ai-skills\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Script footprint auditor — analyses script file sizes, dependencies, and usage patterns across the repo\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/script-footprint-and-usage-audit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10266,9 +10897,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Loads component-library routes in a headless browser and fails on render, console, or 404 issues.", - "pipeline_declared": "manual", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/verify-all-pages.js", - "header": "/**\n * @script verify-all-pages\n * @category enforcer\n * @purpose qa:repo-health\n * @summary Utility script for tools/scripts/verify-all-pages.js.\n * @owner docs\n * @scope single-domain\n * @needs E-C1, R-R14\n * @purpose-statement Loads component-library routes in a headless browser and fails on render, console, or 404 issues.\n * @pipeline manual\n * @usage node tools/scripts/verify-all-pages.js\n *\n * @inputs\n * No required CLI flags; optional flags are documented inline.\n *\n * @outputs\n * - Console output and/or file updates based on script purpose.\n *\n * @exit-codes\n * 0 = success\n * 1 = runtime or validation failure\n *\n * @examples\n * node tools/scripts/verify-all-pages.js\n *\n * @notes\n * Keep script behavior deterministic and update script indexes after changes.\n */", + "header": "/**\n * @script verify-all-pages\n * @category enforcer\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Loads component-library routes in a headless browser and fails on render, console, or 404 issues.\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/verify-all-pages.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10312,9 +10943,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Payment/orchestrator gate verifier — checks payment and orchestrator documentation gate conditions", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/verify-pay-orc-gate-finalize.sh [flags]", - "header": "# @script verify-pay-orc-gate-finalize\n# @category enforcer\n# @purpose qa:repo-health\n# @scope tools/scripts, .githooks/pre-commit, v2/gateways, v2/orchestrators\n# @owner docs\n# @needs E-C1, R-R14\n# @purpose-statement Payment/orchestrator gate verifier — checks payment and orchestrator documentation gate conditions\n# @pipeline manual — diagnostic/investigation tool, run on-demand only\n# @usage bash tools/scripts/verify-pay-orc-gate-finalize.sh [flags]", + "header": "# @script verify-pay-orc-gate-finalize\n# @category enforcer\n# @purpose qa:repo-health\n# @scope tools/scripts, .githooks/pre-commit, v2/gateways, v2/orchestrators\n# @owner docs\n# @needs E-C1, R-R14\n# @purpose-statement Payment/orchestrator gate verifier — checks payment and orchestrator documentation gate conditions\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/verify-pay-orc-gate-finalize.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10354,9 +10985,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Large change verifier — blocks or warns when a commit touches an unusually large number of files", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/verify/.verify-large-change.sh [flags]", - "header": "# @script verify-large-change\n# @category enforcer\n# @purpose qa:repo-health\n# @scope tools/scripts/verify\n# @owner docs\n# @needs E-C1, R-R14\n# @purpose-statement Large change verifier — blocks or warns when a commit touches an unusually large number of files\n# @pipeline manual — diagnostic/investigation tool, run on-demand only\n# @usage bash tools/scripts/verify/.verify-large-change.sh [flags]", + "header": "# @script verify-large-change\n# @category enforcer\n# @purpose qa:repo-health\n# @scope tools/scripts/verify\n# @owner docs\n# @needs E-C1, R-R14\n# @purpose-statement Large change verifier — blocks or warns when a commit touches an unusually large number of files\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/verify/.verify-large-change.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10498,9 +11129,9 @@ "owner": "docs", "needs": "F-R17", "purpose_statement": "OpenAPI spec fetcher — pulls latest OpenAPI specs from Livepeer services for reference pages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/snippets/fetch-openapi-specs.sh [flags]", - "header": "# @script fetch-openapi-specs\n# @category automation\n# @purpose tooling:api-spec\n# @scope tools/scripts\n# @owner docs\n# @needs F-R17\n# @purpose-statement OpenAPI spec fetcher — pulls latest OpenAPI specs from Livepeer services for reference pages\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/snippets/fetch-openapi-specs.sh [flags]\n# Pre-build script to fetch external OpenAPI specification files\n# Run this before building the docs to ensure API specs are up-to-date", + "header": "# @script fetch-openapi-specs\n# @category automation\n# @purpose tooling:api-spec\n# @scope tools/scripts\n# @owner docs\n# @needs F-R17\n# @purpose-statement OpenAPI spec fetcher — pulls latest OpenAPI specs from Livepeer services for reference pages\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/snippets/fetch-openapi-specs.sh [flags]\n# Pre-build script to fetch external OpenAPI specification files\n# Run this before building the docs to ensure API specs are up-to-date", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10582,9 +11213,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Verifies browser availability for Puppeteer-based integration tests", - "pipeline_declared": "manual — legacy browser validator invoked by .githooks/verify.sh when run directly", + "pipeline_declared": "manual — developer tool", "usage": "node .githooks/verify-browser.js [flags]", - "header": "/**\n * @script verify-browser\n * @category utility\n * @purpose tooling:dev-tools\n * @scope .githooks\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Verifies browser availability for Puppeteer-based integration tests\n * @pipeline manual — legacy browser validator invoked by .githooks/verify.sh when run directly\n * @usage node .githooks/verify-browser.js [flags]\n */", + "header": "/**\n * @script verify-browser\n * @category utility\n * @purpose tooling:dev-tools\n * @scope .githooks\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Verifies browser availability for Puppeteer-based integration tests\n * @pipeline manual — developer tool\n * @usage node .githooks/verify-browser.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10630,9 +11261,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files", - "pipeline_declared": "manual — legacy pre-commit sub-hook retained for on-demand verification", + "pipeline_declared": "manual — developer tool", "usage": "bash .githooks/verify.sh [flags]", - "header": "# @script verify\n# @category utility\n# @purpose tooling:dev-tools\n# @scope .githooks\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files\n# @pipeline manual — legacy pre-commit sub-hook retained for on-demand verification\n# @usage bash .githooks/verify.sh [flags]\n# Verification script for pre-commit hook\n# Runs various validation checks on staged files", + "header": "# @script verify\n# @category utility\n# @purpose tooling:dev-tools\n# @scope .githooks\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files\n# @pipeline manual — developer tool\n# @usage bash .githooks/verify.sh [flags]\n# Verification script for pre-commit hook\n# Runs various validation checks on staged files", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -10674,19 +11305,19 @@ "script": "lpd-scoped-mint-dev.test", "category": "utility", "purpose": "tooling:dev-tools", - "scope": "tests/unit, lpd, tools/scripts/mint-dev.sh, tools/scripts/dev/generate-mint-dev-scope.js", + "scope": "single-domain", "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Tests lpd scoped mint-dev functionality — validates dev server scope filtering", "pipeline_declared": "manual — developer tool", "usage": "node tests/unit/lpd-scoped-mint-dev.test.js [flags]", - "header": "/**\n * @script lpd-scoped-mint-dev.test\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tests/unit, lpd, tools/scripts/mint-dev.sh, tools/scripts/dev/generate-mint-dev-scope.js\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Tests lpd scoped mint-dev functionality — validates dev server scope filtering\n * @pipeline manual — developer tool\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/lpd-scoped-mint-dev.test.js [flags]\n */", + "header": "/**\n * @script lpd-scoped-mint-dev.test\n * @category utility\n * @purpose tooling:dev-tools\n * @scope single-domain\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Tests lpd scoped mint-dev functionality — validates dev server scope filtering\n * @pipeline manual — developer tool\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/lpd-scoped-mint-dev.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -10711,10 +11342,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -11014,9 +11643,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Mintlify dev debugger — diagnostic tool for troubleshooting mint dev server issues", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/debug-mint-dev.js [flags]", - "header": "/**\n * @script debug-mint-dev\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Mintlify dev debugger — diagnostic tool for troubleshooting mint dev server issues\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/debug-mint-dev.js [flags]\n */", + "header": "/**\n * @script debug-mint-dev\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Mintlify dev debugger — diagnostic tool for troubleshooting mint dev server issues\n * @pipeline manual — developer tool\n * @usage node tools/scripts/debug-mint-dev.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -11053,24 +11682,64 @@ ], "trigger_group": "Manual" }, + { + "path": "tools/scripts/dev/mint-custom-loader.sh", + "script": "mint-custom-loader", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "generated-output", + "owner": "docs", + "needs": "E-C6, F-C1", + "purpose_statement": "Mint custom loader — launches lpd dev with an alternate docs config as the active Mint navigation source.", + "pipeline_declared": "manual — developer tool", + "usage": "bash tools/scripts/dev/mint-custom-loader.sh [flags]", + "header": "# @script mint-custom-loader\n# @category utility\n# @purpose tooling:dev-tools\n# @scope generated-output\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Mint custom loader — launches lpd dev with an alternate docs config as the active Mint navigation source.\n# @pipeline manual — developer tool\n# @usage bash tools/scripts/dev/mint-custom-loader.sh [flags]\n# Custom Mintlify loader for alternate docs config\n# Usage: bash tools/scripts/dev/mint-custom-loader.sh [-- ...mint args]", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "manual", + "caller": "none", + "pipeline": "manual" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "manual (none)", + "grade": "B", + "flags": [], + "trigger_group": "Manual" + }, { "path": "tools/scripts/mint-dev.sh", "script": "mint-dev", "category": "utility", "purpose": "tooling:dev-tools", - "scope": "tools/scripts", + "scope": "full-repo", "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Mintlify dev server launcher — starts mint dev with correct configuration", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — developer tool", "usage": "bash tools/scripts/mint-dev.sh [flags]", - "header": "# @script mint-dev\n# @category utility\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Mintlify dev server launcher — starts mint dev with correct configuration\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/mint-dev.sh [flags]", + "header": "# @script mint-dev\n# @category utility\n# @purpose tooling:dev-tools\n# @scope full-repo\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Mintlify dev server launcher — starts mint dev with correct configuration\n# @pipeline manual — developer tool\n# @usage bash tools/scripts/mint-dev.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -11095,10 +11764,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -11110,9 +11777,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "API docs generator — generates API reference pages from OpenAPI specs", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/snippets/generate-api-docs.sh [flags]", - "header": "# @script generate-api-docs\n# @category generator\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement API docs generator — generates API reference pages from OpenAPI specs\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/snippets/generate-api-docs.sh [flags]\n# Generate API documentation from OpenAPI spec\n# Creates: landing page + individual endpoint pages + navigation JSON\n#\n# Usage: ./generate-api-docs.sh \n# Example: ./generate-api-docs.sh ai/worker/api/openapi.yaml v2/pages/04_gateways/guides-references/api-reference/AI-API \"AI API\"\n#", + "header": "# @script generate-api-docs\n# @category generator\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement API docs generator — generates API reference pages from OpenAPI specs\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/snippets/generate-api-docs.sh [flags]\n# Generate API documentation from OpenAPI spec\n# Creates: landing page + individual endpoint pages + navigation JSON\n#\n# Usage: ./generate-api-docs.sh \n# Example: ./generate-api-docs.sh ai/worker/api/openapi.yaml v2/pages/04_gateways/guides-references/api-reference/AI-API \"AI API\"\n#", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -11158,9 +11825,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Glossary generator — produces glossary data file from terminology sources", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/snippets/generate-data/scripts/generate-glossary.js [flags]", - "header": "/**\n * @script generate-glossary\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Glossary generator — produces glossary data file from terminology sources\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/snippets/generate-data/scripts/generate-glossary.js [flags]\n */", + "header": "/**\n * @script generate-glossary\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Glossary generator — produces glossary data file from terminology sources\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/snippets/generate-data/scripts/generate-glossary.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -11211,9 +11878,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Terminology search — searches glossary/terminology data for definitions", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/snippets/generate-data/scripts/terminology-search.js [flags]", - "header": "/**\n * @script terminology-search\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Terminology search — searches glossary/terminology data for definitions\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/snippets/generate-data/scripts/terminology-search.js [flags]\n */", + "header": "/**\n * @script terminology-search\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Terminology search — searches glossary/terminology data for definitions\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/snippets/generate-data/scripts/terminology-search.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -11264,9 +11931,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Snippet test runner — runs basic validation on snippet scripts", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — developer tool", "usage": "bash tools/scripts/snippets/test-scripts.sh [flags]", - "header": "# @script test-scripts\n# @category utility\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Snippet test runner — runs basic validation on snippet scripts\n# @pipeline manual — diagnostic/investigation tool, run on-demand only\n# @usage bash tools/scripts/snippets/test-scripts.sh [flags]\n# Test suite for tools/scripts/snippets\n# Run this before using scripts to verify they work correctly\n#\n# Usage: ./tools/scripts/snippets/test-scripts.sh\n#\n# Exit codes:\n# 0 - All tests passed\n# 1 - One or more tests failed", + "header": "# @script test-scripts\n# @category utility\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Snippet test runner — runs basic validation on snippet scripts\n# @pipeline manual — developer tool\n# @usage bash tools/scripts/snippets/test-scripts.sh [flags]\n# Test suite for tools/scripts/snippets\n# Run this before using scripts to verify they work correctly\n#\n# Usage: ./tools/scripts/snippets/test-scripts.sh\n#\n# Exit codes:\n# 0 - All tests passed\n# 1 - One or more tests failed", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -11298,7 +11965,7 @@ "trigger_group": "Manual" } ], - "count": 89 + "count": 90 } }, "scripts": [ @@ -11518,17 +12185,17 @@ ], "outputs": [ { - "output_path": ".githooks/mint-dev-test.log", + "output_path": ".githooks/mint-dev-test-${REPO_KEY}.log", "type": "generated-output", "call": "createWriteStream" }, { - "output_path": ".githooks/mint-dev-test.pid", + "output_path": ".githooks/mint-dev-test-${REPO_KEY}.pid", "type": "generated-output", "call": "writeFileSync" } ], - "outputs_display": ".githooks/mint-dev-test.log, .githooks/mint-dev-test.pid", + "outputs_display": ".githooks/mint-dev-test-${REPO_KEY}.log, .githooks/mint-dev-test-${REPO_KEY}.pid", "downstream_consumers": [], "downstream_display": "No", "in_json": true, @@ -11553,9 +12220,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Verifies browser availability for Puppeteer-based integration tests", - "pipeline_declared": "manual — legacy browser validator invoked by .githooks/verify.sh when run directly", + "pipeline_declared": "manual — developer tool", "usage": "node .githooks/verify-browser.js [flags]", - "header": "/**\n * @script verify-browser\n * @category utility\n * @purpose tooling:dev-tools\n * @scope .githooks\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Verifies browser availability for Puppeteer-based integration tests\n * @pipeline manual — legacy browser validator invoked by .githooks/verify.sh when run directly\n * @usage node .githooks/verify-browser.js [flags]\n */", + "header": "/**\n * @script verify-browser\n * @category utility\n * @purpose tooling:dev-tools\n * @scope .githooks\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Verifies browser availability for Puppeteer-based integration tests\n * @pipeline manual — developer tool\n * @usage node .githooks/verify-browser.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -11601,9 +12268,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files", - "pipeline_declared": "manual — legacy pre-commit sub-hook retained for on-demand verification", + "pipeline_declared": "manual — developer tool", "usage": "bash .githooks/verify.sh [flags]", - "header": "# @script verify\n# @category utility\n# @purpose tooling:dev-tools\n# @scope .githooks\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files\n# @pipeline manual — legacy pre-commit sub-hook retained for on-demand verification\n# @usage bash .githooks/verify.sh [flags]\n# Verification script for pre-commit hook\n# Runs various validation checks on staged files", + "header": "# @script verify\n# @category utility\n# @purpose tooling:dev-tools\n# @scope .githooks\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files\n# @pipeline manual — developer tool\n# @usage bash .githooks/verify.sh [flags]\n# Verification script for pre-commit hook\n# Runs various validation checks on staged files", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -11660,9 +12327,17 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-schedule", + "caller": ".github/workflows/update-forum-data.yml", + "workflow": "Update Forum Data", + "pipeline": "P5", + "cron": "0 0 * * *" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/update-forum-data.yml", + "workflow": "Update Forum Data", + "pipeline": "P6" } ], "outputs": [ @@ -11683,16 +12358,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P5 (Update Forum Data cron 0 0 * * *); P6 (Update Forum Data)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P5" }, { "path": ".github/scripts/fetch-ghost-blog-data.js", @@ -11714,9 +12388,17 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-schedule", + "caller": ".github/workflows/update-ghost-blog-data.yml", + "workflow": "Update Ghost Blog Data", + "pipeline": "P5", + "cron": "0 0 * * *" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/update-ghost-blog-data.yml", + "workflow": "Update Ghost Blog Data", + "pipeline": "P6" } ], "outputs": [ @@ -11737,16 +12419,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P5 (Update Ghost Blog Data cron 0 0 * * *); P6 (Update Ghost Blog Data)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P5" }, { "path": ".github/scripts/fetch-youtube-data.js", @@ -11768,9 +12449,17 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-schedule", + "caller": ".github/workflows/update-youtube-data.yml", + "workflow": "Update YouTube Data", + "pipeline": "P5", + "cron": "0 0 * * 0" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/update-youtube-data.yml", + "workflow": "Update YouTube Data", + "pipeline": "P6" } ], "outputs": [ @@ -11786,16 +12475,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P5 (Update YouTube Data cron 0 0 * * 0); P6 (Update YouTube Data)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P5" }, { "path": ".github/scripts/project-showcase-sync.js", @@ -11817,9 +12505,17 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-schedule", + "caller": ".github/workflows/project-showcase-sync.yml", + "workflow": "Project Showcase Sync", + "pipeline": "P5", + "cron": "*/15 * * * *" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/project-showcase-sync.yml", + "workflow": "Project Showcase Sync", + "pipeline": "P6" } ], "outputs": [ @@ -11835,16 +12531,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P5 (Project Showcase Sync cron */15 * * * *); P6 (Project Showcase Sync)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P5" }, { "path": "snippets/automations/youtube/filterVideos.js", @@ -12124,20 +12819,45 @@ "script": "openapi-reference-audit", "category": "validator", "purpose": "tooling:api-spec", - "scope": "tests/integration, v2, api, .github/workflows", + "scope": "full-repo", "owner": "docs", "needs": "F-R17", "purpose_statement": "Comprehensive OpenAPI spec validation — checks references, schemas, examples. Supports --strict (validate), --fix (repair), and report modes.", "pipeline_declared": "P2, P3, P5, P6", "usage": "node tests/integration/openapi-reference-audit.js [flags]", - "header": "/**\n * @script openapi-reference-audit\n * @category validator\n * @purpose tooling:api-spec\n * @scope tests/integration, v2, api, .github/workflows\n * @owner docs\n * @needs F-R17\n * @purpose-statement Comprehensive OpenAPI spec validation — checks references, schemas, examples. Supports --strict (validate), --fix (repair), and report modes.\n * @pipeline P2, P3, P5, P6\n * @dualmode --strict (enforcer) | --fix (remediator)\n * @usage node tests/integration/openapi-reference-audit.js [flags]\n */", + "header": "/**\n * @script openapi-reference-audit\n * @category validator\n * @purpose tooling:api-spec\n * @scope full-repo\n * @owner docs\n * @needs F-R17\n * @purpose-statement Comprehensive OpenAPI spec validation — checks references, schemas, examples. Supports --strict (validate), --fix (repair), and report modes.\n * @pipeline P2, P3, P5, P6\n * @dualmode --strict (enforcer) | --fix (remediator)\n * @usage node tests/integration/openapi-reference-audit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ + { + "type": "workflow-push", + "caller": ".github/workflows/openapi-reference-validation.yml", + "workflow": "OpenAPI Reference Validation", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/openapi-reference-validation.yml", + "workflow": "OpenAPI Reference Validation", + "pipeline": "P3" + }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/openapi-reference-validation.yml", + "workflow": "OpenAPI Reference Validation", + "pipeline": "P5", + "cron": "35 4 * * *" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/openapi-reference-validation.yml", + "workflow": "OpenAPI Reference Validation", + "pipeline": "P6" + }, { "type": "script", "caller": "tests/unit/openapi-reference-audit.test.js", @@ -12163,16 +12883,13 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3, P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/openapi-reference-audit.test.js; manual (npm script: test:openapi:audit)", - "grade": "C", - "flags": [ - "invalid-scope", - "phantom-pipeline" - ], - "trigger_group": "Orphaned" + "pipeline_actual": "P2 (OpenAPI Reference Validation); P3 (OpenAPI Reference Validation); P5 (OpenAPI Reference Validation cron 35 4 * * *); P6 (OpenAPI Reference Validation); indirect via tests/unit/openapi-reference-audit.test.js; manual (npm script: test:openapi:audit)", + "grade": "B", + "flags": [], + "trigger_group": "P2" }, { "path": "tests/integration/v2-link-audit.js", @@ -12198,6 +12915,19 @@ "caller": ".githooks/pre-commit", "pipeline": "P1" }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/v2-external-link-audit.yml", + "workflow": "V2 External Link Audit (Advisory)", + "pipeline": "P5", + "cron": "0 4 * * *" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/v2-external-link-audit.yml", + "workflow": "V2 External Link Audit (Advisory)", + "pipeline": "P6" + }, { "type": "script", "caller": "tests/integration/v2-link-audit.selftest.js", @@ -12245,14 +12975,13 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via tests/integration/v2-link-audit.selftest.js; indirect via tests/unit/create-codex-pr.test.js; indirect via tests/unit/v2-link-audit.test.js; manual (npm script: test:link-audit); manual (npm script: test:link-audit:staged); manual (npm script: test:link-audit:external)", + "pipeline_actual": "P1 (pre-commit); P5 (V2 External Link Audit (Advisory) cron 0 4 * * *); P6 (V2 External Link Audit (Advisory)); indirect via tests/integration/v2-link-audit.selftest.js; indirect via tests/unit/create-codex-pr.test.js; indirect via tests/unit/v2-link-audit.test.js; manual (npm script: test:link-audit); manual (npm script: test:link-audit:staged); manual (npm script: test:link-audit:external)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], "trigger_group": "P1" }, @@ -12310,19 +13039,19 @@ "script": "v2-wcag-audit", "category": "validator", "purpose": "qa:content-quality", - "scope": "tests/integration, tests/utils, tasks/reports, v2", + "scope": "v2-content", "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "WCAG accessibility audit for v2 pages — checks heading hierarchy, alt text, ARIA. Supports --fix mode for auto-repair.", "pipeline_declared": "P1", "usage": "node tests/integration/v2-wcag-audit.js [flags]", - "header": "/**\n * @script v2-wcag-audit\n * @category validator\n * @purpose qa:content-quality\n * @scope tests/integration, tests/utils, tasks/reports, v2\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement WCAG accessibility audit for v2 pages — checks heading hierarchy, alt text, ARIA. Supports --fix mode for auto-repair.\n * @pipeline P1\n * @usage node tests/integration/v2-wcag-audit.js [flags]\n */", + "header": "/**\n * @script v2-wcag-audit\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement WCAG accessibility audit for v2 pages — checks heading hierarchy, alt text, ARIA. Supports --fix mode for auto-repair.\n * @pipeline P1\n * @usage node tests/integration/v2-wcag-audit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "pre-commit", @@ -12385,10 +13114,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "P1 (pre-commit); P1 via run-all; indirect via tests/integration/v2-wcag-audit.selftest.js; indirect via tests/run-all.js; indirect via tests/unit/v2-wcag-audit.test.js; manual (npm script: test:wcag); manual (npm script: test:wcag:staged); manual (npm script: test:wcag:nofix)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "P1" }, { @@ -12445,25 +13172,53 @@ "script": "run-all", "category": "orchestrator", "purpose": "infrastructure:pipeline-orchestration", - "scope": "tests", + "scope": "full-repo", "owner": "docs", "needs": "R-R29", "purpose_statement": "Test orchestrator — dispatches all unit test suites. Called by pre-commit hook and npm test.", - "pipeline_declared": "P1 (commit, orchestrator)", + "pipeline_declared": "P1, P2, P3", "usage": "node tests/run-all.js [flags]", - "header": "/**\n * @script run-all\n * @category orchestrator\n * @purpose infrastructure:pipeline-orchestration\n * @scope tests\n * @owner docs\n * @needs R-R29\n * @purpose-statement Test orchestrator — dispatches all unit test suites. Called by pre-commit hook and npm test.\n * @pipeline P1 (commit, orchestrator)\n * @usage node tests/run-all.js [flags]\n */", + "header": "/**\n * @script run-all\n * @category orchestrator\n * @purpose infrastructure:pipeline-orchestration\n * @scope full-repo\n * @owner docs\n * @needs R-R29\n * @purpose-statement Test orchestrator — dispatches all unit test suites. Called by pre-commit hook and npm test.\n * @pipeline P1, P2, P3\n * @usage node tests/run-all.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "pre-commit", "caller": ".githooks/pre-commit", "pipeline": "P1" }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2", + "via_script": "test" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P2", + "via_script": "test" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3", + "via_script": "test" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P3", + "via_script": "test" + }, { "type": "npm-script", "caller": "tests/package.json", @@ -12493,11 +13248,9 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); manual (npm script: test); manual (npm script: test)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "pipeline_actual": "P1 (pre-commit); P2 (Docs CI - Content Quality Suite); P2 (Docs CI - V2 Browser Sweep); P3 (Docs CI - Content Quality Suite); P3 (Docs CI - V2 Browser Sweep); manual (npm script: test); manual (npm script: test)", + "grade": "B", + "flags": [], "trigger_group": "P1" }, { @@ -12519,6 +13272,20 @@ "purpose_valid": true, "scope_valid": true, "triggers": [ + { + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2", + "via_script": "test:pr" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3", + "via_script": "test:pr" + }, { "type": "script", "caller": "tests/unit/create-codex-pr.test.js", @@ -12559,34 +13326,32 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/create-codex-pr.test.js; indirect via tests/unit/usefulness-rubric.test.js; indirect via tests/unit/validate-codex-task-contract.test.js; indirect via tools/scripts/codex/task-preflight.js; manual (npm script: test:pr)", + "pipeline_actual": "P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite); indirect via tests/unit/create-codex-pr.test.js; indirect via tests/unit/usefulness-rubric.test.js; indirect via tests/unit/validate-codex-task-contract.test.js; indirect via tools/scripts/codex/task-preflight.js; manual (npm script: test:pr)", "grade": "B", - "flags": [ - "phantom-pipeline" - ], - "trigger_group": "Orphaned" + "flags": [], + "trigger_group": "P2" }, { "path": "tests/unit/audit-script-inventory-repair-rules.test.js", "script": "audit-script-inventory-repair-rules.test", "category": "validator", "purpose": "qa:repo-health", - "scope": "tests/unit, tools/scripts/validators/governance", + "scope": "single-file", "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety.", "pipeline_declared": "manual (not yet in pipeline)", "usage": "node tests/unit/audit-script-inventory-repair-rules.test.js", - "header": "/**\n * @script audit-script-inventory-repair-rules.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests/unit, tools/scripts/validators/governance\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety.\n * @pipeline manual (not yet in pipeline)\n * @usage node tests/unit/audit-script-inventory-repair-rules.test.js\n */", + "header": "/**\n * @script audit-script-inventory-repair-rules.test\n * @category validator\n * @purpose qa:repo-health\n * @scope single-file\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety.\n * @pipeline manual (not yet in pipeline)\n * @usage node tests/unit/audit-script-inventory-repair-rules.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -12611,10 +13376,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -12875,19 +13638,19 @@ "script": "component-governance-generators.test", "category": "validator", "purpose": "qa:repo-health", - "scope": "tests", + "scope": "full-repo", "owner": "docs", "needs": "R-R10", "purpose_statement": "Verifies component governance generators produce coherent registry, usage-map, and docs outputs.", "pipeline_declared": "P1 (commit, via run-all)", "usage": "node tests/unit/component-governance-generators.test.js", - "header": "/**\n * @script component-governance-generators.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Verifies component governance generators produce coherent registry, usage-map, and docs outputs.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/component-governance-generators.test.js\n */", + "header": "/**\n * @script component-governance-generators.test\n * @category validator\n * @purpose qa:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R10\n * @purpose-statement Verifies component governance generators produce coherent registry, usage-map, and docs outputs.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/component-governance-generators.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "runner", @@ -12923,10 +13686,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js; manual (npm script: test:components:governance)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "P1" }, { @@ -12940,7 +13701,7 @@ "purpose_statement": "Verifies shared component governance utility parsing, scanning, and archive exclusion behavior.", "pipeline_declared": "P1 (commit, via run-all)", "usage": "node tests/unit/component-governance-utils.test.js", - "header": "/**\n * @script component-governance-utils.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Verifies shared component governance utility parsing, scanning, and archive exclusion behavior.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/component-governance-utils.test.js\n */", + "header": "/**\n * @script component-governance-utils.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Verifies shared component governance utility parsing, scanning, and archive exclusion behavior.\n * @pipeline P1 (commit, via run-all)\n * @usage node tests/unit/component-governance-utils.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -12999,7 +13760,7 @@ "purpose_statement": "Template for category-scoped component unit tests.", "pipeline_declared": "manual", "usage": "node tests/unit/components/TEMPLATE.test.js", - "header": "/**\n * @script component-template.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Template for category-scoped component unit tests.\n * @pipeline manual\n * @usage node tests/unit/components/TEMPLATE.test.js\n */", + "header": "/**\n * @script component-template.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests\n * @owner docs\n * @needs R-R10\n * @purpose-statement Template for category-scoped component unit tests.\n * @pipeline manual\n * @usage node tests/unit/components/TEMPLATE.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -13138,19 +13899,19 @@ "script": "docs-navigation.test", "category": "validator", "purpose": "qa:repo-health", - "scope": "tests, docs.json", + "scope": "full-repo", "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Validates docs.json page-entry syntax, reports missing routes, warns on orphaned canonical v2 pages, suggests remaps, and optionally applies approved remaps", "pipeline_declared": "P1, P3, P6", "usage": "node tests/unit/docs-navigation.test.js [flags]", - "header": "/**\n * @script docs-navigation.test\n * @category validator\n * @purpose qa:repo-health\n * @scope tests, docs.json\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Validates docs.json page-entry syntax, reports missing routes, warns on orphaned canonical v2 pages, suggests remaps, and optionally applies approved remaps\n * @pipeline P1, P3, P6\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/docs-navigation.test.js [flags]\n */", + "header": "/**\n * @script docs-navigation.test\n * @category validator\n * @purpose qa:repo-health\n * @scope full-repo\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Validates docs.json page-entry syntax, reports missing routes, warns on orphaned canonical v2 pages, suggests remaps, and optionally applies approved remaps\n * @pipeline P1, P3, P6\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/docs-navigation.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "runner", @@ -13162,6 +13923,12 @@ "caller": "tests/run-pr-checks.js", "pipeline": "P3" }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" + }, { "type": "script", "caller": "tests/run-all.js", @@ -13203,13 +13970,68 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:docs-nav); manual (npm script: test:docs-nav:write)", - "grade": "C", + "pipeline_actual": "P1 via run-all; P3 via run-pr-checks; P6 (Docs Translation Pipeline); indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:docs-nav); manual (npm script: test:docs-nav:write)", + "grade": "B", + "flags": [], + "trigger_group": "P1" + }, + { + "path": "tests/unit/docs-path-sync.test.js", + "script": "docs-path-sync.test", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "full-repo", + "owner": "docs", + "needs": "E-C1, R-R14", + "purpose_statement": "Unit tests for docs path sync — validates staged move detection, deterministic docs.json/reference rewrites, validator behavior, and remediator write mode.", + "pipeline_declared": "P1, P2, P3", + "usage": "node tests/unit/docs-path-sync.test.js", + "header": "/**\n * @script docs-path-sync.test\n * @category validator\n * @purpose qa:repo-health\n * @scope full-repo\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Unit tests for docs path sync — validates staged move detection, deterministic docs.json/reference rewrites, validator behavior, and remediator write mode.\n * @pipeline P1, P2, P3\n * @dualmode --check (validator) | fixture-driven script execution\n * @usage node tests/unit/docs-path-sync.test.js\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "runner", + "caller": "tests/run-all.js", + "pipeline": "P1" + }, + { + "type": "script", + "caller": "tests/run-all.js", + "pipeline": "indirect" + } + ], + "outputs": [ + { + "output_path": "", + "type": "stdout", + "call": "writeFile" + }, + { + "output_path": "", + "type": "stdout", + "call": "writeFileSync" + } + ], + "outputs_display": ", ", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "P1 via run-all; indirect via tests/run-all.js", + "grade": "B", "flags": [ - "invalid-scope", "phantom-pipeline" ], "trigger_group": "P1" @@ -13294,19 +14116,19 @@ "script": "lpd-scoped-mint-dev.test", "category": "utility", "purpose": "tooling:dev-tools", - "scope": "tests/unit, lpd, tools/scripts/mint-dev.sh, tools/scripts/dev/generate-mint-dev-scope.js", + "scope": "single-domain", "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Tests lpd scoped mint-dev functionality — validates dev server scope filtering", "pipeline_declared": "manual — developer tool", "usage": "node tests/unit/lpd-scoped-mint-dev.test.js [flags]", - "header": "/**\n * @script lpd-scoped-mint-dev.test\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tests/unit, lpd, tools/scripts/mint-dev.sh, tools/scripts/dev/generate-mint-dev-scope.js\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Tests lpd scoped mint-dev functionality — validates dev server scope filtering\n * @pipeline manual — developer tool\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/lpd-scoped-mint-dev.test.js [flags]\n */", + "header": "/**\n * @script lpd-scoped-mint-dev.test\n * @category utility\n * @purpose tooling:dev-tools\n * @scope single-domain\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Tests lpd scoped mint-dev functionality — validates dev server scope filtering\n * @pipeline manual — developer tool\n * @dualmode dual-mode (document flags)\n * @usage node tests/unit/lpd-scoped-mint-dev.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -13331,10 +14153,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -13881,19 +14701,19 @@ "script": "repair-governance.test", "category": "validator", "purpose": "governance:repo-health", - "scope": "tests/unit, tools/scripts/orchestrators/repair-governance.js, .github/workflows/repair-governance.yml", + "scope": "single-file", "owner": "docs", "needs": "R-R14, R-R18, R-C6", "purpose_statement": "Tests repair-governance.js for safe dry-run, fix, rollback, strict exit handling, and workflow contract coverage.", "pipeline_declared": "manual", "usage": "node tests/unit/repair-governance.test.js", - "header": "/**\n * @script repair-governance.test\n * @category validator\n * @purpose governance:repo-health\n * @scope tests/unit, tools/scripts/orchestrators/repair-governance.js, .github/workflows/repair-governance.yml\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Tests repair-governance.js for safe dry-run, fix, rollback, strict exit handling, and workflow contract coverage.\n * @pipeline manual\n * @usage node tests/unit/repair-governance.test.js\n */", + "header": "/**\n * @script repair-governance.test\n * @category validator\n * @purpose governance:repo-health\n * @scope single-file\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Tests repair-governance.js for safe dry-run, fix, rollback, strict exit handling, and workflow contract coverage.\n * @pipeline manual\n * @usage node tests/unit/repair-governance.test.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -13918,10 +14738,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -14070,6 +14888,11 @@ "caller": "tests/run-pr-checks.js", "pipeline": "indirect" }, + { + "type": "script", + "caller": "tests/unit/docs-guide-sot.test.js", + "pipeline": "indirect" + }, { "type": "npm-script", "caller": "tests/package.json", @@ -14093,7 +14916,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P1 via run-all; P3 via run-pr-checks; indirect via .githooks/pre-commit; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; manual (npm script: test:scripts)", + "pipeline_actual": "P1 (pre-commit); P1 via run-all; P3 via run-pr-checks; indirect via .githooks/pre-commit; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; indirect via tests/unit/docs-guide-sot.test.js; manual (npm script: test:scripts)", "grade": "C", "flags": [ "invalid-scope" @@ -14366,19 +15189,19 @@ "script": "v2-link-audit.test", "category": "validator", "purpose": "qa:link-integrity", - "scope": "tests/unit, tests/integration", + "scope": "v2-content", "owner": "docs", "needs": "E-R12, E-R14", "purpose_statement": "Unit tests for v2-link-audit.js — tests individual link checking rules", "pipeline_declared": "manual — not yet in pipeline", "usage": "node tests/unit/v2-link-audit.test.js [flags]", - "header": "/**\n * @script v2-link-audit.test\n * @category validator\n * @purpose qa:link-integrity\n * @scope tests/unit, tests/integration\n * @owner docs\n * @needs E-R12, E-R14\n * @purpose-statement Unit tests for v2-link-audit.js — tests individual link checking rules\n * @pipeline manual — not yet in pipeline\n * @dualmode --full (validator) | --write-links (remediator)\n * @usage node tests/unit/v2-link-audit.test.js [flags]\n */", + "header": "/**\n * @script v2-link-audit.test\n * @category validator\n * @purpose qa:link-integrity\n * @scope v2-content\n * @owner docs\n * @needs E-R12, E-R14\n * @purpose-statement Unit tests for v2-link-audit.js — tests individual link checking rules\n * @pipeline manual — not yet in pipeline\n * @dualmode --full (validator) | --write-links (remediator)\n * @usage node tests/unit/v2-link-audit.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "npm-script", @@ -14409,10 +15232,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (npm script: test:link-audit:unit)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -14420,19 +15241,19 @@ "script": "v2-wcag-audit.test", "category": "validator", "purpose": "qa:content-quality", - "scope": "tests/unit, tests/integration", + "scope": "v2-content", "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "Unit tests for v2-wcag-audit.js — tests individual WCAG rules", "pipeline_declared": "manual — not yet in pipeline", "usage": "node tests/unit/v2-wcag-audit.test.js [flags]", - "header": "/**\n * @script v2-wcag-audit.test\n * @category validator\n * @purpose qa:content-quality\n * @scope tests/unit, tests/integration\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Unit tests for v2-wcag-audit.js — tests individual WCAG rules\n * @pipeline manual — not yet in pipeline\n * @usage node tests/unit/v2-wcag-audit.test.js [flags]\n */", + "header": "/**\n * @script v2-wcag-audit.test\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Unit tests for v2-wcag-audit.js — tests individual WCAG rules\n * @pipeline manual — not yet in pipeline\n * @usage node tests/unit/v2-wcag-audit.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "npm-script", @@ -14458,10 +15279,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (npm script: test:wcag:unit)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -14518,19 +15337,19 @@ "script": "file-walker", "category": "utility", "purpose": "tooling:dev-tools", - "scope": "tests", + "scope": "full-repo", "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "File tree walker — recursively finds files matching patterns. Used by pre-commit hook and validators.", "pipeline_declared": "indirect — library module", "usage": "node tests/utils/file-walker.js [flags]", - "header": "/**\n * @script file-walker\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tests\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement File tree walker — recursively finds files matching patterns. Used by pre-commit hook and validators.\n * @pipeline indirect — library module\n * @dualmode dual-mode (document flags)\n * @usage node tests/utils/file-walker.js [flags]\n */", + "header": "/**\n * @script file-walker\n * @category utility\n * @purpose tooling:dev-tools\n * @scope full-repo\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement File tree walker — recursively finds files matching patterns. Used by pre-commit hook and validators.\n * @pipeline indirect — library module\n * @dualmode dual-mode (document flags)\n * @usage node tests/utils/file-walker.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "script", @@ -14639,10 +15458,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "indirect via .githooks/verify-browser.js; indirect via tests/integration/browser.test.js; indirect via tests/integration/domain-pages-audit.js; indirect via tests/integration/v2-link-audit.js; indirect via tests/integration/v2-wcag-audit.js; indirect via tests/run-all.js; indirect via tests/run-pr-checks.js; indirect via tests/unit/links-imports.test.js; indirect via tests/unit/mdx.test.js; indirect via tests/unit/quality.test.js; indirect via tests/unit/spelling.test.js; indirect via tests/unit/style-guide.test.js; indirect via tests/unit/v2-wcag-audit.test.js; indirect via tools/scripts/assign-purpose-metadata.js; indirect via tools/scripts/audit-v2-usefulness.js; indirect via tools/scripts/remediators/content/repair-spelling.js; indirect via tools/scripts/validators/components/check-mdx-component-scope.js; indirect via tools/scripts/validators/content/check-double-headers.js; indirect via tools/scripts/validators/content/check-proper-nouns.js", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Indirect" }, { @@ -14901,7 +15718,7 @@ "purpose_statement": "Shared parsing and validation utilities for component governance scripts.", "pipeline_declared": "indirect", "usage": "const utils = require('../lib/component-governance-utils');", - "header": "/**\n * @script component-governance-utils\n * @category utility\n * @purpose governance:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Shared parsing and validation utilities for component governance scripts.\n * @pipeline indirect\n * @usage const utils = require('../lib/component-governance-utils');\n */", + "header": "/**\n * @script component-governance-utils\n * @category utility\n * @purpose governance:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Shared parsing and validation utilities for component governance scripts.\n * @pipeline indirect\n * @usage const utils = require('../lib/component-governance-utils');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -14974,9 +15791,9 @@ "owner": "docs", "needs": "R-R16, R-R17", "purpose_statement": "Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/lib/docs-index-utils.js [flags]", - "header": "/**\n * @script docs-index-utils\n * @category utility\n * @purpose governance:index-management\n * @scope tools/lib, tools/scripts, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/lib/docs-index-utils.js [flags]\n */", + "header": "/**\n * @script docs-index-utils\n * @category utility\n * @purpose governance:index-management\n * @scope tools/lib, tools/scripts, v2\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging\n * @pipeline indirect — library module\n * @usage node tools/lib/docs-index-utils.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -15023,17 +15840,17 @@ "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/config-validator.js", - "script": "config-validator", + "path": "tools/lib/docs-publishability.js", + "script": "docs-publishability", "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain", + "purpose": "governance:repo-health", + "scope": "v2-content", "owner": "docs", - "needs": "R-R14, R-C6", - "purpose_statement": "Validates docs-usefulness config structure and field completeness.", - "pipeline_declared": "indirect -- library module", - "usage": "const { validateConfig } = require('../lib/docs-usefulness/config-validator');", - "header": "/**\n * @script config-validator\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Validates docs-usefulness config structure and field completeness.\n * @pipeline indirect -- library module\n * @usage const { validateConfig } = require('../lib/docs-usefulness/config-validator');\n */", + "needs": "E-C6, F-C1", + "purpose_statement": "Shared path publishability rules for v2 docs content and tooling.", + "pipeline_declared": "indirect", + "usage": "const { isExcludedV2ExperimentalPath } = require('../lib/docs-publishability');", + "header": "/**\n * @script docs-publishability\n * @category utility\n * @purpose governance:repo-health\n * @scope v2-content\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Shared path publishability rules for v2 docs content and tooling.\n * @pipeline indirect\n * @usage const { isExcludedV2ExperimentalPath } = require('../lib/docs-publishability');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -15043,22 +15860,32 @@ "triggers": [ { "type": "script", - "caller": "tests/unit/usefulness-journey.test.js", + "caller": "tests/integration/openapi-reference-audit.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tests/unit/usefulness-rubric.test.js", + "caller": "tests/unit/docs-navigation.test.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/assign-purpose-metadata.js", + "caller": "tests/utils/file-walker.js", "pipeline": "indirect" }, { "type": "script", - "caller": "tools/scripts/audit-v2-usefulness.js", + "caller": "tools/lib/component-governance-utils.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/content/check-anchor-usage.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/content/check-page-endings.js", "pipeline": "indirect" } ], @@ -15072,23 +15899,78 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/usefulness-journey.test.js; indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/scripts/assign-purpose-metadata.js; indirect via tools/scripts/audit-v2-usefulness.js", + "pipeline_actual": "indirect via tests/integration/openapi-reference-audit.js; indirect via tests/unit/docs-navigation.test.js; indirect via tests/utils/file-walker.js; indirect via tools/lib/component-governance-utils.js; indirect via tools/scripts/validators/content/check-anchor-usage.js; indirect via tools/scripts/validators/content/check-page-endings.js", "grade": "B", "flags": [], "trigger_group": "Indirect" }, { - "path": "tools/lib/docs-usefulness/journey-check.js", - "script": "journey-check", + "path": "tools/lib/docs-usefulness/config-validator.js", + "script": "config-validator", "category": "utility", "purpose": "qa:repo-health", "scope": "single-domain", "owner": "docs", "needs": "R-R14, R-C6", - "purpose_statement": "Evaluates docs pages against user journey completeness criteria.", + "purpose_statement": "Validates docs-usefulness config structure and field completeness.", "pipeline_declared": "indirect -- library module", - "usage": "const { checkJourney } = require('../lib/docs-usefulness/journey-check');", - "header": "/**\n * @script journey-check\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Evaluates docs pages against user journey completeness criteria.\n * @pipeline indirect -- library module\n * @usage const { checkJourney } = require('../lib/docs-usefulness/journey-check');\n */", + "usage": "const { validateConfig } = require('../lib/docs-usefulness/config-validator');", + "header": "/**\n * @script config-validator\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Validates docs-usefulness config structure and field completeness.\n * @pipeline indirect -- library module\n * @usage const { validateConfig } = require('../lib/docs-usefulness/config-validator');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tests/unit/usefulness-journey.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tests/unit/usefulness-rubric.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/assign-purpose-metadata.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/audit-v2-usefulness.js", + "pipeline": "indirect" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tests/unit/usefulness-journey.test.js; indirect via tests/unit/usefulness-rubric.test.js; indirect via tools/scripts/assign-purpose-metadata.js; indirect via tools/scripts/audit-v2-usefulness.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" + }, + { + "path": "tools/lib/docs-usefulness/journey-check.js", + "script": "journey-check", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "owner": "docs", + "needs": "R-R14, R-C6", + "purpose_statement": "Evaluates docs pages against user journey completeness criteria.", + "pipeline_declared": "indirect -- library module", + "usage": "const { checkJourney } = require('../lib/docs-usefulness/journey-check');", + "header": "/**\n * @script journey-check\n * @category utility\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Evaluates docs pages against user journey completeness criteria.\n * @pipeline indirect -- library module\n * @usage const { checkJourney } = require('../lib/docs-usefulness/journey-check');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -15832,9 +16714,9 @@ "owner": "docs", "needs": "R-R16, R-R17", "purpose_statement": "Generated file banner template — provides standard banner text for auto-generated files", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/lib/generated-file-banners.js [flags]", - "header": "/**\n * @script generated-file-banners\n * @category utility\n * @purpose governance:index-management\n * @scope full-repo\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generated file banner template — provides standard banner text for auto-generated files\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/lib/generated-file-banners.js [flags]\n */", + "header": "/**\n * @script generated-file-banners\n * @category utility\n * @purpose governance:index-management\n * @scope full-repo\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generated file banner template — provides standard banner text for auto-generated files\n * @pipeline indirect — library module\n * @usage node tools/lib/generated-file-banners.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -15842,6 +16724,11 @@ "purpose_valid": true, "scope_valid": true, "triggers": [ + { + "type": "script", + "caller": "tests/unit/docs-guide-sot.test.js", + "pipeline": "indirect" + }, { "type": "script", "caller": "tests/unit/script-docs.test.js", @@ -15893,7 +16780,7 @@ "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/script-docs.test.js; indirect via tools/scripts/enforce-generated-file-banners.js; indirect via tools/scripts/generate-component-docs.js; indirect via tools/scripts/generate-docs-guide-components-index.js; indirect via tools/scripts/generate-docs-guide-indexes.js; indirect via tools/scripts/generate-docs-guide-pages-index.js; indirect via tools/scripts/generate-pages-index.js; indirect via tools/scripts/i18n/translate-docs.js", + "pipeline_actual": "indirect via tests/unit/docs-guide-sot.test.js; indirect via tests/unit/script-docs.test.js; indirect via tools/scripts/enforce-generated-file-banners.js; indirect via tools/scripts/generate-component-docs.js; indirect via tools/scripts/generate-docs-guide-components-index.js; indirect via tools/scripts/generate-docs-guide-indexes.js; indirect via tools/scripts/generate-docs-guide-pages-index.js; indirect via tools/scripts/generate-pages-index.js; indirect via tools/scripts/i18n/translate-docs.js", "grade": "B", "flags": [], "trigger_group": "Indirect" @@ -16113,7 +17000,7 @@ "purpose_statement": "Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo.", "pipeline_declared": "indirect -- library module", "usage": "const config = require('../lib/script-governance-config');", - "header": "/**\n * @script script-governance-config\n * @category utility\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo.\n * @pipeline indirect -- library module\n * @usage const config = require('../lib/script-governance-config');\n */", + "header": "/**\n * @script script-governance-config\n * @category utility\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo.\n * @pipeline indirect -- library module\n * @usage const config = require('../lib/script-governance-config');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -16173,7 +17060,7 @@ "purpose_statement": "Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source.", "pipeline_declared": "indirect - library module", "usage": "const { extractLeadingScriptHeader } = require('../lib/script-header-utils');", - "header": "/**\n * @script script-header-utils\n * @category utility\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18\n * @purpose-statement Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source.\n * @pipeline indirect - library module\n * @usage const { extractLeadingScriptHeader } = require('../lib/script-header-utils');\n */", + "header": "/**\n * @script script-header-utils\n * @category utility\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18\n * @purpose-statement Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source.\n * @pipeline indirect - library module\n * @usage const { extractLeadingScriptHeader } = require('../lib/script-header-utils');\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -16730,7 +17617,7 @@ "purpose_statement": "Inserts or extends framework headers on all repo scripts from classification data.", "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", "usage": "node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run", - "header": "/**\n * @script add-framework-headers\n * @summary Insert or verify governance framework metadata headers from classification JSON.\n * @category generator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14\n * @purpose-statement Inserts or extends framework headers on all repo scripts from classification data.\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run\n *\n * @inputs\n * --data --dry-run|--write|--verify [--filter ] [--exclude-subdirs] [--force]\n *\n * @outputs\n * - Console summary with files processed, updated, skipped, and errors\n *\n * @exit-codes\n * 0 = success\n * 1 = argument, I/O, parse, or verification failure\n *\n * @examples\n * node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run\n * node tools/scripts/add-framework-headers.js --data script-classifications.json --filter tools/scripts --write\n *\n * @notes\n * Tool-only migration utility; it does not execute repo-wide header rewrites unless explicitly run.\n */", + "header": "/**\n * @script add-framework-headers\n * @category generator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14\n * @purpose-statement Inserts or extends framework headers on all repo scripts from classification data.\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -16883,9 +17770,17 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" } ], "outputs": [ @@ -16901,16 +17796,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P5" }, { "path": "tools/scripts/audit-media-assets.js", @@ -17025,9 +17919,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Tasks folder auditor — checks tasks/ structure, normalises report locations, applies recommendations with conflict-safe moves", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/audit-tasks-folders.js [flags]", - "header": "/**\n * @script audit-tasks-folders\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, tasks\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Tasks folder auditor — checks tasks/ structure, normalises report locations, applies recommendations with conflict-safe moves\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/audit-tasks-folders.js [flags]\n */", + "header": "/**\n * @script audit-tasks-folders\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, tasks\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Tasks folder auditor — checks tasks/ structure, normalises report locations, applies recommendations with conflict-safe moves\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/audit-tasks-folders.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -17137,9 +18031,10 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-pr", + "caller": ".github/workflows/codex-governance.yml", + "workflow": "Codex Governance", + "pipeline": "P3" } ], "outputs": [ @@ -17155,16 +18050,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P3 (Codex Governance)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P3" }, { "path": "tools/scripts/check-no-ai-stash.sh", @@ -17282,9 +18176,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Codex commit helper — audits codex branch state and generates compliant commit messages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/codex-commit.js [flags]", - "header": "/**\n * @script codex-commit\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, .githooks, ai-tools/ai-rules\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex commit helper — audits codex branch state and generates compliant commit messages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/codex-commit.js [flags]\n */", + "header": "/**\n * @script codex-commit\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, .githooks, ai-tools/ai-rules\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex commit helper — audits codex branch state and generates compliant commit messages\n * @pipeline manual — not yet in pipeline\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/codex-commit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -17330,9 +18224,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Deprecated compatibility shim — blocks stash-based Codex merge flow and directs users to task-finalize, lock-release, and task-cleanup", - "pipeline_declared": "manual — compatibility shim only", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/codex-safe-merge-with-stash.js [flags]", - "header": "/**\n * @script codex-safe-merge-with-stash\n * @category utility\n * @purpose governance:agent-governance\n * @scope tools/scripts, tools/scripts/codex\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Deprecated compatibility shim — blocks stash-based Codex merge flow and directs users to task-finalize, lock-release, and task-cleanup\n * @pipeline manual — compatibility shim only\n * @usage node tools/scripts/codex-safe-merge-with-stash.js [flags]\n */", + "header": "/**\n * @script codex-safe-merge-with-stash\n * @category utility\n * @purpose governance:agent-governance\n * @scope tools/scripts, tools/scripts/codex\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Deprecated compatibility shim — blocks stash-based Codex merge flow and directs users to task-finalize, lock-release, and task-cleanup\n * @pipeline manual — developer tool\n * @usage node tools/scripts/codex-safe-merge-with-stash.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -17663,6 +18557,19 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, { "type": "npm-script", "caller": "tools/package.json", @@ -17688,16 +18595,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: audit:component-layout)", + "pipeline_actual": "P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); manual (npm script: audit:component-layout)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P5" }, { "path": "tools/scripts/convert-rss-to-mdx.js", @@ -17708,9 +18614,9 @@ "owner": "docs", "needs": "F-R1", "purpose_statement": "RSS-to-MDX converter — imports RSS feed items and converts to MDX page format", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/convert-rss-to-mdx.js [flags]", - "header": "/**\n * @script convert-rss-to-mdx\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope tools/scripts, v2/internal/assets/transcripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement RSS-to-MDX converter — imports RSS feed items and converts to MDX page format\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/convert-rss-to-mdx.js [flags]\n */", + "header": "/**\n * @script convert-rss-to-mdx\n * @category automation\n * @purpose infrastructure:data-feeds\n * @scope tools/scripts, v2/internal/assets/transcripts\n * @owner docs\n * @needs F-R1\n * @purpose-statement RSS-to-MDX converter — imports RSS feed items and converts to MDX page format\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/convert-rss-to-mdx.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -17756,9 +18662,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Codex PR creator — generates codex PR with correct branch naming, labels, and body template", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/create-codex-pr.js [flags]", - "header": "/**\n * @script create-codex-pr\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex PR creator — generates codex PR with correct branch naming, labels, and body template\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/create-codex-pr.js [flags]\n */", + "header": "/**\n * @script create-codex-pr\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, .codex/task-contract.yaml\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex PR creator — generates codex PR with correct branch naming, labels, and body template\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/create-codex-pr.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -17805,9 +18711,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Cross-agent packager — bundles audit reports and repo state into agent-consumable packages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/cross-agent-packager.js [flags]", - "header": "/**\n * @script cross-agent-packager\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, ai-tools/ai-skills/catalog, ai-tools/agent-packs\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Cross-agent packager — bundles audit reports and repo state into agent-consumable packages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/cross-agent-packager.js [flags]\n */", + "header": "/**\n * @script cross-agent-packager\n * @category generator\n * @purpose governance:agent-governance\n * @scope tools/scripts, ai-tools/ai-skills/catalog, ai-tools/agent-packs\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Cross-agent packager — bundles audit reports and repo state into agent-consumable packages\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/cross-agent-packager.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -17869,9 +18775,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Mintlify dev debugger — diagnostic tool for troubleshooting mint dev server issues", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/debug-mint-dev.js [flags]", - "header": "/**\n * @script debug-mint-dev\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Mintlify dev debugger — diagnostic tool for troubleshooting mint dev server issues\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/debug-mint-dev.js [flags]\n */", + "header": "/**\n * @script debug-mint-dev\n * @category utility\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Mintlify dev debugger — diagnostic tool for troubleshooting mint dev server issues\n * @pipeline manual — developer tool\n * @usage node tools/scripts/debug-mint-dev.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -17965,9 +18871,9 @@ "owner": "docs", "needs": "E-R19, F-R7", "purpose_statement": "Batch OG image updater — updates og:image meta tags across multiple pages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — developer tool", "usage": "bash tools/scripts/dev/batch-update-og-image.sh [flags]", - "header": "# @script batch-update-og-image\n# @category remediator\n# @purpose feature:seo\n# @scope tools/scripts\n# @owner docs\n# @needs E-R19, F-R7\n# @purpose-statement Batch OG image updater — updates og:image meta tags across multiple pages\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/dev/batch-update-og-image.sh [flags]", + "header": "# @script batch-update-og-image\n# @category remediator\n# @purpose feature:seo\n# @scope tools/scripts\n# @owner docs\n# @needs E-R19, F-R7\n# @purpose-statement Batch OG image updater — updates og:image meta tags across multiple pages\n# @pipeline manual — developer tool\n# @usage bash tools/scripts/dev/batch-update-og-image.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18051,19 +18957,19 @@ "script": "generate-mint-dev-scope", "category": "generator", "purpose": "tooling:dev-tools", - "scope": "tools/scripts/dev, docs.json, .mintignore", + "scope": "full-repo", "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Mint dev scope generator — creates a scoped docs.json for running mint dev on a subset of pages", "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", "usage": "node tools/scripts/dev/generate-mint-dev-scope.js [flags]", - "header": "/**\n * @script generate-mint-dev-scope\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts/dev, docs.json, .mintignore\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Mint dev scope generator — creates a scoped docs.json for running mint dev on a subset of pages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/generate-mint-dev-scope.js [flags]\n */", + "header": "/**\n * @script generate-mint-dev-scope\n * @category generator\n * @purpose tooling:dev-tools\n * @scope full-repo\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Mint dev scope generator — creates a scoped docs.json for running mint dev on a subset of pages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/generate-mint-dev-scope.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "script", @@ -18088,12 +18994,50 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "indirect via tests/unit/lpd-scoped-mint-dev.test.js", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Indirect" }, + { + "path": "tools/scripts/dev/mint-custom-loader.sh", + "script": "mint-custom-loader", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "generated-output", + "owner": "docs", + "needs": "E-C6, F-C1", + "purpose_statement": "Mint custom loader — launches lpd dev with an alternate docs config as the active Mint navigation source.", + "pipeline_declared": "manual — developer tool", + "usage": "bash tools/scripts/dev/mint-custom-loader.sh [flags]", + "header": "# @script mint-custom-loader\n# @category utility\n# @purpose tooling:dev-tools\n# @scope generated-output\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Mint custom loader — launches lpd dev with an alternate docs config as the active Mint navigation source.\n# @pipeline manual — developer tool\n# @usage bash tools/scripts/dev/mint-custom-loader.sh [flags]\n# Custom Mintlify loader for alternate docs config\n# Usage: bash tools/scripts/dev/mint-custom-loader.sh [-- ...mint args]", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "manual", + "caller": "none", + "pipeline": "manual" + } + ], + "outputs": [], + "outputs_display": "none detected", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "manual (none)", + "grade": "B", + "flags": [], + "trigger_group": "Manual" + }, { "path": "tools/scripts/dev/replace-og-image.py", "script": "replace-og-image", @@ -18103,9 +19047,9 @@ "owner": "docs", "needs": "E-R19, F-R7", "purpose_statement": "OG image replacer — replaces og:image path in a single page frontmatter", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — developer tool", "usage": "python3 tools/scripts/dev/replace-og-image.py [flags]", - "header": "# @script replace-og-image\n# @category remediator\n# @purpose feature:seo\n# @scope tools/scripts\n# @owner docs\n# @needs E-R19, F-R7\n# @purpose-statement OG image replacer — replaces og:image path in a single page frontmatter\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage python3 tools/scripts/dev/replace-og-image.py [flags]", + "header": "# @script replace-og-image\n# @category remediator\n# @purpose feature:seo\n# @scope tools/scripts\n# @owner docs\n# @needs E-R19, F-R7\n# @purpose-statement OG image replacer — replaces og:image path in a single page frontmatter\n# @pipeline manual — developer tool\n# @usage python3 tools/scripts/dev/replace-og-image.py [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18193,9 +19137,9 @@ "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "Test for add-callouts.js — validates callout insertion logic against fixtures", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/dev/test-add-callouts.js [flags]", - "header": "/**\n * @script test-add-callouts\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Test for add-callouts.js — validates callout insertion logic against fixtures\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/dev/test-add-callouts.js [flags]\n */", + "header": "/**\n * @script test-add-callouts\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Test for add-callouts.js — validates callout insertion logic against fixtures\n * @pipeline manual — developer tool\n * @usage node tools/scripts/dev/test-add-callouts.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18241,9 +19185,9 @@ "owner": "docs", "needs": "E-R19, F-R7", "purpose_statement": "Test for seo-generator — validates SEO generation logic", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/dev/test-seo-generator.js [flags]", - "header": "/**\n * @script test-seo-generator\n * @category generator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Test for seo-generator — validates SEO generation logic\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/dev/test-seo-generator.js [flags]\n */", + "header": "/**\n * @script test-seo-generator\n * @category generator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Test for seo-generator — validates SEO generation logic\n * @pipeline manual — developer tool\n * @usage node tools/scripts/dev/test-seo-generator.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18289,9 +19233,9 @@ "owner": "docs", "needs": "E-R19, F-R7", "purpose_statement": "Bulk OG image updater — updates og:image across all v2 pages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — developer tool", "usage": "node tools/scripts/dev/update-all-og-images.js [flags]", - "header": "/**\n * @script update-all-og-images\n * @category remediator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Bulk OG image updater — updates og:image across all v2 pages\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/dev/update-all-og-images.js [flags]\n */", + "header": "/**\n * @script update-all-og-images\n * @category remediator\n * @purpose feature:seo\n * @scope tools/scripts\n * @owner docs\n * @needs E-R19, F-R7\n * @purpose-statement Bulk OG image updater — updates og:image across all v2 pages\n * @pipeline manual — developer tool\n * @usage node tools/scripts/dev/update-all-og-images.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18395,6 +19339,19 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, { "type": "npm-script", "caller": "tools/package.json", @@ -18420,32 +19377,31 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: audit:docs-quality)", + "pipeline_actual": "P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); manual (npm script: audit:docs-quality)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P5" }, { "path": "tools/scripts/enforce-generated-file-banners.js", "script": "enforce-generated-file-banners", - "category": "", - "purpose": "", + "category": "* @purpose", + "purpose": "* @scope tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js", "scope": "tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js", "owner": "docs", - "needs": "", - "purpose_statement": "", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "needs": "* @purpose-statement", + "purpose_statement": "* @pipeline P1, P3", + "pipeline_declared": "P1, P3", "usage": "* node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged", - "header": "/**\n * @script enforce-generated-file-banners\n * @summary Enforce standardized hidden/visible generated banners and frontmatter across generated MDX outputs.\n * @owner docs\n * @scope tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n *\n * @usage\n * node tools/scripts/enforce-generated-file-banners.js --check\n * node tools/scripts/enforce-generated-file-banners.js --write\n * node tools/scripts/enforce-generated-file-banners.js --check --staged\n *\n * @inputs\n * --check Validate generated banner/frontmatter policy without writing files.\n * --write Run generators and normalize generated outputs before validation.\n * --staged Restrict validation to generated/banner-relevant staged files when available.\n *\n * @outputs\n * - Console validation summary\n *\n * @exit-codes\n * 0 = policy checks passed\n * 1 = one or more policy checks failed\n *\n * @examples\n * node tools/scripts/enforce-generated-file-banners.js --check\n * node tools/scripts/enforce-generated-file-banners.js --write\n * node tools/scripts/enforce-generated-file-banners.js --check --staged\n *\n * @notes\n * i18n localized files must keep codex-i18n provenance. Visible generation Note parity follows source English pages.\n */", - "header_field_count": 4, + "header": "/**\n * @script enforce-generated-file-banners\n * @category \n * @purpose \n * @scope tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js\n * @owner docs\n * @needs \n * @purpose-statement \n * @pipeline P1, P3\n * @usage * node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged\n */", + "header_field_count": 8, "has_any_header": true, - "has_framework_header": false, + "has_framework_header": true, "category_valid": false, "purpose_valid": false, "scope_valid": false, @@ -18490,21 +19446,17 @@ "in_json": true, "category_match": false, "purpose_match": false, - "pipeline_verified": "MISMATCH:undeclared automation P1, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "P1 (pre-commit); P3 via run-pr-checks; indirect via .githooks/pre-commit; indirect via tests/run-pr-checks.js; manual (npm script: test:generated-banners)", "grade": "F", "flags": [ - "missing-framework-header", - "missing-category", - "missing-purpose", + "invalid-category", + "invalid-purpose", "invalid-scope", - "missing-needs", - "missing-purpose-statement", "header-json-category-mismatch", - "header-json-purpose-mismatch", - "undeclared-automation" + "header-json-purpose-mismatch" ], "trigger_group": "P1" }, @@ -18519,7 +19471,7 @@ "purpose_statement": "Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label.", "pipeline_declared": "P2, P3", "usage": "node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main", - "header": "/**\n * @script check-component-immutability\n * @category enforcer\n * @purpose governance:repo-health\n * @scope changed\n * @owner docs\n * @needs R-R10\n * @purpose-statement Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label.\n * @pipeline P2, P3\n * @usage node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main\n */", + "header": "/**\n * @script check-component-immutability\n * @category enforcer\n * @purpose governance:repo-health\n * @scope changed\n * @owner docs\n * @needs R-R10\n * @purpose-statement Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label.\n * @pipeline P2, P3\n * @usage node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18528,9 +19480,16 @@ "scope_valid": true, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" } ], "outputs": [ @@ -18546,15 +19505,13 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite)", "grade": "B", - "flags": [ - "phantom-pipeline" - ], - "trigger_group": "Orphaned" + "flags": [], + "trigger_group": "P2" }, { "path": "tools/scripts/enforcers/pr/check-pr-template.js", @@ -18624,9 +19581,28 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-push", + "caller": ".github/workflows/generate-ai-sitemap.yml", + "workflow": "Generate AI Sitemap", + "pipeline": "P2" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/verify-ai-sitemap.yml", + "workflow": "Verify AI Sitemap", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/verify-ai-sitemap.yml", + "workflow": "Verify AI Sitemap", + "pipeline": "P3" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/generate-ai-sitemap.yml", + "workflow": "Generate AI Sitemap", + "pipeline": "P6" } ], "outputs": [ @@ -18642,16 +19618,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P2 (Generate AI Sitemap); P2 (Verify AI Sitemap); P3 (Verify AI Sitemap); P6 (Generate AI Sitemap)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P2" }, { "path": "tools/scripts/generate-component-docs.js", @@ -18664,7 +19639,7 @@ "purpose_statement": "Generates published component library MDX pages from the registry. Replaces update-component-library.sh.", "pipeline_declared": "P6 (on-demand)", "usage": "node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ]", - "header": "/**\n * @script generate-component-docs\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10\n * @purpose-statement Generates published component library MDX pages from the registry. Replaces update-component-library.sh.\n * @pipeline P6 (on-demand)\n * @usage node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ]\n */", + "header": "/**\n * @script generate-component-docs\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10\n * @purpose-statement Generates published component library MDX pages from the registry. Replaces update-component-library.sh.\n * @pipeline P6 (on-demand)\n * @usage node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18715,9 +19690,9 @@ "owner": "docs", "needs": "R-R10, R-R29", "purpose_statement": "Generates component-governance remediation reports from the approved audit and live repo state, including defensive-rendering guidance for MDX-facing components.", - "pipeline_declared": "manual", + "pipeline_declared": "manual — report generation", "usage": "node tools/scripts/generate-component-governance-remediation-reports.js [flags]", - "header": "/**\n * @script generate-component-governance-remediation-reports\n * @category generator\n * @purpose qa:repo-health\n * @summary Generate Phase 2a remediation reports from the approved component-governance audit and live repo state.\n * @owner docs\n * @scope generated-output\n * @needs R-R10, R-R29\n * @purpose-statement Generates component-governance remediation reports from the approved audit and live repo state, including defensive-rendering guidance for MDX-facing components.\n * @pipeline manual\n * @usage node tools/scripts/generate-component-governance-remediation-reports.js [flags]\n *\n * @inputs\n * --audit-file (default: tasks/reports/component-governance-audit.md)\n * --output-dir (default: tasks/reports)\n * --reports (default: all)\n * --strict / --no-strict (default: strict)\n *\n * @outputs\n * - tasks/reports/migration-impact-report.md\n * - tasks/reports/colour-remediation-report.md\n * - tasks/reports/style-css-token-audit.md\n * - tasks/reports/defensive-rendering-remediation-report.md\n *\n * @exit-codes\n * 0 = reports generated successfully\n * 1 = invalid args, audit drift that blocks strict mode, or runtime failure\n *\n * @examples\n * node tools/scripts/generate-component-governance-remediation-reports.js\n * node tools/scripts/generate-component-governance-remediation-reports.js --reports migration,defensive\n * node tools/scripts/generate-component-governance-remediation-reports.js --no-strict\n *\n * @notes\n * Phase 2a is read-only for runtime docs/component source. This script only reads repo state and writes report artefacts.\n */", + "header": "/**\n * @script generate-component-governance-remediation-reports\n * @category generator\n * @purpose qa:repo-health\n * @scope generated-output\n * @owner docs\n * @needs R-R10, R-R29\n * @purpose-statement Generates component-governance remediation reports from the approved audit and live repo state, including defensive-rendering guidance for MDX-facing components.\n * @pipeline manual — report generation\n * @usage node tools/scripts/generate-component-governance-remediation-reports.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18764,7 +19739,7 @@ "purpose_statement": "Parses JSDoc from all component exports and produces component-registry.json.", "pipeline_declared": "P1, P2, P3", "usage": "node tools/scripts/generate-component-registry.js [--validate-only]", - "header": "/**\n * @script generate-component-registry\n * @category generator\n * @purpose governance:index-management\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Parses JSDoc from all component exports and produces component-registry.json.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/generate-component-registry.js [--validate-only]\n */", + "header": "/**\n * @script generate-component-registry\n * @category generator\n * @purpose governance:index-management\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Parses JSDoc from all component exports and produces component-registry.json.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/generate-component-registry.js [--validate-only]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18777,6 +19752,31 @@ "caller": ".githooks/pre-commit", "pipeline": "P1" }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" + }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, { "type": "script", "caller": ".githooks/pre-commit", @@ -18812,13 +19812,13 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MISMATCH:undeclared automation P5, P6", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js; manual (npm script: registry:components)", + "pipeline_actual": "P1 (pre-commit); P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite); P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js; manual (npm script: registry:components)", "grade": "B", "flags": [ - "phantom-pipeline" + "undeclared-automation" ], "trigger_group": "P1" }, @@ -18881,7 +19881,7 @@ "purpose_statement": "Generates components-index.mdx in docs-guide/indexes/ from component-registry.json and component-usage-map.json.", "pipeline_declared": "P1 (commit — auto-regenerated when components staged)", "usage": "node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check]", - "header": "/**\n * @script generate-docs-guide-components-index\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10, R-R16, R-R17\n * @purpose-statement Generates components-index.mdx in docs-guide/indexes/ from component-registry.json and component-usage-map.json.\n * @pipeline P1 (commit — auto-regenerated when components staged)\n * @usage node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check]\n */", + "header": "/**\n * @script generate-docs-guide-components-index\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10, R-R16, R-R17\n * @purpose-statement Generates components-index.mdx in docs-guide/indexes/ from component-registry.json and component-usage-map.json.\n * @pipeline P1 (commit — auto-regenerated when components staged)\n * @usage node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18930,9 +19930,9 @@ "owner": "docs", "needs": "R-R16, R-R17", "purpose_statement": "Generates docs-guide workflow/template indexes and optionally verifies freshness", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/generate-docs-guide-indexes.js [flags]", - "header": "/**\n * @script generate-docs-guide-indexes\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs-guide, .github/workflows, .github/ISSUE_TEMPLATE\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generates docs-guide workflow/template indexes and optionally verifies freshness\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/generate-docs-guide-indexes.js [flags]\n */", + "header": "/**\n * @script generate-docs-guide-indexes\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs-guide, .github/workflows, .github/ISSUE_TEMPLATE\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generates docs-guide workflow/template indexes and optionally verifies freshness\n * @pipeline manual — not yet in pipeline\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/generate-docs-guide-indexes.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -18979,9 +19979,9 @@ "owner": "docs", "needs": "R-R16, R-R17", "purpose_statement": "Generates the docs-guide pages index", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/generate-docs-guide-pages-index.js [flags]", - "header": "/**\n * @script generate-docs-guide-pages-index\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs-guide/indexes/pages-index.mdx, v2/index.mdx, docs.json\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generates the docs-guide pages index\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/generate-docs-guide-pages-index.js [flags]\n */", + "header": "/**\n * @script generate-docs-guide-pages-index\n * @category generator\n * @purpose governance:index-management\n * @scope tools/scripts, docs-guide/indexes/pages-index.mdx, v2/index.mdx, docs.json\n * @owner docs\n * @needs R-R16, R-R17\n * @purpose-statement Generates the docs-guide pages index\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/generate-docs-guide-pages-index.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19042,6 +20042,42 @@ "caller": ".githooks/pre-commit", "pipeline": "P1" }, + { + "type": "workflow-push", + "caller": ".github/workflows/check-docs-index.yml", + "workflow": "Check Docs Index", + "pipeline": "P2" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/generate-docs-index.yml", + "workflow": "Generate Docs Index", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/check-docs-index.yml", + "workflow": "Check Docs Index", + "pipeline": "P3" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/check-docs-index.yml", + "workflow": "Check Docs Index", + "pipeline": "P6" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/generate-docs-index.yml", + "workflow": "Generate Docs Index", + "pipeline": "P6" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" + }, { "type": "script", "caller": ".githooks/pre-commit", @@ -19071,14 +20107,13 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit", + "pipeline_actual": "P1 (pre-commit); P2 (Check Docs Index); P2 (Generate Docs Index); P3 (Check Docs Index); P6 (Check Docs Index); P6 (Generate Docs Index); P6 (Docs Translation Pipeline); indirect via .githooks/pre-commit", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], "trigger_group": "P1" }, @@ -19102,9 +20137,28 @@ "scope_valid": false, "triggers": [ { - "type": "manual", - "caller": "none", - "pipeline": "manual" + "type": "workflow-push", + "caller": ".github/workflows/generate-llms-files.yml", + "workflow": "Generate llms.txt", + "pipeline": "P2" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/verify-llms-files.yml", + "workflow": "Verify llms.txt Files", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/verify-llms-files.yml", + "workflow": "Verify llms.txt Files", + "pipeline": "P3" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/generate-llms-files.yml", + "workflow": "Generate llms.txt", + "pipeline": "P6" } ], "outputs": [ @@ -19130,16 +20184,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (none)", + "pipeline_actual": "P2 (Generate llms.txt); P2 (Verify llms.txt Files); P3 (Verify llms.txt Files); P6 (Generate llms.txt)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P2" }, { "path": "tools/scripts/generate-pages-index.js", @@ -19236,6 +20289,12 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" + }, { "type": "script", "caller": "tools/scripts/i18n/test/cli-guardrails.test.js", @@ -19261,16 +20320,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/test/cli-guardrails.test.js; manual (npm script: i18n:docs-json)", + "pipeline_actual": "P6 (Docs Translation Pipeline); indirect via tools/scripts/i18n/test/cli-guardrails.test.js; manual (npm script: i18n:docs-json)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P6" }, { "path": "tools/scripts/i18n/lib/common.js", @@ -19281,9 +20339,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "i18n shared utilities — common helper functions for translation pipeline", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/common.js [flags]", - "header": "/**\n * @script common\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement i18n shared utilities — common helper functions for translation pipeline\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/common.js [flags]\n */", + "header": "/**\n * @script common\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement i18n shared utilities — common helper functions for translation pipeline\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/common.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19358,9 +20416,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "i18n configuration — language codes, locale paths, translation settings", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/config.js [flags]", - "header": "/**\n * @script config\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement i18n configuration — language codes, locale paths, translation settings\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/config.js [flags]\n */", + "header": "/**\n * @script config\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement i18n configuration — language codes, locale paths, translation settings\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/config.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19415,9 +20473,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "docs.json localiser engine — transforms docs.json navigation for locale variants", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/docs-json-localizer.js [flags]", - "header": "/**\n * @script docs-json-localizer\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement docs.json localiser engine — transforms docs.json navigation for locale variants\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/docs-json-localizer.js [flags]\n */", + "header": "/**\n * @script docs-json-localizer\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement docs.json localiser engine — transforms docs.json navigation for locale variants\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/docs-json-localizer.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19462,9 +20520,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "docs route resolver — maps page paths to locale-aware routes", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/docs-routes.js [flags]", - "header": "/**\n * @script docs-routes\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement docs route resolver — maps page paths to locale-aware routes\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/docs-routes.js [flags]\n */", + "header": "/**\n * @script docs-routes\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement docs route resolver — maps page paths to locale-aware routes\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/docs-routes.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19514,9 +20572,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Frontmatter parser/writer — reads and writes MDX frontmatter for translation", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/frontmatter.js [flags]", - "header": "/**\n * @script frontmatter\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Frontmatter parser/writer — reads and writes MDX frontmatter for translation\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/frontmatter.js [flags]\n */", + "header": "/**\n * @script frontmatter\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Frontmatter parser/writer — reads and writes MDX frontmatter for translation\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/frontmatter.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19571,9 +20629,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "MDX parser for i18n — extracts translatable content blocks from MDX", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/mdx-parser.js [flags]", - "header": "/**\n * @script mdx-parser\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement MDX parser for i18n — extracts translatable content blocks from MDX\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/mdx-parser.js [flags]\n */", + "header": "/**\n * @script mdx-parser\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement MDX parser for i18n — extracts translatable content blocks from MDX\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/mdx-parser.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19623,9 +20681,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "MDX translation engine — applies translations to MDX content blocks", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/mdx-translate.js [flags]", - "header": "/**\n * @script mdx-translate\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement MDX translation engine — applies translations to MDX content blocks\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/mdx-translate.js [flags]\n */", + "header": "/**\n * @script mdx-translate\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement MDX translation engine — applies translations to MDX content blocks\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/mdx-translate.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19680,9 +20738,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Path utilities for i18n — locale-aware path resolution and mapping", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/path-utils.js [flags]", - "header": "/**\n * @script path-utils\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Path utilities for i18n — locale-aware path resolution and mapping\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/path-utils.js [flags]\n */", + "header": "/**\n * @script path-utils\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Path utilities for i18n — locale-aware path resolution and mapping\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/path-utils.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19737,9 +20795,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Translation provenance tracker — records source, timestamp, and provider for each translated segment", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/provenance.js [flags]", - "header": "/**\n * @script provenance\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Translation provenance tracker — records source, timestamp, and provider for each translated segment\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/provenance.js [flags]\n */", + "header": "/**\n * @script provenance\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Translation provenance tracker — records source, timestamp, and provider for each translated segment\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/provenance.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19804,9 +20862,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Mock translation provider — returns placeholder translations for testing without API calls", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/provider-mock.js [flags]", - "header": "/**\n * @script provider-mock\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Mock translation provider — returns placeholder translations for testing without API calls\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/provider-mock.js [flags]\n */", + "header": "/**\n * @script provider-mock\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Mock translation provider — returns placeholder translations for testing without API calls\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/provider-mock.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19846,9 +20904,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "OpenRouter translation provider — calls OpenRouter API for actual translations", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/provider-openrouter.js [flags]", - "header": "/**\n * @script provider-openrouter\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement OpenRouter translation provider — calls OpenRouter API for actual translations\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/provider-openrouter.js [flags]\n */", + "header": "/**\n * @script provider-openrouter\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement OpenRouter translation provider — calls OpenRouter API for actual translations\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/provider-openrouter.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19893,9 +20951,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Provider registry — selects translation provider (OpenRouter or mock) based on configuration", - "pipeline_declared": "indirect — library module imported by other scripts, not invoked directly", + "pipeline_declared": "indirect — library module", "usage": "node tools/scripts/i18n/lib/providers.js [flags]", - "header": "/**\n * @script providers\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Provider registry — selects translation provider (OpenRouter or mock) based on configuration\n * @pipeline indirect — library module imported by other scripts, not invoked directly\n * @usage node tools/scripts/i18n/lib/providers.js [flags]\n */", + "header": "/**\n * @script providers\n * @category utility\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Provider registry — selects translation provider (OpenRouter or mock) based on configuration\n * @pipeline indirect — library module\n * @usage node tools/scripts/i18n/lib/providers.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19945,9 +21003,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Mintlify language toggle checker — validates Mintlify version supports language toggle feature", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test-mintlify-version-language-toggle.js [flags]", - "header": "/**\n * @script test-mintlify-version-language-toggle\n * @category enforcer\n * @purpose feature:translation\n * @scope tools/scripts/i18n, docs.json, v2\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Mintlify language toggle checker — validates Mintlify version supports language toggle feature\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test-mintlify-version-language-toggle.js [flags]\n */", + "header": "/**\n * @script test-mintlify-version-language-toggle\n * @category enforcer\n * @purpose feature:translation\n * @scope tools/scripts/i18n, docs.json, v2\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Mintlify language toggle checker — validates Mintlify version supports language toggle feature\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test-mintlify-version-language-toggle.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -19993,9 +21051,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests i18n CLI guardrails — validates argument validation and safety checks", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/cli-guardrails.test.js [flags]", - "header": "/**\n * @script cli-guardrails.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests i18n CLI guardrails — validates argument validation and safety checks\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/i18n/test/cli-guardrails.test.js [flags]\n */", + "header": "/**\n * @script cli-guardrails.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests i18n CLI guardrails — validates argument validation and safety checks\n * @pipeline manual — not yet in pipeline\n * @dualmode dual-mode (document flags)\n * @usage node tools/scripts/i18n/test/cli-guardrails.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20041,9 +21099,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests docs-json-localizer — validates locale docs.json transformation logic", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/docs-json-localizer.test.js [flags]", - "header": "/**\n * @script docs-json-localizer.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests docs-json-localizer — validates locale docs.json transformation logic\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/docs-json-localizer.test.js [flags]\n */", + "header": "/**\n * @script docs-json-localizer.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests docs-json-localizer — validates locale docs.json transformation logic\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/docs-json-localizer.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20083,9 +21141,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests frontmatter parser — validates frontmatter read/write roundtrip", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/frontmatter.test.js [flags]", - "header": "/**\n * @script frontmatter.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests frontmatter parser — validates frontmatter read/write roundtrip\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/frontmatter.test.js [flags]\n */", + "header": "/**\n * @script frontmatter.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests frontmatter parser — validates frontmatter read/write roundtrip\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/frontmatter.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20125,9 +21183,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests MDX translation — validates content block translation logic", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/mdx-translate.test.js [flags]", - "header": "/**\n * @script mdx-translate.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests MDX translation — validates content block translation logic\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/mdx-translate.test.js [flags]\n */", + "header": "/**\n * @script mdx-translate.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests MDX translation — validates content block translation logic\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/mdx-translate.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20167,9 +21225,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests provenance tracker — validates translation provenance recording", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/provenance.test.js [flags]", - "header": "/**\n * @script provenance.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests provenance tracker — validates translation provenance recording\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/provenance.test.js [flags]\n */", + "header": "/**\n * @script provenance.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests provenance tracker — validates translation provenance recording\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/provenance.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20209,9 +21267,9 @@ "owner": "docs", "needs": "F-R6, F-R7", "purpose_statement": "Tests OpenRouter provider — validates API call logic and response parsing", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/i18n/test/provider-openrouter.test.js [flags]", - "header": "/**\n * @script provider-openrouter.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests OpenRouter provider — validates API call logic and response parsing\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/i18n/test/provider-openrouter.test.js [flags]\n */", + "header": "/**\n * @script provider-openrouter.test\n * @category validator\n * @purpose feature:translation\n * @scope tools/scripts\n * @owner docs\n * @needs F-R6, F-R7\n * @purpose-statement Tests OpenRouter provider — validates API call logic and response parsing\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/i18n/test/provider-openrouter.test.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20261,6 +21319,12 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" + }, { "type": "script", "caller": "tools/scripts/i18n/test/cli-guardrails.test.js", @@ -20286,16 +21350,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/i18n/test/cli-guardrails.test.js; manual (npm script: i18n:translate)", + "pipeline_actual": "P6 (Docs Translation Pipeline); indirect via tools/scripts/i18n/test/cli-guardrails.test.js; manual (npm script: i18n:translate)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P6" }, { "path": "tools/scripts/i18n/validate-generated.js", @@ -20316,6 +21379,12 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-dispatch", + "caller": ".github/workflows/translate-docs.yml", + "workflow": "Docs Translation Pipeline", + "pipeline": "P6" + }, { "type": "npm-script", "caller": "tools/package.json", @@ -20336,35 +21405,90 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: i18n:validate)", + "pipeline_actual": "P6 (Docs Translation Pipeline); manual (npm script: i18n:validate)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P6" + }, + { + "path": "tools/scripts/lib/docs-path-sync.js", + "script": "docs-path-sync", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "full-repo", + "owner": "docs", + "needs": "E-C1, R-R14", + "purpose_statement": "Shared docs path sync library — detects staged page moves, plans deterministic route rewrites, and applies governed docs.json/path reference updates.", + "pipeline_declared": "indirect -- library module", + "usage": "const sync = require('./docs-path-sync');", + "header": "/**\n * @script docs-path-sync\n * @category utility\n * @purpose qa:repo-health\n * @scope full-repo\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Shared docs path sync library — detects staged page moves, plans deterministic route rewrites, and applies governed docs.json/path reference updates.\n * @pipeline indirect -- library module\n * @usage const sync = require('./docs-path-sync');\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tests/unit/docs-path-sync.test.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/remediators/content/sync-docs-paths.js", + "pipeline": "indirect" + }, + { + "type": "script", + "caller": "tools/scripts/validators/content/check-docs-path-sync.js", + "pipeline": "indirect" + } + ], + "outputs": [ + { + "output_path": "", + "type": "stdout", + "call": "writeJson" + } + ], + "outputs_display": "", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MATCH", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tests/unit/docs-path-sync.test.js; indirect via tools/scripts/remediators/content/sync-docs-paths.js; indirect via tools/scripts/validators/content/check-docs-path-sync.js", + "grade": "B", + "flags": [], + "trigger_group": "Indirect" }, { "path": "tools/scripts/mint-dev.sh", "script": "mint-dev", "category": "utility", "purpose": "tooling:dev-tools", - "scope": "tools/scripts", + "scope": "full-repo", "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Mintlify dev server launcher — starts mint dev with correct configuration", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — developer tool", "usage": "bash tools/scripts/mint-dev.sh [flags]", - "header": "# @script mint-dev\n# @category utility\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Mintlify dev server launcher — starts mint dev with correct configuration\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/mint-dev.sh [flags]", + "header": "# @script mint-dev\n# @category utility\n# @purpose tooling:dev-tools\n# @scope full-repo\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Mintlify dev server launcher — starts mint dev with correct configuration\n# @pipeline manual — developer tool\n# @usage bash tools/scripts/mint-dev.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -20389,10 +21513,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -20404,9 +21526,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Script scaffolder — creates a new script file prefilled with the required docs header template", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/new-script.js [flags]", - "header": "/**\n * @script new-script\n * @category generator\n * @purpose qa:repo-health\n * @scope tools/scripts, tests/unit/script-docs.test.js\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Script scaffolder — creates a new script file prefilled with the required docs header template\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/new-script.js [flags]\n */", + "header": "/**\n * @script new-script\n * @category generator\n * @purpose qa:repo-health\n * @scope tools/scripts, tests/unit/script-docs.test.js\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Script scaffolder — creates a new script file prefilled with the required docs header template\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/new-script.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20452,9 +21574,9 @@ "owner": "docs", "needs": "R-R14, R-R18, R-C6", "purpose_statement": "Chains audit, safe repair, verification, and reporting into a single self-healing governance pipeline.", - "pipeline_declared": "P5 (scheduled, weekly), P6 (on-demand), manual", + "pipeline_declared": "P2 (push), P5 (scheduled, weekly), P6 (on-demand), manual", "usage": "node tools/scripts/orchestrators/repair-governance.js [--dry-run] [--auto-commit] [--report-only] [--strict]", - "header": "/**\n * @script repair-governance\n * @category orchestrator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Chains audit, safe repair, verification, and reporting into a single self-healing governance pipeline.\n * @pipeline P5 (scheduled, weekly), P6 (on-demand), manual\n * @dualmode --report-only | --dry-run | default fix mode\n * @usage node tools/scripts/orchestrators/repair-governance.js [--dry-run] [--auto-commit] [--report-only] [--strict]\n */", + "header": "/**\n * @script repair-governance\n * @category orchestrator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Chains audit, safe repair, verification, and reporting into a single self-healing governance pipeline.\n * @pipeline P2 (push), P5 (scheduled, weekly), P6 (on-demand), manual\n * @dualmode --report-only | --dry-run | default fix mode\n * @usage node tools/scripts/orchestrators/repair-governance.js [--dry-run] [--auto-commit] [--report-only] [--strict]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20462,6 +21584,25 @@ "purpose_valid": true, "scope_valid": true, "triggers": [ + { + "type": "workflow-push", + "caller": ".github/workflows/governance-sync.yml", + "workflow": "Governance sync (post-merge)", + "pipeline": "P2" + }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/repair-governance.yml", + "workflow": "Governance Repair", + "pipeline": "P5", + "cron": "0 5 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/repair-governance.yml", + "workflow": "Governance Repair", + "pipeline": "P6" + }, { "type": "script", "caller": "tests/unit/repair-governance.test.js", @@ -20487,15 +21628,13 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P5, P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/unit/repair-governance.test.js; manual (npm script: repair:governance)", + "pipeline_actual": "P2 (Governance sync (post-merge)); P5 (Governance Repair cron 0 5 * * 1); P6 (Governance Repair); indirect via tests/unit/repair-governance.test.js; manual (npm script: repair:governance)", "grade": "B", - "flags": [ - "phantom-pipeline" - ], - "trigger_group": "Orphaned" + "flags": [], + "trigger_group": "P2" }, { "path": "tools/scripts/publish-v2-internal-reports.js", @@ -20506,9 +21645,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Report publisher — publishes v2 internal audit reports to configured output locations", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/publish-v2-internal-reports.js [flags]", - "header": "/**\n * @script publish-v2-internal-reports\n * @category automation\n * @purpose qa:repo-health\n * @scope tools/scripts, tools/config, v2/internal, docs.json, tasks/reports, tests/reports\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Report publisher — publishes v2 internal audit reports to configured output locations\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/publish-v2-internal-reports.js [flags]\n */", + "header": "/**\n * @script publish-v2-internal-reports\n * @category automation\n * @purpose qa:repo-health\n * @scope tools/scripts, tools/config, v2/internal, docs.json, tasks/reports, tests/reports\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Report publisher — publishes v2 internal audit reports to configured output locations\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/publish-v2-internal-reports.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20535,10 +21674,8 @@ } ], "outputs_display": "tools/scripts/reports, tools/scripts/docs.json", - "downstream_consumers": [ - "tools/scripts/generate-component-governance-remediation-reports.js" - ], - "downstream_display": "Yes: tools/scripts/generate-component-governance-remediation-reports.js", + "downstream_consumers": [], + "downstream_display": "No", "in_json": true, "category_match": true, "purpose_match": true, @@ -20563,7 +21700,7 @@ "purpose_statement": "Reads the media-audit manifest, migrates flagged assets to docs-v2-assets, and rewrites MDX/JSX references to raw GitHub URLs.", "pipeline_declared": "P6 (on-demand)", "usage": "node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run", - "header": "/**\n * @script migrate-assets-to-branch\n * @category remediator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14\n * @purpose-statement Reads the media-audit manifest, migrates flagged assets to docs-v2-assets, and rewrites MDX/JSX references to raw GitHub URLs.\n * @pipeline P6 (on-demand)\n * @dualmode --dry-run (show what would change) | --write (execute migration)\n * @usage node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run\n */", + "header": "/**\n * @script migrate-assets-to-branch\n * @category remediator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14\n * @purpose-statement Reads the media-audit manifest, migrates flagged assets to docs-v2-assets, and rewrites MDX/JSX references to raw GitHub URLs.\n * @pipeline P6 (on-demand)\n * @dualmode --dry-run (show what would change) | --write (execute migration)\n * @usage node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20611,7 +21748,7 @@ "purpose_statement": "Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components.", "pipeline_declared": "P1 (commit — runs when components staged), P6 (on-demand)", "usage": "node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged]", - "header": "/**\n * @script repair-component-metadata\n * @category remediator\n * @purpose governance:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components.\n * @pipeline P1 (commit — runs when components staged), P6 (on-demand)\n * @usage node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged]\n */", + "header": "/**\n * @script repair-component-metadata\n * @category remediator\n * @purpose governance:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components.\n * @pipeline P1 (commit — runs when components staged), P6 (on-demand)\n * @usage node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20624,6 +21761,19 @@ "caller": ".githooks/pre-commit", "pipeline": "P1" }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, { "type": "script", "caller": ".githooks/pre-commit", @@ -20648,13 +21798,13 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MISMATCH:undeclared automation P5", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js", + "pipeline_actual": "P1 (pre-commit); P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js", "grade": "B", "flags": [ - "phantom-pipeline" + "undeclared-automation" ], "trigger_group": "P1" }, @@ -20769,6 +21919,59 @@ "flags": [], "trigger_group": "Indirect" }, + { + "path": "tools/scripts/remediators/content/sync-docs-paths.js", + "script": "sync-docs-paths", + "category": "remediator", + "purpose": "qa:repo-health", + "scope": "staged", + "owner": "docs", + "needs": "E-C1, R-R14", + "purpose_statement": "Docs path sync remediator — applies deterministic docs.json and governed reference rewrites for moved docs pages.", + "pipeline_declared": "P1, P6", + "usage": "node tools/scripts/remediators/content/sync-docs-paths.js --staged --dry-run", + "header": "/**\n * @script sync-docs-paths\n * @category remediator\n * @purpose qa:repo-health\n * @scope staged\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Docs path sync remediator — applies deterministic docs.json and governed reference rewrites for moved docs pages.\n * @pipeline P1, P6\n * @dualmode --dry-run (validator) | --write (remediator)\n * @usage node tools/scripts/remediators/content/sync-docs-paths.js --staged --dry-run\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "pre-commit", + "caller": ".githooks/pre-commit", + "pipeline": "P1" + }, + { + "type": "script", + "caller": "tests/unit/docs-path-sync.test.js", + "pipeline": "indirect" + } + ], + "outputs": [ + { + "output_path": "stdout", + "type": "stdout", + "call": "console" + } + ], + "outputs_display": "stdout only", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MISMATCH:phantom claim P6", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "P1 (pre-commit); indirect via tests/unit/docs-path-sync.test.js", + "grade": "B", + "flags": [ + "phantom-pipeline" + ], + "trigger_group": "P1" + }, { "path": "tools/scripts/repo-audit-orchestrator.js", "script": "repo-audit-orchestrator", @@ -20858,7 +22061,7 @@ "purpose_statement": "Scans MDX imports to produce component-usage-map.json and detect @usedIn drift.", "pipeline_declared": "P6", "usage": "node tools/scripts/scan-component-imports.js [--verify]", - "header": "/**\n * @script scan-component-imports\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10\n * @purpose-statement Scans MDX imports to produce component-usage-map.json and detect @usedIn drift.\n * @pipeline P6\n * @usage node tools/scripts/scan-component-imports.js [--verify]\n */", + "header": "/**\n * @script scan-component-imports\n * @category generator\n * @purpose governance:index-management\n * @scope generated-output\n * @owner docs\n * @needs R-R10\n * @purpose-statement Scans MDX imports to produce component-usage-map.json and detect @usedIn drift.\n * @pipeline P6\n * @usage node tools/scripts/scan-component-imports.js [--verify]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20871,6 +22074,19 @@ "caller": ".githooks/pre-commit", "pipeline": "P1" }, + { + "type": "workflow-schedule", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P5", + "cron": "0 6 * * 1" + }, + { + "type": "workflow-dispatch", + "caller": ".github/workflows/content-health.yml", + "workflow": "Content Health Check", + "pipeline": "P6" + }, { "type": "script", "caller": ".githooks/pre-commit", @@ -20895,13 +22111,12 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6; undeclared automation P1", + "pipeline_verified": "MISMATCH:undeclared automation P1, P5", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js", + "pipeline_actual": "P1 (pre-commit); P5 (Content Health Check cron 0 6 * * 1); P6 (Content Health Check); indirect via .githooks/pre-commit; indirect via tests/unit/component-governance-generators.test.js", "grade": "B", "flags": [ - "phantom-pipeline", "undeclared-automation" ], "trigger_group": "P1" @@ -20915,9 +22130,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Script footprint auditor — analyses script file sizes, dependencies, and usage patterns across the repo", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/script-footprint-and-usage-audit.js [flags]", - "header": "/**\n * @script script-footprint-and-usage-audit\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, tests, tasks/reports, ai-tools/ai-skills\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Script footprint auditor — analyses script file sizes, dependencies, and usage patterns across the repo\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/script-footprint-and-usage-audit.js [flags]\n */", + "header": "/**\n * @script script-footprint-and-usage-audit\n * @category validator\n * @purpose qa:repo-health\n * @scope tools/scripts, tests, tasks/reports, ai-tools/ai-skills\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Script footprint auditor — analyses script file sizes, dependencies, and usage patterns across the repo\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/script-footprint-and-usage-audit.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -20978,6 +22193,36 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/broken-links.yml", + "workflow": "Check Broken Links", + "pipeline": "P3" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P3" + }, { "type": "script", "caller": "tools/scripts/mint-dev.sh", @@ -21003,16 +22248,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tools/scripts/mint-dev.sh; manual (npm script: fetch-docs); manual (npm script: prebuild)", + "pipeline_actual": "P2 (Docs CI - Content Quality Suite); P2 (Docs CI - V2 Browser Sweep); P3 (Check Broken Links); P3 (Docs CI - Content Quality Suite); P3 (Docs CI - V2 Browser Sweep); indirect via tools/scripts/mint-dev.sh; manual (npm script: fetch-docs); manual (npm script: prebuild)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P2" }, { "path": "tools/scripts/snippets/fetch-lpt-exchanges.sh", @@ -21023,9 +22267,9 @@ "owner": "docs", "needs": "F-R1", "purpose_statement": "LPT exchange data fetcher — pulls exchange listing data for LPT token pages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/snippets/fetch-lpt-exchanges.sh [flags]", - "header": "# @script fetch-lpt-exchanges\n# @category automation\n# @purpose infrastructure:data-feeds\n# @scope tools/scripts\n# @owner docs\n# @needs F-R1\n# @purpose-statement LPT exchange data fetcher — pulls exchange listing data for LPT token pages\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/snippets/fetch-lpt-exchanges.sh [flags]\n# Fetch LPT exchange listings from CoinGecko API and append to lpt-exchanges.mdx\n# Usage: ./tools/scripts/snippets/fetch-lpt-exchanges.sh", + "header": "# @script fetch-lpt-exchanges\n# @category automation\n# @purpose infrastructure:data-feeds\n# @scope tools/scripts\n# @owner docs\n# @needs F-R1\n# @purpose-statement LPT exchange data fetcher — pulls exchange listing data for LPT token pages\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/snippets/fetch-lpt-exchanges.sh [flags]\n# Fetch LPT exchange listings from CoinGecko API and append to lpt-exchanges.mdx\n# Usage: ./tools/scripts/snippets/fetch-lpt-exchanges.sh", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21071,9 +22315,9 @@ "owner": "docs", "needs": "F-R17", "purpose_statement": "OpenAPI spec fetcher — pulls latest OpenAPI specs from Livepeer services for reference pages", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/snippets/fetch-openapi-specs.sh [flags]", - "header": "# @script fetch-openapi-specs\n# @category automation\n# @purpose tooling:api-spec\n# @scope tools/scripts\n# @owner docs\n# @needs F-R17\n# @purpose-statement OpenAPI spec fetcher — pulls latest OpenAPI specs from Livepeer services for reference pages\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/snippets/fetch-openapi-specs.sh [flags]\n# Pre-build script to fetch external OpenAPI specification files\n# Run this before building the docs to ensure API specs are up-to-date", + "header": "# @script fetch-openapi-specs\n# @category automation\n# @purpose tooling:api-spec\n# @scope tools/scripts\n# @owner docs\n# @needs F-R17\n# @purpose-statement OpenAPI spec fetcher — pulls latest OpenAPI specs from Livepeer services for reference pages\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/snippets/fetch-openapi-specs.sh [flags]\n# Pre-build script to fetch external OpenAPI specification files\n# Run this before building the docs to ensure API specs are up-to-date", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21113,9 +22357,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "API docs generator — generates API reference pages from OpenAPI specs", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/snippets/generate-api-docs.sh [flags]", - "header": "# @script generate-api-docs\n# @category generator\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement API docs generator — generates API reference pages from OpenAPI specs\n# @pipeline manual — interactive developer tool, not suited for automated pipelines\n# @usage bash tools/scripts/snippets/generate-api-docs.sh [flags]\n# Generate API documentation from OpenAPI spec\n# Creates: landing page + individual endpoint pages + navigation JSON\n#\n# Usage: ./generate-api-docs.sh \n# Example: ./generate-api-docs.sh ai/worker/api/openapi.yaml v2/pages/04_gateways/guides-references/api-reference/AI-API \"AI API\"\n#", + "header": "# @script generate-api-docs\n# @category generator\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement API docs generator — generates API reference pages from OpenAPI specs\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/snippets/generate-api-docs.sh [flags]\n# Generate API documentation from OpenAPI spec\n# Creates: landing page + individual endpoint pages + navigation JSON\n#\n# Usage: ./generate-api-docs.sh \n# Example: ./generate-api-docs.sh ai/worker/api/openapi.yaml v2/pages/04_gateways/guides-references/api-reference/AI-API \"AI API\"\n#", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21161,9 +22405,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Glossary generator — produces glossary data file from terminology sources", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/snippets/generate-data/scripts/generate-glossary.js [flags]", - "header": "/**\n * @script generate-glossary\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Glossary generator — produces glossary data file from terminology sources\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/snippets/generate-data/scripts/generate-glossary.js [flags]\n */", + "header": "/**\n * @script generate-glossary\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Glossary generator — produces glossary data file from terminology sources\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/snippets/generate-data/scripts/generate-glossary.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21214,9 +22458,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Terminology search — searches glossary/terminology data for definitions", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/snippets/generate-data/scripts/terminology-search.js [flags]", - "header": "/**\n * @script terminology-search\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Terminology search — searches glossary/terminology data for definitions\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/snippets/generate-data/scripts/terminology-search.js [flags]\n */", + "header": "/**\n * @script terminology-search\n * @category generator\n * @purpose tooling:dev-tools\n * @scope tools/scripts\n * @owner docs\n * @needs E-C6, F-C1\n * @purpose-statement Terminology search — searches glossary/terminology data for definitions\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/snippets/generate-data/scripts/terminology-search.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21277,6 +22521,12 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-dispatch", + "caller": ".github/workflows/seo-refresh.yml", + "workflow": "SEO Metadata Refresh", + "pipeline": "P6" + }, { "type": "npm-script", "caller": "tools/package.json", @@ -21303,16 +22553,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: generate-seo); manual (npm script: generate-seo:dry-run)", + "pipeline_actual": "P6 (SEO Metadata Refresh); manual (npm script: generate-seo); manual (npm script: generate-seo:dry-run)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P6" }, { "path": "tools/scripts/snippets/test-scripts.sh", @@ -21323,9 +22572,9 @@ "owner": "docs", "needs": "E-C6, F-C1", "purpose_statement": "Snippet test runner — runs basic validation on snippet scripts", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — developer tool", "usage": "bash tools/scripts/snippets/test-scripts.sh [flags]", - "header": "# @script test-scripts\n# @category utility\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Snippet test runner — runs basic validation on snippet scripts\n# @pipeline manual — diagnostic/investigation tool, run on-demand only\n# @usage bash tools/scripts/snippets/test-scripts.sh [flags]\n# Test suite for tools/scripts/snippets\n# Run this before using scripts to verify they work correctly\n#\n# Usage: ./tools/scripts/snippets/test-scripts.sh\n#\n# Exit codes:\n# 0 - All tests passed\n# 1 - One or more tests failed", + "header": "# @script test-scripts\n# @category utility\n# @purpose tooling:dev-tools\n# @scope tools/scripts\n# @owner docs\n# @needs E-C6, F-C1\n# @purpose-statement Snippet test runner — runs basic validation on snippet scripts\n# @pipeline manual — developer tool\n# @usage bash tools/scripts/snippets/test-scripts.sh [flags]\n# Test suite for tools/scripts/snippets\n# Run this before using scripts to verify they work correctly\n#\n# Usage: ./tools/scripts/snippets/test-scripts.sh\n#\n# Exit codes:\n# 0 - All tests passed\n# 1 - One or more tests failed", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21375,6 +22624,12 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-dispatch", + "caller": ".github/workflows/style-homogenise.yml", + "workflow": "EN-GB Style Homogenisation", + "pipeline": "P6" + }, { "type": "npm-script", "caller": "tools/package.json", @@ -21400,16 +22655,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P6", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "manual (npm script: audit:language-en-gb)", + "pipeline_actual": "P6 (EN-GB Style Homogenisation); manual (npm script: audit:language-en-gb)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P6" }, { "path": "tools/scripts/sync-codex-skills.js", @@ -21420,9 +22674,9 @@ "owner": "docs", "needs": "R-R27, R-R30", "purpose_statement": "Codex skills sync — synchronises skill definition files between local and remote sources. Supports --check mode.", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/sync-codex-skills.js [flags]", - "header": "/**\n * @script sync-codex-skills\n * @category automation\n * @purpose governance:agent-governance\n * @scope tools/scripts, ai-tools/ai-skills/templates, tests/unit/codex-skill-sync.test.js\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex skills sync — synchronises skill definition files between local and remote sources. Supports --check mode.\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/sync-codex-skills.js [flags]\n */", + "header": "/**\n * @script sync-codex-skills\n * @category automation\n * @purpose governance:agent-governance\n * @scope tools/scripts, ai-tools/ai-skills/templates, tests/unit/codex-skill-sync.test.js\n * @owner docs\n * @needs R-R27, R-R30\n * @purpose-statement Codex skills sync — synchronises skill definition files between local and remote sources. Supports --check mode.\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/sync-codex-skills.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21485,6 +22739,20 @@ "purpose_valid": true, "scope_valid": false, "triggers": [ + { + "type": "workflow-push", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P2", + "via_script": "test:v2-pages" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-v2-pages.yml", + "workflow": "Docs CI - V2 Browser Sweep", + "pipeline": "P3", + "via_script": "test:v2-pages" + }, { "type": "script", "caller": "tests/integration/browser.test.js", @@ -21526,16 +22794,15 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "indirect via tests/integration/browser.test.js; indirect via tests/integration/v2-wcag-audit.js; indirect via tests/integration/v2-wcag-audit.selftest.js; manual (npm script: test:v2-pages); manual (npm script: test:all-pages)", + "pipeline_actual": "P2 (Docs CI - V2 Browser Sweep); P3 (Docs CI - V2 Browser Sweep); indirect via tests/integration/browser.test.js; indirect via tests/integration/v2-wcag-audit.js; indirect via tests/integration/v2-wcag-audit.selftest.js; manual (npm script: test:v2-pages); manual (npm script: test:all-pages)", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], - "trigger_group": "Orphaned" + "trigger_group": "P2" }, { "path": "tools/scripts/validate-codex-task-contract.js", @@ -21566,6 +22833,12 @@ "caller": ".githooks/pre-push", "pipeline": "P2" }, + { + "type": "workflow-pr", + "caller": ".github/workflows/codex-governance.yml", + "workflow": "Codex Governance", + "pipeline": "P3" + }, { "type": "script", "caller": ".githooks/pre-commit", @@ -21590,14 +22863,13 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit); P2 (pre-push); indirect via .githooks/pre-commit; indirect via .githooks/pre-push", + "pipeline_actual": "P1 (pre-commit); P2 (pre-push); P3 (Codex Governance); indirect via .githooks/pre-commit; indirect via .githooks/pre-push", "grade": "C", "flags": [ - "invalid-scope", - "phantom-pipeline" + "invalid-scope" ], "trigger_group": "P1" }, @@ -21612,7 +22884,7 @@ "purpose_statement": "Validates component files against component governance styling rules.", "pipeline_declared": "P1, P2, P3", "usage": "node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help]", - "header": "/**\n * @script check-component-css\n * @category validator\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates component files against component governance styling rules.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help]\n */", + "header": "/**\n * @script check-component-css\n * @category validator\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates component files against component governance styling rules.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21624,6 +22896,18 @@ "type": "pre-commit", "caller": ".githooks/pre-commit", "pipeline": "P1" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" } ], "outputs": [ @@ -21639,14 +22923,12 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit)", + "pipeline_actual": "P1 (pre-commit); P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite)", "grade": "B", - "flags": [ - "phantom-pipeline" - ], + "flags": [], "trigger_group": "P1" }, { @@ -21660,7 +22942,7 @@ "purpose_statement": "Validates component JSDoc coverage, prop documentation, docs-entry coverage, and governance metadata.", "pipeline_declared": "P1, P2, P3", "usage": "node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help]", - "header": "/**\n * @script check-component-docs\n * @category validator\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates component JSDoc coverage, prop documentation, docs-entry coverage, and governance metadata.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help]\n */", + "header": "/**\n * @script check-component-docs\n * @category validator\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs R-R10\n * @purpose-statement Validates component JSDoc coverage, prop documentation, docs-entry coverage, and governance metadata.\n * @pipeline P1, P2, P3\n * @usage node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -21672,6 +22954,18 @@ "type": "pre-commit", "caller": ".githooks/pre-commit", "pipeline": "P1" + }, + { + "type": "workflow-push", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P2" + }, + { + "type": "workflow-pr", + "caller": ".github/workflows/test-suite.yml", + "workflow": "Docs CI - Content Quality Suite", + "pipeline": "P3" } ], "outputs": [ @@ -21687,14 +22981,12 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:phantom claim P2, P3", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, - "pipeline_actual": "P1 (pre-commit)", + "pipeline_actual": "P1 (pre-commit); P2 (Docs CI - Content Quality Suite); P3 (Docs CI - Content Quality Suite)", "grade": "B", - "flags": [ - "phantom-pipeline" - ], + "flags": [], "trigger_group": "P1" }, { @@ -21818,19 +23110,19 @@ "script": "check-anchor-usage", "category": "validator", "purpose": "qa:content-quality", - "scope": "tools/scripts/validators/content, v2", + "scope": "v2-content", "owner": "docs", "needs": "R-R14, R-C6", "purpose_statement": "Validates same-page anchor links in maintained v2 MDX files against heading IDs on the same page", "pipeline_declared": "manual, ci", "usage": "node tools/scripts/validators/content/check-anchor-usage.js [--json] [--scope ]", - "header": "/**\n * @script check-anchor-usage\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, v2\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Validates same-page anchor links in maintained v2 MDX files against heading IDs on the same page\n * @pipeline manual, ci\n * @usage node tools/scripts/validators/content/check-anchor-usage.js [--json] [--scope ]\n */", + "header": "/**\n * @script check-anchor-usage\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs R-R14, R-C6\n * @purpose-statement Validates same-page anchor links in maintained v2 MDX files against heading IDs on the same page\n * @pipeline manual, ci\n * @usage node tools/scripts/validators/content/check-anchor-usage.js [--json] [--scope ]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -21855,10 +23147,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -21866,19 +23156,19 @@ "script": "check-description-quality", "category": "validator", "purpose": "qa:content-quality", - "scope": "tools/scripts/validators/content, v2", + "scope": "v2-content", "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "Validates English v2 frontmatter descriptions for SEO length, boilerplate openings, and duplicate reuse", "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", "usage": "node tools/scripts/validators/content/check-description-quality.js [--path ] [--strict]", - "header": "/**\n * @script check-description-quality\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, v2\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Validates English v2 frontmatter descriptions for SEO length, boilerplate openings, and duplicate reuse\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/validators/content/check-description-quality.js [--path ] [--strict]\n */", + "header": "/**\n * @script check-description-quality\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement Validates English v2 frontmatter descriptions for SEO length, boilerplate openings, and duplicate reuse\n * @pipeline manual — diagnostic/investigation tool, run on-demand only\n * @usage node tools/scripts/validators/content/check-description-quality.js [--path ] [--strict]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -21903,11 +23193,57 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", + "grade": "B", + "flags": [], + "trigger_group": "Manual" + }, + { + "path": "tools/scripts/validators/content/check-docs-path-sync.js", + "script": "check-docs-path-sync", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "staged", + "owner": "docs", + "needs": "E-C1, R-R14", + "purpose_statement": "Docs path sync validator — detects staged page moves that require docs.json or governed path reference rewrites.", + "pipeline_declared": "P1, P6", + "usage": "node tools/scripts/validators/content/check-docs-path-sync.js --staged", + "header": "/**\n * @script check-docs-path-sync\n * @category validator\n * @purpose qa:repo-health\n * @scope staged\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Docs path sync validator — detects staged page moves that require docs.json or governed path reference rewrites.\n * @pipeline P1, P6\n * @dualmode --check (validator) | --json (machine-readable report)\n * @usage node tools/scripts/validators/content/check-docs-path-sync.js --staged\n */", + "header_field_count": 8, + "has_any_header": true, + "has_framework_header": true, + "category_valid": true, + "purpose_valid": true, + "scope_valid": true, + "triggers": [ + { + "type": "script", + "caller": "tests/unit/docs-path-sync.test.js", + "pipeline": "indirect" + } + ], + "outputs": [ + { + "output_path": "stdout", + "type": "stdout", + "call": "console" + } + ], + "outputs_display": "stdout only", + "downstream_consumers": [], + "downstream_display": "No", + "in_json": true, + "category_match": true, + "purpose_match": true, + "pipeline_verified": "MISMATCH:phantom claim P1, P6", + "declared_pipeline_set": {}, + "actual_pipeline_set": {}, + "pipeline_actual": "indirect via tests/unit/docs-path-sync.test.js", + "grade": "B", "flags": [ - "invalid-scope" + "phantom-pipeline" ], - "trigger_group": "Manual" + "trigger_group": "Orphaned" }, { "path": "tools/scripts/validators/content/check-double-headers.js", @@ -21968,7 +23304,7 @@ "purpose_statement": "Deterministic UK English grammar checker for prose content with optional conservative autofix for safe rules.", "pipeline_declared": "manual/CI validator for English v2 docs and explicit content files", "usage": "node tools/scripts/validators/content/check-grammar-en-gb.js [--scope full|changed] [--file ] [--fix] [--strict]", - "header": "/**\n * @script check-grammar-en-gb\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, tools/script-index.md, tests/script-index.md, docs-guide/indexes/scripts-index.mdx, v2\n * @owner docs\n * @needs SE-1-11, S-1.15\n * @purpose-statement Deterministic UK English grammar checker for prose content with optional conservative autofix for safe rules.\n * @pipeline manual/CI validator for English v2 docs and explicit content files\n * @dualmode --check (default) | --fix (safe in-place rewrites)\n * @usage node tools/scripts/validators/content/check-grammar-en-gb.js [--scope full|changed] [--file ] [--fix] [--strict]\n */", + "header": "/**\n * @script check-grammar-en-gb\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, tools/script-index.md, tests/script-index.md, docs-guide/indexes/scripts-index.mdx, v2\n * @owner docs\n * @needs SE-1-11, S-1.15\n * @purpose-statement Deterministic UK English grammar checker for prose content with optional conservative autofix for safe rules.\n * @pipeline manual/CI validator for English v2 docs and explicit content files\n * @dualmode --check (default) | --fix (safe in-place rewrites)\n * @usage node tools/scripts/validators/content/check-grammar-en-gb.js [--scope full|changed] [--file ] [--fix] [--strict]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -22090,19 +23426,19 @@ "script": "check-page-endings", "category": "validator", "purpose": "qa:content-quality", - "scope": "tools/scripts/validators/content, v2", + "scope": "v2-content", "owner": "docs", "needs": "R-R14", "purpose_statement": "Validates that English v2 MDX pages end with an approved navigational or closing element", "pipeline_declared": "manual, ci", "usage": "node tools/scripts/validators/content/check-page-endings.js [--fix] [--json]", - "header": "/**\n * @script check-page-endings\n * @category validator\n * @purpose qa:content-quality\n * @scope tools/scripts/validators/content, v2\n * @owner docs\n * @needs R-R14\n * @purpose-statement Validates that English v2 MDX pages end with an approved navigational or closing element\n * @pipeline manual, ci\n * @usage node tools/scripts/validators/content/check-page-endings.js [--fix] [--json]\n */", + "header": "/**\n * @script check-page-endings\n * @category validator\n * @purpose qa:content-quality\n * @scope v2-content\n * @owner docs\n * @needs R-R14\n * @purpose-statement Validates that English v2 MDX pages end with an approved navigational or closing element\n * @pipeline manual, ci\n * @usage node tools/scripts/validators/content/check-page-endings.js [--fix] [--json]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, "category_valid": true, "purpose_valid": true, - "scope_valid": false, + "scope_valid": true, "triggers": [ { "type": "manual", @@ -22127,10 +23463,8 @@ "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "manual (none)", - "grade": "C", - "flags": [ - "invalid-scope" - ], + "grade": "B", + "flags": [], "trigger_group": "Manual" }, { @@ -22190,9 +23524,9 @@ "owner": "docs", "needs": "R-R14, R-R18, R-C6", "purpose_statement": "Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category.", - "pipeline_declared": "manual", + "pipeline_declared": "P1 (commit), indirect", "usage": "node tools/scripts/validators/governance/audit-script-inventory.js [--json] [--md] [--output ] [--verbose]", - "header": "/**\n * @script audit-script-inventory\n * @category validator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category.\n * @pipeline manual\n * @usage node tools/scripts/validators/governance/audit-script-inventory.js [--json] [--md] [--output ] [--verbose]\n */", + "header": "/**\n * @script audit-script-inventory\n * @category validator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18, R-C6\n * @purpose-statement Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category.\n * @pipeline P1 (commit), indirect\n * @usage node tools/scripts/validators/governance/audit-script-inventory.js [--json] [--md] [--output ] [--verbose]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -22234,14 +23568,12 @@ "in_json": true, "category_match": true, "purpose_match": true, - "pipeline_verified": "MISMATCH:undeclared automation P1", + "pipeline_verified": "MATCH", "declared_pipeline_set": {}, "actual_pipeline_set": {}, "pipeline_actual": "P1 (pre-commit); indirect via .githooks/pre-commit; indirect via tests/unit/audit-script-inventory-repair-rules.test.js; indirect via tools/scripts/validators/governance/review-governance-repair-checklist.js", "grade": "B", - "flags": [ - "undeclared-automation" - ], + "flags": [], "trigger_group": "P1" }, { @@ -22303,7 +23635,7 @@ "purpose_statement": "Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied.", "pipeline_declared": "manual", "usage": "node tools/scripts/validators/governance/review-governance-repair-checklist.js [--output ] [--json] [--md]", - "header": "/**\n * @script review-governance-repair-checklist\n * @category validator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18\n * @purpose-statement Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied.\n * @pipeline manual\n * @dualmode --json | --md | default both\n * @usage node tools/scripts/validators/governance/review-governance-repair-checklist.js [--output ] [--json] [--md]\n */", + "header": "/**\n * @script review-governance-repair-checklist\n * @category validator\n * @purpose governance:repo-health\n * @scope full-repo\n * @owner docs\n * @needs R-R14, R-R18\n * @purpose-statement Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied.\n * @pipeline manual\n * @dualmode --json | --md | default both\n * @usage node tools/scripts/validators/governance/review-governance-repair-checklist.js [--output ] [--json] [--md]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -22348,9 +23680,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Loads component-library routes in a headless browser and fails on render, console, or 404 issues.", - "pipeline_declared": "manual", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/verify-all-pages.js", - "header": "/**\n * @script verify-all-pages\n * @category enforcer\n * @purpose qa:repo-health\n * @summary Utility script for tools/scripts/verify-all-pages.js.\n * @owner docs\n * @scope single-domain\n * @needs E-C1, R-R14\n * @purpose-statement Loads component-library routes in a headless browser and fails on render, console, or 404 issues.\n * @pipeline manual\n * @usage node tools/scripts/verify-all-pages.js\n *\n * @inputs\n * No required CLI flags; optional flags are documented inline.\n *\n * @outputs\n * - Console output and/or file updates based on script purpose.\n *\n * @exit-codes\n * 0 = success\n * 1 = runtime or validation failure\n *\n * @examples\n * node tools/scripts/verify-all-pages.js\n *\n * @notes\n * Keep script behavior deterministic and update script indexes after changes.\n */", + "header": "/**\n * @script verify-all-pages\n * @category enforcer\n * @purpose qa:repo-health\n * @scope single-domain\n * @owner docs\n * @needs E-C1, R-R14\n * @purpose-statement Loads component-library routes in a headless browser and fails on render, console, or 404 issues.\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/verify-all-pages.js\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -22394,9 +23726,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Payment/orchestrator gate verifier — checks payment and orchestrator documentation gate conditions", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/verify-pay-orc-gate-finalize.sh [flags]", - "header": "# @script verify-pay-orc-gate-finalize\n# @category enforcer\n# @purpose qa:repo-health\n# @scope tools/scripts, .githooks/pre-commit, v2/gateways, v2/orchestrators\n# @owner docs\n# @needs E-C1, R-R14\n# @purpose-statement Payment/orchestrator gate verifier — checks payment and orchestrator documentation gate conditions\n# @pipeline manual — diagnostic/investigation tool, run on-demand only\n# @usage bash tools/scripts/verify-pay-orc-gate-finalize.sh [flags]", + "header": "# @script verify-pay-orc-gate-finalize\n# @category enforcer\n# @purpose qa:repo-health\n# @scope tools/scripts, .githooks/pre-commit, v2/gateways, v2/orchestrators\n# @owner docs\n# @needs E-C1, R-R14\n# @purpose-statement Payment/orchestrator gate verifier — checks payment and orchestrator documentation gate conditions\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/verify-pay-orc-gate-finalize.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -22436,9 +23768,9 @@ "owner": "docs", "needs": "E-C1, R-R14", "purpose_statement": "Large change verifier — blocks or warns when a commit touches an unusually large number of files", - "pipeline_declared": "manual — diagnostic/investigation tool, run on-demand only", + "pipeline_declared": "manual — not yet in pipeline", "usage": "bash tools/scripts/verify/.verify-large-change.sh [flags]", - "header": "# @script verify-large-change\n# @category enforcer\n# @purpose qa:repo-health\n# @scope tools/scripts/verify\n# @owner docs\n# @needs E-C1, R-R14\n# @purpose-statement Large change verifier — blocks or warns when a commit touches an unusually large number of files\n# @pipeline manual — diagnostic/investigation tool, run on-demand only\n# @usage bash tools/scripts/verify/.verify-large-change.sh [flags]", + "header": "# @script verify-large-change\n# @category enforcer\n# @purpose qa:repo-health\n# @scope tools/scripts/verify\n# @owner docs\n# @needs E-C1, R-R14\n# @purpose-statement Large change verifier — blocks or warns when a commit touches an unusually large number of files\n# @pipeline manual — not yet in pipeline\n# @usage bash tools/scripts/verify/.verify-large-change.sh [flags]", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -22478,9 +23810,9 @@ "owner": "docs", "needs": "E-R1, R-R11", "purpose_statement": "WCAG repair shared logic — common repair functions used by WCAG audit fix mode", - "pipeline_declared": "manual — interactive developer tool, not suited for automated pipelines", + "pipeline_declared": "manual — not yet in pipeline", "usage": "node tools/scripts/wcag-repair-common.js [flags]", - "header": "/**\n * @script wcag-repair-common\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts, tests/integration, tasks/reports, v2\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement WCAG repair shared logic — common repair functions used by WCAG audit fix mode\n * @pipeline manual — interactive developer tool, not suited for automated pipelines\n * @usage node tools/scripts/wcag-repair-common.js [flags]\n */", + "header": "/**\n * @script wcag-repair-common\n * @category remediator\n * @purpose qa:content-quality\n * @scope tools/scripts, tests/integration, tasks/reports, v2\n * @owner docs\n * @needs E-R1, R-R11\n * @purpose-statement WCAG repair shared logic — common repair functions used by WCAG audit fix mode\n * @pipeline manual — not yet in pipeline\n * @usage node tools/scripts/wcag-repair-common.js [flags]\n */", "header_field_count": 8, "has_any_header": true, "has_framework_header": true, @@ -22521,111 +23853,30 @@ "discrepancies": { "phantom_pipeline_claims": [ { - "path": ".github/scripts/fetch-forum-data.js" - }, - { - "path": ".github/scripts/fetch-ghost-blog-data.js" - }, - { - "path": ".github/scripts/fetch-youtube-data.js" - }, - { - "path": ".github/scripts/project-showcase-sync.js" - }, - { - "path": "tests/integration/openapi-reference-audit.js" - }, - { - "path": "tests/integration/v2-link-audit.js" - }, - { - "path": "tests/run-pr-checks.js" - }, - { - "path": "tests/unit/docs-navigation.test.js" - }, - { - "path": "tools/scripts/audit-component-usage.js" - }, - { - "path": "tools/scripts/check-codex-pr-overlap.js" - }, - { - "path": "tools/scripts/component-layout-governance.js" - }, - { - "path": "tools/scripts/docs-quality-and-freshness-audit.js" - }, - { - "path": "tools/scripts/enforcers/pr/check-component-immutability.js" - }, - { - "path": "tools/scripts/generate-ai-sitemap.js" + "path": "tests/unit/docs-path-sync.test.js" }, { "path": "tools/scripts/generate-component-docs.js" }, - { - "path": "tools/scripts/generate-component-registry.js" - }, - { - "path": "tools/scripts/generate-docs-index.js" - }, - { - "path": "tools/scripts/generate-llms-files.js" - }, - { - "path": "tools/scripts/i18n/generate-localized-docs-json.js" - }, - { - "path": "tools/scripts/i18n/translate-docs.js" - }, - { - "path": "tools/scripts/i18n/validate-generated.js" - }, - { - "path": "tools/scripts/orchestrators/repair-governance.js" - }, { "path": "tools/scripts/remediators/assets/migrate-assets-to-branch.js" }, { - "path": "tools/scripts/remediators/components/repair-component-metadata.js" - }, - { - "path": "tools/scripts/scan-component-imports.js" - }, - { - "path": "tools/scripts/snippets/fetch-external-docs.sh" - }, - { - "path": "tools/scripts/snippets/generate-seo.js" - }, - { - "path": "tools/scripts/style-and-language-homogenizer-en-gb.js" - }, - { - "path": "tools/scripts/test-v2-pages.js" - }, - { - "path": "tools/scripts/validate-codex-task-contract.js" - }, - { - "path": "tools/scripts/validators/components/check-component-css.js" + "path": "tools/scripts/remediators/content/sync-docs-paths.js" }, { - "path": "tools/scripts/validators/components/check-component-docs.js" + "path": "tools/scripts/validators/content/check-docs-path-sync.js" } ], "undeclared_automation": [ { - "path": "tools/scripts/enforce-generated-file-banners.js" + "path": "tools/scripts/generate-component-registry.js" }, { - "path": "tools/scripts/scan-component-imports.js" + "path": "tools/scripts/remediators/components/repair-component-metadata.js" }, { - "path": "tools/scripts/validators/governance/audit-script-inventory.js" + "path": "tools/scripts/scan-component-imports.js" } ], "not_in_json": [], @@ -22658,51 +23909,9 @@ } ] }, - "outputChains": [ - { - "producer": "tools/scripts/publish-v2-internal-reports.js", - "output": "tools/scripts/reports", - "consumer": "tools/scripts/generate-component-governance-remediation-reports.js" - } - ], + "outputChains": [], "warnings": [ - "Could not parse workflow .github/workflows/auto-assign-docs-reviewers.yml: Unsupported YAML syntax without js-yaml installed: pull_request:", - "Could not parse workflow .github/workflows/broken-links.yml: Unsupported YAML syntax without js-yaml installed: pull_request:", - "Could not parse workflow .github/workflows/build-review-assets.yml: Unsupported YAML syntax without js-yaml installed: workflow_dispatch:", - "Could not parse workflow .github/workflows/check-docs-index.yml: Unsupported YAML syntax without js-yaml installed: pull_request:", - "Could not parse workflow .github/workflows/close-linked-issues-docs-v2.yml: Unsupported YAML syntax without js-yaml installed: pull_request:", - "Could not parse workflow .github/workflows/codex-governance.yml: Unsupported YAML syntax without js-yaml installed: pull_request:", - "Could not parse workflow .github/workflows/content-health.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/deprecated/update-blog-data.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/discord-issue-intake.yml: Unsupported YAML syntax without js-yaml installed: repository_dispatch:", - "Could not parse workflow .github/workflows/docs-v2-issue-indexer.yml: Unsupported YAML syntax without js-yaml installed: issues:", - "Could not parse workflow .github/workflows/freshness-monitor.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/generate-ai-sitemap.yml: Unsupported YAML syntax without js-yaml installed: push:", - "Could not parse workflow .github/workflows/generate-docs-index.yml: Unsupported YAML syntax without js-yaml installed: push:", - "Could not parse workflow .github/workflows/generate-llms-files.yml: Unsupported YAML syntax without js-yaml installed: push:", - "Could not parse workflow .github/workflows/generate-review-table.yml: Unsupported YAML syntax without js-yaml installed: workflow_dispatch:", - "Could not parse workflow .github/workflows/governance-sync.yml: Unsupported YAML syntax without js-yaml installed: push:", - "Could not parse workflow .github/workflows/issue-auto-label.yml: Unsupported YAML syntax without js-yaml installed: issues:", - "Could not parse workflow .github/workflows/openapi-reference-validation.yml: Unsupported YAML syntax without js-yaml installed: pull_request:", - "Could not parse workflow .github/workflows/project-showcase-sync.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/repair-governance.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/sdk_generation.yaml: Unsupported YAML syntax without js-yaml installed: checks: write", - "Could not parse workflow .github/workflows/seo-refresh.yml: Unsupported YAML syntax without js-yaml installed: workflow_dispatch:", - "Could not parse workflow .github/workflows/style-homogenise.yml: Unsupported YAML syntax without js-yaml installed: workflow_dispatch:", - "Could not parse workflow .github/workflows/sync-large-assets.yml: Unsupported YAML syntax without js-yaml installed: push:", - "Could not parse workflow .github/workflows/tasks-retention.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/test-suite.yml: Unsupported YAML syntax without js-yaml installed: push:", - "Could not parse workflow .github/workflows/test-v2-pages.yml: Unsupported YAML syntax without js-yaml installed: push:", - "Could not parse workflow .github/workflows/translate-docs.yml: Unsupported YAML syntax without js-yaml installed: workflow_dispatch:", - "Could not parse workflow .github/workflows/update-blog-data.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/update-forum-data.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/update-ghost-blog-data.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/update-livepeer-release.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/update-review-template.yml: Unsupported YAML syntax without js-yaml installed: workflow_dispatch:", - "Could not parse workflow .github/workflows/update-youtube-data.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/v2-external-link-audit.yml: Unsupported YAML syntax without js-yaml installed: schedule:", - "Could not parse workflow .github/workflows/verify-ai-sitemap.yml: Unsupported YAML syntax without js-yaml installed: push:", - "Could not parse workflow .github/workflows/verify-llms-files.yml: Unsupported YAML syntax without js-yaml installed: push:" + "Could not parse workflow .github/workflows/sync-large-assets.yml: can not read a block mapping entry; a multiline key may not be an implicit key (111:13)\n\n 108 | (\n 109 | cd \"$WORKTREE_DIR\"\n 110 | \n 111 | # Remove previously tracked mir ...\n-------------------^\n 112 | while IFS= read -r tracked; do\n 113 | [ -z \"$tracked\" ] && continue" ], "tracked_files": [ ".allowlist", @@ -22894,33 +24103,34 @@ "contribute/CONTRIBUTING/GIT-HOOKS.md", "contribute/CONTRIBUTING/README.md", "docs-guide/README.mdx", + "docs-guide/catalog/ai-tools.mdx", "docs-guide/component-registry-schema.json", "docs-guide/component-registry.json", "docs-guide/component-usage-map.json", - "docs-guide/contributing/component-framework.mdx", "docs-guide/contributing/contributing.mdx", - "docs-guide/feature-guides/architecture-map.mdx", - "docs-guide/feature-guides/automation-pipelines.mdx", "docs-guide/feature-guides/content-system.mdx", - "docs-guide/feature-guides/data-integrations.mdx", - "docs-guide/feature-guides/feature-map.mdx", - "docs-guide/feature-guides/visual-explainer-workflows.mdx", + "docs-guide/features/architecture-map.mdx", + "docs-guide/features/automations.mdx", + "docs-guide/features/data-integrations.mdx", + "docs-guide/features/feature-map.mdx", + "docs-guide/features/visual-explainer-workflows.mdx", + "docs-guide/frameworks/component-framework.mdx", "docs-guide/governance-guides/component-governance.mdx", - "docs-guide/indexes/ai-tools.mdx", "docs-guide/indexes/components-index.mdx", "docs-guide/indexes/pages-index.mdx", "docs-guide/indexes/scripts-index.mdx", "docs-guide/indexes/templates-index.mdx", "docs-guide/indexes/workflows-index.mdx", - "docs-guide/lpd.mdx", - "docs-guide/quality-testing/audit-system-overview.mdx", - "docs-guide/quality-testing/cleanup-quarantine-policy.mdx", - "docs-guide/quality-testing/component-layout-decision-matrix.mdx", - "docs-guide/quality-testing/infrastructure-principles.mdx", - "docs-guide/quality-testing/quality-gates.mdx", - "docs-guide/quality-testing/skill-pipeline-map.mdx", + "docs-guide/overview.mdx", + "docs-guide/policies/audit-system-overview.mdx", + "docs-guide/policies/cleanup-quarantine-policy.mdx", + "docs-guide/policies/component-layout-decisions.mdx", + "docs-guide/policies/infrastructure-principles.mdx", + "docs-guide/policies/quality-gates.mdx", + "docs-guide/policies/skill-pipeline-map.mdx", + "docs-guide/policies/source-of-truth-policy.mdx", "docs-guide/scripts-index.md", - "docs-guide/source-of-truth-policy.mdx", + "docs-guide/tooling/lpd-cli.mdx", "docs-index.json", "docs.json", "docs.json.jsx", @@ -23407,6 +24617,7 @@ "tests/unit/create-codex-pr.test.js", "tests/unit/docs-guide-sot.test.js", "tests/unit/docs-navigation.test.js", + "tests/unit/docs-path-sync.test.js", "tests/unit/links-imports.test.js", "tests/unit/lpd-scoped-mint-dev.test.js", "tests/unit/mdx-component-runtime-smoke.test.js", @@ -23462,6 +24673,7 @@ "tools/i18n/config.json", "tools/lib/component-governance-utils.js", "tools/lib/docs-index-utils.js", + "tools/lib/docs-publishability.js", "tools/lib/docs-usefulness/config-validator.js", "tools/lib/docs-usefulness/journey-check.js", "tools/lib/docs-usefulness/llm-evaluator.js", @@ -23556,6 +24768,7 @@ "tools/scripts/dev/batch-update-og-image.sh", "tools/scripts/dev/ensure-mint-watcher-patch.sh", "tools/scripts/dev/generate-mint-dev-scope.js", + "tools/scripts/dev/mint-custom-loader.sh", "tools/scripts/dev/replace-og-image.py", "tools/scripts/dev/seo-generator-safe.js", "tools/scripts/dev/seo-test/test1-broken-og-image.mdx", @@ -23604,6 +24817,7 @@ "tools/scripts/i18n/test/provider-openrouter.test.js", "tools/scripts/i18n/translate-docs.js", "tools/scripts/i18n/validate-generated.js", + "tools/scripts/lib/docs-path-sync.js", "tools/scripts/mint-dev.sh", "tools/scripts/new-script.js", "tools/scripts/orchestrators/repair-governance.js", @@ -23613,6 +24827,7 @@ "tools/scripts/remediators/components/repair-component-metadata.js", "tools/scripts/remediators/content/repair-mdx-safe-markdown.js", "tools/scripts/remediators/content/repair-spelling.js", + "tools/scripts/remediators/content/sync-docs-paths.js", "tools/scripts/repo-audit-orchestrator.js", "tools/scripts/scan-component-imports.js", "tools/scripts/script-footprint-and-usage-audit.js", @@ -23640,6 +24855,7 @@ "tools/scripts/validators/components/check-naming-conventions.js", "tools/scripts/validators/content/check-anchor-usage.js", "tools/scripts/validators/content/check-description-quality.js", + "tools/scripts/validators/content/check-docs-path-sync.js", "tools/scripts/validators/content/check-double-headers.js", "tools/scripts/validators/content/check-grammar-en-gb.js", "tools/scripts/validators/content/check-mdx-safe-markdown.js", @@ -24126,23 +25342,24 @@ "v2/cn/docs-guide/README.md", "v2/cn/docs-guide/README.mdx", "v2/cn/docs-guide/components-index.mdx", - "v2/cn/docs-guide/feature-guides/architecture-map.mdx", - "v2/cn/docs-guide/feature-guides/automation-pipelines.mdx", "v2/cn/docs-guide/feature-guides/content-system.mdx", - "v2/cn/docs-guide/feature-guides/data-integrations.mdx", - "v2/cn/docs-guide/feature-guides/feature-map.mdx", "v2/cn/docs-guide/feature-map.mdx", + "v2/cn/docs-guide/features/architecture-map.mdx", + "v2/cn/docs-guide/features/automations.mdx", + "v2/cn/docs-guide/features/data-integrations.mdx", + "v2/cn/docs-guide/features/feature-map.mdx", "v2/cn/docs-guide/indexes/components-index.mdx", "v2/cn/docs-guide/indexes/pages-index.mdx", "v2/cn/docs-guide/indexes/templates-index.mdx", "v2/cn/docs-guide/indexes/workflows-index.mdx", "v2/cn/docs-guide/lpd.md", - "v2/cn/docs-guide/lpd.mdx", + "v2/cn/docs-guide/overview.mdx", "v2/cn/docs-guide/pages-index.mdx", - "v2/cn/docs-guide/quality-testing/quality-gates.mdx", + "v2/cn/docs-guide/policies/quality-gates.mdx", + "v2/cn/docs-guide/policies/source-of-truth-policy.mdx", "v2/cn/docs-guide/scripts-index.md", "v2/cn/docs-guide/source-of-truth-policy.md", - "v2/cn/docs-guide/source-of-truth-policy.mdx", + "v2/cn/docs-guide/tooling/lpd-cli.mdx", "v2/cn/docs-guide/workflows-index.mdx", "v2/cn/gateways/about-gateways/gateway-architecture.mdx", "v2/cn/gateways/about-gateways/gateway-economics.mdx", @@ -24582,21 +25799,22 @@ "v2/es/docs-guide/README.mdx", "v2/es/docs-guide/architecture-map.mdx", "v2/es/docs-guide/components-index.mdx", - "v2/es/docs-guide/feature-guides/automation-pipelines.mdx", "v2/es/docs-guide/feature-guides/content-system.mdx", - "v2/es/docs-guide/feature-guides/data-integrations.mdx", - "v2/es/docs-guide/feature-guides/feature-map.mdx", "v2/es/docs-guide/feature-map.mdx", + "v2/es/docs-guide/features/automations.mdx", + "v2/es/docs-guide/features/data-integrations.mdx", + "v2/es/docs-guide/features/feature-map.mdx", "v2/es/docs-guide/indexes/components-index.mdx", "v2/es/docs-guide/indexes/pages-index.mdx", "v2/es/docs-guide/indexes/templates-index.mdx", "v2/es/docs-guide/indexes/workflows-index.mdx", - "v2/es/docs-guide/lpd.mdx", + "v2/es/docs-guide/overview.mdx", "v2/es/docs-guide/pages-index.mdx", - "v2/es/docs-guide/quality-gates.mdx", + "v2/es/docs-guide/policies/quality-gates.mdx", + "v2/es/docs-guide/policies/source-of-truth-policy.mdx", "v2/es/docs-guide/scripts-index.md", - "v2/es/docs-guide/source-of-truth-policy.mdx", "v2/es/docs-guide/templates-index.mdx", + "v2/es/docs-guide/tooling/lpd-cli.mdx", "v2/es/docs-guide/workflows-index.mdx", "v2/es/gateways/about-gateways/gateway-architecture.mdx", "v2/es/gateways/about-gateways/gateway-economics.mdx", @@ -24936,25 +26154,26 @@ "v2/fr/docs-guide/architecture-map.mdx", "v2/fr/docs-guide/automation-pipelines.mdx", "v2/fr/docs-guide/components-index.mdx", - "v2/fr/docs-guide/feature-guides/architecture-map.mdx", - "v2/fr/docs-guide/feature-guides/automation-pipelines.mdx", "v2/fr/docs-guide/feature-guides/content-system.mdx", - "v2/fr/docs-guide/feature-guides/data-integrations.mdx", - "v2/fr/docs-guide/feature-guides/feature-map.mdx", "v2/fr/docs-guide/feature-map.mdx", + "v2/fr/docs-guide/features/architecture-map.mdx", + "v2/fr/docs-guide/features/automations.mdx", + "v2/fr/docs-guide/features/data-integrations.mdx", + "v2/fr/docs-guide/features/feature-map.mdx", "v2/fr/docs-guide/indexes/components-index.mdx", "v2/fr/docs-guide/indexes/pages-index.mdx", "v2/fr/docs-guide/indexes/templates-index.mdx", "v2/fr/docs-guide/indexes/workflows-index.mdx", "v2/fr/docs-guide/lpd.md", - "v2/fr/docs-guide/lpd.mdx", + "v2/fr/docs-guide/overview.mdx", "v2/fr/docs-guide/pages-index.mdx", + "v2/fr/docs-guide/policies/quality-gates.mdx", + "v2/fr/docs-guide/policies/source-of-truth-policy.mdx", "v2/fr/docs-guide/quality-gates.mdx", - "v2/fr/docs-guide/quality-testing/quality-gates.mdx", "v2/fr/docs-guide/scripts-index.md", "v2/fr/docs-guide/source-of-truth-policy.md", - "v2/fr/docs-guide/source-of-truth-policy.mdx", "v2/fr/docs-guide/templates-index.mdx", + "v2/fr/docs-guide/tooling/lpd-cli.mdx", "v2/fr/docs-guide/workflows-index.mdx", "v2/fr/gateways/about-gateways/gateway-architecture.mdx", "v2/fr/gateways/about-gateways/gateway-economics.mdx", @@ -25805,113 +27024,113 @@ "classification_rows": [ { "path": ".githooks/install.sh", + "script": "install", "category": "utility", "purpose": "tooling:dev-tools", "scope": ".githooks", "needs": "E-C6, F-C1", "purpose_statement": "Installs git hooks by setting core.hooksPath to .githooks/", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": ".githooks/pre-commit", + "script": "pre-commit", "category": "orchestrator", "purpose": "infrastructure:pipeline-orchestration", "scope": ".githooks", "needs": "R-R29", "purpose_statement": "Pre-commit hook orchestrator — runs structural checks, unit tests, codex validation, and docs-index freshness check before allowing commit", - "pipeline": "P1 (commit, hook entry point)", - "dualmode": "" + "pipeline": "P1 (commit, hook entry point)" }, { "path": ".githooks/pre-commit-no-deletions", + "script": "pre-commit-no-deletions", "category": "orchestrator", "purpose": "infrastructure:pipeline-orchestration", "scope": ".githooks", "needs": "R-R29", "purpose_statement": "Variant pre-commit hook that blocks file deletions (safety net for content preservation)", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": ".githooks/pre-push", + "script": "pre-push", "category": "orchestrator", "purpose": "infrastructure:pipeline-orchestration", "scope": ".githooks, tools/scripts/validate-codex-task-contract.js, .codex/task-contract.yaml", "needs": "R-R29", "purpose_statement": "Pre-push hook — blocks push if AI stash files present, codex locks stale, or task contract invalid", - "pipeline": "P2 (push, hook entry point)", - "dualmode": "" + "pipeline": "P2 (push, hook entry point)" }, { "path": ".githooks/server-manager.js", + "script": "server-manager", "category": "utility", "purpose": "tooling:dev-tools", "scope": ".githooks", "needs": "E-C6, F-C1", "purpose_statement": "Manages Mintlify dev server lifecycle for browser tests (start/stop/health-check)", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": ".githooks/verify-browser.js", + "script": "verify-browser", "category": "utility", "purpose": "tooling:dev-tools", "scope": ".githooks", "needs": "E-C6, F-C1", "purpose_statement": "Verifies browser availability for Puppeteer-based integration tests", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": ".githooks/verify.sh", + "script": "verify", "category": "utility", "purpose": "tooling:dev-tools", "scope": ".githooks", "needs": "E-C6, F-C1", "purpose_statement": "Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": ".github/scripts/fetch-forum-data.js", + "script": "fetch-forum-data", "category": "automation", "purpose": "infrastructure:data-feeds", "scope": ".github/scripts", "needs": "F-R1", "purpose_statement": "Fetches latest topics and posts from Livepeer Forum API, writes to snippets/automations/forum/", - "pipeline": "P5, P6", - "dualmode": "" + "pipeline": "P5, P6" }, { "path": ".github/scripts/fetch-ghost-blog-data.js", + "script": "fetch-ghost-blog-data", "category": "automation", "purpose": "infrastructure:data-feeds", "scope": ".github/scripts", "needs": "F-R1", "purpose_statement": "Fetches blog posts from Ghost CMS API, writes to snippets/automations/blog/", - "pipeline": "P5, P6", - "dualmode": "" + "pipeline": "P5, P6" }, { "path": ".github/scripts/fetch-youtube-data.js", + "script": "fetch-youtube-data", "category": "automation", "purpose": "infrastructure:data-feeds", "scope": ".github/scripts", "needs": "F-R1", "purpose_statement": "Fetches video data from YouTube Data API, writes to snippets/automations/youtube/", - "pipeline": "P5, P6", - "dualmode": "" + "pipeline": "P5, P6" }, { "path": ".github/scripts/project-showcase-sync.js", + "script": "project-showcase-sync", "category": "automation", "purpose": "infrastructure:data-feeds", "scope": ".github/scripts", "needs": "F-R1", "purpose_statement": "Fetches project showcase data from external source, writes to snippets/automations/showcase/", - "pipeline": "P5, P6", - "dualmode": "" + "pipeline": "P5, P6" }, { "path": "lpd", @@ -25920,31 +27139,31 @@ "scope": "full-repo", "needs": "R-R29", "purpose_statement": "Developer CLI orchestrator — unified command surface for setup, dev server, testing, hooks, and script execution across all repo domains", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "snippets/automations/youtube/filterVideos.js", + "script": "filterVideos", "category": "automation", "purpose": "infrastructure:data-feeds", "scope": "external", "needs": "F-R1", "purpose_statement": "YouTube video filter — post-processes fetched YouTube data to filter/sort videos for display", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tasks/scripts/audit-python.py", + "script": "audit-python", "category": "validator", "purpose": "qa:repo-health", "scope": "tasks/scripts", "needs": "E-C1, R-R14", "purpose_statement": "Python audit utility — runs Python-based audit checks (alternative to Node auditors)", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tests/integration/browser.test.js", + "script": "browser.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests", @@ -25955,26 +27174,27 @@ }, { "path": "tests/integration/domain-pages-audit.js", + "script": "domain-pages-audit", "category": "validator", "purpose": "qa:repo-health", "scope": "tests/integration, tests/reports, docs.livepeer.org", "needs": "E-C1, R-R14", "purpose_statement": "Audits deployed docs page HTTP status codes (v1, v2, or both) and emits a stable JSON report", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tests/integration/mdx-component-runtime-smoke.js", + "script": "mdx-component-runtime-smoke", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/integration, .githooks/server-manager.js, tests/run-pr-checks.js", "needs": "E-R1, R-R29", "purpose_statement": "Smoke-tests sentinel MDX routes for runtime component failures, focused on page-killing render errors from MDX-imported JSX modules.", - "pipeline": "manual", - "dualmode": "" + "pipeline": "manual" }, { "path": "tests/integration/openapi-reference-audit.js", + "script": "openapi-reference-audit", "category": "validator", "purpose": "tooling:api-spec", "scope": "tests/integration, v2, api, .github/workflows", @@ -25985,6 +27205,7 @@ }, { "path": "tests/integration/v2-link-audit.js", + "script": "v2-link-audit", "category": "validator", "purpose": "qa:link-integrity", "scope": "tests", @@ -25995,6 +27216,7 @@ }, { "path": "tests/integration/v2-link-audit.selftest.js", + "script": "v2-link-audit.selftest", "category": "validator", "purpose": "qa:link-integrity", "scope": "tests/integration", @@ -26005,46 +27227,57 @@ }, { "path": "tests/integration/v2-wcag-audit.js", + "script": "v2-wcag-audit", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/integration, tests/utils, tasks/reports, v2", "needs": "E-R1, R-R11", "purpose_statement": "WCAG accessibility audit for v2 pages — checks heading hierarchy, alt text, ARIA. Supports --fix mode for auto-repair.", - "pipeline": "P1", - "dualmode": "" + "pipeline": "P1" }, { "path": "tests/integration/v2-wcag-audit.selftest.js", + "script": "v2-wcag-audit.selftest", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/integration, v2, git index", "needs": "E-R1, R-R11", "purpose_statement": "Self-test suite for v2-wcag-audit.js — validates WCAG audit logic against known fixtures", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tests/run-all.js", + "script": "run-all", "category": "orchestrator", "purpose": "infrastructure:pipeline-orchestration", "scope": "tests", "needs": "R-R29", "purpose_statement": "Test orchestrator — dispatches all unit test suites. Called by pre-commit hook and npm test.", - "pipeline": "P1, P2, P3", - "dualmode": "" + "pipeline": "P1, P2, P3" }, { "path": "tests/run-pr-checks.js", + "script": "run-pr-checks", "category": "orchestrator", "purpose": "infrastructure:pipeline-orchestration", "scope": "tests, .github/workflows, tools/scripts", "needs": "R-R29", "purpose_statement": "PR orchestrator — runs changed-file scoped validation checks for pull request CI. Dispatches per-file validators based on PR diff.", - "pipeline": "P2, P3", - "dualmode": "" + "pipeline": "P2, P3" + }, + { + "path": "tests/unit/audit-script-inventory-repair-rules.test.js", + "script": "audit-script-inventory-repair-rules.test", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "tests/unit, tools/scripts/validators/governance", + "needs": "E-C1, R-R14", + "purpose_statement": "Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety.", + "pipeline": "manual (not yet in pipeline)" }, { "path": "tests/unit/codex-commit.test.js", + "script": "codex-commit.test", "category": "validator", "purpose": "governance:agent-governance", "scope": "tests/unit, tools/scripts/codex-commit.js", @@ -26055,6 +27288,7 @@ }, { "path": "tests/unit/codex-safe-merge-with-stash.test.js", + "script": "codex-safe-merge-with-stash.test", "category": "utility", "purpose": "governance:agent-governance", "scope": "tests/unit, tools/scripts/codex-safe-merge-with-stash.js", @@ -26065,6 +27299,7 @@ }, { "path": "tests/unit/codex-skill-sync.test.js", + "script": "codex-skill-sync.test", "category": "validator", "purpose": "governance:agent-governance", "scope": "tests/unit, tools/scripts/sync-codex-skills.js, ai-tools/ai-skills/templates", @@ -26073,38 +27308,61 @@ "pipeline": "manual — not yet in pipeline", "dualmode": "dual-mode (document flags)" }, + { + "path": "tests/unit/codex-task-cleanup.test.js", + "script": "codex-task-cleanup.test", + "category": "utility", + "purpose": "governance:agent-governance", + "scope": "tests/unit, tools/scripts/codex/task-cleanup.js", + "needs": "R-R27, R-R30", + "purpose_statement": "Tests codex/task-cleanup.js — verifies safe worktree pruning, dirty-worktree preservation, branch pruning, and repo-root protection", + "pipeline": "manual — developer tool", + "dualmode": "dual-mode (document flags)" + }, + { + "path": "tests/unit/codex-task-preflight.test.js", + "script": "codex-task-preflight.test", + "category": "utility", + "purpose": "governance:agent-governance", + "scope": "tests/unit, tools/scripts/codex/task-preflight.js", + "needs": "R-R27, R-R30", + "purpose_statement": "Tests codex/task-preflight.js — verifies managed worktree default behavior and the explicit in-place override", + "pipeline": "manual — developer tool", + "dualmode": "dual-mode (document flags)" + }, { "path": "tests/unit/component-governance-generators.test.js", + "script": "component-governance-generators.test", "category": "validator", "purpose": "qa:repo-health", "scope": "tests", "needs": "R-R10", "purpose_statement": "Verifies component governance generators produce coherent registry, usage-map, and docs outputs.", - "pipeline": "P1 (commit, via run-all)", - "dualmode": "" + "pipeline": "P1 (commit, via run-all)" }, { "path": "tests/unit/component-governance-utils.test.js", + "script": "component-governance-utils.test", "category": "validator", "purpose": "qa:repo-health", "scope": "tests", "needs": "R-R10", "purpose_statement": "Verifies shared component governance utility parsing, scanning, and archive exclusion behavior.", - "pipeline": "P1 (commit, via run-all)", - "dualmode": "" + "pipeline": "P1 (commit, via run-all)" }, { "path": "tests/unit/components/TEMPLATE.test.js", + "script": "component-template.test", "category": "validator", "purpose": "qa:repo-health", "scope": "tests", "needs": "R-R10", "purpose_statement": "Template for category-scoped component unit tests.", - "pipeline": "manual", - "dualmode": "" + "pipeline": "manual" }, { "path": "tests/unit/create-codex-pr.test.js", + "script": "create-codex-pr.test", "category": "generator", "purpose": "governance:agent-governance", "scope": "tests/unit, tools/scripts/create-codex-pr.js", @@ -26115,6 +27373,7 @@ }, { "path": "tests/unit/docs-guide-sot.test.js", + "script": "docs-guide-sot.test", "category": "validator", "purpose": "qa:repo-health", "scope": "tests, docs-guide, README.md, tools/scripts/generate-docs-guide-indexes.js, tools/scripts/generate-docs-guide-pages-index.js, tools/scripts/generate-docs-guide-components-index.js", @@ -26125,6 +27384,7 @@ }, { "path": "tests/unit/docs-navigation.test.js", + "script": "docs-navigation.test", "category": "validator", "purpose": "qa:repo-health", "scope": "tests, docs.json", @@ -26134,17 +27394,29 @@ "dualmode": "dual-mode (document flags)" }, { - "path": "tests/unit/links-imports.test.js", + "path": "tests/unit/docs-path-sync.test.js", + "script": "docs-path-sync.test", "category": "validator", - "purpose": "qa:link-integrity", - "scope": "tests", - "needs": "E-R12, E-R14", - "purpose_statement": "Validates MDX internal links and snippet import paths are resolvable", - "pipeline": "P1, P3", - "dualmode": "" - }, + "purpose": "qa:repo-health", + "scope": "full-repo", + "needs": "E-C1, R-R14", + "purpose_statement": "Unit tests for docs path sync — validates staged move detection, deterministic docs.json/reference rewrites, validator behavior, and remediator write mode.", + "pipeline": "P1, P2, P3", + "dualmode": "--check (validator) | fixture-driven script execution" + }, + { + "path": "tests/unit/links-imports.test.js", + "script": "links-imports.test", + "category": "validator", + "purpose": "qa:link-integrity", + "scope": "tests", + "needs": "E-R12, E-R14", + "purpose_statement": "Validates MDX internal links and snippet import paths are resolvable", + "pipeline": "P1, P3" + }, { "path": "tests/unit/lpd-scoped-mint-dev.test.js", + "script": "lpd-scoped-mint-dev.test", "category": "utility", "purpose": "tooling:dev-tools", "scope": "tests/unit, lpd, tools/scripts/mint-dev.sh, tools/scripts/dev/generate-mint-dev-scope.js", @@ -26155,26 +27427,27 @@ }, { "path": "tests/unit/mdx-component-runtime-smoke.test.js", + "script": "mdx-component-runtime-smoke.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/unit, tests/integration", "needs": "E-R1, R-R29", "purpose_statement": "Unit tests for the MDX runtime smoke helpers — covers arg parsing, sentinel route selection, trigger logic, and failure classification.", - "pipeline": "manual — targeted smoke helper coverage", - "dualmode": "" + "pipeline": "manual — targeted smoke helper coverage" }, { "path": "tests/unit/mdx-component-scope.test.js", + "script": "mdx-component-scope.test", "category": "validator", "purpose": "qa:repo-health", "scope": "tests/unit, tools/scripts/validators/components", "needs": "R-R10, R-R29", "purpose_statement": "Unit tests for the MDX-facing component scope validator — covers unsafe private helpers, safe inline logic, and imported helper patterns.", - "pipeline": "manual — targeted validator unit coverage", - "dualmode": "" + "pipeline": "manual — targeted validator unit coverage" }, { "path": "tests/unit/mdx-guards.test.js", + "script": "mdx-guards.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests, v2/pages, snippets/pages, snippets/snippetsWiki", @@ -26185,26 +27458,27 @@ }, { "path": "tests/unit/mdx-safe-markdown.test.js", + "script": "mdx-safe-markdown.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/unit, tests/fixtures/mdx-safe-markdown, tools/lib, tools/scripts/remediators/content, tools/scripts/validators/content", "needs": "E-R1, R-R11", "purpose_statement": "Fixture-driven unit tests for repo-wide MDX-safe markdown repair and validation helpers.", - "pipeline": "P1 (commit, via run-all)", - "dualmode": "" + "pipeline": "P1 (commit, via run-all)" }, { "path": "tests/unit/mdx.test.js", + "script": "mdx.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests", "needs": "E-R1, R-R11", "purpose_statement": "Validates MDX syntax and structure — checks for parse errors, invalid JSX, broken components", - "pipeline": "P1, P3", - "dualmode": "" + "pipeline": "P1, P3" }, { "path": "tests/unit/migrate-assets-to-branch.test.js", + "script": "migrate-assets-to-branch.test", "category": "validator", "purpose": "qa:repo-health", "scope": "tests/unit, tools/scripts/remediators/assets, tools/scripts/audit-media-assets.js", @@ -26215,6 +27489,7 @@ }, { "path": "tests/unit/openapi-reference-audit.test.js", + "script": "openapi-reference-audit.test", "category": "validator", "purpose": "tooling:api-spec", "scope": "tests/unit, tests/integration, v2, api", @@ -26225,26 +27500,37 @@ }, { "path": "tests/unit/openapi-rolling-issue.test.js", + "script": "openapi-rolling-issue.test", "category": "validator", "purpose": "tooling:api-spec", "scope": "tests/unit, tests/utils, .github/workflows/openapi-reference-validation.yml", "needs": "F-R17", "purpose_statement": "Tests OpenAPI rolling issue tracker — validates issue creation and dedup logic", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tests/unit/quality.test.js", + "script": "quality.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests", "needs": "E-R1, R-R11", "purpose_statement": "Content quality checks — validates frontmatter completeness, thin content detection, placeholder flagging", - "pipeline": "P1, P3", - "dualmode": "" + "pipeline": "P1, P3" + }, + { + "path": "tests/unit/repair-governance.test.js", + "script": "repair-governance.test", + "category": "validator", + "purpose": "governance:repo-health", + "scope": "tests/unit, tools/scripts/orchestrators/repair-governance.js, .github/workflows/repair-governance.yml", + "needs": "R-R14, R-R18, R-C6", + "purpose_statement": "Tests repair-governance.js for safe dry-run, fix, rollback, strict exit handling, and workflow contract coverage.", + "pipeline": "manual" }, { "path": "tests/unit/repair-spelling.test.js", + "script": "repair-spelling.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/unit, tools/scripts/remediators/content", @@ -26253,48 +27539,9 @@ "pipeline": "manual — not yet in pipeline", "dualmode": "--dry-run (validator) | --write (remediator)" }, - { - "path": "tests/unit/audit-script-inventory-repair-rules.test.js", - "category": "validator", - "purpose": "qa:repo-health", - "scope": "tests/unit, tools/scripts/validators/governance", - "needs": "E-C1, R-R14", - "purpose_statement": "Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety.", - "pipeline": "manual (not yet in pipeline)", - "dualmode": "" - }, - { - "path": "tests/unit/codex-task-cleanup.test.js", - "category": "utility", - "purpose": "governance:agent-governance", - "scope": "tests/unit, tools/scripts/codex/task-cleanup.js", - "needs": "R-R27, R-R30", - "purpose_statement": "Tests codex/task-cleanup.js — verifies safe worktree pruning, dirty-worktree preservation, branch pruning, and repo-root protection", - "pipeline": "manual — developer tool", - "dualmode": "dual-mode (document flags)" - }, - { - "path": "tests/unit/codex-task-preflight.test.js", - "category": "utility", - "purpose": "governance:agent-governance", - "scope": "tests/unit, tools/scripts/codex/task-preflight.js", - "needs": "R-R27, R-R30", - "purpose_statement": "Tests codex/task-preflight.js — verifies managed worktree default behavior and the explicit in-place override", - "pipeline": "manual — developer tool", - "dualmode": "dual-mode (document flags)" - }, - { - "path": "tests/unit/repair-governance.test.js", - "category": "validator", - "purpose": "governance:repo-health", - "scope": "tests/unit, tools/scripts/orchestrators/repair-governance.js, .github/workflows/repair-governance.yml", - "needs": "R-R14, R-R18, R-C6", - "purpose_statement": "Tests repair-governance.js for safe dry-run, fix, rollback, strict exit handling, and workflow contract coverage.", - "pipeline": "manual", - "dualmode": "" - }, { "path": "tests/unit/repo-audit-pipeline.test.js", + "script": "repo-audit-pipeline.test", "category": "validator", "purpose": "qa:repo-health", "scope": "tests/unit, tools/scripts, ai-tools/ai-skills/catalog, ai-tools/agent-packs", @@ -26305,6 +27552,7 @@ }, { "path": "tests/unit/script-docs.test.js", + "script": "script-docs-test", "category": "validator", "purpose": "qa:repo-health", "scope": ".githooks, .github/scripts, tests, tools/scripts, tasks/scripts, docs-guide/indexes/scripts-index.mdx", @@ -26315,46 +27563,47 @@ }, { "path": "tests/unit/spelling.test.js", + "script": "spelling.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests", "needs": "E-R1, R-R11", "purpose_statement": "Spelling check — validates content against custom dictionary with en-GB rules", - "pipeline": "P1, P3", - "dualmode": "" + "pipeline": "P1, P3" }, { "path": "tests/unit/style-guide.test.js", + "script": "style-guide.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests", "needs": "E-R1, R-R11", "purpose_statement": "Style guide compliance — checks en-GB conventions, heading case, formatting rules", - "pipeline": "P1, P3", - "dualmode": "" + "pipeline": "P1, P3" }, { "path": "tests/unit/usefulness-journey.test.js", + "script": "usefulness-journey.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/unit, tools/lib/docs-usefulness, tools/config", "needs": "E-R1, R-R11", "purpose_statement": "Usefulness journey tests — validate journey completeness evaluation and configuration guardrails", - "pipeline": "P3", - "dualmode": "" + "pipeline": "P3" }, { "path": "tests/unit/usefulness-rubric.test.js", + "script": "usefulness-rubric.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/unit, tools/lib/docs-usefulness, tools/scripts, tools/config", "needs": "E-R1, R-R11", "purpose_statement": "Usefulness rubric tests — validate rubric loading, evaluator coverage, route precedence, and score divergence behaviour", - "pipeline": "P3", - "dualmode": "" + "pipeline": "P3" }, { "path": "tests/unit/v2-link-audit.test.js", + "script": "v2-link-audit.test", "category": "validator", "purpose": "qa:link-integrity", "scope": "tests/unit, tests/integration", @@ -26365,16 +27614,17 @@ }, { "path": "tests/unit/v2-wcag-audit.test.js", + "script": "v2-wcag-audit.test", "category": "validator", "purpose": "qa:content-quality", "scope": "tests/unit, tests/integration", "needs": "E-R1, R-R11", "purpose_statement": "Unit tests for v2-wcag-audit.js — tests individual WCAG rules", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tests/unit/validate-codex-task-contract.test.js", + "script": "validate-codex-task-contract.test", "category": "enforcer", "purpose": "governance:agent-governance", "scope": "tests/unit, tools/scripts/validate-codex-task-contract.js", @@ -26385,6 +27635,7 @@ }, { "path": "tests/utils/file-walker.js", + "script": "file-walker", "category": "utility", "purpose": "tooling:dev-tools", "scope": "tests", @@ -26395,36 +27646,37 @@ }, { "path": "tests/utils/mdx-parser.js", + "script": "mdx-parser", "category": "validator", "purpose": "tooling:dev-tools", "scope": "tests", "needs": "E-C6, F-C1", "purpose_statement": "MDX parser utility — extracts frontmatter, components, content blocks from MDX files", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tests/utils/mintignore.js", + "script": "mintignore", "category": "validator", "purpose": "tooling:dev-tools", "scope": "tests", "needs": "E-C6, F-C1", "purpose_statement": "Mintignore utility — reads .mintignore patterns and filters file lists", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tests/utils/openapi-rolling-issue.js", + "script": "openapi-rolling-issue", "category": "validator", "purpose": "tooling:api-spec", "scope": "tests/utils, tests/unit, .github/workflows/openapi-reference-validation.yml", "needs": "F-R17", "purpose_statement": "OpenAPI rolling issue utility — creates/updates GitHub issues for persistent OpenAPI audit findings", - "pipeline": "indirect -- library module", - "dualmode": "" + "pipeline": "indirect -- library module" }, { "path": "tests/utils/spell-checker.js", + "script": "spell-checker", "category": "validator", "purpose": "qa:content-quality", "scope": "tests", @@ -26435,317 +27687,507 @@ }, { "path": "tools/config/v2-internal-report-pages.js", + "script": "v2-internal-report-pages", "category": "config", "purpose": "tooling:dev-tools", "scope": "full-repo", "needs": "E-C6, F-C1", "purpose_statement": "Configuration data — list of internal report page paths for publish-v2-internal-reports.js", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" + }, + { + "path": "tools/lib/component-governance-utils.js", + "script": "component-governance-utils", + "category": "utility", + "purpose": "governance:repo-health", + "scope": "single-domain", + "needs": "R-R10", + "purpose_statement": "Shared parsing and validation utilities for component governance scripts.", + "pipeline": "indirect" }, { "path": "tools/lib/docs-index-utils.js", + "script": "docs-index-utils", "category": "utility", "purpose": "governance:index-management", "scope": "tools/lib, tools/scripts, v2", "needs": "R-R16, R-R17", "purpose_statement": "Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { - "path": "tools/lib/docs-usefulness/scoring.js", + "path": "tools/lib/docs-publishability.js", + "script": "docs-publishability", "category": "utility", - "purpose": "qa:content-quality", - "scope": "full-repo", - "needs": "E-R1, R-R11", - "purpose_statement": "Usefulness scoring engine — computes human and agent usefulness scores from page metadata", - "pipeline": "indirect — library module", - "dualmode": "" + "purpose": "governance:repo-health", + "scope": "tools/lib, tests, tools/scripts", + "needs": "E-C6, F-C1", + "purpose_statement": "Shared path publishability rules for v2 docs content and tooling.", + "pipeline": "indirect" }, { - "path": "tools/lib/generated-file-banners.js", + "path": "tools/scripts/lib/docs-path-sync.js", + "script": "docs-path-sync", "category": "utility", - "purpose": "governance:index-management", - "scope": "full-repo", - "needs": "R-R16, R-R17", - "purpose_statement": "Generated file banner template — provides standard banner text for auto-generated files", - "pipeline": "indirect — library module", - "dualmode": "" - }, - { - "path": "tools/scripts/add-framework-headers.js", - "category": "generator", - "purpose": "governance:repo-health", + "purpose": "qa:repo-health", "scope": "full-repo", - "needs": "R-R14", - "purpose_statement": "Inserts or extends framework headers on all repo scripts from classification data.", - "pipeline": "manual — interactive developer tool, not suited for automated pipelines", - "dualmode": "" + "needs": "E-C1, R-R14", + "purpose_statement": "Shared docs path sync library — detects staged page moves, plans deterministic route rewrites, and applies governed docs.json/path reference updates.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/add-pagetype-mechanical.js", - "category": "generator", - "purpose": "governance:index-management", - "scope": "tools/scripts, v2, tasks/reports", - "needs": "", - "purpose_statement": "PageType metadata generator — assigns pageType frontmatter to eligible v2 MDX pages", - "pipeline": "manual — deterministic metadata rollout utility for v2 docs", - "dualmode": "" + "path": "tools/lib/docs-usefulness/config-validator.js", + "script": "config-validator", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14, R-C6", + "purpose_statement": "Validates docs-usefulness config structure and field completeness.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/deprecated/project-management-output-script.js", + "path": "tools/lib/docs-usefulness/journey-check.js", + "script": "journey-check", "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts/archive/deprecated", - "needs": "", - "purpose_statement": "Deprecated legacy project-management output script retained as a no-op reference stub.", - "pipeline": "manual — deprecated reference stub", - "dualmode": "", - "status": "NEEDS_HEADERS" + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14, R-C6", + "purpose_statement": "Evaluates docs pages against user journey completeness criteria.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/deprecated/update-component-library.sh", - "category": "automation", - "purpose": "infrastructure:data-feeds", - "scope": "tools/scripts", - "needs": "F-R1", - "purpose_statement": "Component library updater — syncs component library documentation from source", - "pipeline": "manual — interactive developer tool, not suited for automated pipelines", - "dualmode": "" + "path": "tools/lib/docs-usefulness/llm-evaluator.js", + "script": "llm-evaluator", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "Wraps LLM API calls for rubric-based page quality evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/audit-all-pages-simple.js", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tasks/scripts", - "needs": "E-R1, R-R11", - "purpose_statement": "Lightweight page auditor — quick pass over all pages checking basic frontmatter and structure", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "path": "tools/lib/docs-usefulness/prompts/changelog.js", + "script": "prompts/changelog", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for changelog page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/audit-all-pages.js", - "category": "validator", - "purpose": "qa:content-quality", - "scope": "tasks/scripts", - "needs": "E-R1, R-R11", - "purpose_statement": "Full page auditor — comprehensive check of all pages including content quality metrics", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "path": "tools/lib/docs-usefulness/prompts/concept.js", + "script": "prompts/concept", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for concept page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/audit-all-v2-pages.js", - "category": "validator", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts", - "needs": "E-C6, F-C1", - "purpose_statement": "V2-specific page auditor — checks v2/** pages for v2-specific requirements (frontmatter, components)", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "path": "tools/lib/docs-usefulness/prompts/faq.js", + "script": "prompts/faq", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for faq page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/audit-v1-to-v2-mapping.js", - "category": "validator", + "path": "tools/lib/docs-usefulness/prompts/glossary.js", + "script": "prompts/glossary", + "category": "utility", "purpose": "qa:repo-health", - "scope": "tools/scripts, v1, v2, docs.json, tasks/reports", - "needs": "E-C1, R-R14", - "purpose_statement": "Diagnostic — maps v1 page URLs to v2 equivalents for migration tracking", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "dual-mode (document flags)" + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for glossary page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/check-component-errors.js", - "category": "enforcer", + "path": "tools/lib/docs-usefulness/prompts/how_to.js", + "script": "prompts/how_to", + "category": "utility", "purpose": "qa:repo-health", - "scope": "tools/scripts", - "needs": "E-C1, R-R14", - "purpose_statement": "Component error checker — scans pages for broken or misconfigured component usage", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for how_to page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/final-verification.js", + "path": "tools/lib/docs-usefulness/prompts/index.js", + "script": "prompts/index", "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts", - "needs": "E-C6, F-C1", - "purpose_statement": "Diagnostic — runs final verification checks on page set (manual tool)", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for index page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/find-correct-url.js", + "path": "tools/lib/docs-usefulness/prompts/landing.js", + "script": "prompts/landing", "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts", - "needs": "E-C6, F-C1", - "purpose_statement": "Diagnostic — given a broken URL, attempts to find the correct v2 equivalent", - "pipeline": "manual — interactive developer tool, not suited for automated pipelines", - "dualmode": "" + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for landing page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/inspect-page.js", + "path": "tools/lib/docs-usefulness/prompts/overview.js", + "script": "prompts/overview", "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts", - "needs": "E-C6, F-C1", - "purpose_statement": "Page inspector — displays parsed metadata, frontmatter, components, and structure for a single page", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for overview page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/inspect-video-page.js", + "path": "tools/lib/docs-usefulness/prompts/reference.js", + "script": "prompts/reference", "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts", - "needs": "E-C6, F-C1", - "purpose_statement": "Video page inspector — displays video-specific metadata and embed configuration for a page", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for reference page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/test-all-pages-browser.js", + "path": "tools/lib/docs-usefulness/prompts/troubleshooting.js", + "script": "prompts/troubleshooting", "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/scripts", - "needs": "E-C6, F-C1", - "purpose_statement": "Manual browser test runner — opens all pages in Puppeteer for visual inspection", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for troubleshooting page-type usefulness evaluation.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/test-all-pages-comprehensive.js", + "path": "tools/lib/docs-usefulness/prompts/tutorial.js", + "script": "prompts/tutorial", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "LLM prompt template for tutorial page-type usefulness evaluation.", + "pipeline": "indirect -- library module" + }, + { + "path": "tools/lib/docs-usefulness/quality-gate.js", + "script": "quality-gate", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14, R-C6", + "purpose_statement": "Applies pass/fail thresholds to usefulness scores.", + "pipeline": "indirect -- library module" + }, + { + "path": "tools/lib/docs-usefulness/rubric-loader.js", + "script": "rubric-loader", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "Loads and parses rubric YAML/JSON for page-type scoring rules.", + "pipeline": "indirect -- library module" + }, + { + "path": "tools/lib/docs-usefulness/rule-evaluators.js", + "script": "rule-evaluators", + "category": "utility", + "purpose": "qa:repo-health", + "scope": "single-domain", + "needs": "R-R14", + "purpose_statement": "Evaluates individual rubric rules against page content.", + "pipeline": "indirect -- library module" + }, + { + "path": "tools/lib/docs-usefulness/scoring.js", + "script": "scoring", + "category": "utility", + "purpose": "qa:content-quality", + "scope": "full-repo", + "needs": "E-R1, R-R11", + "purpose_statement": "Usefulness scoring engine — computes human and agent usefulness scores from page metadata", + "pipeline": "indirect — library module" + }, + { + "path": "tools/lib/generated-file-banners.js", + "script": "generated-file-banners", + "category": "utility", + "purpose": "governance:index-management", + "scope": "full-repo", + "needs": "R-R16, R-R17", + "purpose_statement": "Generated file banner template — provides standard banner text for auto-generated files", + "pipeline": "indirect — library module" + }, + { + "path": "tools/lib/load-js-yaml.js", + "script": "load-js-yaml", "category": "utility", "purpose": "tooling:dev-tools", - "scope": "tools/scripts", + "scope": "tools/lib, tests, tools/scripts", "needs": "E-C6, F-C1", - "purpose_statement": "Manual comprehensive test — runs all page validators including slow/network checks", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "purpose_statement": "YAML loader utility — resolves js-yaml from repo-local installs and falls back to a minimal parser for task-contract style files in bare worktrees", + "pipeline": "indirect — library module" }, { - "path": "tools/scripts/archive/legacy/test-youtube-pages.js", + "path": "tools/lib/load-minimatch.js", + "script": "load-minimatch", "category": "utility", "purpose": "tooling:dev-tools", - "scope": "tools/scripts", + "scope": "tools/lib, tests, tools/scripts", "needs": "E-C6, F-C1", - "purpose_statement": "YouTube page tester — validates YouTube embed pages render correctly", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "purpose_statement": "Glob matcher loader — resolves minimatch from repo-local installs and falls back to a simple glob matcher for bare worktrees", + "pipeline": "indirect — library module" }, { - "path": "tools/scripts/archive/legacy/verify-all-pages.js", - "category": "enforcer", - "purpose": "qa:repo-health", - "scope": "tools/scripts", - "needs": "E-C1, R-R14", - "purpose_statement": "Page verifier — checks all pages in docs.json resolve to valid files", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "path": "tools/lib/mdx-safe-markdown.js", + "script": "mdx-safe-markdown", + "category": "utility", + "purpose": "qa:content-quality", + "scope": "full-repo", + "needs": "E-R1, R-R11", + "purpose_statement": "Shared MDX-safe markdown helpers that collect first-party markdown files, detect unsafe patterns, and apply deterministic repairs.", + "pipeline": "indirect -- library module" }, { - "path": "tools/scripts/archive/legacy/verify-pages.js", - "category": "enforcer", - "purpose": "qa:repo-health", - "scope": "tools/scripts", - "needs": "E-C1, R-R14", - "purpose_statement": "Page verifier — checks a subset of pages resolve to valid files", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "path": "tools/lib/script-governance-config.js", + "script": "script-governance-config", + "category": "utility", + "purpose": "governance:repo-health", + "scope": "full-repo", + "needs": "R-R14, R-R18, R-C6", + "purpose_statement": "Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo.", + "pipeline": "indirect -- library module" + }, + { + "path": "tools/lib/script-header-utils.js", + "script": "script-header-utils", + "category": "utility", + "purpose": "governance:repo-health", + "scope": "full-repo", + "needs": "R-R14, R-R18", + "purpose_statement": "Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source.", + "pipeline": "indirect - library module" + }, + { + "path": "tools/notion/1-read-notion-to-csv.js", + "script": "1-read-notion-to-csv", + "category": "automation", + "purpose": "tooling:dev-tools", + "scope": "external", + "needs": "node, @notionhq/client, dotenv, NOTION_API_KEY, NOTION_DATABASE_ID", + "purpose_statement": "Reads the Notion pages database, filters v2 rows, and writes CSV/JSON exports for downstream sync steps.", + "pipeline": "manual" + }, + { + "path": "tools/notion/2-read-docs-to-csv.js", + "script": "2-read-docs-to-csv", + "category": "generator", + "purpose": "tooling:dev-tools", + "scope": "external", + "needs": "node", + "purpose_statement": "Parses docs.json v2 navigation and writes CSV/JSON exports with section-group metadata for Notion sync.", + "pipeline": "manual" + }, + { + "path": "tools/notion/3-check-duplicates.js", + "script": "3-check-duplicates", + "category": "validator", + "purpose": "tooling:dev-tools", + "scope": "external", + "needs": "node", + "purpose_statement": "Analyzes the exported Notion snapshot for duplicate page keys and writes JSON and Markdown reports.", + "pipeline": "manual" + }, + { + "path": "tools/notion/4-remove-duplicates.js", + "script": "4-remove-duplicates", + "category": "remediator", + "purpose": "tooling:dev-tools", + "scope": "external", + "needs": "node, @notionhq/client, dotenv, NOTION_API_KEY", + "purpose_statement": "Archives duplicate Notion pages from the duplicate report while keeping the first record in each group.", + "pipeline": "manual" + }, + { + "path": "tools/notion/5-export-to-notion.js", + "script": "5-export-to-notion", + "category": "automation", + "purpose": "tooling:dev-tools", + "scope": "external", + "needs": "node, @notionhq/client, dotenv, NOTION_API_KEY, NOTION_DATABASE_ID, NOTION_WRITABLE_DATABASE_ID(optional)", + "purpose_statement": "Updates existing Notion page grouping fields from the exported docs navigation snapshot.", + "pipeline": "manual" + }, + { + "path": "tools/notion/backup-notion-table.js", + "script": "backup-notion-table", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "external", + "needs": "node, @notionhq/client, dotenv, NOTION_API_KEY, NOTION_DATABASE_ID or NOTION_WRITABLE_DATABASE_ID", + "purpose_statement": "Backs up the current Notion data source rows and metadata into timestamped JSON and CSV artifacts with a manifest.", + "pipeline": "manual" + }, + { + "path": "tools/notion/install-local-sync-hook.sh", + "script": "install-local-sync-hook", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "single-file", + "needs": "bash, git", + "purpose_statement": "Installs the managed local post-commit hook that invokes the Notion sync runner and preserves any prior hook as a backup.", + "pipeline": "manual" + }, + { + "path": "tools/notion/local-post-commit-sync.sh", + "script": "local-post-commit-sync", + "category": "orchestrator", + "purpose": "tooling:dev-tools", + "scope": "external", + "needs": "bash, git, node, NOTION_LOCAL_SYNC_MODE(optional), NOTION_LOCAL_SYNC_STALE_TAB_NAME(optional), NOTION_LOCAL_SYNC_DISABLE(optional)", + "purpose_statement": "Detects docs.json or v2 content changes in the latest commit and runs the canonical Notion sync locally when enabled.", + "pipeline": "manual" + }, + { + "path": "tools/notion/remove-local-sync-hook.sh", + "script": "remove-local-sync-hook", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "single-file", + "needs": "bash, git", + "purpose_statement": "Removes the managed local Notion post-commit hook when it is present.", + "pipeline": "manual" + }, + { + "path": "tools/notion/sync-v2-en-canonical.js", + "script": "sync-v2-en-canonical", + "category": "orchestrator", + "purpose": "tooling:dev-tools", + "scope": "external", + "needs": "node, @notionhq/client, dotenv, NOTION_API_KEY, NOTION_DATABASE_ID or NOTION_WRITABLE_DATABASE_ID", + "purpose_statement": "Builds canonical v2 English page metadata and syncs Notion schema, row metadata, and optional page-body blocks to match docs.", + "pipeline": "manual" + }, + { + "path": "tools/scripts/add-framework-headers.js", + "script": "add-framework-headers", + "category": "generator", + "purpose": "governance:repo-health", + "scope": "full-repo", + "needs": "R-R14", + "purpose_statement": "Inserts or extends framework headers on all repo scripts from classification data.", + "pipeline": "manual — interactive developer tool, not suited for automated pipelines" + }, + { + "path": "tools/scripts/add-pagetype-mechanical.js", + "script": "add-pagetype-mechanical", + "category": "generator", + "purpose": "governance:index-management", + "scope": "tools/scripts, v2, tasks/reports", + "needs": "E-R1, R-R11", + "purpose_statement": "PageType metadata generator — assigns pageType frontmatter to eligible v2 MDX pages", + "pipeline": "manual — deterministic metadata rollout utility for v2 docs" }, { "path": "tools/scripts/assign-purpose-metadata.js", + "script": "assign-purpose-metadata", "category": "generator", "purpose": "qa:content-quality", "scope": "tools/scripts, tools/lib/docs-usefulness, tools/config, v2", "needs": "E-R1, R-R11", "purpose_statement": "Purpose metadata assigner — fills purpose and audience frontmatter for routable v2 pages", - "pipeline": "manual — interactive developer tool, not suited for automated pipelines", - "dualmode": "" + "pipeline": "manual — interactive developer tool, not suited for automated pipelines" }, { "path": "tools/scripts/audit-component-usage.js", + "script": "audit-component-usage", "category": "validator", "purpose": "qa:repo-health", "scope": "tools/scripts", "needs": "E-C1, R-R14", "purpose_statement": "Component usage auditor — scans pages for component usage patterns and reports statistics", - "pipeline": "P5, P6", - "dualmode": "" + "pipeline": "P5, P6" }, { "path": "tools/scripts/audit-media-assets.js", + "script": "audit-media-assets", "category": "validator", "purpose": "qa:repo-health", "scope": "tools/scripts, tasks/reports/media-audit", - "needs": "", + "needs": "R-R14", "purpose_statement": "Media asset auditor — audits repo media assets, references, ignore leakage, and externalized asset branch inventory", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/audit-scripts.js", + "script": "audit-scripts", "category": "validator", "purpose": "qa:repo-health", "scope": "tools/scripts, tasks/reports, tests/unit/script-docs.test.js, tests/README.md", "needs": "E-C1, R-R14", "purpose_statement": "Script auditor — analyses all repo scripts, categorises usage/overlap, generates SCRIPT_AUDIT reports", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/audit-tasks-folders.js", + "script": "audit-tasks-folders", "category": "validator", "purpose": "qa:repo-health", "scope": "tools/scripts, tasks", "needs": "E-C1, R-R14", "purpose_statement": "Tasks folder auditor — checks tasks/ structure, normalises report locations, applies recommendations with conflict-safe moves", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/audit-v2-usefulness.js", + "script": "audit-v2-usefulness", "category": "validator", "purpose": "qa:content-quality", "scope": "tools/scripts, v2, tasks/reports, tools/config", "needs": "E-R1, R-R11", "purpose_statement": "Usefulness auditor — scores v2 MDX pages on human and agent usefulness with source-weighted 2026 accuracy verification", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/check-codex-pr-overlap.js", + "script": "check-codex-pr-overlap", "category": "enforcer", "purpose": "governance:agent-governance", "scope": "tools/scripts, .github/workflows, codex PR governance", "needs": "R-R27, R-R30", "purpose_statement": "PR enforcer — checks for conflicting codex PRs targeting the same files/branches", - "pipeline": "P3 (PR, Track B)", - "dualmode": "" + "pipeline": "P3 (PR, Track B)" }, { "path": "tools/scripts/check-no-ai-stash.sh", + "script": "check-no-ai-stash", "category": "enforcer", "purpose": "governance:agent-governance", "scope": "tools/scripts, .githooks/pre-commit", "needs": "R-R27, R-R30", "purpose_statement": "AI stash enforcer — blocks push if AI temporary/stash files are present in working tree", - "pipeline": "P1, P2", - "dualmode": "" + "pipeline": "P1, P2" }, { "path": "tools/scripts/cleanup-quarantine-manager.js", + "script": "cleanup-quarantine-manager", "category": "remediator", "purpose": "qa:repo-health", "scope": "tools/scripts, tasks/reports/repo-ops, tasks/quarantine", "needs": "E-C1, R-R14", "purpose_statement": "Quarantine manager — classifies files for quarantine (default) or applies quarantine moves (--apply)", - "pipeline": "manual", - "dualmode": "" + "pipeline": "manual" }, { "path": "tools/scripts/codex-commit.js", + "script": "codex-commit", "category": "generator", "purpose": "governance:agent-governance", "scope": "tools/scripts, .githooks, ai-tools/ai-rules", @@ -26756,226 +28198,237 @@ }, { "path": "tools/scripts/codex-safe-merge-with-stash.js", + "script": "codex-safe-merge-with-stash", "category": "utility", "purpose": "governance:agent-governance", "scope": "tools/scripts", "needs": "R-R27, R-R30", "purpose_statement": "Codex merge utility — safely merges branches with stash handling to avoid codex conflicts", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/codex/lock-release.js", + "script": "codex/lock-release", "category": "utility", "purpose": "governance:agent-governance", "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", "needs": "R-R27, R-R30", "purpose_statement": "Codex lock release utility — releases stale codex lock files", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/codex/task-cleanup.js", + "script": "codex/task-cleanup", "category": "utility", "purpose": "governance:agent-governance", "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", "needs": "R-R27, R-R30", "purpose_statement": "Codex task cleanup utility — reports and prunes merged clean worktrees plus stale local codex branches after merge", - "pipeline": "manual — interactive developer tool, not suited for automated pipelines", - "dualmode": "" + "pipeline": "manual — interactive developer tool, not suited for automated pipelines" }, { "path": "tools/scripts/codex/task-finalize.js", + "script": "codex/task-finalize", "category": "enforcer", "purpose": "governance:agent-governance", "scope": "tools/scripts/codex, tools/scripts/validate-codex-task-contract.js, tools/scripts/verify-pay-orc-gate-finalize.sh", "needs": "R-R27, R-R30", "purpose_statement": "Codex task finaliser — enforces task completion requirements before closing", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/codex/task-preflight.js", + "script": "codex/task-preflight", "category": "generator", "purpose": "governance:agent-governance", "scope": "tools/scripts/codex, .codex/task-contract.yaml, .codex/locks-local", "needs": "R-R27, R-R30", "purpose_statement": "Codex task preflight — generates task setup files and validates preconditions", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/codex/validate-locks.js", + "script": "codex/validate-locks", "category": "enforcer", "purpose": "governance:agent-governance", "scope": "tools/scripts/codex, .codex/locks-local, .codex/task-contract.yaml", "needs": "R-R27, R-R30", "purpose_statement": "Codex lock validator — checks for stale or conflicting lock files before push", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/component-layout-governance.js", + "script": "component-layout-governance", "category": "validator", "purpose": "qa:repo-health", "scope": "tools/scripts, v2, tools/config/component-layout-profile.json", "needs": "E-C1, R-R14", "purpose_statement": "Component layout governance validator — checks v2 page layouts against approved component contracts", - "pipeline": "P5, P6", - "dualmode": "" + "pipeline": "P5, P6" }, { "path": "tools/scripts/convert-rss-to-mdx.js", + "script": "convert-rss-to-mdx", "category": "automation", "purpose": "infrastructure:data-feeds", "scope": "tools/scripts, v2/internal/assets/transcripts", "needs": "F-R1", "purpose_statement": "RSS-to-MDX converter — imports RSS feed items and converts to MDX page format", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/create-codex-pr.js", + "script": "create-codex-pr", "category": "generator", "purpose": "governance:agent-governance", "scope": "tools/scripts, .codex/task-contract.yaml", "needs": "R-R27, R-R30", "purpose_statement": "Codex PR creator — generates codex PR with correct branch naming, labels, and body template", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/cross-agent-packager.js", + "script": "cross-agent-packager", "category": "generator", "purpose": "governance:agent-governance", "scope": "tools/scripts, ai-tools/ai-skills/catalog, ai-tools/agent-packs", "needs": "R-R27, R-R30", "purpose_statement": "Cross-agent packager — bundles audit reports and repo state into agent-consumable packages", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/debug-mint-dev.js", + "script": "debug-mint-dev", "category": "utility", "purpose": "tooling:dev-tools", "scope": "tools/scripts", "needs": "E-C6, F-C1", "purpose_statement": "Mintlify dev debugger — diagnostic tool for troubleshooting mint dev server issues", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/add-callouts.js", + "script": "add-callouts", "category": "remediator", "purpose": "qa:content-quality", "scope": "tools/scripts", "needs": "E-R1, R-R11", "purpose_statement": "Callout inserter — adds Note/Tip/Warning callout components to MDX files based on content patterns", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/batch-update-og-image.sh", + "script": "batch-update-og-image", "category": "remediator", "purpose": "feature:seo", "scope": "tools/scripts", "needs": "E-R19, F-R7", "purpose_statement": "Batch OG image updater — updates og:image meta tags across multiple pages", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/ensure-mint-watcher-patch.sh", + "script": "ensure-mint-watcher-patch", "category": "utility", "purpose": "tooling:dev-tools", "scope": "tools/scripts", "needs": "E-C6, F-C1", "purpose_statement": "Mint watcher patcher — applies patch to fix Mintlify file watcher issues in dev mode", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/generate-mint-dev-scope.js", + "script": "generate-mint-dev-scope", "category": "generator", "purpose": "tooling:dev-tools", "scope": "tools/scripts/dev, docs.json, .mintignore", "needs": "E-C6, F-C1", "purpose_statement": "Mint dev scope generator — creates a scoped docs.json for running mint dev on a subset of pages", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" + }, + { + "path": "tools/scripts/dev/mint-custom-loader.sh", + "script": "mint-custom-loader", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "tools/scripts/dev, docs.json, lpd", + "needs": "E-C6, F-C1", + "purpose_statement": "Mint custom loader — launches lpd dev with an alternate docs config as the active Mint navigation source.", + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/replace-og-image.py", + "script": "replace-og-image", "category": "remediator", "purpose": "feature:seo", "scope": "tools/scripts", "needs": "E-R19, F-R7", "purpose_statement": "OG image replacer — replaces og:image path in a single page frontmatter", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/seo-generator-safe.js", + "script": "seo-generator-safe", "category": "generator", "purpose": "feature:seo", "scope": "tools/scripts", "needs": "E-R19, F-R7", "purpose_statement": "Safe SEO generator — generates SEO metadata with dry-run and rollback safety", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/test-add-callouts.js", + "script": "test-add-callouts", "category": "remediator", "purpose": "qa:content-quality", "scope": "tools/scripts", "needs": "E-R1, R-R11", "purpose_statement": "Test for add-callouts.js — validates callout insertion logic against fixtures", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/test-seo-generator.js", + "script": "test-seo-generator", "category": "generator", "purpose": "feature:seo", "scope": "tools/scripts", "needs": "E-R19, F-R7", "purpose_statement": "Test for seo-generator — validates SEO generation logic", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/update-all-og-images.js", + "script": "update-all-og-images", "category": "remediator", "purpose": "feature:seo", "scope": "tools/scripts", "needs": "E-R19, F-R7", "purpose_statement": "Bulk OG image updater — updates og:image across all v2 pages", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/dev/update-og-image.js", + "script": "update-og-image", "category": "remediator", "purpose": "feature:seo", "scope": "tools/scripts", "needs": "E-R19, F-R7", "purpose_statement": "Single OG image updater — updates og:image for one page", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/docs-quality-and-freshness-audit.js", + "script": "docs-quality-and-freshness-audit", "category": "validator", "purpose": "qa:content-quality", "scope": "tools/scripts, v2, tasks/reports/quality-accessibility", "needs": "E-R1, R-R11", "purpose_statement": "Content freshness audit — checks for TODO/TBD/Coming Soon markers, thin pages, stale content", - "pipeline": "P5, P6", - "dualmode": "" + "pipeline": "P5, P6" }, { "path": "tools/scripts/enforce-generated-file-banners.js", + "script": "enforce-generated-file-banners", "category": "remediator", "purpose": "governance:index-management", "scope": "tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js", @@ -26986,26 +28439,27 @@ }, { "path": "tools/scripts/enforcers/pr/check-component-immutability.js", + "script": "check-component-immutability", "category": "enforcer", "purpose": "governance:repo-health", "scope": "changed", "needs": "R-R10", "purpose_statement": "Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label.", - "pipeline": "P2, P3", - "dualmode": "" + "pipeline": "P2, P3" }, { "path": "tools/scripts/enforcers/pr/check-pr-template.js", + "script": "check-pr-template", "category": "enforcer", "purpose": "governance:repo-health", "scope": "tools/scripts/enforcers/pr, .github/pull_request_template.md, .github/pull-request-template-v2.md", "needs": "R-R14, R-C6", "purpose_statement": "Enforces that PR descriptions include required change and rationale sections before merge", - "pipeline": "ci", - "dualmode": "" + "pipeline": "ci" }, { "path": "tools/scripts/generate-ai-sitemap.js", + "script": "generate-ai-sitemap", "category": "generator", "purpose": "governance:index-management", "scope": "tools/scripts, docs.json, v2", @@ -27016,46 +28470,47 @@ }, { "path": "tools/scripts/generate-component-docs.js", + "script": "generate-component-docs", "category": "generator", "purpose": "governance:index-management", "scope": "generated-output", "needs": "R-R10", "purpose_statement": "Generates published component library MDX pages from the registry.", - "pipeline": "manual", - "dualmode": "" + "pipeline": "manual" }, { "path": "tools/scripts/generate-component-governance-remediation-reports.js", + "script": "generate-component-governance-remediation-reports", "category": "generator", "purpose": "qa:repo-health", "scope": "tools/scripts, tasks/reports, snippets/components, v2, style.css", "needs": "R-R10, R-R29", "purpose_statement": "Generates component-governance remediation reports from the approved audit and live repo state, including defensive-rendering guidance for MDX-facing components.", - "pipeline": "manual — report generation", - "dualmode": "" + "pipeline": "manual — report generation" }, { "path": "tools/scripts/generate-component-registry.js", + "script": "generate-component-registry", "category": "generator", "purpose": "governance:index-management", "scope": "single-domain", "needs": "R-R10", "purpose_statement": "Parses JSDoc from all component exports and produces component-registry.json.", - "pipeline": "P1, P2, P3", - "dualmode": "" + "pipeline": "P1, P2, P3" }, { "path": "tools/scripts/generate-content-gap-reconciliation.js", + "script": "generate-content-gap-reconciliation", "category": "generator", "purpose": "governance:index-management", "scope": "tools/scripts, tools/config, tools/lib, v2, tasks/reports/content-gap", "needs": "R-R16, R-R17", "purpose_statement": "Content-gap reconciliation generator — compares blueprint coverage against v2 MDX and writes reconciliation artefacts", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/generate-docs-guide-components-index.js", + "script": "generate-docs-guide-components-index", "category": "generator", "purpose": "governance:index-management", "scope": "tools/scripts, docs-guide/indexes/components-index.mdx, v2/resources/documentation-guide/component-library/overview.mdx, snippets/components", @@ -27066,6 +28521,7 @@ }, { "path": "tools/scripts/generate-docs-guide-indexes.js", + "script": "generate-docs-guide-indexes", "category": "generator", "purpose": "governance:index-management", "scope": "tools/scripts, docs-guide, .github/workflows, .github/ISSUE_TEMPLATE", @@ -27076,16 +28532,17 @@ }, { "path": "tools/scripts/generate-docs-guide-pages-index.js", + "script": "generate-docs-guide-pages-index", "category": "generator", "purpose": "governance:index-management", "scope": "tools/scripts, docs-guide/indexes/pages-index.mdx, v2/index.mdx, docs.json", "needs": "R-R16, R-R17", "purpose_statement": "Generates the docs-guide pages index", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/generate-docs-index.js", + "script": "generate-docs-index", "category": "generator", "purpose": "governance:index-management", "scope": "tools/scripts, tools/lib, v2, docs.json, root", @@ -27096,6 +28553,7 @@ }, { "path": "tools/scripts/generate-llms-files.js", + "script": "generate-llms-files", "category": "generator", "purpose": "governance:index-management", "scope": "tools/scripts, docs.json, v2", @@ -27106,6 +28564,7 @@ }, { "path": "tools/scripts/generate-pages-index.js", + "script": "generate-pages-index", "category": "generator", "purpose": "governance:index-management", "scope": "tools/scripts, v2", @@ -27116,146 +28575,147 @@ }, { "path": "tools/scripts/i18n/generate-localized-docs-json.js", + "script": "generate-localized-docs-json", "category": "generator", "purpose": "feature:translation", "scope": "docs.json, tools/scripts/i18n", "needs": "F-R6, F-R7", "purpose_statement": "Locale docs.json generator — produces localised docs.json variants from route-map and source docs.json", - "pipeline": "P6 (on-demand, translation pipeline)", - "dualmode": "" + "pipeline": "P6 (on-demand, translation pipeline)" }, { "path": "tools/scripts/i18n/lib/common.js", + "script": "common", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "i18n shared utilities — common helper functions for translation pipeline", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/config.js", + "script": "config", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "i18n configuration — language codes, locale paths, translation settings", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/docs-json-localizer.js", + "script": "docs-json-localizer", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "docs.json localiser engine — transforms docs.json navigation for locale variants", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/docs-routes.js", + "script": "docs-routes", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "docs route resolver — maps page paths to locale-aware routes", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/frontmatter.js", + "script": "frontmatter", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Frontmatter parser/writer — reads and writes MDX frontmatter for translation", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/mdx-parser.js", + "script": "mdx-parser", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "MDX parser for i18n — extracts translatable content blocks from MDX", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/mdx-translate.js", + "script": "mdx-translate", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "MDX translation engine — applies translations to MDX content blocks", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/path-utils.js", + "script": "path-utils", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Path utilities for i18n — locale-aware path resolution and mapping", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/provenance.js", + "script": "provenance", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Translation provenance tracker — records source, timestamp, and provider for each translated segment", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/provider-mock.js", + "script": "provider-mock", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Mock translation provider — returns placeholder translations for testing without API calls", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/provider-openrouter.js", + "script": "provider-openrouter", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "OpenRouter translation provider — calls OpenRouter API for actual translations", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/lib/providers.js", + "script": "providers", "category": "utility", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Provider registry — selects translation provider (OpenRouter or mock) based on configuration", - "pipeline": "indirect — library module", - "dualmode": "" + "pipeline": "indirect — library module" }, { "path": "tools/scripts/i18n/test-mintlify-version-language-toggle.js", + "script": "test-mintlify-version-language-toggle", "category": "enforcer", "purpose": "feature:translation", "scope": "tools/scripts/i18n, docs.json, v2", "needs": "F-R6, F-R7", "purpose_statement": "Mintlify language toggle checker — validates Mintlify version supports language toggle feature", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/i18n/test/cli-guardrails.test.js", + "script": "cli-guardrails.test", "category": "validator", "purpose": "feature:translation", "scope": "tools/scripts", @@ -27266,96 +28726,97 @@ }, { "path": "tools/scripts/i18n/test/docs-json-localizer.test.js", + "script": "docs-json-localizer.test", "category": "validator", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Tests docs-json-localizer — validates locale docs.json transformation logic", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/i18n/test/frontmatter.test.js", + "script": "frontmatter.test", "category": "validator", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Tests frontmatter parser — validates frontmatter read/write roundtrip", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/i18n/test/mdx-translate.test.js", + "script": "mdx-translate.test", "category": "validator", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Tests MDX translation — validates content block translation logic", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/i18n/test/provenance.test.js", + "script": "provenance.test", "category": "validator", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Tests provenance tracker — validates translation provenance recording", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/i18n/test/provider-openrouter.test.js", + "script": "provider-openrouter.test", "category": "validator", "purpose": "feature:translation", "scope": "tools/scripts", "needs": "F-R6, F-R7", "purpose_statement": "Tests OpenRouter provider — validates API call logic and response parsing", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/i18n/translate-docs.js", + "script": "translate-docs", "category": "generator", "purpose": "feature:translation", "scope": "tools/scripts/i18n, docs.json, v2", "needs": "F-R6, F-R7", "purpose_statement": "Translation generator — translates v2 MDX pages to target languages via OpenRouter API", - "pipeline": "P6 (on-demand, translation pipeline)", - "dualmode": "" + "pipeline": "P6 (on-demand, translation pipeline)" }, { "path": "tools/scripts/i18n/validate-generated.js", + "script": "validate-generated", "category": "validator", "purpose": "feature:translation", "scope": "tools/scripts/i18n, v2", "needs": "F-R6, F-R7", "purpose_statement": "Generated localisation validator — checks generated translated MDX files and route-map outputs for integrity", - "pipeline": "P6", - "dualmode": "" + "pipeline": "P6" }, { "path": "tools/scripts/mint-dev.sh", + "script": "mint-dev", "category": "utility", "purpose": "tooling:dev-tools", "scope": "tools/scripts", "needs": "E-C6, F-C1", "purpose_statement": "Mintlify dev server launcher — starts mint dev with correct configuration", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/new-script.js", + "script": "new-script", "category": "generator", "purpose": "qa:repo-health", "scope": "tools/scripts, tests/unit/script-docs.test.js", "needs": "E-C1, R-R14", "purpose_statement": "Script scaffolder — creates a new script file prefilled with the required docs header template", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/orchestrators/repair-governance.js", + "script": "repair-governance", "category": "orchestrator", "purpose": "governance:repo-health", "scope": "full-repo", @@ -27366,16 +28827,17 @@ }, { "path": "tools/scripts/publish-v2-internal-reports.js", + "script": "publish-v2-internal-reports", "category": "automation", "purpose": "qa:repo-health", "scope": "tools/scripts, tools/config, v2/internal, docs.json, tasks/reports, tests/reports", "needs": "E-C1, R-R14", "purpose_statement": "Report publisher — publishes v2 internal audit reports to configured output locations", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/remediators/assets/migrate-assets-to-branch.js", + "script": "migrate-assets-to-branch", "category": "remediator", "purpose": "governance:repo-health", "scope": "full-repo", @@ -27386,16 +28848,17 @@ }, { "path": "tools/scripts/remediators/components/repair-component-metadata.js", + "script": "repair-component-metadata", "category": "remediator", "purpose": "governance:repo-health", "scope": "single-domain", "needs": "R-R10", "purpose_statement": "Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components.", - "pipeline": "P1 (commit — runs when components staged), P6 (on-demand)", - "dualmode": "" + "pipeline": "P1 (commit — runs when components staged), P6 (on-demand)" }, { "path": "tools/scripts/remediators/content/repair-mdx-safe-markdown.js", + "script": "repair-mdx-safe-markdown", "category": "remediator", "purpose": "qa:content-quality", "scope": "tools/scripts/remediators/content, first-party markdown/mdx files", @@ -27404,8 +28867,20 @@ "pipeline": "P1", "dualmode": "--dry-run (validator) | --write (remediator)" }, + { + "path": "tools/scripts/remediators/content/sync-docs-paths.js", + "script": "sync-docs-paths", + "category": "remediator", + "purpose": "qa:repo-health", + "scope": "staged", + "needs": "E-C1, R-R14", + "purpose_statement": "Docs path sync remediator — applies deterministic docs.json and governed reference rewrites for moved docs pages.", + "pipeline": "P1, P6", + "dualmode": "--dry-run (validator) | --write (remediator)" + }, { "path": "tools/scripts/remediators/content/repair-spelling.js", + "script": "repair-spelling", "category": "remediator", "purpose": "qa:content-quality", "scope": "v2-content", @@ -27416,226 +28891,238 @@ }, { "path": "tools/scripts/repo-audit-orchestrator.js", + "script": "repo-audit-orchestrator", "category": "orchestrator", "purpose": "infrastructure:pipeline-orchestration", "scope": "tools/scripts, ai-tools/ai-skills/catalog, tasks/reports/repo-ops", "needs": "R-R29", "purpose_statement": "Repo audit orchestrator — dispatches all static analysis validators in sequence. Supports --mode (static/full), --scope (full/changed), --quarantine, --agent-pack.", - "pipeline": "manual", - "dualmode": "" + "pipeline": "manual" }, { "path": "tools/scripts/scan-component-imports.js", + "script": "scan-component-imports", "category": "generator", "purpose": "governance:index-management", "scope": "full-repo", "needs": "R-R10", "purpose_statement": "Scans MDX imports to produce component-usage-map.json and detect @usedIn drift.", - "pipeline": "manual", - "dualmode": "" + "pipeline": "manual" }, { "path": "tools/scripts/script-footprint-and-usage-audit.js", + "script": "script-footprint-and-usage-audit", "category": "validator", "purpose": "qa:repo-health", "scope": "tools/scripts, tests, tasks/reports, ai-tools/ai-skills", "needs": "E-C1, R-R14", "purpose_statement": "Script footprint auditor — analyses script file sizes, dependencies, and usage patterns across the repo", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/snippets/fetch-external-docs.sh", + "script": "fetch-external-docs", "category": "automation", "purpose": "infrastructure:data-feeds", "scope": "tools/scripts", "needs": "F-R1", "purpose_statement": "External docs fetcher — pulls doc fragments from external GitHub repos into snippets/data/ for inclusion in builds", - "pipeline": "P2, P3", - "dualmode": "" + "pipeline": "P2, P3" }, { "path": "tools/scripts/snippets/fetch-lpt-exchanges.sh", + "script": "fetch-lpt-exchanges", "category": "automation", "purpose": "infrastructure:data-feeds", "scope": "tools/scripts", "needs": "F-R1", "purpose_statement": "LPT exchange data fetcher — pulls exchange listing data for LPT token pages", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/snippets/fetch-openapi-specs.sh", + "script": "fetch-openapi-specs", "category": "automation", "purpose": "tooling:api-spec", "scope": "tools/scripts", "needs": "F-R17", "purpose_statement": "OpenAPI spec fetcher — pulls latest OpenAPI specs from Livepeer services for reference pages", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/snippets/generate-api-docs.sh", + "script": "generate-api-docs", "category": "generator", "purpose": "tooling:dev-tools", "scope": "tools/scripts", "needs": "E-C6, F-C1", "purpose_statement": "API docs generator — generates API reference pages from OpenAPI specs", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/snippets/generate-data/scripts/generate-glossary.js", + "script": "generate-glossary", "category": "generator", "purpose": "tooling:dev-tools", "scope": "tools/scripts", "needs": "E-C6, F-C1", "purpose_statement": "Glossary generator — produces glossary data file from terminology sources", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/snippets/generate-data/scripts/terminology-search.js", + "script": "terminology-search", "category": "generator", "purpose": "tooling:dev-tools", "scope": "tools/scripts", "needs": "E-C6, F-C1", "purpose_statement": "Terminology search — searches glossary/terminology data for definitions", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/snippets/generate-seo.js", + "script": "generate-seo", "category": "generator", "purpose": "feature:seo", "scope": "tools/scripts", "needs": "E-R19, F-R7", "purpose_statement": "SEO generator — generates SEO metadata (title, description, keywords) for v2 pages from content analysis", - "pipeline": "P6 (on-demand, SEO refresh)", - "dualmode": "" + "pipeline": "P6 (on-demand, SEO refresh)" }, { "path": "tools/scripts/snippets/test-scripts.sh", + "script": "test-scripts", "category": "utility", "purpose": "tooling:dev-tools", "scope": "tools/scripts", "needs": "E-C6, F-C1", "purpose_statement": "Snippet test runner — runs basic validation on snippet scripts", - "pipeline": "manual — developer tool", - "dualmode": "" + "pipeline": "manual — developer tool" }, { "path": "tools/scripts/style-and-language-homogenizer-en-gb.js", + "script": "style-and-language-homogenizer-en-gb", "category": "remediator", "purpose": "tooling:dev-tools", "scope": "tools/scripts, v2, tools/config/style-language-profile-en-gb.json", "needs": "E-C6, F-C1", "purpose_statement": "EN-GB style homogeniser — finds and fixes American English spellings, style guide violations, and formatting inconsistencies across v2 content", - "pipeline": "P6 (on-demand, repair)", - "dualmode": "" + "pipeline": "P6 (on-demand, repair)" }, { "path": "tools/scripts/sync-codex-skills.js", + "script": "sync-codex-skills", "category": "automation", "purpose": "governance:agent-governance", "scope": "tools/scripts, ai-tools/ai-skills/templates, tests/unit/codex-skill-sync.test.js", "needs": "R-R27, R-R30", "purpose_statement": "Codex skills sync — synchronises skill definition files between local and remote sources. Supports --check mode.", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/test-v2-pages.js", + "script": "test-v2-pages", "category": "utility", "purpose": "tooling:dev-tools", "scope": "tools/scripts", "needs": "E-C6, F-C1", "purpose_statement": "V2 page tester — validates v2 pages via Puppeteer browser rendering", - "pipeline": "P2, P3", - "dualmode": "" + "pipeline": "P2, P3" }, { "path": "tools/scripts/validate-codex-task-contract.js", + "script": "validate-codex-task-contract", "category": "enforcer", "purpose": "governance:agent-governance", "scope": "tools/scripts, .codex/task-contract.yaml, tests/config/codex-issue-policy.json, .github/pull_request_template.md, .github/pull-request-template-v2.md", "needs": "R-R27, R-R30", "purpose_statement": "Codex task contract enforcer — validates branch naming, task files, PR body, and issue state for codex branches", - "pipeline": "P1 (commit), P2 (push), P3 (PR, Track B)", - "dualmode": "" + "pipeline": "P1 (commit), P2 (push), P3 (PR, Track B)" }, { "path": "tools/scripts/validators/components/check-component-css.js", + "script": "check-component-css", "category": "validator", "purpose": "qa:repo-health", "scope": "single-domain", "needs": "R-R10", "purpose_statement": "Validates component files use CSS custom properties only. No ThemeData, no hardcoded hex, no inline styles.", - "pipeline": "P1, P2, P3", - "dualmode": "" + "pipeline": "P1, P2, P3" }, { "path": "tools/scripts/validators/components/check-component-docs.js", + "script": "check-component-docs", "category": "validator", "purpose": "qa:repo-health", "scope": "single-domain", "needs": "R-R10", "purpose_statement": "Validates component JSDoc coverage, prop documentation, and docs-entry coverage for exported components under snippets/components.", - "pipeline": "P1, P2, P3", - "dualmode": "" + "pipeline": "P1, P2, P3" }, { "path": "tools/scripts/validators/components/check-mdx-component-scope.js", + "script": "check-mdx-component-scope", "category": "validator", "purpose": "qa:repo-health", "scope": "tools/scripts/validators/components, tests/run-all.js, tests/run-pr-checks.js, snippets/components, tests/utils", "needs": "R-R10, R-R29", "purpose_statement": "Validates MDX-facing component modules do not depend on private file-scope helper bindings from exported components.", - "pipeline": "manual", - "dualmode": "" + "pipeline": "manual" }, { "path": "tools/scripts/validators/components/check-naming-conventions.js", + "script": "check-naming-conventions", "category": "validator", "purpose": "qa:repo-health", "scope": "tools/scripts/validators/components, tests/run-all.js, tests/run-pr-checks.js, snippets/components", "needs": "R-R10", "purpose_statement": "Validates active component filenames against strict camelCase file naming and PascalCase exports under snippets/components.", - "pipeline": "P1, P3", - "dualmode": "" + "pipeline": "P1, P3" }, { "path": "tools/scripts/validators/content/check-anchor-usage.js", + "script": "check-anchor-usage", "category": "validator", "purpose": "qa:content-quality", "scope": "tools/scripts/validators/content, v2", "needs": "R-R14, R-C6", "purpose_statement": "Validates same-page anchor links in maintained v2 MDX files against heading IDs on the same page", - "pipeline": "manual, ci", - "dualmode": "" + "pipeline": "manual, ci" }, { "path": "tools/scripts/validators/content/check-description-quality.js", + "script": "check-description-quality", "category": "validator", "purpose": "qa:content-quality", "scope": "tools/scripts/validators/content, v2", "needs": "E-R1, R-R11", "purpose_statement": "Validates English v2 frontmatter descriptions for SEO length, boilerplate openings, and duplicate reuse", - "pipeline": "manual — diagnostic/investigation tool, run on-demand only", - "dualmode": "" + "pipeline": "manual — diagnostic/investigation tool, run on-demand only" + }, + { + "path": "tools/scripts/validators/content/check-docs-path-sync.js", + "script": "check-docs-path-sync", + "category": "validator", + "purpose": "qa:repo-health", + "scope": "staged", + "needs": "E-C1, R-R14", + "purpose_statement": "Docs path sync validator — detects staged page moves that require docs.json or governed path reference rewrites.", + "pipeline": "P1, P6", + "dualmode": "--check (validator) | --json (machine-readable report)" }, { "path": "tools/scripts/validators/content/check-double-headers.js", + "script": "check-double-headers", "category": "validator", "purpose": "qa:content-quality", "scope": "tools/scripts/validators/content, v2, docs.json", "needs": "1.12, 1.13", "purpose_statement": "Detects duplicate body H1 headings and opening paragraphs that repeat frontmatter title or description content.", - "pipeline": "manual — validator, run on-demand only", - "dualmode": "" + "pipeline": "manual — validator, run on-demand only" }, { "path": "tools/scripts/validators/content/check-grammar-en-gb.js", + "script": "check-grammar-en-gb", "category": "validator", "purpose": "qa:content-quality", "scope": "tools/scripts/validators/content, tools/script-index.md, tests/script-index.md, docs-guide/indexes/scripts-index.mdx, v2", @@ -27646,6 +29133,7 @@ }, { "path": "tools/scripts/validators/content/check-mdx-safe-markdown.js", + "script": "check-mdx-safe-markdown", "category": "validator", "purpose": "qa:content-quality", "scope": "tools/scripts/validators/content, first-party markdown/mdx files", @@ -27656,16 +29144,17 @@ }, { "path": "tools/scripts/validators/content/check-page-endings.js", + "script": "check-page-endings", "category": "validator", "purpose": "qa:content-quality", "scope": "tools/scripts/validators/content, v2", "needs": "R-R14", "purpose_statement": "Validates that English v2 MDX pages end with an approved navigational or closing element", - "pipeline": "manual, ci", - "dualmode": "" + "pipeline": "manual, ci" }, { "path": "tools/scripts/validators/content/check-proper-nouns.js", + "script": "check-proper-nouns", "category": "validator", "purpose": "qa:content-quality", "scope": "v2, tools/scripts/validators/content, tests/config/spell-dict.json", @@ -27674,1516 +29163,295 @@ "pipeline": "manual", "dualmode": "--check (default) | --fix" }, + { + "path": "tools/scripts/validators/governance/audit-script-inventory.js", + "script": "audit-script-inventory", + "category": "validator", + "purpose": "governance:repo-health", + "scope": "full-repo", + "needs": "R-R14, R-R18, R-C6", + "purpose_statement": "Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category.", + "pipeline": "P1 (commit), indirect", + "dualmode": "--fix --dry-run | --fix | audit-only" + }, { "path": "tools/scripts/validators/governance/check-agent-docs-freshness.js", + "script": "check-agent-docs-freshness", "category": "validator", "purpose": "governance:agent-governance", "scope": "tools/scripts/validators/governance, .github, ai-tools/ai-skills, contribute", "needs": "R-R14, R-R18", "purpose_statement": "Validates that required agent governance docs exist and have been touched within a freshness threshold", - "pipeline": "manual, ci", - "dualmode": "" + "pipeline": "manual, ci" + }, + { + "path": "tools/scripts/validators/governance/review-governance-repair-checklist.js", + "script": "review-governance-repair-checklist", + "category": "validator", + "purpose": "governance:repo-health", + "scope": "full-repo", + "needs": "R-R14, R-R18", + "purpose_statement": "Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied.", + "pipeline": "manual", + "dualmode": "--json | --md | default both" }, { "path": "tools/scripts/verify-all-pages.js", + "script": "verify-all-pages", "category": "enforcer", "purpose": "qa:repo-health", "scope": "tools/scripts", "needs": "E-C1, R-R14", "purpose_statement": "Page verifier — checks all pages in docs.json resolve to valid files", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/verify-pay-orc-gate-finalize.sh", + "script": "verify-pay-orc-gate-finalize", "category": "enforcer", "purpose": "qa:repo-health", - "scope": "tools/scripts, .githooks/pre-commit, v2/gateways, v2/orchestrators", + "scope": "v2-content", "needs": "E-C1, R-R14", "purpose_statement": "Payment/orchestrator gate verifier — checks payment and orchestrator documentation gate conditions", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/verify/.verify-large-change.sh", + "script": "verify-large-change", "category": "enforcer", "purpose": "qa:repo-health", "scope": "tools/scripts/verify", "needs": "E-C1, R-R14", "purpose_statement": "Large change verifier — blocks or warns when a commit touches an unusually large number of files", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" + "pipeline": "manual — not yet in pipeline" }, { "path": "tools/scripts/wcag-repair-common.js", + "script": "wcag-repair-common", "category": "remediator", "purpose": "qa:content-quality", "scope": "tools/scripts, tests/integration, tasks/reports, v2", "needs": "E-R1, R-R11", "purpose_statement": "WCAG repair shared logic — common repair functions used by WCAG audit fix mode", - "pipeline": "manual — not yet in pipeline", - "dualmode": "" - }, - { - "path": "tools/scripts/validators/governance/audit-script-inventory.js", - "script": "audit-script-inventory", - "category": "validator", - "purpose": "governance:repo-health", - "scope": "full-repo" - }, - { - "path": "tools/scripts/validators/governance/review-governance-repair-checklist.js", - "category": "validator", - "purpose": "governance:repo-health", - "scope": "full-repo", - "needs": "R-R14, R-R18", - "purpose_statement": "Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied.", - "pipeline": "manual", - "dualmode": "--json | --md | default both" - }, - { - "path": "tools/lib/component-governance-utils.js", - "script": "component-governance-utils", - "category": "utility", - "purpose": "governance:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/config-validator.js", - "script": "config-validator", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/journey-check.js", - "script": "journey-check", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/llm-evaluator.js", - "script": "llm-evaluator", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/changelog.js", - "script": "prompts/changelog", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/concept.js", - "script": "prompts/concept", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/faq.js", - "script": "prompts/faq", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/glossary.js", - "script": "prompts/glossary", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/how_to.js", - "script": "prompts/how_to", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/index.js", - "script": "prompts/index", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/landing.js", - "script": "prompts/landing", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/overview.js", - "script": "prompts/overview", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/reference.js", - "script": "prompts/reference", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/troubleshooting.js", - "script": "prompts/troubleshooting", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/prompts/tutorial.js", - "script": "prompts/tutorial", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/quality-gate.js", - "script": "quality-gate", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/rubric-loader.js", - "script": "rubric-loader", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/docs-usefulness/rule-evaluators.js", - "script": "rule-evaluators", - "category": "utility", - "purpose": "qa:repo-health", - "scope": "single-domain" - }, - { - "path": "tools/lib/load-js-yaml.js", - "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/lib, tests, tools/scripts", - "needs": "E-C6, F-C1", - "purpose_statement": "YAML loader utility — resolves js-yaml from repo-local installs and falls back to a minimal parser for task-contract style files in bare worktrees", - "pipeline": "indirect — library module", - "dualmode": "" - }, - { - "path": "tools/lib/load-minimatch.js", - "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "tools/lib, tests, tools/scripts", - "needs": "E-C6, F-C1", - "purpose_statement": "Glob matcher loader — resolves minimatch from repo-local installs and falls back to a simple glob matcher for bare worktrees", - "pipeline": "indirect — library module", - "dualmode": "" - }, - { - "path": "tools/lib/mdx-safe-markdown.js", - "script": "mdx-safe-markdown", - "category": "utility", - "purpose": "qa:content-quality", - "scope": "full-repo" - }, - { - "path": "tools/lib/script-governance-config.js", - "script": "script-governance-config", - "category": "utility", - "purpose": "governance:repo-health", - "scope": "full-repo" - }, - { - "path": "tools/lib/script-header-utils.js", - "script": "script-header-utils", - "category": "utility", - "purpose": "governance:repo-health", - "scope": "full-repo" - }, - { - "path": "tools/notion/1-read-notion-to-csv.js", - "script": "1-read-notion-to-csv", - "category": "automation", - "purpose": "tooling:dev-tools", - "scope": "external" - }, - { - "path": "tools/notion/2-read-docs-to-csv.js", - "script": "2-read-docs-to-csv", - "category": "generator", - "purpose": "tooling:dev-tools", - "scope": "external" - }, - { - "path": "tools/notion/3-check-duplicates.js", - "script": "3-check-duplicates", - "category": "validator", - "purpose": "tooling:dev-tools", - "scope": "external" - }, - { - "path": "tools/notion/4-remove-duplicates.js", - "script": "4-remove-duplicates", - "category": "remediator", - "purpose": "tooling:dev-tools", - "scope": "external" - }, - { - "path": "tools/notion/5-export-to-notion.js", - "script": "5-export-to-notion", - "category": "automation", - "purpose": "tooling:dev-tools", - "scope": "external" - }, - { - "path": "tools/notion/backup-notion-table.js", - "script": "backup-notion-table", - "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "external" - }, - { - "path": "tools/notion/install-local-sync-hook.sh", - "script": "install-local-sync-hook", - "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "single-file" - }, - { - "path": "tools/notion/local-post-commit-sync.sh", - "script": "local-post-commit-sync", - "category": "orchestrator", - "purpose": "tooling:dev-tools", - "scope": "external" - }, - { - "path": "tools/notion/remove-local-sync-hook.sh", - "script": "remove-local-sync-hook", - "category": "utility", - "purpose": "tooling:dev-tools", - "scope": "single-file" - }, - { - "path": "tools/notion/sync-v2-en-canonical.js", - "script": "sync-v2-en-canonical", - "category": "orchestrator", - "purpose": "tooling:dev-tools", - "scope": "external" + "pipeline": "manual — not yet in pipeline" } ], - "repair": { - "mode": "dry-run", - "dry_run": true, - "fixes": { - "json_phantoms_removed": 16, - "json_entries_added": 0, - "json_entries_updated": 210, - "headers_category_added": 0, - "headers_purpose_added": 0, - "headers_owner_added": 0, - "headers_script_added": 0, - "headers_usage_added": 0, - "headers_scope_added": 0, - "headers_needs_added": 0, - "headers_purpose_statement_added": 0, - "headers_pipeline_corrected": 55, - "indexes_regenerated": true, - "total_fixes": 281, - "files_modified": [], - "planned_files": [ - ".githooks/script-index.md", - ".githooks/verify-browser.js", - ".githooks/verify.sh", - ".github/script-index.md", - "docs-guide/indexes/scripts-index.md", - "docs-guide/indexes/scripts-index.mdx", - "snippets/automations/script-index.md", - "tasks/reports/script-classifications.json", - "tasks/scripts/script-index.md", - "tests/run-all.js", - "tests/script-index.md", - "tests/unit/audit-script-inventory-repair-rules.test.js", - "tests/unit/component-governance-generators.test.js", - "tests/unit/component-governance-utils.test.js", - "tests/unit/components/TEMPLATE.test.js", - "tests/unit/repair-governance.test.js", - "tools/config/script-index.md", - "tools/lib/component-governance-utils.js", - "tools/lib/docs-index-utils.js", - "tools/lib/docs-usefulness/config-validator.js", - "tools/lib/docs-usefulness/journey-check.js", - "tools/lib/docs-usefulness/llm-evaluator.js", - "tools/lib/docs-usefulness/prompts/changelog.js", - "tools/lib/docs-usefulness/prompts/concept.js", - "tools/lib/docs-usefulness/prompts/faq.js", - "tools/lib/docs-usefulness/prompts/glossary.js", - "tools/lib/docs-usefulness/prompts/how_to.js", - "tools/lib/docs-usefulness/prompts/index.js", - "tools/lib/docs-usefulness/prompts/landing.js", - "tools/lib/docs-usefulness/prompts/overview.js", - "tools/lib/docs-usefulness/prompts/reference.js", - "tools/lib/docs-usefulness/prompts/troubleshooting.js", - "tools/lib/docs-usefulness/prompts/tutorial.js", - "tools/lib/docs-usefulness/quality-gate.js", - "tools/lib/docs-usefulness/rubric-loader.js", - "tools/lib/docs-usefulness/rule-evaluators.js", - "tools/lib/docs-usefulness/scoring.js", - "tools/lib/generated-file-banners.js", - "tools/lib/script-governance-config.js", - "tools/lib/script-header-utils.js", - "tools/lib/script-index.md", - "tools/notion/install-local-sync-hook.sh", - "tools/notion/local-post-commit-sync.sh", - "tools/notion/remove-local-sync-hook.sh", - "tools/notion/script-index.md", - "tools/script-index.md", - "tools/scripts/add-framework-headers.js", - "tools/scripts/audit-tasks-folders.js", - "tools/scripts/codex-commit.js", - "tools/scripts/codex-safe-merge-with-stash.js", - "tools/scripts/convert-rss-to-mdx.js", - "tools/scripts/create-codex-pr.js", - "tools/scripts/cross-agent-packager.js", - "tools/scripts/debug-mint-dev.js", - "tools/scripts/dev/batch-update-og-image.sh", - "tools/scripts/dev/replace-og-image.py", - "tools/scripts/dev/test-add-callouts.js", - "tools/scripts/dev/test-seo-generator.js", - "tools/scripts/dev/update-all-og-images.js", - "tools/scripts/enforce-generated-file-banners.js", - "tools/scripts/enforcers/pr/check-component-immutability.js", - "tools/scripts/generate-component-docs.js", - "tools/scripts/generate-component-governance-remediation-reports.js", - "tools/scripts/generate-component-registry.js", - "tools/scripts/generate-docs-guide-components-index.js", - "tools/scripts/generate-docs-guide-indexes.js", - "tools/scripts/generate-docs-guide-pages-index.js", - "tools/scripts/i18n/lib/common.js", - "tools/scripts/i18n/lib/config.js", - "tools/scripts/i18n/lib/docs-json-localizer.js", - "tools/scripts/i18n/lib/docs-routes.js", - "tools/scripts/i18n/lib/frontmatter.js", - "tools/scripts/i18n/lib/mdx-parser.js", - "tools/scripts/i18n/lib/mdx-translate.js", - "tools/scripts/i18n/lib/path-utils.js", - "tools/scripts/i18n/lib/provenance.js", - "tools/scripts/i18n/lib/provider-mock.js", - "tools/scripts/i18n/lib/provider-openrouter.js", - "tools/scripts/i18n/lib/providers.js", - "tools/scripts/i18n/test-mintlify-version-language-toggle.js", - "tools/scripts/i18n/test/cli-guardrails.test.js", - "tools/scripts/i18n/test/docs-json-localizer.test.js", - "tools/scripts/i18n/test/frontmatter.test.js", - "tools/scripts/i18n/test/mdx-translate.test.js", - "tools/scripts/i18n/test/provenance.test.js", - "tools/scripts/i18n/test/provider-openrouter.test.js", - "tools/scripts/mint-dev.sh", - "tools/scripts/new-script.js", - "tools/scripts/orchestrators/repair-governance.js", - "tools/scripts/publish-v2-internal-reports.js", - "tools/scripts/remediators/assets/migrate-assets-to-branch.js", - "tools/scripts/remediators/components/repair-component-metadata.js", - "tools/scripts/scan-component-imports.js", - "tools/scripts/script-footprint-and-usage-audit.js", - "tools/scripts/snippets/fetch-lpt-exchanges.sh", - "tools/scripts/snippets/fetch-openapi-specs.sh", - "tools/scripts/snippets/generate-api-docs.sh", - "tools/scripts/snippets/generate-data/scripts/generate-glossary.js", - "tools/scripts/snippets/generate-data/scripts/terminology-search.js", - "tools/scripts/snippets/test-scripts.sh", - "tools/scripts/sync-codex-skills.js", - "tools/scripts/validators/components/check-component-css.js", - "tools/scripts/validators/components/check-component-docs.js", - "tools/scripts/validators/content/check-grammar-en-gb.js", - "tools/scripts/validators/governance/audit-script-inventory.js", - "tools/scripts/validators/governance/review-governance-repair-checklist.js", - "tools/scripts/verify-all-pages.js", - "tools/scripts/verify-pay-orc-gate-finalize.sh", - "tools/scripts/verify/.verify-large-change.sh", - "tools/scripts/wcag-repair-common.js" - ] - }, - "needs_human": [ - { - "path": ".githooks/install.sh", - "missing": [ - "@scope" - ] - }, - { - "path": ".githooks/pre-commit", - "missing": [ - "@scope" - ] - }, - { - "path": ".githooks/pre-commit-no-deletions", - "missing": [ - "@scope" - ] - }, - { - "path": ".githooks/pre-push", - "missing": [ - "@scope" - ] - }, - { - "path": ".githooks/server-manager.js", - "missing": [ - "@scope" - ] - }, - { - "path": ".githooks/verify-browser.js", - "missing": [ - "@scope" - ] - }, - { - "path": ".githooks/verify.sh", - "missing": [ - "@scope" - ] - }, - { - "path": ".github/scripts/fetch-forum-data.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": ".github/scripts/fetch-ghost-blog-data.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": ".github/scripts/fetch-youtube-data.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": ".github/scripts/project-showcase-sync.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tasks/scripts/audit-python.py", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/integration/browser.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/integration/domain-pages-audit.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/integration/mdx-component-runtime-smoke.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/integration/openapi-reference-audit.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tests/integration/v2-link-audit.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tests/integration/v2-link-audit.selftest.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/integration/v2-wcag-audit.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/integration/v2-wcag-audit.selftest.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/run-all.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/run-pr-checks.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tests/unit/audit-script-inventory-repair-rules.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/codex-commit.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/codex-safe-merge-with-stash.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/codex-skill-sync.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/codex-task-cleanup.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/codex-task-preflight.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/component-governance-generators.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/component-governance-utils.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/components/TEMPLATE.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/create-codex-pr.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/docs-guide-sot.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/docs-navigation.test.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tests/unit/links-imports.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/lpd-scoped-mint-dev.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/mdx-component-runtime-smoke.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/mdx-component-scope.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/mdx-guards.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/mdx-safe-markdown.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/mdx.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/migrate-assets-to-branch.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/openapi-reference-audit.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/openapi-rolling-issue.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/quality.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/repair-governance.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/repair-spelling.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/repo-audit-pipeline.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/script-docs.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/spelling.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/style-guide.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/v2-link-audit.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/v2-wcag-audit.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/unit/validate-codex-task-contract.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/utils/file-walker.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/utils/mdx-parser.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/utils/mintignore.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/utils/openapi-rolling-issue.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tests/utils/spell-checker.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/config/v2-internal-report-pages.js", - "missing": [ - "@category" - ] - }, - { - "path": "tools/lib/docs-index-utils.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/lib/load-js-yaml.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/lib/load-minimatch.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/add-pagetype-mechanical.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/assign-purpose-metadata.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/audit-component-usage.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/audit-media-assets.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/audit-scripts.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/audit-tasks-folders.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/audit-v2-usefulness.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/check-codex-pr-overlap.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/check-no-ai-stash.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/cleanup-quarantine-manager.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/codex-commit.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/codex-safe-merge-with-stash.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/codex/lock-release.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/codex/task-cleanup.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/codex/task-finalize.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/codex/task-preflight.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/codex/validate-locks.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/component-layout-governance.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/convert-rss-to-mdx.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/create-codex-pr.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/cross-agent-packager.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/debug-mint-dev.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/add-callouts.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/batch-update-og-image.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/ensure-mint-watcher-patch.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/generate-mint-dev-scope.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/replace-og-image.py", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/seo-generator-safe.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/test-add-callouts.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/test-seo-generator.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/update-all-og-images.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/dev/update-og-image.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/docs-quality-and-freshness-audit.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/enforce-generated-file-banners.js", - "missing": [ - "@category", - "@purpose", - "@scope", - "@needs", - "@purpose-statement" - ] - }, - { - "path": "tools/scripts/enforcers/pr/check-component-immutability.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/enforcers/pr/check-pr-template.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/generate-ai-sitemap.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/generate-component-docs.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/generate-component-registry.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/generate-content-gap-reconciliation.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/generate-docs-guide-indexes.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/generate-docs-guide-pages-index.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/generate-docs-index.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/generate-llms-files.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/generate-pages-index.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/generate-localized-docs-json.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/i18n/lib/common.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/config.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/docs-json-localizer.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/docs-routes.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/frontmatter.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/mdx-parser.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/mdx-translate.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/path-utils.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/provenance.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/provider-mock.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/provider-openrouter.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/lib/providers.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/test-mintlify-version-language-toggle.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/test/cli-guardrails.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/test/docs-json-localizer.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/test/frontmatter.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/test/mdx-translate.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/test/provenance.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/test/provider-openrouter.test.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/i18n/translate-docs.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/i18n/validate-generated.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/mint-dev.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/new-script.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/orchestrators/repair-governance.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/publish-v2-internal-reports.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/remediators/assets/migrate-assets-to-branch.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/remediators/components/repair-component-metadata.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/remediators/content/repair-mdx-safe-markdown.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/repo-audit-orchestrator.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/scan-component-imports.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/script-footprint-and-usage-audit.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/snippets/fetch-external-docs.sh", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/snippets/fetch-lpt-exchanges.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/snippets/fetch-openapi-specs.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/snippets/generate-api-docs.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/snippets/generate-data/scripts/generate-glossary.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/snippets/generate-data/scripts/terminology-search.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/snippets/generate-seo.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/snippets/test-scripts.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/style-and-language-homogenizer-en-gb.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/sync-codex-skills.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/test-v2-pages.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/validate-codex-task-contract.js", - "missing": [ - "@scope", - "@pipeline" - ] - }, - { - "path": "tools/scripts/validators/components/check-component-css.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/validators/components/check-component-docs.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/validators/components/check-mdx-component-scope.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/components/check-naming-conventions.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/content/check-anchor-usage.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/content/check-description-quality.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/content/check-double-headers.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/content/check-grammar-en-gb.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/content/check-mdx-safe-markdown.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/content/check-page-endings.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/content/check-proper-nouns.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/validators/governance/audit-script-inventory.js", - "missing": [ - "@pipeline" - ] - }, - { - "path": "tools/scripts/validators/governance/check-agent-docs-freshness.js", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/verify-pay-orc-gate-finalize.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/verify/.verify-large-change.sh", - "missing": [ - "@scope" - ] - }, - { - "path": "tools/scripts/wcag-repair-common.js", - "missing": [ - "@scope" - ] - } - ], - "projected_summary": { - "total_scripts": 210, - "grade_distribution": { - "A": 0, - "B": 53, - "C": 156, - "F": 1 - }, - "pipeline_verification": { - "MATCH": 176, - "MISMATCH": 34, - "MISSING": 0 - }, - "classification_sync": { - "in_json": 210, - "not_in_json": 0, - "phantom": 0 - } - } - }, - "projected_summary": { - "total_scripts": 210, - "grade_distribution": { - "A": 0, - "B": 53, - "C": 156, - "F": 1 - }, - "pipeline_verification": { - "MATCH": 176, - "MISMATCH": 34, - "MISSING": 0 - }, - "classification_sync": { - "in_json": 210, - "not_in_json": 0, - "phantom": 0 - } - } + "scoped_script_paths": [ + ".githooks/install.sh", + ".githooks/pre-commit", + ".githooks/pre-commit-no-deletions", + ".githooks/pre-push", + ".githooks/server-manager.js", + ".githooks/verify-browser.js", + ".githooks/verify.sh", + ".github/scripts/fetch-forum-data.js", + ".github/scripts/fetch-ghost-blog-data.js", + ".github/scripts/fetch-youtube-data.js", + ".github/scripts/project-showcase-sync.js", + "snippets/automations/youtube/filterVideos.js", + "tasks/scripts/audit-python.py", + "tests/integration/browser.test.js", + "tests/integration/domain-pages-audit.js", + "tests/integration/mdx-component-runtime-smoke.js", + "tests/integration/openapi-reference-audit.js", + "tests/integration/v2-link-audit.js", + "tests/integration/v2-link-audit.selftest.js", + "tests/integration/v2-wcag-audit.js", + "tests/integration/v2-wcag-audit.selftest.js", + "tests/run-all.js", + "tests/run-pr-checks.js", + "tests/unit/audit-script-inventory-repair-rules.test.js", + "tests/unit/codex-commit.test.js", + "tests/unit/codex-safe-merge-with-stash.test.js", + "tests/unit/codex-skill-sync.test.js", + "tests/unit/codex-task-cleanup.test.js", + "tests/unit/codex-task-preflight.test.js", + "tests/unit/component-governance-generators.test.js", + "tests/unit/component-governance-utils.test.js", + "tests/unit/components/TEMPLATE.test.js", + "tests/unit/create-codex-pr.test.js", + "tests/unit/docs-guide-sot.test.js", + "tests/unit/docs-navigation.test.js", + "tests/unit/docs-path-sync.test.js", + "tests/unit/links-imports.test.js", + "tests/unit/lpd-scoped-mint-dev.test.js", + "tests/unit/mdx-component-runtime-smoke.test.js", + "tests/unit/mdx-component-scope.test.js", + "tests/unit/mdx-guards.test.js", + "tests/unit/mdx-safe-markdown.test.js", + "tests/unit/mdx.test.js", + "tests/unit/migrate-assets-to-branch.test.js", + "tests/unit/openapi-reference-audit.test.js", + "tests/unit/openapi-rolling-issue.test.js", + "tests/unit/quality.test.js", + "tests/unit/repair-governance.test.js", + "tests/unit/repair-spelling.test.js", + "tests/unit/repo-audit-pipeline.test.js", + "tests/unit/script-docs.test.js", + "tests/unit/spelling.test.js", + "tests/unit/style-guide.test.js", + "tests/unit/usefulness-journey.test.js", + "tests/unit/usefulness-rubric.test.js", + "tests/unit/v2-link-audit.test.js", + "tests/unit/v2-wcag-audit.test.js", + "tests/unit/validate-codex-task-contract.test.js", + "tests/utils/file-walker.js", + "tests/utils/mdx-parser.js", + "tests/utils/mintignore.js", + "tests/utils/openapi-rolling-issue.js", + "tests/utils/spell-checker.js", + "tools/config/v2-internal-report-pages.js", + "tools/lib/component-governance-utils.js", + "tools/lib/docs-index-utils.js", + "tools/lib/docs-publishability.js", + "tools/lib/docs-usefulness/config-validator.js", + "tools/lib/docs-usefulness/journey-check.js", + "tools/lib/docs-usefulness/llm-evaluator.js", + "tools/lib/docs-usefulness/prompts/changelog.js", + "tools/lib/docs-usefulness/prompts/concept.js", + "tools/lib/docs-usefulness/prompts/faq.js", + "tools/lib/docs-usefulness/prompts/glossary.js", + "tools/lib/docs-usefulness/prompts/how_to.js", + "tools/lib/docs-usefulness/prompts/index.js", + "tools/lib/docs-usefulness/prompts/landing.js", + "tools/lib/docs-usefulness/prompts/overview.js", + "tools/lib/docs-usefulness/prompts/reference.js", + "tools/lib/docs-usefulness/prompts/troubleshooting.js", + "tools/lib/docs-usefulness/prompts/tutorial.js", + "tools/lib/docs-usefulness/quality-gate.js", + "tools/lib/docs-usefulness/rubric-loader.js", + "tools/lib/docs-usefulness/rule-evaluators.js", + "tools/lib/docs-usefulness/scoring.js", + "tools/lib/generated-file-banners.js", + "tools/lib/load-js-yaml.js", + "tools/lib/load-minimatch.js", + "tools/lib/mdx-safe-markdown.js", + "tools/lib/script-governance-config.js", + "tools/lib/script-header-utils.js", + "tools/notion/1-read-notion-to-csv.js", + "tools/notion/2-read-docs-to-csv.js", + "tools/notion/3-check-duplicates.js", + "tools/notion/4-remove-duplicates.js", + "tools/notion/5-export-to-notion.js", + "tools/notion/backup-notion-table.js", + "tools/notion/install-local-sync-hook.sh", + "tools/notion/local-post-commit-sync.sh", + "tools/notion/remove-local-sync-hook.sh", + "tools/notion/sync-v2-en-canonical.js", + "tools/scripts/add-framework-headers.js", + "tools/scripts/add-pagetype-mechanical.js", + "tools/scripts/assign-purpose-metadata.js", + "tools/scripts/audit-component-usage.js", + "tools/scripts/audit-media-assets.js", + "tools/scripts/audit-scripts.js", + "tools/scripts/audit-tasks-folders.js", + "tools/scripts/audit-v2-usefulness.js", + "tools/scripts/check-codex-pr-overlap.js", + "tools/scripts/check-no-ai-stash.sh", + "tools/scripts/cleanup-quarantine-manager.js", + "tools/scripts/codex-commit.js", + "tools/scripts/codex-safe-merge-with-stash.js", + "tools/scripts/codex/lock-release.js", + "tools/scripts/codex/task-cleanup.js", + "tools/scripts/codex/task-finalize.js", + "tools/scripts/codex/task-preflight.js", + "tools/scripts/codex/validate-locks.js", + "tools/scripts/component-layout-governance.js", + "tools/scripts/convert-rss-to-mdx.js", + "tools/scripts/create-codex-pr.js", + "tools/scripts/cross-agent-packager.js", + "tools/scripts/debug-mint-dev.js", + "tools/scripts/dev/add-callouts.js", + "tools/scripts/dev/batch-update-og-image.sh", + "tools/scripts/dev/ensure-mint-watcher-patch.sh", + "tools/scripts/dev/generate-mint-dev-scope.js", + "tools/scripts/dev/mint-custom-loader.sh", + "tools/scripts/dev/replace-og-image.py", + "tools/scripts/dev/seo-generator-safe.js", + "tools/scripts/dev/test-add-callouts.js", + "tools/scripts/dev/test-seo-generator.js", + "tools/scripts/dev/update-all-og-images.js", + "tools/scripts/dev/update-og-image.js", + "tools/scripts/docs-quality-and-freshness-audit.js", + "tools/scripts/enforce-generated-file-banners.js", + "tools/scripts/enforcers/pr/check-component-immutability.js", + "tools/scripts/enforcers/pr/check-pr-template.js", + "tools/scripts/generate-ai-sitemap.js", + "tools/scripts/generate-component-docs.js", + "tools/scripts/generate-component-governance-remediation-reports.js", + "tools/scripts/generate-component-registry.js", + "tools/scripts/generate-content-gap-reconciliation.js", + "tools/scripts/generate-docs-guide-components-index.js", + "tools/scripts/generate-docs-guide-indexes.js", + "tools/scripts/generate-docs-guide-pages-index.js", + "tools/scripts/generate-docs-index.js", + "tools/scripts/generate-llms-files.js", + "tools/scripts/generate-pages-index.js", + "tools/scripts/i18n/generate-localized-docs-json.js", + "tools/scripts/i18n/lib/common.js", + "tools/scripts/i18n/lib/config.js", + "tools/scripts/i18n/lib/docs-json-localizer.js", + "tools/scripts/i18n/lib/docs-routes.js", + "tools/scripts/i18n/lib/frontmatter.js", + "tools/scripts/i18n/lib/mdx-parser.js", + "tools/scripts/i18n/lib/mdx-translate.js", + "tools/scripts/i18n/lib/path-utils.js", + "tools/scripts/i18n/lib/provenance.js", + "tools/scripts/i18n/lib/provider-mock.js", + "tools/scripts/i18n/lib/provider-openrouter.js", + "tools/scripts/i18n/lib/providers.js", + "tools/scripts/i18n/test-mintlify-version-language-toggle.js", + "tools/scripts/i18n/test/cli-guardrails.test.js", + "tools/scripts/i18n/test/docs-json-localizer.test.js", + "tools/scripts/i18n/test/frontmatter.test.js", + "tools/scripts/i18n/test/mdx-translate.test.js", + "tools/scripts/i18n/test/provenance.test.js", + "tools/scripts/i18n/test/provider-openrouter.test.js", + "tools/scripts/i18n/translate-docs.js", + "tools/scripts/i18n/validate-generated.js", + "tools/scripts/lib/docs-path-sync.js", + "tools/scripts/mint-dev.sh", + "tools/scripts/new-script.js", + "tools/scripts/orchestrators/repair-governance.js", + "tools/scripts/publish-v2-internal-reports.js", + "tools/scripts/remediators/assets/migrate-assets-to-branch.js", + "tools/scripts/remediators/components/repair-component-metadata.js", + "tools/scripts/remediators/content/repair-mdx-safe-markdown.js", + "tools/scripts/remediators/content/repair-spelling.js", + "tools/scripts/remediators/content/sync-docs-paths.js", + "tools/scripts/repo-audit-orchestrator.js", + "tools/scripts/scan-component-imports.js", + "tools/scripts/script-footprint-and-usage-audit.js", + "tools/scripts/snippets/fetch-external-docs.sh", + "tools/scripts/snippets/fetch-lpt-exchanges.sh", + "tools/scripts/snippets/fetch-openapi-specs.sh", + "tools/scripts/snippets/generate-api-docs.sh", + "tools/scripts/snippets/generate-data/scripts/generate-glossary.js", + "tools/scripts/snippets/generate-data/scripts/terminology-search.js", + "tools/scripts/snippets/generate-seo.js", + "tools/scripts/snippets/test-scripts.sh", + "tools/scripts/style-and-language-homogenizer-en-gb.js", + "tools/scripts/sync-codex-skills.js", + "tools/scripts/test-v2-pages.js", + "tools/scripts/validate-codex-task-contract.js", + "tools/scripts/validators/components/check-component-css.js", + "tools/scripts/validators/components/check-component-docs.js", + "tools/scripts/validators/components/check-mdx-component-scope.js", + "tools/scripts/validators/components/check-naming-conventions.js", + "tools/scripts/validators/content/check-anchor-usage.js", + "tools/scripts/validators/content/check-description-quality.js", + "tools/scripts/validators/content/check-docs-path-sync.js", + "tools/scripts/validators/content/check-double-headers.js", + "tools/scripts/validators/content/check-grammar-en-gb.js", + "tools/scripts/validators/content/check-mdx-safe-markdown.js", + "tools/scripts/validators/content/check-page-endings.js", + "tools/scripts/validators/content/check-proper-nouns.js", + "tools/scripts/validators/governance/audit-script-inventory.js", + "tools/scripts/validators/governance/check-agent-docs-freshness.js", + "tools/scripts/validators/governance/review-governance-repair-checklist.js", + "tools/scripts/verify-all-pages.js", + "tools/scripts/verify-pay-orc-gate-finalize.sh", + "tools/scripts/verify/.verify-large-change.sh", + "tools/scripts/wcag-repair-common.js" + ] } diff --git a/tests/unit/component-governance-utils.test.js b/tests/unit/component-governance-utils.test.js index 81e490121..2469655a1 100644 --- a/tests/unit/component-governance-utils.test.js +++ b/tests/unit/component-governance-utils.test.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script component-governance-utils.test - * @category validator - * @purpose qa:repo-health - * @scope tests - * @owner docs - * @needs R-R10 + * @script component-governance-utils.test + * @category validator + * @purpose qa:repo-health + * @scope tests + * @owner docs + * @needs R-R10 * @purpose-statement Verifies shared component governance utility parsing, scanning, and archive exclusion behavior. - * @pipeline P1 (commit, via run-all) - * @usage node tests/unit/component-governance-utils.test.js + * @pipeline P1 (commit, via run-all) + * @usage node tests/unit/component-governance-utils.test.js */ const assert = require('assert'); diff --git a/tests/unit/components/TEMPLATE.test.js b/tests/unit/components/TEMPLATE.test.js index 1b7896411..9eeb76a39 100644 --- a/tests/unit/components/TEMPLATE.test.js +++ b/tests/unit/components/TEMPLATE.test.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script component-template.test - * @category validator - * @purpose qa:repo-health - * @scope tests - * @owner docs - * @needs R-R10 + * @script component-template.test + * @category validator + * @purpose qa:repo-health + * @scope tests + * @owner docs + * @needs R-R10 * @purpose-statement Template for category-scoped component unit tests. - * @pipeline manual - * @usage node tests/unit/components/TEMPLATE.test.js + * @pipeline manual + * @usage node tests/unit/components/TEMPLATE.test.js */ const assert = require('assert'); diff --git a/tools/lib/docs-index-utils.js b/tools/lib/docs-index-utils.js index 744e95ee1..d92853edd 100644 --- a/tools/lib/docs-index-utils.js +++ b/tools/lib/docs-index-utils.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R16, R-R17 * @purpose-statement Shared utilities for docs-index.json generation — path resolution, frontmatter extraction, index merging - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/lib/docs-index-utils.js [flags] */ diff --git a/tools/lib/docs-usefulness/config-validator.js b/tools/lib/docs-usefulness/config-validator.js index 5cc136cf1..7108f1d32 100644 --- a/tools/lib/docs-usefulness/config-validator.js +++ b/tools/lib/docs-usefulness/config-validator.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { validateConfig } = require('../lib/docs-usefulness/config-validator'); */ +/** + * @script config-validator + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14, R-C6 + * @purpose-statement Validates docs-usefulness config structure and field completeness. + * @pipeline indirect -- library module + * @usage const { validateConfig } = require('../lib/docs-usefulness/config-validator'); + */ const { PURPOSE_ENUM, diff --git a/tools/lib/docs-usefulness/journey-check.js b/tools/lib/docs-usefulness/journey-check.js index e34f07e8e..6bff92713 100644 --- a/tools/lib/docs-usefulness/journey-check.js +++ b/tools/lib/docs-usefulness/journey-check.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { checkJourney } = require('../lib/docs-usefulness/journey-check'); */ +/** + * @script journey-check + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14, R-C6 + * @purpose-statement Evaluates docs pages against user journey completeness criteria. + * @pipeline indirect -- library module + * @usage const { checkJourney } = require('../lib/docs-usefulness/journey-check'); + */ const { minimatch } = require('../load-minimatch'); const { loadJourneys } = require('./rubric-loader'); diff --git a/tools/lib/docs-usefulness/llm-evaluator.js b/tools/lib/docs-usefulness/llm-evaluator.js index 3f5c7655f..02c904d08 100644 --- a/tools/lib/docs-usefulness/llm-evaluator.js +++ b/tools/lib/docs-usefulness/llm-evaluator.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { evaluate } = require('../lib/docs-usefulness/llm-evaluator'); */ +/** + * @script llm-evaluator + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement Wraps LLM API calls for rubric-based page quality evaluation. + * @pipeline indirect -- library module + * @usage const { evaluate } = require('../lib/docs-usefulness/llm-evaluator'); + */ const fs = require('fs'); const path = require('path'); diff --git a/tools/lib/docs-usefulness/prompts/changelog.js b/tools/lib/docs-usefulness/prompts/changelog.js index 884519865..a6b21d18c 100644 --- a/tools/lib/docs-usefulness/prompts/changelog.js +++ b/tools/lib/docs-usefulness/prompts/changelog.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/changelog'); */ +/** + * @script prompts/changelog + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for changelog page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/changelog'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/concept.js b/tools/lib/docs-usefulness/prompts/concept.js index fa8698d76..e7df7c1b3 100644 --- a/tools/lib/docs-usefulness/prompts/concept.js +++ b/tools/lib/docs-usefulness/prompts/concept.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/concept'); */ +/** + * @script prompts/concept + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for concept page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/concept'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/faq.js b/tools/lib/docs-usefulness/prompts/faq.js index a165e5ee1..05dc2f8b9 100644 --- a/tools/lib/docs-usefulness/prompts/faq.js +++ b/tools/lib/docs-usefulness/prompts/faq.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/faq'); */ +/** + * @script prompts/faq + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for faq page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/faq'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/glossary.js b/tools/lib/docs-usefulness/prompts/glossary.js index fd0140058..290b999de 100644 --- a/tools/lib/docs-usefulness/prompts/glossary.js +++ b/tools/lib/docs-usefulness/prompts/glossary.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/glossary'); */ +/** + * @script prompts/glossary + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for glossary page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/glossary'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/how_to.js b/tools/lib/docs-usefulness/prompts/how_to.js index 5ee846ace..beb6e8e2f 100644 --- a/tools/lib/docs-usefulness/prompts/how_to.js +++ b/tools/lib/docs-usefulness/prompts/how_to.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/how_to'); */ +/** + * @script prompts/how_to + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for how_to page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/how_to'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/index.js b/tools/lib/docs-usefulness/prompts/index.js index 7b009af83..29d02b28a 100644 --- a/tools/lib/docs-usefulness/prompts/index.js +++ b/tools/lib/docs-usefulness/prompts/index.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/index'); */ +/** + * @script prompts/index + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for index page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/index'); + */ const landing = require('./landing'); const overview = require('./overview'); diff --git a/tools/lib/docs-usefulness/prompts/landing.js b/tools/lib/docs-usefulness/prompts/landing.js index 4ca9933d0..bca954b04 100644 --- a/tools/lib/docs-usefulness/prompts/landing.js +++ b/tools/lib/docs-usefulness/prompts/landing.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/landing'); */ +/** + * @script prompts/landing + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for landing page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/landing'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/overview.js b/tools/lib/docs-usefulness/prompts/overview.js index 3d9742cae..06d0be46f 100644 --- a/tools/lib/docs-usefulness/prompts/overview.js +++ b/tools/lib/docs-usefulness/prompts/overview.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/overview'); */ +/** + * @script prompts/overview + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for overview page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/overview'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/reference.js b/tools/lib/docs-usefulness/prompts/reference.js index 09499abfb..807133aae 100644 --- a/tools/lib/docs-usefulness/prompts/reference.js +++ b/tools/lib/docs-usefulness/prompts/reference.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/reference'); */ +/** + * @script prompts/reference + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for reference page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/reference'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/troubleshooting.js b/tools/lib/docs-usefulness/prompts/troubleshooting.js index 456c3ed47..23ee8dde9 100644 --- a/tools/lib/docs-usefulness/prompts/troubleshooting.js +++ b/tools/lib/docs-usefulness/prompts/troubleshooting.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/troubleshooting'); */ +/** + * @script prompts/troubleshooting + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for troubleshooting page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/troubleshooting'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/prompts/tutorial.js b/tools/lib/docs-usefulness/prompts/tutorial.js index f1d70b33c..6208db13d 100644 --- a/tools/lib/docs-usefulness/prompts/tutorial.js +++ b/tools/lib/docs-usefulness/prompts/tutorial.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/tutorial'); */ +/** + * @script prompts/tutorial + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement LLM prompt template for tutorial page-type usefulness evaluation. + * @pipeline indirect -- library module + * @usage const { getPrompt } = require('../lib/docs-usefulness/prompts/tutorial'); + */ const SYSTEM_BASE = 'You are a documentation quality evaluator for Livepeer docs. Return ONLY JSON: {"score":0-100,"pass":true/false,"reasoning":"one sentence"}.'; diff --git a/tools/lib/docs-usefulness/quality-gate.js b/tools/lib/docs-usefulness/quality-gate.js index 64a57a9d8..0710a4a31 100644 --- a/tools/lib/docs-usefulness/quality-gate.js +++ b/tools/lib/docs-usefulness/quality-gate.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { applyGate } = require('../lib/docs-usefulness/quality-gate'); */ +/** + * @script quality-gate + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14, R-C6 + * @purpose-statement Applies pass/fail thresholds to usefulness scores. + * @pipeline indirect -- library module + * @usage const { applyGate } = require('../lib/docs-usefulness/quality-gate'); + */ function runQualityGate(page) { const details = {}; diff --git a/tools/lib/docs-usefulness/rubric-loader.js b/tools/lib/docs-usefulness/rubric-loader.js index 642f477c2..0a95a206d 100644 --- a/tools/lib/docs-usefulness/rubric-loader.js +++ b/tools/lib/docs-usefulness/rubric-loader.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { loadRubric } = require('../lib/docs-usefulness/rubric-loader'); */ +/** + * @script rubric-loader + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement Loads and parses rubric YAML/JSON for page-type scoring rules. + * @pipeline indirect -- library module + * @usage const { loadRubric } = require('../lib/docs-usefulness/rubric-loader'); + */ const fs = require('fs'); const path = require('path'); diff --git a/tools/lib/docs-usefulness/rule-evaluators.js b/tools/lib/docs-usefulness/rule-evaluators.js index 7b6f93e77..7df14412e 100644 --- a/tools/lib/docs-usefulness/rule-evaluators.js +++ b/tools/lib/docs-usefulness/rule-evaluators.js @@ -10,6 +10,17 @@ * @pipeline indirect -- library module * @usage const { evaluateRule } = require('../lib/docs-usefulness/rule-evaluators'); */ +/** + * @script rule-evaluators + * @category utility + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement Evaluates individual rubric rules against page content. + * @pipeline indirect -- library module + * @usage const { evaluateRule } = require('../lib/docs-usefulness/rule-evaluators'); + */ function toText(value) { return String(value || '').toLowerCase(); diff --git a/tools/lib/docs-usefulness/scoring.js b/tools/lib/docs-usefulness/scoring.js index 6053b0ecc..cde166b19 100644 --- a/tools/lib/docs-usefulness/scoring.js +++ b/tools/lib/docs-usefulness/scoring.js @@ -10,6 +10,17 @@ * @pipeline indirect — library module * @usage const { score } = require('../lib/docs-usefulness/scoring'); */ +/** + * @script scoring + * @category utility + * @purpose qa:content-quality + * @scope single-domain + * @owner docs + * @needs R-R14 + * @purpose-statement Aggregates rule scores into a final usefulness score per page. + * @pipeline indirect — library module + * @usage const { score } = require('../lib/docs-usefulness/scoring'); + */ const fs = require('fs'); const path = require('path'); diff --git a/tools/lib/generated-file-banners.js b/tools/lib/generated-file-banners.js index f98637947..a670fa6b6 100644 --- a/tools/lib/generated-file-banners.js +++ b/tools/lib/generated-file-banners.js @@ -6,7 +6,7 @@ * @owner docs * @needs R-R16, R-R17 * @purpose-statement Generated file banner template — provides standard banner text for auto-generated files - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/lib/generated-file-banners.js [flags] */ const GENERATED_HIDDEN_MARKER = 'generated-file-banner:v1'; diff --git a/tools/lib/script-governance-config.js b/tools/lib/script-governance-config.js index f5c3de9ea..e5130a9b7 100644 --- a/tools/lib/script-governance-config.js +++ b/tools/lib/script-governance-config.js @@ -1,13 +1,13 @@ /** - * @script script-governance-config - * @category utility - * @purpose governance:repo-health - * @scope full-repo - * @owner docs - * @needs R-R14, R-R18, R-C6 + * @script script-governance-config + * @category utility + * @purpose governance:repo-health + * @scope full-repo + * @owner docs + * @needs R-R14, R-R18, R-C6 * @purpose-statement Shared governance constants for script discovery, indexing, classification, and pipeline normalisation across the repo. - * @pipeline indirect -- library module - * @usage const config = require('../lib/script-governance-config'); + * @pipeline indirect -- library module + * @usage const config = require('../lib/script-governance-config'); */ const path = require('path'); diff --git a/tools/lib/script-header-utils.js b/tools/lib/script-header-utils.js index a3416c39c..75f5704c2 100644 --- a/tools/lib/script-header-utils.js +++ b/tools/lib/script-header-utils.js @@ -1,13 +1,13 @@ /** - * @script script-header-utils - * @category utility - * @purpose governance:repo-health - * @scope full-repo - * @owner docs - * @needs R-R14, R-R18 + * @script script-header-utils + * @category utility + * @purpose governance:repo-health + * @scope full-repo + * @owner docs + * @needs R-R14, R-R18 * @purpose-statement Shared helpers for extracting and reading top-of-file script governance headers without scanning into executable source. - * @pipeline indirect - library module - * @usage const { extractLeadingScriptHeader } = require('../lib/script-header-utils'); + * @pipeline indirect - library module + * @usage const { extractLeadingScriptHeader } = require('../lib/script-header-utils'); */ const HEADER_SCAN_LINES = 200; diff --git a/tools/notion/install-local-sync-hook.sh b/tools/notion/install-local-sync-hook.sh index 53bef3746..09731f313 100755 --- a/tools/notion/install-local-sync-hook.sh +++ b/tools/notion/install-local-sync-hook.sh @@ -8,7 +8,6 @@ # @purpose-statement Installs the managed local post-commit hook that invokes the Notion sync runner and preserves any prior hook as a backup. # @pipeline manual # @usage bash tools/notion/install-local-sync-hook.sh [flags] - set -euo pipefail MARKER="LIVEPEER_NOTION_LOCAL_SYNC_HOOK" diff --git a/tools/notion/local-post-commit-sync.sh b/tools/notion/local-post-commit-sync.sh index a0c45f2e7..5fdc6f1e4 100755 --- a/tools/notion/local-post-commit-sync.sh +++ b/tools/notion/local-post-commit-sync.sh @@ -8,7 +8,6 @@ # @purpose-statement Detects docs.json or v2 content changes in the latest commit and runs the canonical Notion sync locally when enabled. # @pipeline manual # @usage bash tools/notion/local-post-commit-sync.sh [flags] - set -u SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" diff --git a/tools/notion/remove-local-sync-hook.sh b/tools/notion/remove-local-sync-hook.sh index ad6899648..ddbe45f1f 100755 --- a/tools/notion/remove-local-sync-hook.sh +++ b/tools/notion/remove-local-sync-hook.sh @@ -8,7 +8,6 @@ # @purpose-statement Removes the managed local Notion post-commit hook when it is present. # @pipeline manual # @usage bash tools/notion/remove-local-sync-hook.sh [flags] - set -euo pipefail MARKER="LIVEPEER_NOTION_LOCAL_SYNC_HOOK" diff --git a/tools/script-index.md b/tools/script-index.md index 3c1319531..61feef7cd 100644 --- a/tools/script-index.md +++ b/tools/script-index.md @@ -40,7 +40,7 @@ | `tools/scripts/dev/update-all-og-images.js` | Bulk OG image updater — updates og:image across all v2 pages | `node tools/scripts/dev/update-all-og-images.js [flags]` | docs | | `tools/scripts/dev/update-og-image.js` | Single OG image updater — updates og:image for one page | `node tools/scripts/dev/update-og-image.js [flags]` | docs | | `tools/scripts/docs-quality-and-freshness-audit.js` | Content freshness audit — checks for TODO/TBD/Coming Soon markers, thin pages, stale content | `node tools/scripts/docs-quality-and-freshness-audit.js [flags]` | docs | -| `tools/scripts/enforce-generated-file-banners.js` | Enforce standardized hidden/visible generated banners and frontmatter across generated MDX outputs. | `* node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged` | docs | +| `tools/scripts/enforce-generated-file-banners.js` | * @pipeline P1, P3 | `* node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged` | docs | | `tools/scripts/enforcers/pr/check-component-immutability.js` | Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label. | `node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main` | docs | | `tools/scripts/enforcers/pr/check-pr-template.js` | Enforces that PR descriptions include required change and rationale sections before merge | `PR_BODY="..." node tools/scripts/enforcers/pr/check-pr-template.js` | docs | | `tools/scripts/generate-ai-sitemap.js` | AI sitemap generator — produces AI-optimised sitemap files. Dual-mode: --check (enforcer) / --write (generator). | `node tools/scripts/generate-ai-sitemap.js [flags]` | docs | diff --git a/tools/scripts/add-framework-headers.js b/tools/scripts/add-framework-headers.js index 616f0bc71..6539fd7f5 100644 --- a/tools/scripts/add-framework-headers.js +++ b/tools/scripts/add-framework-headers.js @@ -1,32 +1,14 @@ #!/usr/bin/env node /** - * @script add-framework-headers - * @summary Insert or verify governance framework metadata headers from classification JSON. - * @category generator - * @purpose governance:repo-health - * @scope full-repo - * @owner docs - * @needs R-R14 + * @script add-framework-headers + * @category generator + * @purpose governance:repo-health + * @scope full-repo + * @owner docs + * @needs R-R14 * @purpose-statement Inserts or extends framework headers on all repo scripts from classification data. - * @pipeline manual — interactive developer tool, not suited for automated pipelines - * @usage node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run - * - * @inputs - * --data --dry-run|--write|--verify [--filter ] [--exclude-subdirs] [--force] - * - * @outputs - * - Console summary with files processed, updated, skipped, and errors - * - * @exit-codes - * 0 = success - * 1 = argument, I/O, parse, or verification failure - * - * @examples - * node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run - * node tools/scripts/add-framework-headers.js --data script-classifications.json --filter tools/scripts --write - * - * @notes - * Tool-only migration utility; it does not execute repo-wide header rewrites unless explicitly run. + * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @usage node tools/scripts/add-framework-headers.js --data script-classifications.json --dry-run */ const fs = require('fs'); diff --git a/tools/scripts/audit-tasks-folders.js b/tools/scripts/audit-tasks-folders.js index 43a50e0cd..2c430330e 100644 --- a/tools/scripts/audit-tasks-folders.js +++ b/tools/scripts/audit-tasks-folders.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-C1, R-R14 * @purpose-statement Tasks folder auditor — checks tasks/ structure, normalises report locations, applies recommendations with conflict-safe moves - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/audit-tasks-folders.js [flags] */ diff --git a/tools/scripts/codex-commit.js b/tools/scripts/codex-commit.js index 85b341b9c..74fa8f143 100644 --- a/tools/scripts/codex-commit.js +++ b/tools/scripts/codex-commit.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R27, R-R30 * @purpose-statement Codex commit helper — audits codex branch state and generates compliant commit messages - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @dualmode dual-mode (document flags) * @usage node tools/scripts/codex-commit.js [flags] */ diff --git a/tools/scripts/codex-safe-merge-with-stash.js b/tools/scripts/codex-safe-merge-with-stash.js index c99d2f31f..cdbd6e483 100644 --- a/tools/scripts/codex-safe-merge-with-stash.js +++ b/tools/scripts/codex-safe-merge-with-stash.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R27, R-R30 * @purpose-statement Deprecated compatibility shim — blocks stash-based Codex merge flow and directs users to task-finalize, lock-release, and task-cleanup - * @pipeline manual — compatibility shim only + * @pipeline manual — developer tool * @usage node tools/scripts/codex-safe-merge-with-stash.js [flags] */ diff --git a/tools/scripts/convert-rss-to-mdx.js b/tools/scripts/convert-rss-to-mdx.js index 5e00c3877..371ff93b7 100644 --- a/tools/scripts/convert-rss-to-mdx.js +++ b/tools/scripts/convert-rss-to-mdx.js @@ -7,7 +7,7 @@ * @owner docs * @needs F-R1 * @purpose-statement RSS-to-MDX converter — imports RSS feed items and converts to MDX page format - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/convert-rss-to-mdx.js [flags] */ diff --git a/tools/scripts/create-codex-pr.js b/tools/scripts/create-codex-pr.js index a19349f3f..7bcc0fc50 100644 --- a/tools/scripts/create-codex-pr.js +++ b/tools/scripts/create-codex-pr.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R27, R-R30 * @purpose-statement Codex PR creator — generates codex PR with correct branch naming, labels, and body template - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/create-codex-pr.js [flags] */ diff --git a/tools/scripts/cross-agent-packager.js b/tools/scripts/cross-agent-packager.js index 7ce8a2e68..3dc3f6858 100644 --- a/tools/scripts/cross-agent-packager.js +++ b/tools/scripts/cross-agent-packager.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R27, R-R30 * @purpose-statement Cross-agent packager — bundles audit reports and repo state into agent-consumable packages - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/cross-agent-packager.js [flags] */ diff --git a/tools/scripts/debug-mint-dev.js b/tools/scripts/debug-mint-dev.js index 945be6c58..cd11939ea 100644 --- a/tools/scripts/debug-mint-dev.js +++ b/tools/scripts/debug-mint-dev.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-C6, F-C1 * @purpose-statement Mintlify dev debugger — diagnostic tool for troubleshooting mint dev server issues - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — developer tool * @usage node tools/scripts/debug-mint-dev.js [flags] */ /** diff --git a/tools/scripts/dev/batch-update-og-image.sh b/tools/scripts/dev/batch-update-og-image.sh index 4ca05d1be..f7406ed2a 100755 --- a/tools/scripts/dev/batch-update-og-image.sh +++ b/tools/scripts/dev/batch-update-og-image.sh @@ -6,7 +6,7 @@ # @owner docs # @needs E-R19, F-R7 # @purpose-statement Batch OG image updater — updates og:image meta tags across multiple pages -# @pipeline manual — interactive developer tool, not suited for automated pipelines +# @pipeline manual — developer tool # @usage bash tools/scripts/dev/batch-update-og-image.sh [flags] OLD_IMAGE='og:image: "/snippets/assets/domain/SHARED/LivepeerDocsLogo.svg"' NEW_IMAGE='og:image: "/snippets/assets/domain/SHARED/LivepeerDocsHero.svg"' diff --git a/tools/scripts/dev/replace-og-image.py b/tools/scripts/dev/replace-og-image.py index 3e817285b..3cf51da7a 100644 --- a/tools/scripts/dev/replace-og-image.py +++ b/tools/scripts/dev/replace-og-image.py @@ -6,7 +6,7 @@ # @owner docs # @needs E-R19, F-R7 # @purpose-statement OG image replacer — replaces og:image path in a single page frontmatter -# @pipeline manual — interactive developer tool, not suited for automated pipelines +# @pipeline manual — developer tool # @usage python3 tools/scripts/dev/replace-og-image.py [flags] import os import sys diff --git a/tools/scripts/dev/test-add-callouts.js b/tools/scripts/dev/test-add-callouts.js index 58914167a..da799fbac 100644 --- a/tools/scripts/dev/test-add-callouts.js +++ b/tools/scripts/dev/test-add-callouts.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-R1, R-R11 * @purpose-statement Test for add-callouts.js — validates callout insertion logic against fixtures - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — developer tool * @usage node tools/scripts/dev/test-add-callouts.js [flags] */ diff --git a/tools/scripts/dev/test-seo-generator.js b/tools/scripts/dev/test-seo-generator.js index 85172adfa..e22c13adb 100644 --- a/tools/scripts/dev/test-seo-generator.js +++ b/tools/scripts/dev/test-seo-generator.js @@ -6,7 +6,7 @@ * @owner docs * @needs E-R19, F-R7 * @purpose-statement Test for seo-generator — validates SEO generation logic - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — developer tool * @usage node tools/scripts/dev/test-seo-generator.js [flags] */ const fs = require('fs') diff --git a/tools/scripts/dev/update-all-og-images.js b/tools/scripts/dev/update-all-og-images.js index 9988dd724..ba773b290 100644 --- a/tools/scripts/dev/update-all-og-images.js +++ b/tools/scripts/dev/update-all-og-images.js @@ -6,7 +6,7 @@ * @owner docs * @needs E-R19, F-R7 * @purpose-statement Bulk OG image updater — updates og:image across all v2 pages - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — developer tool * @usage node tools/scripts/dev/update-all-og-images.js [flags] */ const fs = require('fs'); diff --git a/tools/scripts/enforce-generated-file-banners.js b/tools/scripts/enforce-generated-file-banners.js index 80c566350..14aca417e 100644 --- a/tools/scripts/enforce-generated-file-banners.js +++ b/tools/scripts/enforce-generated-file-banners.js @@ -1,4 +1,15 @@ #!/usr/bin/env node +/** + * @script enforce-generated-file-banners + * @category + * @purpose + * @scope tools/scripts, tools/lib, docs-guide/indexes, v2, tests/unit/docs-guide-sot.test.js + * @owner docs + * @needs + * @purpose-statement + * @pipeline P1, P3 + * @usage * node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --check node tools/scripts/enforce-generated-file-banners.js --write node tools/scripts/enforce-generated-file-banners.js --check --staged + */ /** * @script enforce-generated-file-banners * @summary Enforce standardized hidden/visible generated banners and frontmatter across generated MDX outputs. diff --git a/tools/scripts/enforcers/pr/check-component-immutability.js b/tools/scripts/enforcers/pr/check-component-immutability.js index b6c352db5..a237e65ed 100644 --- a/tools/scripts/enforcers/pr/check-component-immutability.js +++ b/tools/scripts/enforcers/pr/check-component-immutability.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script check-component-immutability - * @category enforcer - * @purpose governance:repo-health - * @scope changed - * @owner docs - * @needs R-R10 - * @purpose-statement Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label. - * @pipeline P2, P3 - * @usage node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main + * @script check-component-immutability + * @category enforcer + * @purpose governance:repo-health + * @scope changed + * @owner docs + * @needs R-R10 + * @purpose-statement Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label. + * @pipeline P2, P3 + * @usage node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main */ const fs = require('fs'); diff --git a/tools/scripts/generate-component-docs.js b/tools/scripts/generate-component-docs.js index 7551a3dfb..31d80d6db 100644 --- a/tools/scripts/generate-component-docs.js +++ b/tools/scripts/generate-component-docs.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script generate-component-docs - * @category generator - * @purpose governance:index-management - * @scope generated-output - * @owner docs - * @needs R-R10 + * @script generate-component-docs + * @category generator + * @purpose governance:index-management + * @scope generated-output + * @owner docs + * @needs R-R10 * @purpose-statement Generates published component library MDX pages from the registry. Replaces update-component-library.sh. - * @pipeline P6 (on-demand) - * @usage node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ] + * @pipeline P6 (on-demand) + * @usage node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category ] */ const crypto = require('crypto'); diff --git a/tools/scripts/generate-component-governance-remediation-reports.js b/tools/scripts/generate-component-governance-remediation-reports.js index fac2ec988..d9e20e280 100644 --- a/tools/scripts/generate-component-governance-remediation-reports.js +++ b/tools/scripts/generate-component-governance-remediation-reports.js @@ -1,39 +1,14 @@ #!/usr/bin/env node /** - * @script generate-component-governance-remediation-reports - * @category generator - * @purpose qa:repo-health - * @summary Generate Phase 2a remediation reports from the approved component-governance audit and live repo state. - * @owner docs - * @scope generated-output - * @needs R-R10, R-R29 + * @script generate-component-governance-remediation-reports + * @category generator + * @purpose qa:repo-health + * @scope generated-output + * @owner docs + * @needs R-R10, R-R29 * @purpose-statement Generates component-governance remediation reports from the approved audit and live repo state, including defensive-rendering guidance for MDX-facing components. - * @pipeline manual - * @usage node tools/scripts/generate-component-governance-remediation-reports.js [flags] - * - * @inputs - * --audit-file (default: tasks/reports/component-governance-audit.md) - * --output-dir (default: tasks/reports) - * --reports (default: all) - * --strict / --no-strict (default: strict) - * - * @outputs - * - tasks/reports/migration-impact-report.md - * - tasks/reports/colour-remediation-report.md - * - tasks/reports/style-css-token-audit.md - * - tasks/reports/defensive-rendering-remediation-report.md - * - * @exit-codes - * 0 = reports generated successfully - * 1 = invalid args, audit drift that blocks strict mode, or runtime failure - * - * @examples - * node tools/scripts/generate-component-governance-remediation-reports.js - * node tools/scripts/generate-component-governance-remediation-reports.js --reports migration,defensive - * node tools/scripts/generate-component-governance-remediation-reports.js --no-strict - * - * @notes - * Phase 2a is read-only for runtime docs/component source. This script only reads repo state and writes report artefacts. + * @pipeline manual — report generation + * @usage node tools/scripts/generate-component-governance-remediation-reports.js [flags] */ const fs = require('fs'); diff --git a/tools/scripts/generate-component-registry.js b/tools/scripts/generate-component-registry.js index 3ba6fa899..0ca852808 100644 --- a/tools/scripts/generate-component-registry.js +++ b/tools/scripts/generate-component-registry.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script generate-component-registry - * @category generator - * @purpose governance:index-management - * @scope single-domain - * @owner docs - * @needs R-R10 + * @script generate-component-registry + * @category generator + * @purpose governance:index-management + * @scope single-domain + * @owner docs + * @needs R-R10 * @purpose-statement Parses JSDoc from all component exports and produces component-registry.json. - * @pipeline P1, P2, P3 - * @usage node tools/scripts/generate-component-registry.js [--validate-only] + * @pipeline P1, P2, P3 + * @usage node tools/scripts/generate-component-registry.js [--validate-only] */ const fs = require('fs'); diff --git a/tools/scripts/generate-docs-guide-components-index.js b/tools/scripts/generate-docs-guide-components-index.js index ae02ee0e4..e26d66bb7 100644 --- a/tools/scripts/generate-docs-guide-components-index.js +++ b/tools/scripts/generate-docs-guide-components-index.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script generate-docs-guide-components-index - * @category generator - * @purpose governance:index-management - * @scope generated-output - * @owner docs - * @needs R-R10, R-R16, R-R17 + * @script generate-docs-guide-components-index + * @category generator + * @purpose governance:index-management + * @scope generated-output + * @owner docs + * @needs R-R10, R-R16, R-R17 * @purpose-statement Generates components-index.mdx in docs-guide/indexes/ from component-registry.json and component-usage-map.json. - * @pipeline P1 (commit — auto-regenerated when components staged) - * @usage node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check] + * @pipeline P1 (commit — auto-regenerated when components staged) + * @usage node tools/scripts/generate-docs-guide-components-index.js [--fix|--write|--check] */ const fs = require('fs'); diff --git a/tools/scripts/generate-docs-guide-indexes.js b/tools/scripts/generate-docs-guide-indexes.js index 68805c14f..41243c423 100644 --- a/tools/scripts/generate-docs-guide-indexes.js +++ b/tools/scripts/generate-docs-guide-indexes.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R16, R-R17 * @purpose-statement Generates docs-guide workflow/template indexes and optionally verifies freshness - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @dualmode dual-mode (document flags) * @usage node tools/scripts/generate-docs-guide-indexes.js [flags] */ diff --git a/tools/scripts/generate-docs-guide-pages-index.js b/tools/scripts/generate-docs-guide-pages-index.js index d524a5704..0cfa1f0c0 100644 --- a/tools/scripts/generate-docs-guide-pages-index.js +++ b/tools/scripts/generate-docs-guide-pages-index.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R16, R-R17 * @purpose-statement Generates the docs-guide pages index - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/generate-docs-guide-pages-index.js [flags] */ diff --git a/tools/scripts/i18n/lib/common.js b/tools/scripts/i18n/lib/common.js index 3068d6a4c..14465477e 100644 --- a/tools/scripts/i18n/lib/common.js +++ b/tools/scripts/i18n/lib/common.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement i18n shared utilities — common helper functions for translation pipeline - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/common.js [flags] */ const fs = require('fs'); diff --git a/tools/scripts/i18n/lib/config.js b/tools/scripts/i18n/lib/config.js index 1d0a0dfce..41ab54af5 100644 --- a/tools/scripts/i18n/lib/config.js +++ b/tools/scripts/i18n/lib/config.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement i18n configuration — language codes, locale paths, translation settings - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/config.js [flags] */ const fs = require('fs'); diff --git a/tools/scripts/i18n/lib/docs-json-localizer.js b/tools/scripts/i18n/lib/docs-json-localizer.js index 261a01fc2..088a8ff6f 100644 --- a/tools/scripts/i18n/lib/docs-json-localizer.js +++ b/tools/scripts/i18n/lib/docs-json-localizer.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement docs.json localiser engine — transforms docs.json navigation for locale variants - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/docs-json-localizer.js [flags] */ const fs = require('fs'); diff --git a/tools/scripts/i18n/lib/docs-routes.js b/tools/scripts/i18n/lib/docs-routes.js index 2fe826e8d..526618cc2 100644 --- a/tools/scripts/i18n/lib/docs-routes.js +++ b/tools/scripts/i18n/lib/docs-routes.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement docs route resolver — maps page paths to locale-aware routes - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/docs-routes.js [flags] */ const fs = require('fs'); diff --git a/tools/scripts/i18n/lib/frontmatter.js b/tools/scripts/i18n/lib/frontmatter.js index d6c9817bd..f379eae21 100644 --- a/tools/scripts/i18n/lib/frontmatter.js +++ b/tools/scripts/i18n/lib/frontmatter.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Frontmatter parser/writer — reads and writes MDX frontmatter for translation - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/frontmatter.js [flags] */ const matter = require('gray-matter'); diff --git a/tools/scripts/i18n/lib/mdx-parser.js b/tools/scripts/i18n/lib/mdx-parser.js index d0f2554b3..83f15a2e4 100644 --- a/tools/scripts/i18n/lib/mdx-parser.js +++ b/tools/scripts/i18n/lib/mdx-parser.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement MDX parser for i18n — extracts translatable content blocks from MDX - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/mdx-parser.js [flags] */ let parserPromise = null; diff --git a/tools/scripts/i18n/lib/mdx-translate.js b/tools/scripts/i18n/lib/mdx-translate.js index 6440e7eac..440276eeb 100644 --- a/tools/scripts/i18n/lib/mdx-translate.js +++ b/tools/scripts/i18n/lib/mdx-translate.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement MDX translation engine — applies translations to MDX content blocks - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/mdx-translate.js [flags] */ const path = require('path'); diff --git a/tools/scripts/i18n/lib/path-utils.js b/tools/scripts/i18n/lib/path-utils.js index 7362a7815..bf59f5276 100644 --- a/tools/scripts/i18n/lib/path-utils.js +++ b/tools/scripts/i18n/lib/path-utils.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Path utilities for i18n — locale-aware path resolution and mapping - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/path-utils.js [flags] */ const fs = require('fs'); diff --git a/tools/scripts/i18n/lib/provenance.js b/tools/scripts/i18n/lib/provenance.js index 2449d7eaa..93627c6d9 100644 --- a/tools/scripts/i18n/lib/provenance.js +++ b/tools/scripts/i18n/lib/provenance.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Translation provenance tracker — records source, timestamp, and provider for each translated segment - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/provenance.js [flags] */ const crypto = require('crypto'); diff --git a/tools/scripts/i18n/lib/provider-mock.js b/tools/scripts/i18n/lib/provider-mock.js index c1d68a7d6..55cc5c3c3 100644 --- a/tools/scripts/i18n/lib/provider-mock.js +++ b/tools/scripts/i18n/lib/provider-mock.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Mock translation provider — returns placeholder translations for testing without API calls - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/provider-mock.js [flags] */ function createMockTranslator() { diff --git a/tools/scripts/i18n/lib/provider-openrouter.js b/tools/scripts/i18n/lib/provider-openrouter.js index 8ffcf9962..7fb31022c 100644 --- a/tools/scripts/i18n/lib/provider-openrouter.js +++ b/tools/scripts/i18n/lib/provider-openrouter.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement OpenRouter translation provider — calls OpenRouter API for actual translations - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/provider-openrouter.js [flags] */ const { chunkArray } = require('./common'); diff --git a/tools/scripts/i18n/lib/providers.js b/tools/scripts/i18n/lib/providers.js index a2ca6e715..a544f4b87 100644 --- a/tools/scripts/i18n/lib/providers.js +++ b/tools/scripts/i18n/lib/providers.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Provider registry — selects translation provider (OpenRouter or mock) based on configuration - * @pipeline indirect — library module imported by other scripts, not invoked directly + * @pipeline indirect — library module * @usage node tools/scripts/i18n/lib/providers.js [flags] */ const { createOpenRouterTranslator } = require('./provider-openrouter'); diff --git a/tools/scripts/i18n/test-mintlify-version-language-toggle.js b/tools/scripts/i18n/test-mintlify-version-language-toggle.js index dc1dde28e..d6f5d9056 100644 --- a/tools/scripts/i18n/test-mintlify-version-language-toggle.js +++ b/tools/scripts/i18n/test-mintlify-version-language-toggle.js @@ -7,7 +7,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Mintlify language toggle checker — validates Mintlify version supports language toggle feature - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/i18n/test-mintlify-version-language-toggle.js [flags] */ diff --git a/tools/scripts/i18n/test/cli-guardrails.test.js b/tools/scripts/i18n/test/cli-guardrails.test.js index b95b069ef..dd7ef532a 100644 --- a/tools/scripts/i18n/test/cli-guardrails.test.js +++ b/tools/scripts/i18n/test/cli-guardrails.test.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Tests i18n CLI guardrails — validates argument validation and safety checks - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @dualmode dual-mode (document flags) * @usage node tools/scripts/i18n/test/cli-guardrails.test.js [flags] */ diff --git a/tools/scripts/i18n/test/docs-json-localizer.test.js b/tools/scripts/i18n/test/docs-json-localizer.test.js index 712483ea6..0002f747e 100644 --- a/tools/scripts/i18n/test/docs-json-localizer.test.js +++ b/tools/scripts/i18n/test/docs-json-localizer.test.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Tests docs-json-localizer — validates locale docs.json transformation logic - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/i18n/test/docs-json-localizer.test.js [flags] */ const test = require('node:test'); diff --git a/tools/scripts/i18n/test/frontmatter.test.js b/tools/scripts/i18n/test/frontmatter.test.js index afe1ce2bb..4fa4c9d47 100644 --- a/tools/scripts/i18n/test/frontmatter.test.js +++ b/tools/scripts/i18n/test/frontmatter.test.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Tests frontmatter parser — validates frontmatter read/write roundtrip - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/i18n/test/frontmatter.test.js [flags] */ const test = require('node:test'); diff --git a/tools/scripts/i18n/test/mdx-translate.test.js b/tools/scripts/i18n/test/mdx-translate.test.js index a3dfd08df..317e08179 100644 --- a/tools/scripts/i18n/test/mdx-translate.test.js +++ b/tools/scripts/i18n/test/mdx-translate.test.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Tests MDX translation — validates content block translation logic - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/i18n/test/mdx-translate.test.js [flags] */ const test = require('node:test'); diff --git a/tools/scripts/i18n/test/provenance.test.js b/tools/scripts/i18n/test/provenance.test.js index 5380729d0..513430dd3 100644 --- a/tools/scripts/i18n/test/provenance.test.js +++ b/tools/scripts/i18n/test/provenance.test.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Tests provenance tracker — validates translation provenance recording - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/i18n/test/provenance.test.js [flags] */ const test = require('node:test'); diff --git a/tools/scripts/i18n/test/provider-openrouter.test.js b/tools/scripts/i18n/test/provider-openrouter.test.js index 5d5b908d1..4fe7112a2 100644 --- a/tools/scripts/i18n/test/provider-openrouter.test.js +++ b/tools/scripts/i18n/test/provider-openrouter.test.js @@ -6,7 +6,7 @@ * @owner docs * @needs F-R6, F-R7 * @purpose-statement Tests OpenRouter provider — validates API call logic and response parsing - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/i18n/test/provider-openrouter.test.js [flags] */ const test = require('node:test'); diff --git a/tools/scripts/new-script.js b/tools/scripts/new-script.js index fed435b5a..8deb4a88e 100644 --- a/tools/scripts/new-script.js +++ b/tools/scripts/new-script.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-C1, R-R14 * @purpose-statement Script scaffolder — creates a new script file prefilled with the required docs header template - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/new-script.js [flags] */ diff --git a/tools/scripts/publish-v2-internal-reports.js b/tools/scripts/publish-v2-internal-reports.js index 2c85b795d..ddb80dfd4 100644 --- a/tools/scripts/publish-v2-internal-reports.js +++ b/tools/scripts/publish-v2-internal-reports.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-C1, R-R14 * @purpose-statement Report publisher — publishes v2 internal audit reports to configured output locations - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/publish-v2-internal-reports.js [flags] */ diff --git a/tools/scripts/remediators/assets/migrate-assets-to-branch.js b/tools/scripts/remediators/assets/migrate-assets-to-branch.js index 673ce1c2a..27987b5b0 100644 --- a/tools/scripts/remediators/assets/migrate-assets-to-branch.js +++ b/tools/scripts/remediators/assets/migrate-assets-to-branch.js @@ -1,15 +1,15 @@ #!/usr/bin/env node /** - * @script migrate-assets-to-branch - * @category remediator - * @purpose governance:repo-health - * @scope full-repo - * @owner docs - * @needs R-R14 + * @script migrate-assets-to-branch + * @category remediator + * @purpose governance:repo-health + * @scope full-repo + * @owner docs + * @needs R-R14 * @purpose-statement Reads the media-audit manifest, migrates flagged assets to docs-v2-assets, and rewrites MDX/JSX references to raw GitHub URLs. - * @pipeline P6 (on-demand) - * @dualmode --dry-run (show what would change) | --write (execute migration) - * @usage node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run + * @pipeline P6 (on-demand) + * @dualmode --dry-run (show what would change) | --write (execute migration) + * @usage node tools/scripts/remediators/assets/migrate-assets-to-branch.js --manifest tasks/reports/media-audit/media-audit-manifest.json --target migrate_r2,migrate_cloudinary --dry-run */ const fs = require('fs'); diff --git a/tools/scripts/remediators/components/repair-component-metadata.js b/tools/scripts/remediators/components/repair-component-metadata.js index 5b4228022..fd5874b31 100644 --- a/tools/scripts/remediators/components/repair-component-metadata.js +++ b/tools/scripts/remediators/components/repair-component-metadata.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script repair-component-metadata - * @category remediator - * @purpose governance:repo-health - * @scope single-domain - * @owner docs - * @needs R-R10 + * @script repair-component-metadata + * @category remediator + * @purpose governance:repo-health + * @scope single-domain + * @owner docs + * @needs R-R10 * @purpose-statement Auto-repairs derived JSDoc metadata fields from repo state. Safe fields only. Mirrors AUDIT-00 --fix pattern for components. - * @pipeline P1 (commit — runs when components staged), P6 (on-demand) - * @usage node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged] + * @pipeline P1 (commit — runs when components staged), P6 (on-demand) + * @usage node tools/scripts/remediators/components/repair-component-metadata.js [--dry-run] [--fix] [--staged] */ const fs = require('fs'); diff --git a/tools/scripts/scan-component-imports.js b/tools/scripts/scan-component-imports.js index 7c3f2a958..bf575c08c 100644 --- a/tools/scripts/scan-component-imports.js +++ b/tools/scripts/scan-component-imports.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script scan-component-imports - * @category generator - * @purpose governance:index-management - * @scope generated-output - * @owner docs - * @needs R-R10 + * @script scan-component-imports + * @category generator + * @purpose governance:index-management + * @scope generated-output + * @owner docs + * @needs R-R10 * @purpose-statement Scans MDX imports to produce component-usage-map.json and detect @usedIn drift. - * @pipeline P6 - * @usage node tools/scripts/scan-component-imports.js [--verify] + * @pipeline P6 + * @usage node tools/scripts/scan-component-imports.js [--verify] */ const fs = require('fs'); diff --git a/tools/scripts/script-footprint-and-usage-audit.js b/tools/scripts/script-footprint-and-usage-audit.js index f514e53ad..09bfed5d9 100644 --- a/tools/scripts/script-footprint-and-usage-audit.js +++ b/tools/scripts/script-footprint-and-usage-audit.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-C1, R-R14 * @purpose-statement Script footprint auditor — analyses script file sizes, dependencies, and usage patterns across the repo - * @pipeline manual — diagnostic/investigation tool, run on-demand only + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/script-footprint-and-usage-audit.js [flags] */ diff --git a/tools/scripts/snippets/fetch-lpt-exchanges.sh b/tools/scripts/snippets/fetch-lpt-exchanges.sh index 886a6e5e3..0eb2accff 100755 --- a/tools/scripts/snippets/fetch-lpt-exchanges.sh +++ b/tools/scripts/snippets/fetch-lpt-exchanges.sh @@ -6,7 +6,7 @@ # @owner docs # @needs F-R1 # @purpose-statement LPT exchange data fetcher — pulls exchange listing data for LPT token pages -# @pipeline manual — interactive developer tool, not suited for automated pipelines +# @pipeline manual — not yet in pipeline # @usage bash tools/scripts/snippets/fetch-lpt-exchanges.sh [flags] # Fetch LPT exchange listings from CoinGecko API and append to lpt-exchanges.mdx # Usage: ./tools/scripts/snippets/fetch-lpt-exchanges.sh diff --git a/tools/scripts/snippets/fetch-openapi-specs.sh b/tools/scripts/snippets/fetch-openapi-specs.sh index 0d3f454a9..5ae8c2f1e 100755 --- a/tools/scripts/snippets/fetch-openapi-specs.sh +++ b/tools/scripts/snippets/fetch-openapi-specs.sh @@ -6,7 +6,7 @@ # @owner docs # @needs F-R17 # @purpose-statement OpenAPI spec fetcher — pulls latest OpenAPI specs from Livepeer services for reference pages -# @pipeline manual — interactive developer tool, not suited for automated pipelines +# @pipeline manual — not yet in pipeline # @usage bash tools/scripts/snippets/fetch-openapi-specs.sh [flags] # Pre-build script to fetch external OpenAPI specification files # Run this before building the docs to ensure API specs are up-to-date diff --git a/tools/scripts/snippets/generate-api-docs.sh b/tools/scripts/snippets/generate-api-docs.sh index a8155ef94..19f70182e 100755 --- a/tools/scripts/snippets/generate-api-docs.sh +++ b/tools/scripts/snippets/generate-api-docs.sh @@ -6,7 +6,7 @@ # @owner docs # @needs E-C6, F-C1 # @purpose-statement API docs generator — generates API reference pages from OpenAPI specs -# @pipeline manual — interactive developer tool, not suited for automated pipelines +# @pipeline manual — not yet in pipeline # @usage bash tools/scripts/snippets/generate-api-docs.sh [flags] # Generate API documentation from OpenAPI spec # Creates: landing page + individual endpoint pages + navigation JSON diff --git a/tools/scripts/snippets/generate-data/scripts/generate-glossary.js b/tools/scripts/snippets/generate-data/scripts/generate-glossary.js index 06431a3d8..7a3e3b477 100644 --- a/tools/scripts/snippets/generate-data/scripts/generate-glossary.js +++ b/tools/scripts/snippets/generate-data/scripts/generate-glossary.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-C6, F-C1 * @purpose-statement Glossary generator — produces glossary data file from terminology sources - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/snippets/generate-data/scripts/generate-glossary.js [flags] */ diff --git a/tools/scripts/snippets/generate-data/scripts/terminology-search.js b/tools/scripts/snippets/generate-data/scripts/terminology-search.js index fe39353a6..e2c8857e0 100644 --- a/tools/scripts/snippets/generate-data/scripts/terminology-search.js +++ b/tools/scripts/snippets/generate-data/scripts/terminology-search.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-C6, F-C1 * @purpose-statement Terminology search — searches glossary/terminology data for definitions - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/snippets/generate-data/scripts/terminology-search.js [flags] */ diff --git a/tools/scripts/snippets/test-scripts.sh b/tools/scripts/snippets/test-scripts.sh index 102213af3..538c0fe6e 100755 --- a/tools/scripts/snippets/test-scripts.sh +++ b/tools/scripts/snippets/test-scripts.sh @@ -6,7 +6,7 @@ # @owner docs # @needs E-C6, F-C1 # @purpose-statement Snippet test runner — runs basic validation on snippet scripts -# @pipeline manual — diagnostic/investigation tool, run on-demand only +# @pipeline manual — developer tool # @usage bash tools/scripts/snippets/test-scripts.sh [flags] # Test suite for tools/scripts/snippets # Run this before using scripts to verify they work correctly diff --git a/tools/scripts/sync-codex-skills.js b/tools/scripts/sync-codex-skills.js index f2fdb92f9..ecc16203f 100644 --- a/tools/scripts/sync-codex-skills.js +++ b/tools/scripts/sync-codex-skills.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R27, R-R30 * @purpose-statement Codex skills sync — synchronises skill definition files between local and remote sources. Supports --check mode. - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/sync-codex-skills.js [flags] */ diff --git a/tools/scripts/validators/components/check-component-css.js b/tools/scripts/validators/components/check-component-css.js index 4988f0086..05bbe1639 100644 --- a/tools/scripts/validators/components/check-component-css.js +++ b/tools/scripts/validators/components/check-component-css.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script check-component-css - * @category validator - * @purpose qa:repo-health - * @scope single-domain - * @owner docs - * @needs R-R10 + * @script check-component-css + * @category validator + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R10 * @purpose-statement Validates component files against component governance styling rules. - * @pipeline P1, P2, P3 - * @usage node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help] + * @pipeline P1, P2, P3 + * @usage node tools/scripts/validators/components/check-component-css.js [--path snippets/components] [--staged] [--fix] [--help] */ const fs = require('fs'); diff --git a/tools/scripts/validators/components/check-component-docs.js b/tools/scripts/validators/components/check-component-docs.js index a32232f2e..60f900231 100644 --- a/tools/scripts/validators/components/check-component-docs.js +++ b/tools/scripts/validators/components/check-component-docs.js @@ -1,14 +1,14 @@ #!/usr/bin/env node /** - * @script check-component-docs - * @category validator - * @purpose qa:repo-health - * @scope single-domain - * @owner docs - * @needs R-R10 + * @script check-component-docs + * @category validator + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs R-R10 * @purpose-statement Validates component JSDoc coverage, prop documentation, docs-entry coverage, and governance metadata. - * @pipeline P1, P2, P3 - * @usage node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help] + * @pipeline P1, P2, P3 + * @usage node tools/scripts/validators/components/check-component-docs.js [--path snippets/components] [--base-ref docs-v2] [--staged] [--strict-governance] [--help] */ const fs = require('fs'); diff --git a/tools/scripts/validators/content/check-grammar-en-gb.js b/tools/scripts/validators/content/check-grammar-en-gb.js index 60ee6fd12..0b8280ebd 100644 --- a/tools/scripts/validators/content/check-grammar-en-gb.js +++ b/tools/scripts/validators/content/check-grammar-en-gb.js @@ -1,15 +1,15 @@ #!/usr/bin/env node /** - * @script check-grammar-en-gb - * @category validator - * @purpose qa:content-quality - * @scope tools/scripts/validators/content, tools/script-index.md, tests/script-index.md, docs-guide/indexes/scripts-index.mdx, v2 - * @owner docs - * @needs SE-1-11, S-1.15 - * @purpose-statement Deterministic UK English grammar checker for prose content with optional conservative autofix for safe rules. - * @pipeline manual/CI validator for English v2 docs and explicit content files - * @dualmode --check (default) | --fix (safe in-place rewrites) - * @usage node tools/scripts/validators/content/check-grammar-en-gb.js [--scope full|changed] [--file ] [--fix] [--strict] + * @script check-grammar-en-gb + * @category validator + * @purpose qa:content-quality + * @scope tools/scripts/validators/content, tools/script-index.md, tests/script-index.md, docs-guide/indexes/scripts-index.mdx, v2 + * @owner docs + * @needs SE-1-11, S-1.15 + * @purpose-statement Deterministic UK English grammar checker for prose content with optional conservative autofix for safe rules. + * @pipeline manual/CI validator for English v2 docs and explicit content files + * @dualmode --check (default) | --fix (safe in-place rewrites) + * @usage node tools/scripts/validators/content/check-grammar-en-gb.js [--scope full|changed] [--file ] [--fix] [--strict] */ const fs = require('fs'); diff --git a/tools/scripts/validators/governance/audit-script-inventory.js b/tools/scripts/validators/governance/audit-script-inventory.js index 87a88c156..085103761 100644 --- a/tools/scripts/validators/governance/audit-script-inventory.js +++ b/tools/scripts/validators/governance/audit-script-inventory.js @@ -7,7 +7,7 @@ * @owner docs * @needs R-R14, R-R18, R-C6 * @purpose-statement Deep inventory audit of every script in the repo. Traces triggers, outputs, downstream chains, and governance compliance. Produces reports grouped by trigger category. - * @pipeline P1 (pre-commit), indirect + * @pipeline P1 (commit), indirect * @usage node tools/scripts/validators/governance/audit-script-inventory.js [--json] [--md] [--output ] [--verbose] */ diff --git a/tools/scripts/validators/governance/review-governance-repair-checklist.js b/tools/scripts/validators/governance/review-governance-repair-checklist.js index 90240954a..f678fed4e 100644 --- a/tools/scripts/validators/governance/review-governance-repair-checklist.js +++ b/tools/scripts/validators/governance/review-governance-repair-checklist.js @@ -1,15 +1,15 @@ #!/usr/bin/env node /** - * @script review-governance-repair-checklist - * @category validator - * @purpose governance:repo-health - * @scope full-repo - * @owner docs - * @needs R-R14, R-R18 + * @script review-governance-repair-checklist + * @category validator + * @purpose governance:repo-health + * @scope full-repo + * @owner docs + * @needs R-R14, R-R18 * @purpose-statement Generates a review checklist for dry-run governance repair proposals that require human approval before fix mode is applied. - * @pipeline manual - * @dualmode --json | --md | default both - * @usage node tools/scripts/validators/governance/review-governance-repair-checklist.js [--output ] [--json] [--md] + * @pipeline manual + * @dualmode --json | --md | default both + * @usage node tools/scripts/validators/governance/review-governance-repair-checklist.js [--output ] [--json] [--md] */ const fs = require('fs'); diff --git a/tools/scripts/verify-all-pages.js b/tools/scripts/verify-all-pages.js index 3088aae3b..8f7ac6602 100644 --- a/tools/scripts/verify-all-pages.js +++ b/tools/scripts/verify-all-pages.js @@ -1,30 +1,13 @@ /** - * @script verify-all-pages - * @category enforcer - * @purpose qa:repo-health - * @summary Utility script for tools/scripts/verify-all-pages.js. - * @owner docs - * @scope single-domain - * @needs E-C1, R-R14 + * @script verify-all-pages + * @category enforcer + * @purpose qa:repo-health + * @scope single-domain + * @owner docs + * @needs E-C1, R-R14 * @purpose-statement Loads component-library routes in a headless browser and fails on render, console, or 404 issues. - * @pipeline manual - * @usage node tools/scripts/verify-all-pages.js - * - * @inputs - * No required CLI flags; optional flags are documented inline. - * - * @outputs - * - Console output and/or file updates based on script purpose. - * - * @exit-codes - * 0 = success - * 1 = runtime or validation failure - * - * @examples - * node tools/scripts/verify-all-pages.js - * - * @notes - * Keep script behavior deterministic and update script indexes after changes. + * @pipeline manual — not yet in pipeline + * @usage node tools/scripts/verify-all-pages.js */ const puppeteer = require('puppeteer'); diff --git a/tools/scripts/verify-pay-orc-gate-finalize.sh b/tools/scripts/verify-pay-orc-gate-finalize.sh index 86cd4bd29..ef52a27f7 100755 --- a/tools/scripts/verify-pay-orc-gate-finalize.sh +++ b/tools/scripts/verify-pay-orc-gate-finalize.sh @@ -6,7 +6,7 @@ # @owner docs # @needs E-C1, R-R14 # @purpose-statement Payment/orchestrator gate verifier — checks payment and orchestrator documentation gate conditions -# @pipeline manual — diagnostic/investigation tool, run on-demand only +# @pipeline manual — not yet in pipeline # @usage bash tools/scripts/verify-pay-orc-gate-finalize.sh [flags] set -euo pipefail diff --git a/tools/scripts/verify/.verify-large-change.sh b/tools/scripts/verify/.verify-large-change.sh index d93f86270..974ab1f9d 100755 --- a/tools/scripts/verify/.verify-large-change.sh +++ b/tools/scripts/verify/.verify-large-change.sh @@ -6,6 +6,6 @@ # @owner docs # @needs E-C1, R-R14 # @purpose-statement Large change verifier — blocks or warns when a commit touches an unusually large number of files -# @pipeline manual — diagnostic/investigation tool, run on-demand only +# @pipeline manual — not yet in pipeline # @usage bash tools/scripts/verify/.verify-large-change.sh [flags] echo "verify-large-change placeholder: no-op" diff --git a/tools/scripts/wcag-repair-common.js b/tools/scripts/wcag-repair-common.js index 08da39b35..a5179f3a2 100644 --- a/tools/scripts/wcag-repair-common.js +++ b/tools/scripts/wcag-repair-common.js @@ -7,7 +7,7 @@ * @owner docs * @needs E-R1, R-R11 * @purpose-statement WCAG repair shared logic — common repair functions used by WCAG audit fix mode - * @pipeline manual — interactive developer tool, not suited for automated pipelines + * @pipeline manual — not yet in pipeline * @usage node tools/scripts/wcag-repair-common.js [flags] */