Commit Graph
265 Commits
Author SHA1 Message Date
hz d76b2c809e Add graphical CCS Cases 2 prototype 2026-08-05 18:17:12 -05:00
hz 976cb70d4a Restrict progression features to UAT 2026-08-04 08:08:47 -05:00
hz c140b9a96c Fix CCS popup lifecycle and contrast 2026-08-04 07:10:36 -05:00
hz 690c4a8903 Remove redundant incorrect follow-up label 2026-08-02 20:49:49 -05:00
hz c7f5006cb6 Restore distractor-specific follow-up questions 2026-08-01 18:06:52 -05:00
hz 8c5aa17d89 Add clinical progression ranks and records 2026-08-01 15:17:42 -05:00
hzandClaude Sonnet 5 bc9f68aaf2 Restyle the simulation break and review screens to match the results screen
Both were still on the legacy flat-panel Style system, which made
"Review Questions" on the redesigned results screen drop into a
visibly older-looking screen. Rebuilt both with the same Brand card/
badge/accent-color language: a hero card for the break screen, and
color-coded (green/red-tinted, bordered) choice cards, accent-colored
filter chips, and icon headings for the review screen. Pure re-skin -
same functions, same data flow, only what they render into changed.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-01 04:21:02 -05:00
hz 300b230c03 Add weekly consistency goals 2026-08-01 04:14:39 -05:00
hz ecd5da9162 Add daily study missions 2026-08-01 04:02:24 -05:00
hz 2bd2628009 Add study session goals and summaries 2026-08-01 02:34:58 -05:00
hz ddc36a8048 Add server-authoritative RZ Coin rewards 2026-08-01 01:28:38 -05:00
hz 8c439c6294 Add question bank mastery paths and gap questions 2026-07-31 23:46:46 -05:00
hzandClaude Sonnet 5 012d0cf196 Feature-flag RZ Shop to UAT and remove the redundant account menu
RZ Shop joins the other UAT-only features (slot machine, flashcards,
CCS, dynamic questions) - hidden from the sidebar and no longer
reachable by clicking the header coin/rank badge in production. Also
drop the header's account avatar+chevron dropdown entirely: its only
contents (Profile, Settings, Log out) already live in the sidebar.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-07-31 08:33:17 -05:00
hz fe54f7b417 Return question runs to dashboard 2026-07-31 08:22:46 -05:00
hz 53b85942d3 Merge main into production 2026-07-30 17:08:31 -05:00
hz 5488dec2c7 Lock submitted simulation answers 2026-07-30 16:54:12 -05:00
hzandClaude Sonnet 5 9709bab9a9 Remove the redundant return-to-study-modes button from exam results
Review Questions is the only action this screen needs - leaving via
the sidebar already covers navigating elsewhere.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-07-30 16:44:51 -05:00
hz a08d0d9bf9 Fix long answer choice layout 2026-07-30 16:28:44 -05:00
hzandClaude Sonnet 5 be144b272a Restyle exam simulation results to match the RZ design system
The results screen was still the legacy VBoxContainer-of-plain-Labels
placeholder from before the Brand/medmind_style migration - no cards,
icons, or colored bars. Rebuild it with a score hero card (medallion
badge, predicted-range pill), three stat cards (correct, pass
probability, previously seen), and a two-column color-coded
content-area breakdown with progress bars, mirroring patterns already
used in progress_profile.gd and simulation_history.gd. No backend or
data changes - every field was already being fetched, just rendered
as bare text.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-07-30 16:15:14 -05:00
hz 778da32e73 Fix exam simulation score prediction 2026-07-30 16:00:29 -05:00
hz ae6b37eb7d Make simulation block submission idempotent 2026-07-30 15:30:54 -05:00
hz d5048c155a Add difficulty 4 gap question batch 2026-07-30 15:30:53 -05:00
hzandClaude Sonnet 5 e5f29f0f38 Show the actual time remaining during exam simulations
timer_label and timer_caption_label were fully driven (text, color,
visibility) but never parented into the scene tree, so only the bare
progress bar rendered - no MM:SS readout or "Time remaining"/"Time
elapsed" caption in any session mode. Parent them into timer_footer
alongside the existing bar.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-07-30 15:22:28 -05:00
hz c63227fcf5 Merge pull request 'Main' (#16) from main into production
Reviewed-on: admin/step3#16
2026-07-30 15:04:21 -05:00
hzandClaude Sonnet 5 9f150baecc Simplify exam simulations and strip the slot machine down to just the machine
Simulations no longer color-code correct/incorrect choices, retry a
failed per-question autosave, or show the RZ coin/ELO badge - users
move on immediately after submitting a timed block, same as a real
exam. The slot machine panel now shows only the cabinet/reels/lever
and a status line (title, banner, controls row, rewards list, and
footer removed), the reels fill the cabinet window instead of
floating in a black border, the coin-burst animation no longer
starts oversized, and the toolbar button is UAT-only via
Brand.is_uat_environment().

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-07-30 14:50:12 -05:00
hz 94de696af1 Fix shield icon rendering, move slot machine to a movable panel
The shield icon's dark/mushy rendering was caused by disabled mipmaps
on all 6 slot-machine icon textures (inherited from the flat lucide
icon convention, wrong for these gradient-heavy assets) - at small
display sizes this caused aliasing that hit the shield's fine detail
(RZ lettering, metallic bevels) hardest since the other icons are
bolder/simpler shapes. Enabling mipmaps/generate on all 6 fixes it;
confirmed by rendering the actual in-game presentation size before
and after, not just eyeballing the source file.

Also converts the slot machine from a full standalone screen (sidebar
nav entry, main.gd-managed) into a movable/draggable floating panel
opened from the question-player toolbar, mirroring the existing
calculator panel exactly: same top_level+custom title-bar-drag+
viewport-clamp mechanics, same open/close/toggle API, instantiated
once alongside the calculator and closed on session hide. Shrunk the
cabinet and restacked the rewards list below it (was beside it) to
fit a toolbox-sized floating panel instead of a full page, wrapped in
a ScrollContainer for any overflow.

Removed the sidebar entry and screens[] registration from main.gd and
the now-dead routing case from navigation_routes.gd.
2026-07-30 05:18:51 -05:00
hz 98518e8d39 Keep answered follow-ups expanded 2026-07-30 05:11:54 -05:00
hz fa5df8795f Reduce answer review scroll redraws 2026-07-30 05:02:03 -05:00
hz 9402a5d6de Merge pull request 'Fix simulated exam question flow' (#15) from fix/simulation-exam-flow into production
Reviewed-on: admin/step3#15
2026-07-30 04:27:48 -05:00
hz a58aa401c8 Fix slot machine: real spin animation, working lever, honest reels
Three real bugs from user testing:
- The lever was a plain TextureRect with mouse_filter set to IGNORE -
  it visually looked interactive but could never receive a click.
  Swapped it for a TextureButton wired to the same spin action, plus
  a quick pull-and-spring-back rotation for tactile feedback.
- The "reel animation" was just rapidly swapping each cell's texture
  in place - no actual motion. Reels are now real scrolling strips
  (a clipped viewport + a taller VBoxContainer strip that scrolls and
  recycles its front icon to the back), which is what an actual
  spinning reel look/feel requires.
- Every reel unconditionally settled on the coin icon regardless of
  what was actually won, so a jackpot and a QBank Reset Token looked
  identical - the two facts users need to trust the mechanic. Reels
  now settle with the real reward's icon landing in the middle
  (payline) row on all three columns, with random decorative icons
  above/below, so the visual result always matches the actual payout.

Verified the settle math directly (a reel-only probe confirming the
middle icon matches the requested target after recycling) and the
lever's click wiring (confirms _spinning toggles and the disabled
state round-trips), plus a real rendered screenshot of a settled
spin, before cleaning up the probes.
2026-07-30 04:26:42 -05:00
hz bf56f4192f Fix simulated exam question flow 2026-07-30 04:26:18 -05:00
hz 18802f4e8d Merge pull request 'Require production approval for question media' (#14) from fix/production-media-review into production
Reviewed-on: admin/step3#14
2026-07-30 04:20:22 -05:00
hz 0676c7f95e Require production approval for question media 2026-07-30 04:18:31 -05:00
hz 09502944ec Require production approval for question media 2026-07-30 04:16:18 -05:00
hz 3fd670d111 Replace hand-coded cabinet/lever/icons with real generated art
The user generated actual 3D-rendered assets (cabinet frame, lever,
reel-symbol sprite sheet) via an image model - swaps out the
StyleBoxFlat-approximated cabinet, Tween-animated marquee lights/glow,
and gradient-SVG icons from the last pass for the real thing.

The generated PNGs had no real alpha channel (a baked checkerboard
pattern standing in for transparency, a known limitation of some
image-gen output) - added a flood-fill background remover (BFS from
the image border, matching near-white/grey checkerboard tones) to
produce genuinely transparent PNGs, then sliced the sprite sheet into
6 individual icons and measured the cabinet's empty reel-window
rect as a fraction of the frame image so the real 3x3 reel grid and
lever can be positioned precisely over the static art via anchors.

Verified with actual rendered screenshots at each step (window
alignment, then lever sizing/position) rather than just structural
checks, since this is exactly the kind of thing that looks fine in
code and wrong on screen.
2026-07-30 04:06:35 -05:00
hz 0bd74fcabf Temporarily make slot machine spins free for testing
SpinCost set to 0 so spins don't require RZ Coins - revert to 50
once testing is done (marked with a TODO). The frontend already
reads spin cost from GET /api/credits/spin-config rather than
hardcoding it, so the "Cost per spin" display and the Spin button's
enabled state update automatically.
2026-07-30 03:39:44 -05:00
hz 1bc7fbfb3c Generate real glossy reel-symbol art and close the visual gap further
Hand-authored 6 gradient-shaded SVG icons (gold coin, purple gem,
green potion, blue RZ shield, coin stack, gift box) to replace the
flat monochrome placeholder icons in the reels and reward list - no
image-generation tool is available here, so this is genuine vector
art with radial/linear gradients and highlight layers rather than a
literal asset match to the mockup's renders.

Combined with real Godot techniques: a layered-label glow effect on
the "RZ" marquee, chase-lit marquee bulbs down both sides of the
reel screen (looping Tweens), a much more pronounced arch silhouette
and neon border on the cabinet, and an overall scale-up (bigger
reels, marquee, lever) so the machine reads as the dominant element
instead of a cramped placeholder. Verified with an actual rendered
screenshot (not just structural checks) at each iteration.
2026-07-30 01:54:45 -05:00
hz bcb411bed8 Make the slot machine its own sidebar entry; rework its visuals
Moves Slot Machine into the sidebar's account section (alongside RZ
Shop/Settings/Log out) instead of being reachable only from the shop -
removes the shop's promo banner and the screen's "Back to Shop" link
accordingly.

Also closes a chunk of the visual gap against the mockup: a proper
cabinet-style panel (arched top corners, glowing border), a light
"screen" panel holding a real 3x3 reel grid instead of 3 single icons,
a decorative lever, an "RZ" marquee, and the cost/spin/auto-spin
controls each in their own bordered box. Added two new vendored icons
(gem, flask-conical) for reel variety and reward-list icons.
2026-07-30 01:20:24 -05:00
hz 1860e6ede6 Add an RZ Coin slot machine
Adds a spend-coins-for-a-random-reward mini-game reachable from the
shop. Backend mirrors the store's existing atomic/idempotent purchase
pattern (SpinAsync in CreditStore.cs) with a server-authoritative,
weighted reward roll and a rolling per-user spin-rate guard; odds are
served from GET /api/credits/spin-config so the client never hardcodes
numbers that could drift from the real payout table. The mockup's
"Streak Protector" reward was swapped for a real Exam Simulation Token
since streaks aren't currently a persisted, protectable concept.

Also fixes two latent bugs surfaced while building this:
- credits_service.gd's operation-id builder referenced a nonexistent
  AuthState.user_id (should be .username), throwing on every credit
  action.
- _post() silently no-op'd with no signal when signed out, which
  combined with a GDScript closure gotcha (lambdas capture outer
  locals by value, so reassigning inside one never reached the
  caller) meant a spin attempted while unauthenticated could hang
  forever instead of surfacing an error.
2026-07-30 00:29:49 -05:00
hz 4909cf0b71 Move RZ Shop nav entry to the lower account section, rename it
Groups it with Profile/Settings/Log out instead of the primary study
nav, and shortens the label from "RZ Coin Shop" to "RZ Shop".
2026-07-29 21:39:04 -05:00
hz a162ce31c6 Add tab row, feature bullets, and a Popular badge to the RZ Coin Shop
Matches the latest reference more closely: a Featured/Tokens/Boosts/
Content/Customization/Bundles tab row (only Featured is populated -
the rest are inert labels since there's no real data behind them
yet), per-card checkmark feature bullets, and a Popular badge on the
Exam Simulation Token card. Client-side presentation only, no backend
changes.
2026-07-29 20:52:59 -05:00
hz 19371b7a93 Restyle the RZ Coin Shop screen as a card grid
Replaces the plain title/list layout with a header, a coin-balance
summary card, and a product card grid (icon, description, price,
solid Buy button) matching the app's existing card/badge visual
language. Only the two real products render - no fabricated
categories or bundles, since the backend doesn't have that data yet.
2026-07-29 19:01:23 -05:00
hz da641a8d1d Add Rz Coin utility store 2026-07-29 18:34:54 -05:00
hz f39bfb42be Merge pull request 'Main' (#13) from main into production
Reviewed-on: admin/step3#13
2026-07-29 01:35:56 -05:00
hz c14ac1d65b Require reference ranges for published question labs 2026-07-29 01:28:37 -05:00
hz f082be38e0 Restore Rz Coins caption and fix rank/ELO badge wrapping below toolbar
Reverts the coin caption back to "Rz Coins" and shrinks the badge's
icons/fonts/spacing so both segments fit in the same footprint budget
the toolbar reserves. That budget was a hardcoded 900px sized for the
old single-segment badge; bump it to 960px to match the wider badge
instead of letting it overflow onto its own row.
2026-07-29 01:16:47 -05:00
hz 845907e825 Show rank tier and ELO alongside RZ points in the coins badge
Adds a server-computed tier/division (Bronze..Diamond, III-I) to the
ratings profile endpoint and surfaces it next to the numeric ELO in the
shared header badge, matching the coin balance display already there.
2026-07-29 00:25:26 -05:00
hz 89dbe3e31a Initialize credit earning ledger arrays 2026-07-28 20:52:20 -05:00
hz dd203b24f9 Allow SUPER accounts to earn Rz Coins 2026-07-28 20:36:15 -05:00
hzandClaude Sonnet 5 6f41906101 Gate Rz Coins on correct-first-try-within-time-limit; match coin-flight animation to it
Credits were previously awarded on any first attempt regardless of
correctness or timing. The award now requires the first-ever attempt
to be correct (record.Attempt.IsCorrect) and submitted before the
adaptive per-question timer expired (new MetTimeLimit request field,
computed client-side from the same elapsed/target comparison that
already drives the visible countdown bar). The coin-flight animation
in question_player.gd now only plays when both conditions are met
(BlockSessionService.submit_core_attempt's existing "mastered" flag
plus met_time_limit), so the effect never promises a coin that isn't
actually earned.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-07-28 20:17:07 -05:00