Enable an existing AI difficulty for a human seat through admin controls without granting private access or advancing paused play. Preserve custody, credentials, takeback and separate paced resume. Bind atomic writes and outgoing-grant revocation to live authority, room/pause versions and active seat access with durable exact receipts. Validation: types/lint, 5408 offline tests, build and 52 HTTP tests passed on source fingerprint 2157de0f4bb0b74d9760d52102601c52344cf674dee8ccd1d559f0a246a1d4ff; 22 authenticated admin HTTP groups, independent SQL/privacy/UI review, desktop/mobile and refresh checks. All 2098 baseline rooms and 4455 seats preserved. Migration 0015 is additive. Positive production admin QA awaits authorized access; full admin/rules scope remains unfinished.
15 lines
528 B
SQL
15 lines
528 B
SQL
CREATE TABLE `admin_seat_ai_operations` (
|
|
`operation_id` text PRIMARY KEY NOT NULL,
|
|
`actor_admin_id` text NOT NULL,
|
|
`room_code` text NOT NULL,
|
|
`request_hash` text NOT NULL,
|
|
`expected_version` integer NOT NULL,
|
|
`expected_control_revision` integer NOT NULL,
|
|
`applied_version` integer NOT NULL,
|
|
`target` text NOT NULL,
|
|
`difficulty` text NOT NULL,
|
|
`reason` text NOT NULL,
|
|
`created_at` integer NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE INDEX `admin_seat_ai_room` ON `admin_seat_ai_operations` (`room_code`,`created_at`); |