From 95e4f97529495082f44fc40cef80ce7506b1c8e6 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Wed, 22 Jul 2026 12:19:37 -0400 Subject: [PATCH] chore(mesh): mark Phase 2 tasks 3-5 complete Claude-Session: https://claude.ai/code/session_01GASWkNEi68FSCtvr6rLoEW --- ...ase2-clusterclient-transport.md.tasks.json | 141 ++++++++++++++++-- 1 file changed, 128 insertions(+), 13 deletions(-) diff --git a/docs/plans/2026-07-22-mesh-phase2-clusterclient-transport.md.tasks.json b/docs/plans/2026-07-22-mesh-phase2-clusterclient-transport.md.tasks.json index e3f3e29c..3c5db0ec 100644 --- a/docs/plans/2026-07-22-mesh-phase2-clusterclient-transport.md.tasks.json +++ b/docs/plans/2026-07-22-mesh-phase2-clusterclient-transport.md.tasks.json @@ -1,18 +1,133 @@ { "planPath": "docs/plans/2026-07-22-mesh-phase2-clusterclient-transport.md", - "note": "Per-cluster mesh Phase 2. Decisions pre-made: config-flagged dark switch (MeshTransport:Mode), buffer-size=0, alarm-commands central leg in scope. Three design-doc corrections and the single-mesh duplicate-delivery trap are documented in the plan header — read them before Task 3.", + "note": "Per-cluster mesh Phase 2. Decisions pre-made: config-flagged dark switch (MeshTransport:Mode), buffer-size=0, alarm-commands central leg in scope. Three design-doc corrections and the single-mesh duplicate-delivery trap are documented in the plan header \u2014 read them before Task 3.", "tasks": [ - {"id": 0, "subject": "Task 0: MeshTransportOptions + validator + registration", "status": "completed", "classification": "small", "parallelizableWith": [1], "commit": "5439f148"}, - {"id": 1, "subject": "Task 1: receptionist extension, buffer-size=0, frame-size logging (effective-config test)", "status": "completed", "classification": "small", "parallelizableWith": [0], "commit": "7b71a6a3", "note": "First draft of the buffering test was VACUOUS -- Config.GetInt returns 0 for a missing key, so it passed before the feature existed. Rewritten to assert through ClusterClientSettings/ClusterReceptionistSettings."}, - {"id": 2, "subject": "Task 2: MeshCommand envelope + generation-suffixed ClusterClient factory", "status": "completed", "classification": "small", "blockedBy": [0], "commit": "0d6669d5", "note": "Dropped a third test that asserted ClusterClientSettings directly and never touched the factory."}, - {"id": 3, "subject": "Task 3: CentralCommunicationActor — dark-switched SendToAll fan-out, DB-sourced contacts, ApplyAck forward", "status": "pending", "classification": "high-risk", "blockedBy": [1, 2], "parallelizableWith": [4]}, - {"id": 4, "subject": "Task 4: NodeCommunicationActor — inbound to node-local EventStream, outbound ApplyAck", "status": "pending", "classification": "standard", "blockedBy": [1, 2], "parallelizableWith": [3]}, - {"id": 5, "subject": "Task 5: node subscribers accept EventStream too; rename _coordinatorOverride -> _ackRouter", "status": "pending", "classification": "standard", "blockedBy": [4]}, - {"id": 6, "subject": "Task 6: wire both sides, receptionist registration, pin the wire-contract actor paths", "status": "pending", "classification": "standard", "blockedBy": [3, 5]}, - {"id": 7, "subject": "Task 7: route the five publish sites through the mesh router (nullable, mediator fallback)", "status": "pending", "classification": "standard", "blockedBy": [6]}, - {"id": 8, "subject": "Task 8: real two-ActorSystem ClusterClient boundary test + falsifiability control", "status": "pending", "classification": "high-risk", "blockedBy": [7], "parallelizableWith": [9]}, - {"id": 9, "subject": "Task 9: docker-dev rig config + docs + design-doc correction", "status": "pending", "classification": "small", "blockedBy": [7], "parallelizableWith": [8]}, - {"id": 10, "subject": "Task 10: live gate on docker-dev (10 steps; step 4 and step 8 are the ones that matter)", "status": "pending", "classification": "high-risk", "blockedBy": [8, 9]} + { + "id": 0, + "subject": "Task 0: MeshTransportOptions + validator + registration", + "status": "completed", + "classification": "small", + "parallelizableWith": [ + 1 + ], + "commit": "5439f148" + }, + { + "id": 1, + "subject": "Task 1: receptionist extension, buffer-size=0, frame-size logging (effective-config test)", + "status": "completed", + "classification": "small", + "parallelizableWith": [ + 0 + ], + "commit": "7b71a6a3", + "note": "First draft of the buffering test was VACUOUS -- Config.GetInt returns 0 for a missing key, so it passed before the feature existed. Rewritten to assert through ClusterClientSettings/ClusterReceptionistSettings." + }, + { + "id": 2, + "subject": "Task 2: MeshCommand envelope + generation-suffixed ClusterClient factory", + "status": "completed", + "classification": "small", + "blockedBy": [ + 0 + ], + "commit": "0d6669d5", + "note": "Dropped a third test that asserted ClusterClientSettings directly and never touched the factory." + }, + { + "id": 3, + "subject": "Task 3: CentralCommunicationActor \u2014 dark-switched SendToAll fan-out, DB-sourced contacts, ApplyAck forward", + "status": "completed", + "classification": "high-risk", + "blockedBy": [ + 1, + 2 + ], + "parallelizableWith": [ + 4 + ], + "commit": "d5b5cb6e", + "note": "SendToAll sabotage-verified. Two test-harness bugs found: SubscribeAck goes to the SENDER, and EventFilter matches case-INSENSITIVELY (a 'was NOT' filter also caught 'was not created')." + }, + { + "id": 4, + "subject": "Task 4: NodeCommunicationActor \u2014 inbound to node-local EventStream, outbound ApplyAck", + "status": "completed", + "classification": "standard", + "blockedBy": [ + 1, + 2 + ], + "parallelizableWith": [ + 3 + ], + "commit": "915beec1", + "note": "No Ask crosses the boundary in Phase 2, so this actor is far smaller than the sister project's." + }, + { + "id": 5, + "subject": "Task 5: node subscribers accept EventStream too; rename _coordinatorOverride -> _ackRouter", + "status": "completed", + "classification": "standard", + "blockedBy": [ + 4 + ], + "commit": "5cb0e721", + "note": "Two wiring tests added -- unit tests either side of the seam both pass with the subscription deleted. First draft raced (ActorOf returns before PreStart; EventStream publish to nobody is dropped silently); alarm version was vacuous until the warm-up moved outside the assertion window." + }, + { + "id": 6, + "subject": "Task 6: wire both sides, receptionist registration, pin the wire-contract actor paths", + "status": "pending", + "classification": "standard", + "blockedBy": [ + 3, + 5 + ] + }, + { + "id": 7, + "subject": "Task 7: route the five publish sites through the mesh router (nullable, mediator fallback)", + "status": "pending", + "classification": "standard", + "blockedBy": [ + 6 + ] + }, + { + "id": 8, + "subject": "Task 8: real two-ActorSystem ClusterClient boundary test + falsifiability control", + "status": "pending", + "classification": "high-risk", + "blockedBy": [ + 7 + ], + "parallelizableWith": [ + 9 + ] + }, + { + "id": 9, + "subject": "Task 9: docker-dev rig config + docs + design-doc correction", + "status": "pending", + "classification": "small", + "blockedBy": [ + 7 + ], + "parallelizableWith": [ + 8 + ] + }, + { + "id": 10, + "subject": "Task 10: live gate on docker-dev (10 steps; step 4 and step 8 are the ones that matter)", + "status": "pending", + "classification": "high-risk", + "blockedBy": [ + 8, + 9 + ] + } ], "lastUpdated": "2026-07-22T00:00:00Z" -} +} \ No newline at end of file