CREATE TABLE `character_prompt_reviews` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `project_id` BIGINT NOT NULL, `task_id` BIGINT NULL, `character_id` BIGINT NULL, `global_character_id` BIGINT NULL, `prompt_version_id` BIGINT NULL, `layer_code` VARCHAR(80) NOT NULL, `image_type` VARCHAR(80) NULL, `review_round` INTEGER NOT NULL DEFAULT 1, `review_mode` VARCHAR(80) NOT NULL DEFAULT 'api_preflight', `prompt_engine_version` VARCHAR(80) NULL, `threshold_score` DECIMAL(5, 2) NOT NULL DEFAULT 92.00, `score` DECIMAL(5, 2) NULL, `passed` BOOLEAN NOT NULL DEFAULT false, `status` VARCHAR(50) NOT NULL DEFAULT 'pending', `source_prompt` LONGTEXT NULL, `optimized_prompt` LONGTEXT NULL, `negative_prompt` LONGTEXT NULL, `issues_json` JSON NULL, `suggestions_json` JSON NULL, `reusable_rules_json` JSON NULL, `quality_gate_json` JSON NULL, `provider_log_id` BIGINT NULL, `provider_code` VARCHAR(100) NULL, `model_name` VARCHAR(160) NULL, `raw_text` LONGTEXT NULL, `error_message` TEXT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), INDEX `cpr_project_created_idx` (`project_id`, `created_at`), INDEX `cpr_task_idx` (`task_id`), INDEX `cpr_character_layer_idx` (`character_id`, `layer_code`), INDEX `cpr_global_layer_idx` (`global_character_id`, `layer_code`), INDEX `cpr_prompt_version_idx` (`prompt_version_id`), INDEX `cpr_layer_passed_idx` (`layer_code`, `passed`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `character_prompt_optimization_lessons` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `scope_type` VARCHAR(50) NOT NULL DEFAULT 'global', `layer_code` VARCHAR(80) NOT NULL, `lesson_type` VARCHAR(80) NOT NULL DEFAULT 'prompt_rule', `title` VARCHAR(160) NULL, `rule_text` TEXT NOT NULL, `prompt_engine_version` VARCHAR(80) NULL, `source_review_id` BIGINT NULL, `source_character_id` BIGINT NULL, `source_prompt_version_id` BIGINT NULL, `quality_score` DECIMAL(5, 2) NULL, `usage_count` INTEGER NOT NULL DEFAULT 0, `metadata_json` JSON NULL, `status` VARCHAR(50) NOT NULL DEFAULT 'active', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), INDEX `cpol_scope_layer_status_idx` (`scope_type`, `layer_code`, `status`), INDEX `cpol_review_idx` (`source_review_id`), INDEX `cpol_character_idx` (`source_character_id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;