-- NEO-116: per-player quest progress rows (prototype E7.M1 Slice 1). CREATE TABLE IF NOT EXISTS player_quest_progress ( player_id TEXT NOT NULL REFERENCES player_position(player_id) ON DELETE CASCADE, quest_id TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('active', 'completed')), current_step_index INTEGER NOT NULL CHECK (current_step_index >= 0), objective_counters JSONB NOT NULL DEFAULT '{}'::jsonb, completed_at TIMESTAMPTZ, updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), PRIMARY KEY (player_id, quest_id) ); COMMENT ON TABLE player_quest_progress IS 'Persisted quest step state per player (NEO-116); missing row means not_started.';