diff --git a/docs/plans/phase-1-checklist.md b/docs/plans/phase-1-checklist.md new file mode 100644 index 0000000..c608643 --- /dev/null +++ b/docs/plans/phase-1-checklist.md @@ -0,0 +1,68 @@ +# Phase 1 Execution Checklist + +**Phase**: Central Platform Foundations +**Started**: 2026-03-16 +**Completed**: 2026-03-16 + +--- + +## Work Package Status + +| WP | Description | Status | Date | Notes | +|----|-------------|--------|------|-------| +| WP-1 | Configuration Database — DbContext, Fluent API, Migration | [x] Complete | 2026-03-16 | 26 DbSets, 10 config classes, initial migration | +| WP-2 | Repository Implementations (ISecurityRepository, ICentralUiRepository) | [x] Complete | 2026-03-16 | Full CRUD + audit log queries with pagination | +| WP-3 | IAuditService with Transactional Guarantee | [x] Complete | 2026-03-16 | JSON serialization, same-transaction commit | +| WP-4 | Optimistic Concurrency on Deployment Status | [x] Complete | 2026-03-16 | RowVersion on DeploymentRecord, last-write-wins on templates | +| WP-5 | Seed Data | [x] Complete | 2026-03-16 | SCADA-Admins → Admin mapping | +| WP-6 | LDAP Bind Service | [x] Complete | 2026-03-16 | Direct bind, TLS enforcement, AllowInsecureLdap for dev | +| WP-7 | JWT Issuance, Sliding Refresh, Idle Timeout | [x] Complete | 2026-03-16 | HMAC-SHA256, 15-min refresh, 30-min idle | +| WP-8 | Role Claim Extraction from LDAP Groups | [x] Complete | 2026-03-16 | Multi-role, site-scoped deployment accumulation | +| WP-9 | Authorization Policies with Site-Scoped Deployment | [x] Complete | 2026-03-16 | Admin/Design/Deployment + SiteScopeAuthorizationHandler | +| WP-10 | Shared Data Protection Keys | [x] Complete | 2026-03-16 | EF Core key storage, cross-instance validation tested | +| WP-11 | Host — Startup Validation (REQ-HOST-4) | [x] Complete | 2026-03-16 | 19 validation rules, fail fast with clear errors | +| WP-12 | Host — Readiness Gating /health/ready (REQ-HOST-4a) | [x] Complete | 2026-03-16 | DB + Akka health checks, 503 until ready | +| WP-13 | Host — Akka.NET Bootstrap (REQ-HOST-6) | [x] Complete | 2026-03-16 | AkkaHostedService with HOCON config, cluster, remoting, SBR | +| WP-14 | Host — Serilog Logging (REQ-HOST-8) | [x] Complete | 2026-03-16 | SiteId/NodeHostname/NodeRole enrichment, console + file sinks | +| WP-15 | Host — Dead Letter Monitoring (REQ-HOST-8a) | [x] Complete | 2026-03-16 | DeadLetterMonitorActor with count tracking | +| WP-16 | Host — CoordinatedShutdown (REQ-HOST-9) | [x] Complete | 2026-03-16 | CLR shutdown hook, no Environment.Exit | +| WP-17 | Host — Windows Service (REQ-HOST-5) | [x] Complete | 2026-03-16 | UseWindowsService() in both startup paths | +| WP-18 | Central UI — Blazor Server Shell | [x] Complete | 2026-03-16 | Bootstrap 5, role-aware NavMenu, LDAP mapping CRUD | +| WP-19 | Central UI — Login/Logout Flow | [x] Complete | 2026-03-16 | LDAP auth → JWT → HTTP-only cookie | +| WP-20 | Central UI — Role-Aware Navigation | [x] Complete | 2026-03-16 | AuthorizeView per role, route guards, redirect components | +| WP-21 | Central UI — Failover Behavior | [x] Complete | 2026-03-16 | SignalR reconnection overlay, JWT survives, streams lost noted | +| WP-22 | Integration Tests | [x] Complete | 2026-03-16 | Startup validation, auth flow, audit transactions, readiness | + +## Verification Gate + +| # | Gate Criterion | Pass | Notes | +|---|---------------|------|-------| +| 1 | Configuration Database creates full schema | [x] | 25 tables via initial migration | +| 2 | Repositories pass CRUD integration tests | [x] | SecurityRepository + CentralUiRepository | +| 3 | Audit Service transactional guarantee | [x] | Commit + rollback tests pass | +| 4 | Optimistic concurrency works | [x] | DbUpdateConcurrencyException on stale deployment | +| 5 | LDAP authentication works | [x] | Unit tests pass; GLAuth integration skipped (no server) | +| 6 | JWT lifecycle correct | [x] | Claims, refresh, idle timeout all tested | +| 7 | Role extraction correct | [x] | Multi-role, site-scoped, unrecognized groups | +| 8 | Authorization policies enforce permissions | [x] | Admin/Design/Deployment + site scope | +| 9 | Shared Data Protection keys work | [x] | Cross-instance protect/unprotect test | +| 10 | Startup validation catches bad config | [x] | 19 validation rule tests | +| 11 | Readiness gating works | [x] | /health/ready endpoint returns status | +| 12 | Akka.NET boots with cluster config | [x] | AkkaHostedService creates ActorSystem | +| 13 | Serilog enrichment works | [x] | SiteId/NodeHostname/NodeRole in output | +| 14 | Dead letters logged and counted | [x] | TestKit verification | +| 15 | CoordinatedShutdown triggers cleanly | [x] | HOCON config + no Environment.Exit | +| 16 | Windows Service configured | [x] | UseWindowsService() present | +| 17 | Blazor Server shell works | [x] | Login, dashboard, LDAP mappings, Bootstrap 5 | +| 18 | Role-aware navigation works | [x] | AuthorizeView, route guards | +| 19 | Failover behavior handled | [x] | Reconnection overlay, JWT survives | +| 20 | End-to-end testable outcome | [x] | Integration tests cover auth flow + audit + startup | + +## Summary + +- **Total WPs**: 22/22 complete +- **Tests**: 186 passed, 1 skipped (LDAP integration needs GLAuth), 0 failed +- **Build**: 0 errors, 0 warnings +- **Verification gate**: 20/20 pass +- **Questions logged**: 0 (all pre-resolved) +- **Codex review**: Skipped (best-effort per procedure)