Skip to main content

Epic 5, Story 9, Task 03: Production build corpus triage (FR-067)

Task ID: E5:S09:T03
Status: ✅ COMPLETE
Priority: HIGH
Estimated Effort: Large
Created: 2026-03-30
Last updated: 2026-03-30 (v0.5.9.3+1 — FR-067 triage)
Version: v0.5.9.3+1
Code: E5S09T03

Feature Request: FR-067 – Production build triage


Summary

Implement FR-067: after FR-066, achieve npm run build = 0 for the agreed publish scope by triaging MDX, links, and assets; document triage stats and exclude list updates.


Input

  • FR-067
  • E5:S09:T02 complete (docs path + scope)

Deliverable

  • Green Docusaurus production build for publish scope
  • Explicit broken-link policy (throw vs warn + follow-up)
  • Triage summary (counts, failure classes, excludes added)

Acceptance Criteria

  • Per FR-067 ACs.

Specification (executable — FR-067)

IDSourceStatement
S1R01 / AC1npm run build in portal/ exits 0 under Node ≥20 (portal/package.json engines). Verified with PORTAL_BUILD_STRICT=1 pytest -m portal_build.
S2R02 / AC2Broken-link behavior is explicit: onBrokenLinks in docusaurus.config.js and/or Publish scope in portal/README.md documents throw vs warn + any follow-up.
S3R03 / AC2Every Docusaurus docs.exclude glob is listed under Excluded in portal/README.md (no shadow excludes).
S4R04 / AC3Triage note at docs/maintenance/docusaurus-corpus-triage-fr-067.md with date, failure classes, approximate counts, excludes added, pointer to FR-067.
S5NF01Prefer surgical MDX/link fixes or targeted exclude over bulk rewrites.
S6NF02Release/changelog language: no unverified “Fixed” claims for corpus triage.

Tests: tests/test_portal_fr067_build_triage.py (S2–S4); S1 via tests/test_portal_fr065_identity.py test_fr065_s9_portal_production_build + PORTAL_BUILD_STRICT=1.


Version Anchor

Forensic marker: ✅ COMPLETE (v0.5.9.3+1) — FR-067 ACs met.


Evidence


Dependencies

  • E5:S09:T02 (FR-066) complete.