56e3d253c9
feat(poker): add synthesized sfx and generative background jazz
...
Web audio synth with zero audio assets: deal whooshes, chip clacks, turn chimes, showdown and win stingers, plus a lazy 92bpm jazz loop. Transitions drive playback from pure snapshot mappers with staggered delays for the blind sequence, a header mute and volume toggle persists, and everything no-ops safely without audio support.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 17:07:12 -04:00
9b2b0db553
feat(poker): add card skin toggle with light, dark, and classic svg decks
...
Faces render white with dark ink by default, the previous dark theme cards remain one toggle away, and the classic deck draws the svg assets from public/images/assets/playing-cards. The choice persists per browser.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 17:07:05 -04:00
c7894cb664
fix(roster): order rank groups by Payload _order index
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:26:27 -04:00
7090ebc253
fix(missions): guard object-typed campaign relation in list filter
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:26:27 -04:00
bce910fa1c
fix(campaigns): wrap campaign cards evenly with flex layout
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:26:27 -04:00
a843a85656
fix(banking): keep activity tabs list stretched in flex column
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:26:27 -04:00
6169bf6ce6
feat(awards): add ribbon design studio, review queue and submission UI
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:25:59 -04:00
ac822f259c
feat(awards): add ribbon submissions collection, design validation and migration
...
Also scopes the MCP plugin to explicit per-collection eligibility (mcpCollections).
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:25:59 -04:00
1fb0165c12
feat(poker): add sit-and-go tables UI, felt styles, realtime events and navigation
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:25:43 -04:00
2406df82dd
feat(qualification): draw configurable crosshair on the aim trainer canvas
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:25:21 -04:00
51f9d57aaa
feat(qualification): add crosshair preferences module and settings popover
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-11 03:25:21 -04:00
09ed08caf3
fix(dashboard): make stretched cards fill cells and truncate instead of overflowing
...
- Widget wrappers use flex-1 with a min-w-0 chain so cards stay at their
grid-cell width instead of shrinking to content or overflowing it
- ItemContent gains min-w-0 so nowrap text ellipsizes inside the card
(notifications, campaigns, tickets) rather than clipping at the viewport
- Stretched Service Summary and Mission Briefing top-pack their content;
Mission Briefing header flips between Next Mission and Last Mission
2026-09-10 20:03:39 -04:00
f0af778713
feat(dashboard): customizable dashboard with personal widgets
...
- Drag-and-drop widget arrangement (main two-column zone + sidebar) with
per-widget span resize, persisted to Users.preferences.dashboard.layout
via saveDashboardLayout (migration included)
- New personal widgets: Wallet, Open Negotiations, My Tickets (View all),
Recent Notifications (per-row mark as read)
- Widgets that are empty or not visible to the viewer are omitted so they
never render as empty drag targets
- Registers both pending migrations and regenerates payload types/schema
2026-09-10 20:03:27 -04:00
365e8561ec
feat(campaigns): extract CampaignsList with hide-completed toggle
...
The campaigns page now renders a client-side CampaignsList that keeps the
official/community sections and adds a hide-completed switch.
2026-09-10 20:03:16 -04:00
7180b0aa4c
feat(missions): make code name optional, add UGC cover images
...
- Missions.codeName is now optional (still unique when set); migration included
- Campaign and side-op dialogs accept an optional cover image (uploadUgcImage)
- Reminder toasts, evaluation aggregates, calendar, cards and mission headers
handle a null code name
- Mission read filter no longer hides drafts by status; visibility follows
ownershipAndStatus.visibility only
2026-09-10 20:02:47 -04:00
f781e53dc1
feat(story): add chapter table of contents with hover reveal to chronicle page
2026-09-10 17:56:35 -04:00
de2ca66cec
feat(voiceover): add hold-to-confirm spoiler gate on recording pages
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-10 16:14:02 -04:00
c48fee4b4d
fix(missions): accept plain-text mod lists and keep side op narrative collapsed
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-10 16:13:59 -04:00
8668a59d06
feat(campaigns): split page into official and community sections with tactical official cards
2026-09-09 19:42:50 -04:00
0dd9673690
fix(eod): unlock custom minefields after clearing two sectors
2026-09-09 18:55:00 -04:00
1b552b3a6d
feat(voiceover): add admin audio preview for voice submissions
2026-09-09 18:54:58 -04:00
cbe88c141b
feat(opord): track per-tier best times with leaderboard column and par backfill
2026-09-09 11:37:51 -04:00
eb77f45b95
feat(opord): add par-anchored speed bonus to scoring
2026-09-09 11:28:39 -04:00
167ac22990
fix(radio): floor unlock-progress readout so it never overstates the threshold
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-09 00:03:36 -04:00
911fc31354
feat(minigames): hide UGC entry buttons until custom content unlocks
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-09 00:03:29 -04:00
25975db23f
refactor(minigames): move routes, components, and libs under minigames parents
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-09 00:02:59 -04:00
455d705eb9
feat(minigames): add UnlockNotice and wire into EOD and radio arenas
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-08 22:38:38 -04:00
bf491fc9cd
feat(eod): add author exposure toggle and reduced-XP copy to custom play
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-08 15:57:01 -04:00
6d4b5ad297
feat(eod): restrict custom loss reveal and add question-mark fog to hidden cells
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-08 15:57:01 -04:00
4fde0fe91c
fix(ui): use h-dvh for sheet side variants so panels fill mobile viewports
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-08 14:45:29 -04:00
1cf11745fe
feat(radio): add custom radio test authoring, play, and leaderboard
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-08 14:41:18 -04:00
52328da8f9
feat(eod): add custom minefield authoring, play, and leaderboard
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-08 14:41:18 -04:00
251bb0506f
docs(opord): rename veteran tier detail to extended order
2026-09-08 13:06:00 -04:00
8439dd7e17
docs(opord): drop the linking-question examples from the protocol card
2026-09-08 13:04:43 -04:00
baa1863c2f
docs(opord): reframe protocol card copy around game mechanics
2026-09-08 13:03:43 -04:00
840bc27646
feat(opord): add draining timer bar to the 2s unlock countdown
2026-09-08 13:02:28 -04:00
246a5796f8
feat(opord): lock answering behind a 2s countdown per question
2026-09-08 13:00:43 -04:00
50b9b7e46c
feat(opord): add garrison, ROE, intel, and secondary objectives with tier scaling
2026-09-08 12:53:36 -04:00
d8ee14ee8d
feat(opord): dynamic abort contingency with six options
2026-09-08 12:39:57 -04:00
53dec0b127
fix(opord): wrap quiz option button text instead of overflowing
2026-09-08 12:35:25 -04:00
0996b9b7c2
feat(opord): scale tiers to 10/15/20 questions with expanded briefings
2026-09-08 12:34:37 -04:00
c8c0267d54
feat(opord): soften fairness copy to a polite ask
2026-09-08 12:18:43 -04:00
e52a637f96
feat(minigames): Esc/R reset keybind with hint text for OPORD Recall
2026-09-08 12:13:45 -04:00
5bde9707a3
feat(minigames): fairness note between briefing banner and OPORD canvas
2026-09-08 12:09:11 -04:00
3fefb8b4a3
feat(minigames): tier-scaled briefings with relational questions for OPORD Recall
2026-09-08 11:58:15 -04:00
95663924ea
feat(minigames): anti-cheat pass for OPORD Recall
...
- briefing is now self-paced (player clicks Begin recall; no memo countdown)
- recall quiz has a hard server-validated time band per tier (45/60/75s limits, minimum plausible human time, 2.5s grace); scripted instant or over-limit submissions are rejected
- briefing is rendered on canvas: no selectable text in the DOM, copy/cut/context-menu/ctrl-a-c-x-s-p blocked; screenshots remain possible but burn quiz time
- ?seed=<n> URL param pins a deterministic scenario (no server meaning; used by the e2e spec to know the grid)
- e2e spec updated for the new flow and asserts no grid text leaks into the DOM
2026-09-08 11:46:53 -04:00
eaa0325b6d
feat(minigames): add OPORD Recall briefing-recall minigame
...
- seeded OPORD generator (grid, azimuth, H-HOUR, phase lines, codewords, callsign, frequency) in pure lib src/lib/opord-recall.ts with per-tier memo windows (25/18/12s) and quiz sizes (4/6/8)
- server action submitOpordRecallResult validates input, recomputes score server-side, persists to Profiles progression.minigames.opordRecall, broadcasts XP, emits minigame:opord-recall event
- UI at /opord: briefing countdown, one-at-a-time quiz, debrief metres, tier radio group, SSE presence, REST leaderboard per tier
- profiles migration 20260908_152021 (7 additive columns) + XP hook wiring
- nav entries in command palette and NavUser Exercises submenu
- e2e spec plays a full round and asserts debrief + leaderboard row
2026-09-08 11:26:18 -04:00
caca11a60b
feat(story): add Chronicle story beats system with reader states and reactions
2026-09-08 01:32:59 -04:00
b64f4b26f4
fix(intelligence): contain friday ops rows on mobile and credit side op hosts
2026-09-08 01:31:01 -04:00
949459647d
style(roster): use hyphen in the A-Z roster tab label
2026-09-07 05:19:53 -04:00