{
  "planPath": "docs/plans/2026-06-11-alarm-followups.md",
  "designPath": "docs/plans/2026-06-11-alarm-followups-design.md",
  "branch": "feat/alarm-followups",
  "baseBranch": "master",
  "baseSha": "bcb9f45c",
  "status": "completed",
  "note": "Resolves the 6 T17-T24 follow-ups. Double-emit = primary-only emission (T1 ScriptedAlarmHostActor alerts-gate + T2 HistorianAdapterActor historize-gate, both on Primary via redundancy-state; OPC UA write + commands stay ungated). T3 Galaxy reconnect recreate. T4 broadcaster health signal. T5 CorrelationId wrapper. T6 Alerts.razor (Timed picker + chip auto-clear + live-pill). T7 ScriptLog.razor live-pill. T8 live-verify. T9 rig cleanup. T10 docs+finish. T1-T5 mutually parallel; T6/T7 after T4 (∥ each other); T8 after 1/2/3/6/7; T9 after 8; T10 after 9. NO bUnit (razor proven by docker-dev /run). NO Configuration/EF change.",
  "tasks": [
    {"id": 235, "planTask": 0, "subject": "T0: Branch + baseline", "classification": "trivial", "status": "completed", "blockedBy": []},
    {"id": 236, "planTask": 1, "subject": "T1: Redundancy emit-gate in ScriptedAlarmHostActor (A1)", "classification": "high-risk", "status": "completed", "blockedBy": [235], "parallelizableWith": [237, 238, 239, 240]},
    {"id": 237, "planTask": 2, "subject": "T2: Redundancy historize-gate in HistorianAdapterActor (A2)", "classification": "high-risk", "status": "completed", "blockedBy": [235], "parallelizableWith": [236, 238, 239, 240]},
    {"id": 238, "planTask": 3, "subject": "T3: Galaxy reconnect recreates a faulted session", "classification": "high-risk", "status": "completed", "blockedBy": [235], "parallelizableWith": [236, 237, 239, 240]},
    {"id": 239, "planTask": 4, "subject": "T4: Broadcaster connection-health signal + bridges", "classification": "standard", "status": "completed", "blockedBy": [235], "parallelizableWith": [236, 237, 238, 240]},
    {"id": 240, "planTask": 5, "subject": "T5: CorrelationId wrapper for the alarm commands (3b)", "classification": "small", "status": "completed", "blockedBy": [235], "parallelizableWith": [236, 237, 238, 239]},
    {"id": 241, "planTask": 6, "subject": "T6: Alerts.razor — Timed-shelve picker + chip auto-clear + live-pill", "classification": "standard", "status": "completed", "blockedBy": [239], "parallelizableWith": [242]},
    {"id": 242, "planTask": 7, "subject": "T7: ScriptLog.razor live-pill + reconnect-overlay check", "classification": "small", "status": "completed", "blockedBy": [239], "parallelizableWith": [241]},
    {"id": 243, "planTask": 8, "subject": "T8: Live-verify on docker-dev", "classification": "verification", "status": "completed", "blockedBy": [236, 237, 238, 241, 242]},
    {"id": 244, "planTask": 9, "subject": "T9: docker-dev rig cleanup", "classification": "trivial", "status": "completed", "blockedBy": [243]},
    {"id": 245, "planTask": 10, "subject": "T10: Docs + finish branch", "classification": "small", "status": "completed", "blockedBy": [244]}
  ],
  "lastUpdated": "2026-06-15"
}
