[
  {
    "type": "create_table",
    "description": "Create fpMoveTasks table - generated atomic tasks for layout transitions",
    "database": "{{store}}",
    "check_query": "SHOW TABLES LIKE 'fpMoveTasks'",
    "sql": "CREATE TABLE `fpMoveTasks` (\n  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,\n  `layoutId` INT UNSIGNED NOT NULL COMMENT 'FK to target fpLayouts',\n  `taskType` ENUM('add','remove') NOT NULL COMMENT 'Atomic task type',\n  `subcategoryCode` VARCHAR(10) NOT NULL,\n  `fromSocketId` INT UNSIGNED NULL COMMENT 'Source socket (NULL if adding)',\n  `toSocketId` INT UNSIGNED NULL COMMENT 'Target socket (NULL if removing)',\n  `removalDisposition` ENUM('backstock') NULL COMMENT 'Only for remove tasks; dropped categories marked Gone do not generate tasks (audit only)',\n  `backstockBinId` INT UNSIGNED NULL COMMENT 'Optional destination bin for backstock disposition',\n  `taskDescription` VARCHAR(255) NOT NULL COMMENT 'Human-readable instruction',\n  `status` ENUM('pending','completed') DEFAULT 'pending',\n  `completedByUserId` INT UNSIGNED NULL COMMENT 'kiosk_users.users.id (no FK constraint in store DB)',\n  `completed_at` TIMESTAMP NULL,\n  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n  PRIMARY KEY (`id`),\n  INDEX `idx_layoutId` (`layoutId`),\n  INDEX `idx_status` (`status`),\n  INDEX `idx_subcategoryCode` (`subcategoryCode`),\n  INDEX `idx_completed_at` (`completed_at`),\n  INDEX `idx_backstockBinId` (`backstockBinId`),\n  CONSTRAINT `fk_fpMoveTasks_layoutId` FOREIGN KEY (`layoutId`) REFERENCES `fpLayouts`(`id`) ON DELETE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Generated atomic tasks for layout transitions'"
  }
]
