Tag: foundation-v0.1.0
Date: 2026-04-24
Spec: Foundation Design Spec
host: Darwin 24.3.0 arm64
dotnet: 8.0.125
node: v24.14.1
pnpm: 9.15.4
docker: Docker version 29.4.0, build 9d7ad9f
git rev: 3bc1881bef66bbf05c92d0ca42dbc4eabb25fb03
Spec §11 has 23 items. Each is checked here against actual evidence captured during this Phase 19 run.
| # | DoD item | Status | Evidence |
|---|---|---|---|
| 1 | docker compose up brings every service to healthy within 90s |
PASS | docker compose ps shows 5 healthy services (sqlserver, redis, keycloak, maildev, clamav) |
| 2 | web-portal renders ar default + en toggle + RTL | PASS | Phase 11 + 14 (web-portal-e2e smoke specs) |
| 3 | admin-cms redirects to Keycloak, login + claims | PASS | Phase 12 + 14 (admin-cms-e2e smoke + manual login) |
| 4 | External API /health + /health/ready |
PASS | curl from this run: /health 200, /health/ready 200 |
| 5 | Internal API /health/authenticated |
PASS | Phase 08 Task 8.11 + integration tests |
| 6 | Swagger + OpenAPI export + TS client regen | PASS | curl /swagger/v1/swagger.json 200; ./scripts/check-contracts-clean.sh reports "contracts and generated clients match" |
| 7 | dotnet test green with coverage gates |
PASS | 4 projects, 62 tests, 0 failures (Domain 16 + Application 12 + Api.Integration 28 + Infrastructure 6) |
| 8 | nx test green with coverage gates |
PASS | 7 projects, 41 unit tests, 0 failures |
| 9 | nx lint zero warnings, a11y rules enforced |
PARTIAL | 7/9 projects clean; 2 known issues remain — see "Known follow-ups" #2 |
| 10 | Playwright + axe-core green | PASS | Phase 14 (15 E2E tests passing across 3 browsers) |
| 11 | k6 /health thresholds |
PASS | Phase 15: p95=11.1ms (target <100ms), 0% errors |
| 12 | k6 /health/authenticated thresholds |
PASS | Phase 15: p95=1.39ms (target <200ms), 0% errors |
| 13 | Security scans wired (CodeQL, Semgrep, SonarCloud, Trivy, Gitleaks, Dependency-Check, Dependency Review, ZAP, SBOM) | PASS | Phase 16 + 17 — 11 workflows under .github/workflows/ |
| 14 | docs/threat-model.md v1 |
PASS | Phase 18 |
| 15 | .env.example present, .env.local gitignored |
PASS | Phase 00 |
| 16 | 18 ADRs committed (15 from spec + 3 divergence ADRs) | PASS | docs/adr/0001-...0018-*.md |
| 17 | roadmap.md + 9 sub-project briefs |
PASS | docs/roadmap.md + docs/subprojects/01-...09-*.md |
| 18 | requirements-trace.csv seeded |
PASS | docs/requirements-trace.csv (203 rows) |
| 19 | README.md getting-started |
PASS | Phase 18 (full version replacing Phase 00 stub) |
| 20 | CONTRIBUTING.md |
PASS | Phase 18 |
| 21 | docs/a11y-checklist.md |
PASS | Phase 18 |
| 22 | Tag foundation-v0.1.0 |
PASS | Created in Phase 19 Task 19.4 |
| 23 | CI fully green at tag | DEFER | Activates when remote is pushed (Foundation has no remote yet — local-only repo) |
During execution, Foundation hit ~30 plan patches. Each is a real-world tooling quirk caught and documented in commit history. Notable categories:
- arm64 image substitutions (3): SQL Server → Azure SQL Edge, ClamAV → clamav-debian, etc.
- IPv4/IPv6 healthcheck behavior in containers
- Tool-version ratchets: gitleaks v8 subcommand, KEYCLOAK_ADMIN env vars, Roslyn version pin, CA1031/CA1308/CA1724/CA5404/CA1861 NoWarn list growth
- @hey-api/openapi-ts 0.61.2 quirks
- Phase 11 inject-after-await DI bug surfaced by Phase 14 E2E
- Rate limiter blocked load tests; ValidIssuers list for cross-host JWT validation
/health: 200
/health/ready: 200
/swagger/v1/swagger.json: 200
- Backend (
dotnet test): 62 (Domain 16 + Application 12 + Api.Integration 28 + Infrastructure 6) - Frontend unit (
nx test): 41 (admin-cms 11 + web-portal 9 + libs/i18n 8 + libs/auth 5 + libs/ui-kit 4 + libs/api-client 3 + libs/contracts 1) - E2E (Playwright + axe-core): 15 (5 specs × 3 browsers)
- Total: 118
- Markdown formatter drift —
pnpm prettier --check docs/flags formatting on multiple existing files. Cleanup applied in Phase 19 Task 19.2. nx lintreports failures in 2 projects (caught during Phase 19 verification, deferred to a follow-up):admin-cms-e2e: 2 errors (playwright/no-networkidle) + 9 Playwright conditional warnings inapps/admin-cms-e2e/src/smoke.spec.ts. ReplacewaitForLoadState('networkidle')with explicit selectors and lift conditionalexpectcalls.api-client: 7 errors total — 6 from@ts-nocheckheaders in autogenerated files underlibs/api-client/src/lib/generated/**(need an ESLint override to ignore the generated folder), and 1@nx/dependency-checksmismatch on@hey-api/client-fetchversion specifier inlibs/api-client/package.json.
- SonarCloud workflow gated on
SONAR_TOKENsecret — activates when the ministry creates the SonarCloud project. - Keycloak
cce-internalrealm rejectsadfs-compatscope on user-flow OIDC redirects (works for client_credentials). Real fix: realm JSON tweak in sub-project 8. /auth/echois a Foundation-only test endpoint; remove in sub-project 4 when real endpoints land.- CA5404 (
ValidateAudience=false) NoWarn — production must implement custom audience validator before deploy. - BFF cookie pattern (httpOnly refresh tokens per ADR-0015) deferred to sub-project 4.
When picking up sub-project 2:
- Read
docs/subprojects/02-data-domain.mdbrief. - Open
permissions.yamland start adding the BRD §4.1.31 permission matrix. - New entities go under
backend/src/CCE.Domain/<aggregate>/. - Run
dotnet ef migrations add <Name>frombackend/src/CCE.Infrastructure/. - Apply with
dotnet ef database update.