From 1a7e3f7ea34b19a70ad99b1b3d1e0c5c8d2c0a83 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Wed, 22 Jul 2026 19:29:09 -0400 Subject: [PATCH] chore(mesh): mark Phase 3 tasks 3-4 complete Claude-Session: https://claude.ai/code/session_01GASWkNEi68FSCtvr6rLoEW --- ...esh-phase3-config-fetch-and-cache.md.tasks.json | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/plans/2026-07-22-mesh-phase3-config-fetch-and-cache.md.tasks.json b/docs/plans/2026-07-22-mesh-phase3-config-fetch-and-cache.md.tasks.json index 9dabcd74..000db672 100644 --- a/docs/plans/2026-07-22-mesh-phase3-config-fetch-and-cache.md.tasks.json +++ b/docs/plans/2026-07-22-mesh-phase3-config-fetch-and-cache.md.tasks.json @@ -41,24 +41,28 @@ { "id": 3, "subject": "Task 3: config-serve auth interceptor + dedicated h2c listener wiring", - "status": "pending", + "status": "completed", "classification": "high-risk", "blockedBy": [ 0, 2 - ] + ], + "commit": "4d88f67c", + "note": "Merged the LocalDb-sync + ConfigServe listener blocks into ONE that re-applies the existing HTTP surface exactly once and adds both dedicated h2c ports; a fused admin+driver node double-binding the HTTP port throws 'address already in use' (sabotage-proven). AddGrpc moved out of the hasDriver block to hasDriver||hasAdmin with both path-scoped interceptors. StatusCode.Unauthenticated (LocalDb uses PermissionDenied). Coexistence proven by a minimal-WebApplication shape test, mirroring LocalDbSyncListenerTests; real end-to-end fetch is Task 8." }, { "id": 4, "subject": "Task 4: node gRPC artifact fetcher \u2014 SHA-verified reassembly, endpoint failover, null-on-any-failure", - "status": "pending", + "status": "completed", "classification": "standard", "blockedBy": [ 1 ], "parallelizableWith": [ 2 - ] + ], + "commit": "7a8fb5f1", + "note": "Uniform invariant: return the first endpoint's bytes that reassemble AND verify (SHA-256 lowercase-hex == dispatched RevisionHash); else null. RpcException / empty-stream / hash-mismatch all -> try-next, never throw. Func seam keeps gRPC out of unit tests (fake subclasses the generated client's protected ctor). Namespace is .DeploymentCache NOT .Deployment (else it shadows Configuration.Entities.Deployment across the whole test assembly via enclosing-namespace lookup) \u2014 same trap LocalDbDeploymentArtifactCache already dodged. Added Grpc.Net.Client to Runtime.csproj. xUnit v2 here: CancellationToken.None, not TestContext.Current." }, { "id": 5, @@ -123,5 +127,5 @@ ] } ], - "lastUpdated": "2026-07-22T23:55:00Z" + "lastUpdated": "2026-07-23T00:30:00Z" } \ No newline at end of file