2 Commits
Author SHA1 Message Date
CydandClaude Opus 4.8 5aa01db123 Parameterize console.php; make Commit Mission atomic
- Config 'Update', 'Commit Mission', lock, and clearupdate now use db.php
  helpers with bound params (were injectable via ~20 raw $_GET values incl.
  nummercs and playerid). Pod toggles collapsed into a 16-iteration loop.
- Commit Mission runs under the shared queue lock and one transaction so a
  registration can't slip into the mission mid-commit.
- dev/migrations/002: pqs_currentmission + pqs_pastmissions -> InnoDB so the
  commit's snapshot/archive roll back with the queue delete (uses DELETE not
  TRUNCATE to stay in the transaction).

Verified: commit moves players to current/past, empties queue, marks completed
with nummercs; config update writes pods + settings; no errors.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:59:27 -05:00
CydandClaude Opus 4.8 df04ab4eb7 Atomic mission-fill for kiosk registration (fixes overfill race)
- dev/migrations/001-innodb.sql: convert pqs_queue + pqs_mission to InnoDB.
- includes/queue.php: pqs_enqueue_player() seats a player in the next open
  mission (creating one if needed), serialized with GET_LOCK and wrapped in a
  transaction; capacity judged by real COUNT(*), numplayers rewritten from it
  so the counter self-heals and can't drift.
- callsign.php: normal registration path now calls pqs_enqueue_player instead
  of the non-atomic read-check-insert.

Verified on the local stack: 140 concurrent registrations -> 24 missions,
zero overfill, zero counter drift.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:40:44 -05:00