{ "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" }