diff --git a/docs/plans/2026-07-20-localdb-adoption-phase1.md.tasks.json b/docs/plans/2026-07-20-localdb-adoption-phase1.md.tasks.json index 199730fc..329080ac 100644 --- a/docs/plans/2026-07-20-localdb-adoption-phase1.md.tasks.json +++ b/docs/plans/2026-07-20-localdb-adoption-phase1.md.tasks.json @@ -1,25 +1,152 @@ { "planPath": "docs/plans/2026-07-20-localdb-adoption-phase1.md", "tasks": [ - { "id": 0, "subject": "Task 0: Preflight + recon (findings doc, STOP conditions)", "status": "completed", + { + "id": 0, + "subject": "Task 0: Preflight + recon (findings doc, STOP conditions)", + "status": "completed", "notes": "Feed verified: LocalDb/.Contracts/.Replication all 0.1.1. All 3 STOP conditions clear. Findings: docs/plans/2026-07-20-localdb-phase1-recon.md. 8 deviations recorded (D-1..D-8); D-1/D-3/D-5/D-6 change downstream work materially.", - "deviation": "D-1 cache read cannot be keyed by ClusterId at the boot seam (unkeyed newest-pointer read instead); D-3 a third LiteDB test file must be deleted; D-5 WebApplicationFactory is deliberately unused in this repo (use TwoNodeClusterHarness); D-6 driver-only nodes have no ASPNETCORE_URLS so the Kestrel re-bind fallback is wrong. See recon doc §9." }, - { "id": 1, "subject": "Task 1: Package references and pins (LocalDb 0.1.1, Grpc.AspNetCore, SQLitePCLRaw)", "status": "pending", "blockedBy": [0] }, - { "id": 2, "subject": "Task 2: Schema + LocalDbSetup.OnReady + registration tests", "status": "pending", "blockedBy": [1] }, - { "id": 3, "subject": "Task 3: Fail-closed sync auth interceptor + tests", "status": "pending", "blockedBy": [1] }, - { "id": 4, "subject": "Task 4: LocalDbRegistration + Program.cs DI wiring + config defaults", "status": "pending", "blockedBy": [2, 3] }, - { "id": 5, "subject": "Task 5: Dedicated h2c sync listener + MapZbLocalDbSync (Kestrel URLs-override risk)", "status": "pending", "blockedBy": [4] }, - { "id": 6, "subject": "Task 6: IDeploymentArtifactCache + chunked LocalDb implementation + tests", "status": "pending", "blockedBy": [2] }, - { "id": 7, "subject": "Task 7: Cache write path in DriverHostActor (Props expression-tree trap)", "status": "pending", "blockedBy": [0, 6] }, - { "id": 8, "subject": "Task 8: Boot-from-cache read path + running-from-cache signal", "status": "pending", "blockedBy": [7] }, - { "id": 9, "subject": "Task 9: Delete the dormant LiteDB LocalCache subsystem", "status": "pending", "blockedBy": [0] }, - { "id": 10, "subject": "Task 10: Health check + telemetry meter allowlist", "status": "pending", "blockedBy": [4] }, - { "id": 11, "subject": "Task 11: DI-pin integration tests over the real Program.cs", "status": "pending", "blockedBy": [5, 10] }, - { "id": 12, "subject": "Task 12: Two-node convergence harness + scenarios (+ positive control)", "status": "pending", "blockedBy": [5, 6] }, - { "id": 13, "subject": "Task 13: docker-dev rig configuration (site-a pair on, site-b pin off)", "status": "pending", "blockedBy": [5] }, - { "id": 14, "subject": "Task 14: Documentation (runbook, Redundancy.md, CLAUDE.md)", "status": "pending", "blockedBy": [8] }, - { "id": 15, "subject": "Task 15: DoD sweep (offline) — STOP and report after this", "status": "pending", "blockedBy": [7, 8, 9, 11, 12, 13, 14] }, - { "id": 16, "subject": "Task 16: Live gate on the docker-dev rig (needs explicit user go-ahead)", "status": "pending", "blockedBy": [15] } + "deviation": "D-1 cache read cannot be keyed by ClusterId at the boot seam (unkeyed newest-pointer read instead); D-3 a third LiteDB test file must be deleted; D-5 WebApplicationFactory is deliberately unused in this repo (use TwoNodeClusterHarness); D-6 driver-only nodes have no ASPNETCORE_URLS so the Kestrel re-bind fallback is wrong. See recon doc \u00a79." + }, + { + "id": 1, + "subject": "Task 1: Package references and pins (LocalDb 0.1.1, Grpc.AspNetCore, SQLitePCLRaw)", + "status": "completed", + "blockedBy": [ + 0 + ] + }, + { + "id": 2, + "subject": "Task 2: Schema + LocalDbSetup.OnReady + registration tests", + "status": "completed", + "blockedBy": [ + 1 + ] + }, + { + "id": 3, + "subject": "Task 3: Fail-closed sync auth interceptor + tests", + "status": "completed", + "blockedBy": [ + 1 + ] + }, + { + "id": 4, + "subject": "Task 4: LocalDbRegistration + Program.cs DI wiring + config defaults", + "status": "completed", + "blockedBy": [ + 2, + 3 + ] + }, + { + "id": 5, + "subject": "Task 5: Dedicated h2c sync listener + MapZbLocalDbSync (Kestrel URLs-override risk)", + "status": "completed", + "blockedBy": [ + 4 + ] + }, + { + "id": 6, + "subject": "Task 6: IDeploymentArtifactCache + chunked LocalDb implementation + tests", + "status": "completed", + "blockedBy": [ + 2 + ] + }, + { + "id": 7, + "subject": "Task 7: Cache write path in DriverHostActor (Props expression-tree trap)", + "status": "completed", + "blockedBy": [ + 0, + 6 + ] + }, + { + "id": 8, + "subject": "Task 8: Boot-from-cache read path + running-from-cache signal", + "status": "completed", + "blockedBy": [ + 7 + ] + }, + { + "id": 9, + "subject": "Task 9: Delete the dormant LiteDB LocalCache subsystem", + "status": "completed", + "blockedBy": [ + 0 + ] + }, + { + "id": 10, + "subject": "Task 10: Health check + telemetry meter allowlist", + "status": "completed", + "blockedBy": [ + 4 + ] + }, + { + "id": 11, + "subject": "Task 11: DI-pin integration tests over the real Program.cs", + "status": "completed", + "blockedBy": [ + 5, + 10 + ] + }, + { + "id": 12, + "subject": "Task 12: Two-node convergence harness + scenarios (+ positive control)", + "status": "completed", + "blockedBy": [ + 5, + 6 + ] + }, + { + "id": 13, + "subject": "Task 13: docker-dev rig configuration (site-a pair on, site-b pin off)", + "status": "completed", + "blockedBy": [ + 5 + ] + }, + { + "id": 14, + "subject": "Task 14: Documentation (runbook, Redundancy.md, CLAUDE.md)", + "status": "completed", + "blockedBy": [ + 8 + ] + }, + { + "id": 15, + "subject": "Task 15: DoD sweep (offline) \u2014 STOP and report after this", + "status": "completed", + "blockedBy": [ + 7, + 8, + 9, + 11, + 12, + 13, + 14 + ], + "notes": "Offline DoD sweep: full-solution build 0 errors (824 pre-existing OTOPCUA0001 analyzer warnings in driver *test* projects; none reference any LocalDb/DeploymentCache file). Grep: no LiteDB/ILocalConfigCache/GenerationSealedCache code refs (2 explanatory doc-comment lines in ILdapGroupRoleMappingService remain, allowed). Runtime.Tests 407/0/31 twice (the previously-flagged intermittent did NOT reproduce). Host.IntegrationTests LocalDb subset 40/0/0. Full-solution `dotnet test` with stash-baseline NOT run: many suites are infra-gated (driver fixtures, full Akka mesh, LDAP real-bind, shared-SQL DB tests) and cannot run offline on macOS \u2014 deferred to Task 16 / CI. Task 12 positive-control evidence recorded in commit afa5be71. Did NOT merge to master \u2014 stopped here per plan." + }, + { + "id": 16, + "subject": "Task 16: Live gate on the docker-dev rig (needs explicit user go-ahead)", + "status": "pending", + "blockedBy": [ + 15 + ] + } ], "lastUpdated": "2026-07-20T00:00:00Z" -} +} \ No newline at end of file