Story 4.2 completed

This commit is contained in:
2026-05-24 00:37:21 +02:00
parent de1b33c453
commit 56eeb7cc83
21 changed files with 3836 additions and 56 deletions
@@ -51,3 +51,12 @@
## Deferred from: code review of 4-1-player-privacy-panel-and-automation-opt-ins (2026-05-25)
- Reaction Cam and HP-Reactive Cam Styling automation triggers not implemented — These are Future Epic 5+ features. The privacy panel infrastructure (this story) enables them, but the actual automation trigger code is not part of Story 4.1.
## Deferred from: code review of 4-2-custom-portrait-fallback (2026-05-26)
- [x] PortraitFallbackHandler not imported anywhere — RESOLVED: Wired up in module.js, passed to RoleRenderer and PlayerPrivacyPanel
- [x] RoleRenderer doesn't use PortraitFallbackHandler — RESOLVED: Integrated in _applyAVTileState() for CAMERA_ABSENT states
- [x] PrivacyPanel has no portrait UI — RESOLVED: Added portrait section with file picker, preview, choose/remove buttons
- [ ] 5MB MAX_PORTRAIT_SIZE vs ~50KB Foundry flag limit — documented design limitation; flag limit is server-dependent and can't be changed in code
- [ ] No magic-byte file content validation — spec mentions "MIME type AND file content" but only format/MIME check implemented; enhancement for future
- [ ] No animated-vs-static GIF distinction — FR-26 requires static GIF only but MIME-type alone can't distinguish; requires binary GIF parsing