Root cause: @vitest/coverage-v8@^4.1.0 forced vitest@4.1.9 into
apps/homepage/node_modules, creating two vitest installations (v2 at root,
v4 in homepage). @testing-library/jest-dom's vitest.d.ts augmented the root
vitest v2 module, but homepage tests imported vitest v4 — so the type
augmentation for matchers (toBeDisabled, toHaveAttribute, etc.) never applied.
Fix: downgrade @vitest/coverage-v8 from ^4.1.0 to ^2.1.9 to match vitest 2.x
used by the rest of the monorepo. This unifies vitest at v2.1.9 across all
workspaces, allowing the jest-dom type augmentation to take effect.
Validation:
- npm ls vitest: single v2.1.9 installation (no nested vitest in homepage)
- Homepage type-check (tsc --noEmit): 0 errors (all TS2339 resolved)
- Existing setup.ts and vitest.config.ts were already correctly configured
Root cause: apps/api declared react@18 but @types/react@19, creating a nested
apps/api/node_modules/@types/react@19.2.17 that conflicted with @react-pdf/renderer's
type resolution from root node_modules/@types/react.
Changes:
- Removed react-dom from apps/api dependencies (unused)
- Removed @types/react and @types/react-dom from apps/api devDependencies
- Both API code and @react-pdf/renderer now resolve @types/react from a single
root copy (v19), eliminating the TS2769 contextType incompatibility errors
- Regenerated package-lock.json with deduped dependency tree
Validation:
- npm ls shows single @types/react installation
- No nested @types/react under apps/api/node_modules
- API type-check (tsc --noEmit): 0 errors
- API build: succeeds
- Docker build (Dockerfile.production): all 6 packages build successfully