[
  {
    "type": "alter_table",
    "description": "Punch audit Phase 3 (F-24): add real indexed overrideStatus column to scheduleAuditLog \u2014 pending-override detection previously rode on brittle JSON LIKE patterns against metadata",
    "database": "{{store}}",
    "check_query": "SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'scheduleAuditLog' AND COLUMN_NAME = 'overrideStatus'",
    "sql": "ALTER TABLE `scheduleAuditLog` ADD COLUMN `overrideStatus` varchar(16) NULL DEFAULT NULL COMMENT 'Clock override request state: pending/approved/denied (NULL for non-override rows)' AFTER `metadata`, ADD KEY `idx_override_status` (`action`, `overrideStatus`)"
  },
  {
    "type": "update",
    "description": "Punch audit Phase 3 (F-24): backfill overrideStatus from metadata JSON for existing clock override requests (no-status/NULL metadata = pending, matching the legacy findPendingOverrides definition)",
    "database": "{{store}}",
    "always_check": true,
    "check_query": "SELECT 1 FROM DUAL WHERE (SELECT COUNT(*) FROM scheduleAuditLog WHERE action = 'override_request' AND entityType = 'clock_override_request' AND overrideStatus IS NULL) = 0",
    "sql": "UPDATE scheduleAuditLog SET overrideStatus = CASE WHEN metadata IS NOT NULL AND JSON_VALID(metadata) AND JSON_UNQUOTE(JSON_EXTRACT(metadata, '$.status')) IN ('pending', 'approved', 'denied') THEN JSON_UNQUOTE(JSON_EXTRACT(metadata, '$.status')) ELSE 'pending' END WHERE action = 'override_request' AND entityType = 'clock_override_request' AND overrideStatus IS NULL"
  }
]