257 lines
7.7 KiB
JSON
257 lines
7.7 KiB
JSON
{
|
|
"planPath": "docs/plans/2026-08-06-clusterclient-to-grpc.md",
|
|
"executionModel": "opus-subagents; sequential within a worktree, 1A and 1B concurrent in separate worktrees (git worktree add ../OtOpcUa-1B feat/grpc-central-ack); 1A merges first, 1B rebases; stop at each phase DoD (PR/merge user-owned)",
|
|
"worktrees": {},
|
|
"tasks": [
|
|
{
|
|
"id": 0,
|
|
"subject": "Task 0.1: mesh_transport.proto + contract lock",
|
|
"phase": "0",
|
|
"branch": "feat/grpc-phase0-contract-auth",
|
|
"classification": "standard",
|
|
"parallelizableWith": [
|
|
"0.3 (batch, same agent)"
|
|
],
|
|
"status": "completed",
|
|
"commit": "c0ccfa27",
|
|
"review": "spec ✅ + code ✅"
|
|
},
|
|
{
|
|
"id": 1,
|
|
"subject": "Task 0.2: DTO mapper + round-trip goldens",
|
|
"phase": "0",
|
|
"branch": "feat/grpc-phase0-contract-auth",
|
|
"classification": "high-risk",
|
|
"parallelizableWith": [],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
0
|
|
],
|
|
"commit": "545413a8",
|
|
"review": "spec ✅ + code ✅ (serial)"
|
|
},
|
|
{
|
|
"id": 2,
|
|
"subject": "Task 0.3: MeshTransportOptions + validators + SplitTopology relaxation",
|
|
"phase": "0",
|
|
"branch": "feat/grpc-phase0-contract-auth",
|
|
"classification": "standard",
|
|
"parallelizableWith": [
|
|
"0.1 (batch, same agent)"
|
|
],
|
|
"status": "completed",
|
|
"commit": "aa21f61f",
|
|
"review": "spec ✅ + code ✅"
|
|
},
|
|
{
|
|
"id": 3,
|
|
"subject": "Task 0.4: node-side MeshCommandAuthInterceptor",
|
|
"phase": "0",
|
|
"branch": "feat/grpc-phase0-contract-auth",
|
|
"classification": "high-risk",
|
|
"parallelizableWith": [
|
|
"0.5 (batch, same agent)"
|
|
],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
2
|
|
],
|
|
"commit": "fbda015c + fixes 24e55d33/a4631410",
|
|
"review": "spec ✅ + code ✅ (opus, fix loop closed)"
|
|
},
|
|
{
|
|
"id": 4,
|
|
"subject": "Task 0.5: IMeshPskProvider + CentralCommandAuthInterceptor",
|
|
"phase": "0",
|
|
"branch": "feat/grpc-phase0-contract-auth",
|
|
"classification": "high-risk",
|
|
"parallelizableWith": [
|
|
"0.4 (batch, same agent)"
|
|
],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
2
|
|
],
|
|
"commit": "68a416e4 + fixes 24e55d33/a4631410",
|
|
"review": "spec ✅ + code ✅ (opus, fix loop closed); 4 items gated on Phase 1A — see tracking §Phase 1A security register"
|
|
},
|
|
{
|
|
"id": 5,
|
|
"subject": "Task 0.6: rig config + FleetStatus issue + docs stub + Phase 0 gate",
|
|
"phase": "0",
|
|
"branch": "feat/grpc-phase0-contract-auth",
|
|
"classification": "small",
|
|
"parallelizableWith": [],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4
|
|
],
|
|
"commit": "23555ed0",
|
|
"review": "code ✅",
|
|
"gate": "PASS 4/4; issues #542 #543 filed"
|
|
},
|
|
{
|
|
"id": 6,
|
|
"subject": "Task 1A.1: NodeCommandGrpcService on the telemetry listener",
|
|
"phase": "1A",
|
|
"branch": "feat/grpc-node-command",
|
|
"classification": "standard",
|
|
"parallelizableWith": [
|
|
"1B.1 (other worktree)"
|
|
],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
5
|
|
],
|
|
"commit": "64774652",
|
|
"review": "spec ✅ + code ✅"
|
|
},
|
|
{
|
|
"id": 7,
|
|
"subject": "Task 1A.2: MeshGrpcCommandDialer + third branch in CentralCommunicationActor (+ security register items 1-2)",
|
|
"phase": "1A",
|
|
"branch": "feat/grpc-node-command",
|
|
"classification": "high-risk",
|
|
"parallelizableWith": [
|
|
"1B.2 (other worktree)"
|
|
],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
6
|
|
],
|
|
"commit": "14d21496+6a862011 + fixes 48dc2120/86633f14",
|
|
"review": "spec ✅ + code ✅ (opus; I-2 fixed via gate-follows-endpoint decision)"
|
|
},
|
|
{
|
|
"id": 8,
|
|
"subject": "Task 1A.3: 1A live gate (central pair flipped, rig-only, reverted)",
|
|
"phase": "1A",
|
|
"branch": "feat/grpc-node-command",
|
|
"classification": "small",
|
|
"parallelizableWith": [],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
7
|
|
],
|
|
"commit": "gate records 410c2e29/e3a0ddbc; boot fixes c0475f2d/e54883a8",
|
|
"gate": "run 1 FAIL (defect 4) -> run 2 PASS 8/8; issues #544 #545 #546 filed"
|
|
},
|
|
{
|
|
"id": 9,
|
|
"subject": "Task 1B.1: CentralCommandGrpcService + admin validator rule",
|
|
"phase": "1B",
|
|
"branch": "feat/grpc-central-ack",
|
|
"classification": "standard",
|
|
"parallelizableWith": [
|
|
"1A.1 (other worktree)"
|
|
],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
5
|
|
],
|
|
"commit": "14dd07d2 (rebased 7e7df337)",
|
|
"review": "spec ✅ + code ✅"
|
|
},
|
|
{
|
|
"id": 10,
|
|
"subject": "Task 1B.2: GrpcApplyAckSender + node-side wiring",
|
|
"phase": "1B",
|
|
"branch": "feat/grpc-central-ack",
|
|
"classification": "high-risk",
|
|
"parallelizableWith": [
|
|
"1A.2 (other worktree)"
|
|
],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
9
|
|
],
|
|
"commit": "a5a789d4 + fixes e54711a2/4d607575 (rebased 308c6aaa/667639e6/07bc1878)",
|
|
"review": "spec ✅ + code ✅ (opus, serial; 1 Critical fixed: per-endpoint deadline; fix loop closed)"
|
|
},
|
|
{
|
|
"id": 11,
|
|
"subject": "Task 1B.3: 1B live gate (site-a flipped, rig-only, reverted; rebase on 1A first)",
|
|
"phase": "1B",
|
|
"branch": "feat/grpc-central-ack",
|
|
"classification": "small",
|
|
"parallelizableWith": [],
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
8,
|
|
10
|
|
],
|
|
"commit": "gate record a397cdad (rebase fixup 4a2a3d3a)",
|
|
"gate": "PASS 7/7 incl. 4b hang drill (~10s failover, per-endpoint deadline proven live)"
|
|
},
|
|
{
|
|
"id": 12,
|
|
"subject": "Phase 2: baseline reproduction + full-rig cutover + soak + kill drills",
|
|
"phase": "2",
|
|
"branch": "(rig commit)",
|
|
"classification": "high-risk",
|
|
"parallelizableWith": [],
|
|
"status": "pending",
|
|
"blockedBy": [
|
|
8,
|
|
11,
|
|
16
|
|
],
|
|
"note": "Targeted-test policy applies (see plan Phase 2 header): per-task runs targeted; ONE full-suite run at the phase DoD."
|
|
},
|
|
{
|
|
"id": 13,
|
|
"subject": "Task 3.1: delete ClusterClient (code + HOCON + config + tests, ordered)",
|
|
"phase": "3",
|
|
"branch": "feat/grpc-phase3-deletion",
|
|
"classification": "high-risk",
|
|
"parallelizableWith": [],
|
|
"status": "pending",
|
|
"blockedBy": [
|
|
12
|
|
]
|
|
},
|
|
{
|
|
"id": 14,
|
|
"subject": "Task 3.2: docs sweep (Configuration/Redundancy/Telemetry/CLAUDE.md + scadaproj index)",
|
|
"phase": "3",
|
|
"branch": "feat/grpc-phase3-deletion",
|
|
"classification": "small",
|
|
"parallelizableWith": [],
|
|
"status": "pending",
|
|
"blockedBy": [
|
|
13
|
|
]
|
|
},
|
|
{
|
|
"id": 15,
|
|
"subject": "Phase 4: terminal live gate on post-deletion image (8 checks, provenance-guarded)",
|
|
"phase": "4",
|
|
"branch": "(master)",
|
|
"classification": "high-risk",
|
|
"parallelizableWith": [],
|
|
"status": "pending",
|
|
"blockedBy": [
|
|
14
|
|
]
|
|
},
|
|
{
|
|
"id": 16,
|
|
"subject": "Task 2.0 (MUST FIX): PreStart-race logging honest — quiet on heal, loud on permanent absence",
|
|
"phase": "2",
|
|
"branch": "(master, post-1B-merge, pre-flip)",
|
|
"classification": "small",
|
|
"parallelizableWith": [],
|
|
"status": "pending",
|
|
"blockedBy": [
|
|
8,
|
|
11
|
|
],
|
|
"note": "Both gates: race fires ~every admin boot, two FALSE Errors; soak error-grep impossible without this. Targeted tests only (ControlPlaneStarterOrderTests + CentralCommunicationActorTests)."
|
|
}
|
|
],
|
|
"lastUpdated": "2026-08-06"
|
|
} |