{
  "planPath": "docs/plans/2026-06-13-protocol-equipment-tag-linkage-plan.md",
  "tasks": [
    {"id": 341, "subject": "Task 0: Create feature branch", "status": "completed"},
    {"id": 342, "subject": "Task 1: Shared EquipmentTagRefResolver + tests", "status": "completed", "blockedBy": [341]},
    {"id": 343, "subject": "Task 2: Modbus equipment-tag resolver (exemplar)", "status": "completed", "blockedBy": [342]},
    {"id": 344, "subject": "Task 3: S7 equipment-tag resolver", "status": "completed", "blockedBy": [342]},
    {"id": 345, "subject": "Task 4: AbCip equipment-tag resolver", "status": "completed", "blockedBy": [342]},
    {"id": 346, "subject": "Task 5: AbLegacy equipment-tag resolver", "status": "completed", "blockedBy": [342]},
    {"id": 347, "subject": "Task 6: TwinCAT equipment-tag resolver", "status": "completed", "blockedBy": [342]},
    {"id": 348, "subject": "Task 7: Focas equipment-tag resolver", "status": "completed", "blockedBy": [342]},
    {"id": 349, "subject": "Task 8: Live read-gate (Part A done)", "status": "completed", "blockedBy": [343, 344, 345, 346, 347, 348]},
    {"id": 350, "subject": "Task 9: Writable equipment-tag nodes (Part B)", "status": "completed", "blockedBy": [349]},
    {"id": 351, "subject": "Task 10: Reverse map + RouteNodeWrite (Part B)", "status": "completed", "blockedBy": [349]},
    {"id": 352, "subject": "Task 11: Write gateway + OnWriteValue authz (Part B)", "status": "completed", "blockedBy": [350, 351]},
    {"id": 353, "subject": "Task 12: Live write-gate + finish", "status": "completed", "blockedBy": [352]}
  ],
  "lastUpdated": "2026-06-13"
}
