Commit Graph

11 Commits

Author SHA1 Message Date
daddy af85048deb PC3 Phase 1.3: backend avatar loadout persistence
New avatar_loadouts table (one row per user, loadout stored as a single
JSONB document matching the client's AvatarLoadout.to_json() shape) and
GET/PUT /api/avatar/loadout.

The server has no copy of the asset catalog, so it validates only the
envelope (JSON object, non-empty base_body, object slots, size cap) --
which-asset-in-which-slot validation stays client-side. New accounts get a
server default (base_human_male_01, no slots) with is_default:true so the
client can tell "never customised" from "customised back to base".

- models/avatar_loadout.py + 0004 migration + User.avatar_loadout relation
- routers/avatar.py wired into main.py
- tests/test_avatar_loadout.py (7 tests: default, save/read, replace,
  validation, auth) -- full suite 68 passed
- lifted the duplicated _override_db fixture from 3 test files into
  conftest.py (new test files need it too)
- docs/architecture/avatar.md §9a: the persistence design

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015jtxAiu5dAW4WxCNdGkrkJ
2026-09-05 21:42:10 +00:00
architect-bot 2ffcd9cd3f WIP checkpoint: PC2: Design the test level & player spawn approach 2026-08-20 21:09:30 +00:00
reviewer-bot 2c3756b640 Merge pull request 'Address review feedback: Research and design GDScript sandboxing approach' (#19) from agent/8f93a0732163 into main 2026-08-18 02:55:00 +00:00
architect-bot 4da8687f2c Document GDScript sandboxing findings and recommendation
Verified all three options from the task against Godot 4.6.2 directly
(godot --headless), rather than trusting the probe scripts' own printed
output from earlier sessions:
- ScriptServer doesn't exist as a class; no disable_os/disable_file_access/
  disable_network project settings exist either. Nothing to configure.
- SubViewport isolates rendering/input only, not script capabilities — a
  script inside one has identical OS/FileAccess/network access.
- Expression is not safe by default (can still reach unsafe methods through
  a base instance); blocklisting dangerous substrings is trivially bypassed.

Recommendation: don't sandbox GDScript in-process (nothing to sandbox
with) — use a narrow non-Turing-complete content DSL for the common case,
and OS-level process isolation only if genuinely general scripting turns
out to be required.
2026-08-17 23:43:48 +00:00
architect-bot 4d690a25a5 WIP checkpoint: Research Godot editor plugin vs in-game editor approach 2026-08-17 21:07:10 +00:00
architect-bot 0b973b73ab WIP checkpoint: Address review feedback: Design world chunk data format and persistence schema 2026-08-17 18:29:14 +00:00
agent-bot 1ba334e983 Merge pull request 'Design content flagging and age verification architecture' (#8) from agent/4f174a207618 into main 2026-08-17 17:50:51 +00:00
agent-bot 80bc27426e Merge pull request 'Design avatar component system and glTF attachment spec' (#7) from agent/fa0834ec1ba7 into main 2026-08-17 17:50:05 +00:00
agent-bot 41fcbe746e docs(moderation): add content moderation and age verification architecture 2026-08-17 15:46:04 +00:00
agent-bot 5eaeed80b4 docs(avatar): add avatar component system and glTF attachment spec 2026-08-17 15:27:27 +00:00
agent-bot 24d2029955 Add multiplayer networking architecture document 2026-08-17 15:22:15 +00:00