From 23cd6e011863d9c76947214b11912435c5fc0dfe Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Wed, 22 Jul 2026 19:45:12 -0400 Subject: [PATCH] chore(mesh): mark Phase 3 tasks 5-6 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 000db672..dc1114c1 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 @@ -67,20 +67,24 @@ { "id": 5, "subject": "Task 5: FetchAndCache apply path \u2014 fetch->cache->apply-from-bytes, null=apply-failure", - "status": "pending", + "status": "completed", "classification": "high-risk", "blockedBy": [ 4 - ] + ], + "commit": "648f173b", + "note": "DispatchDeployment (rev differs) in FetchAndCache -> BeginFetchAndCacheApply PipeTo(Self) FetchedForApply(bytes?), never a blocking await in a receive. HandleFetchedForApply applies synchronously mirroring ApplyAndAck: null bytes = FAILURE (keep last-known-good, don't advance rev, ack Failed); good bytes reconcile+rebuild+push FROM the bytes (OpcUaPublishActor never reads SQL) then cache. A faulted fetch task maps to null via PipeTo failure:. Extracted ReconcileDriversFromBlob (Direct/FetchAndCache/boot all share it; #485 empty guard moved in); ApplyCachedArtifact now reuses it. Props gains fetchAndCacheMode+artifactFetcher LAST. Idempotent re-dispatch is the existing _currentRevision short-circuit (no separate cache-contains check added; peer-replication-missed-fetch is covered by Task 6 boot + StoreAsync idempotency). Sabotages: advance-rev-on-null reddens test b; drop _currentRevision guard reddens test c." }, { "id": 6, "subject": "Task 6: FetchAndCache bootstrap from the LocalDb pointer; no driver-side config SQL read", - "status": "pending", + "status": "completed", "classification": "high-risk", "blockedBy": [ 5 - ] + ], + "commit": "6d004738", + "note": "Bootstrap() branches to BootstrapFromCache() in FetchAndCache: GetCurrentUnkeyedAsync -> set _currentRevision -> ApplyCachedArtifact (no SQL, no re-ack). _isRunningFromCache STAYS false (normal op, not degraded). Empty/unreadable cache -> Steady-no-revision (first dispatch fetches), NEVER Stale (Stale = 'SQL down, retry'; FetchAndCache has no config SQL read to recover). TryRecoverFromStale gains a defensive FetchAndCache early-return (unreachable anyway \u2014 retry-db timer only starts in Stale). KEY test lever: UpsertNodeDeploymentState SWALLOWS db failures, so a FetchAndCache dispatch runs end-to-end under a ThrowingDbFactory \u2014 the ack proves Steady-not-Stale AND no-SQL-at-boot in one shot. NodeDiagnosticsSnapshot lives in Commons.Interfaces not Messages.Fleet." }, { "id": 7, @@ -127,5 +131,5 @@ ] } ], - "lastUpdated": "2026-07-23T00:30:00Z" + "lastUpdated": "2026-07-23T01:30:00Z" } \ No newline at end of file