--- id: TASK-129 title: Parse and materialize player profile MESSAGE blocks status: pending type: backend team: Backend Senior supporting_teams: - Arquitecto de Base de Datos - Arquitecto Python roadmap_item: rcon-full-data priority: medium --- # TASK-129 - Parse and materialize player profile MESSAGE blocks ## Goal Extract useful long-term player profile snapshots from RCON AdminLog `MESSAGE` blocks generated by the server bot. ## Background Observed AdminLog `MESSAGE` blocks can include profile-like stats such as first seen, sessions, matches played, play time, sanctions, averages, kills, deaths, teamkills, K/D, victims, nemesis and favorite weapons. These are profile snapshots, not authoritative per-match stats. ## Constraints - Do not use profile snapshots as authoritative per-match stats. - No frontend changes unless adding backend API contract tests requires fixtures. - Do not reactivate Elo/MMR. - Do not reintroduce Comunidad Hispana #03. - Do not store secrets, runtime DB files or `backend/runtime`. - Do not expose raw full `MESSAGE` content through public APIs by default. ## Allowed Changes - backend parser/materialization/storage code for profile snapshots - backend tests with anonymized examples - this task file when moving it through the workflow ## Implementation Requirements - Work from a dedicated branch for this task. - Read first: - `AGENTS.md` - `ai/architecture-index.md` - `ai/repo-context.md` - `ai/orchestrator/backend-senior.md` - `ai/orchestrator/database-architect.md` - `backend/app/rcon_admin_log_parser.py` - `backend/app/rcon_admin_log_storage.py` - existing AdminLog ingestion/materialization tests - Add a parser for profile-like `MESSAGE` content only. - Store extracted snapshots in a table such as `rcon_player_profile_snapshots`. - Include fields for target, player id/name, source server time, event timestamp, sessions, matches played, total kills/deaths, teamkills done/received, K/D, favorite weapons JSON, victims JSON, nemesis JSON, averages JSON, sanctions JSON and raw content. - Deduplicate by `target_key + player_id + source_server_time`. - Validate Spanish labels including `bajas`, `muertes`, `Víctimas`, `Némesis`, `Armas favoritas`, `Promedios` and `Sanciones`. ## Validation Commands - `python -m compileall backend/app` - `python -m pytest backend/tests/.py` ## Manual Verification Steps - Confirm tests use anonymized MESSAGE examples. - Confirm non-profile `MESSAGE` entries are ignored. - Confirm duplicate snapshots are not inserted twice. - Confirm `/health` still works. - Confirm `git diff --name-only` matches the allowed scope. ## Git Requirements - Create a dedicated branch for this task, for example `codex/task-129-profile-message-snapshots`. - Run relevant validation before committing. - Stage only intended files. - Commit the completed implementation. - Push the branch to origin.