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
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
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
9f80361d14
style(projects): replace dash separator in sprint date ranges
2026-09-07 05:19:53 -04:00
eb3dc0231c
style(locker): replace dash placeholder for grid footprint
2026-09-07 05:19:53 -04:00
5f5072399b
style(helpdesk): replace dash placeholder for missing ticket dates
2026-09-07 05:19:53 -04:00
d485a82fa6
style(minigames): replace dashes in leaderboard and radio UI
2026-09-07 05:19:53 -04:00
12b19b3d6a
style(banking): replace dash placeholders in activity feed and timestamps
2026-09-07 05:19:53 -04:00
a4ea3ea387
style(intelligence): replace dashes with ASCII in mission and campaign views
2026-09-07 05:19:48 -04:00
47d338c868
style(events): replace dashes with ASCII in event log UI
2026-09-07 05:19:48 -04:00
dcb4893b10
feat(storage): split storage permissions and rework manage-storage UI
...
Deposits/withdrawals of stock (economy-mutating) are now superuser-only, while moving items around (transfer/place/collect) stays open to logistics-qualified users; seed roles updated to match. ManageStorageDialog reworked alongside its toolbar/button/view wrappers, and the structure page wires up the new permission split.
2026-09-07 05:07:53 -04:00
91dc48ad2c
refactor(sidebar): group logistics nav into Assets/Operations/Personnel sections
...
Logistics entries are collapsed into collapsible groups, Personnel moves from its own sidebar section into Logistics, and an Event Log entry is added to Intelligence.
2026-09-07 05:07:51 -04:00
29f7e2b57a
feat(events): add global event log page
...
New /events page rendering the full game event ledger (system + narrative events) with type/target/source/date filtering, backed by a shared shadcn table component.
2026-09-07 05:07:51 -04:00
227885daf7
feat(missions): let side op creators mark their op as Ready
...
Adds a 'Mark as Ready' control on the mission detail page (owner or missions:update gated) plus the markSideOpReady server action. Status-gated to Concept/Planning/Scheduled; emits a mission:ready event. Stops the daily ready-reminders and lets missionEmbeds post the roll-call.
2026-09-07 05:07:48 -04:00
ffb2c2c5d9
feat(missions): show op host on side op cards and mission pages
...
Side ops now credit their creator: mission cards get a 'Hosted by X' meta entry and the mission detail page gets a Host chip. Display name preferred over username; only shown for side ops with a populated createdBy.
2026-09-07 05:07:43 -04:00
1b422ba1c2
feat(voiceover): collect take descriptions and surface reviewer feedback
...
Submitters can attach an optional 300-char note to each take, and their own takes list now shows the description plus the reviewer feedback that was previously admin-only.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-07 04:37:08 -04:00
a2a5f7877b
style: remove em-dashes from user-visible prose (wave 1)
2026-09-07 01:34:28 -04:00
d9d0f8f7ae
feat(voiceover): add reading guidance panel to the teleprompter
2026-09-07 00:52:26 -04:00
db73170da1
feat(missions): schedule Friday side ops in the unit timezone
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-07 00:34:35 -04:00