Skip to content

v0.4.1

Choose a tag to compare

@fderuiter fderuiter released this 30 Sep 15:19
· 629 commits to main since this release
15398fc

What's Changed

  • docs(changelog): record the changes shipped since 0.4.0 by @fderuiter in #1503
  • fix(seo): meet 50-60 char title and 140-160 char description bounds on every route by @fderuiter in #1505
  • ci: skip cancel-closed-pr-ci's no-op job so it never takes a runner by @fderuiter in #1502
  • feat(study-director): desk layout, status bar and scoped design tokens by @fderuiter in #1510
  • test(e2e): ignore decorative SVG opacity in the seo-and-navigation settle wait by @fderuiter in #1506
  • refactor(arcade): route arcade game storage through safeStorage by @fderuiter in #1513
  • refactor(core): enforce the nested Math.min/max ban and migrate clamps to clamp() by @fderuiter in #1443
  • fix(clinical-chaos): open DS and MH in phase 3 and explain wrong routes by @fderuiter in #1470
  • refactor(forms): send Contact and Newsletter through apiClient and show the newsletter email error by @fderuiter in #1512
  • docs: replace em-dashes in authored prose by @fderuiter in #1508
  • refactor(storage): move Field Manual, offline queue and telemetry cache storage onto safeStorage by @fderuiter in #1515
  • refactor(services): return ServiceResult from the project image upload path by @fderuiter in #1533
  • chore(deps): bump markdown-it from 14.3.0 to 14.3.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1534
  • fix(trial-and-error): lift played cards out of the hand row at once by @fderuiter in #1527
  • test(seo): add SEO and social integrity suite and DX Doctor check by @fderuiter in #1509
  • refactor(clinical-chaos): route Clinical Chaos storage through safeStorage by @fderuiter in #1538
  • fix(deps): patch nested brace-expansion copies for new DoS advisories by @fderuiter in #1540
  • test(navigation): wait for the Navbar's deferred hash scroll in the mobile drawer test by @fderuiter in #1562
  • refactor(events): add a typed app event bus and useAppEvent hook by @fderuiter in #1525
  • refactor(clipboard): route blog code copy through useClipboard and re-enforce the clipboard lint rule by @fderuiter in #1566
  • test(trial-and-error): add a synthetic probe for the Card Table journey by @fderuiter in #1563
  • fix(clinical-chaos): honest BIMO report numbers and a solvable DOB puzzle by @fderuiter in #1572
  • fix(quasi-puzzler): raise remaining low-contrast text to WCAG AA by @fderuiter in #1545
  • feat(arcade): show a gameplay thumbnail on every arcade hub card by @fderuiter in #1574
  • fix(quasi-puzzler): state the rw targeting rule before the tap and align rewrite level copy by @fderuiter in #1568
  • feat(proof): collapse the theorem catalog on mobile so the canvas stays in reach by @fderuiter in #1558
  • feat(study-director): study-health radar, phase timeline, team portraits and site cards by @fderuiter in #1541
  • refactor(forms): validate contact, newsletter, feedback and blog forms with the route Zod schemas by @fderuiter in #1569
  • test(trial-and-error): aim the drag-reorder e2e at the middle of its drop window by @fderuiter in #1573
  • fix(arcade): stop Duck's urgent-state deadlock and correct control labels by @fderuiter in #1570
  • refactor(ui): move CRT calibration and Patrol code dialogs onto ModalContainer by @fderuiter in #1536
  • refactor(animation): add useAnimationFrame and run the Patrol loops on it by @fderuiter in #1579
  • chore(deps): upgrade dependency-cruiser 18, concurrently 10 and dotenv 18 by @fderuiter in #1511
  • refactor(meme-vault): route Meme Vault events through the typed event bus by @fderuiter in #1583
  • fix(arcade): free the hub Field Manual, fix Retro Chaos copy, clear Garmin crash ghost by @fderuiter in #1577
  • feat(trial-and-error): add sponsor and stake modifiers to the domain by @fderuiter in #1582
  • refactor(command-palette): bind Cmd/Ctrl+K through useHotkeys by @fderuiter in #1581
  • ci(mutation): ratchet stryker break threshold from 65 to 75 by @fderuiter in #1544
  • refactor(logging): route the last console calls through the logger and widen no-console to lib and hooks by @fderuiter in #1531
  • feat(arcade): show the game on the cabinet attract screen and give each game its own accent by @fderuiter in #1588
  • fix(arcade): Laser Loon pause confirmation and Retro Labyrinth retry scoring by @fderuiter in #1575
  • chore(deps): retire four obsolete package overrides by @fderuiter in #1594
  • refactor(neuro): run the Brain3DViewer render loop on useAnimationFrame by @fderuiter in #1595
  • refactor(neuro): move NeuroRecon onto the shared toast, hash-param, hotkey and clamp primitives by @fderuiter in #1590
  • feat(trial-and-error): seeded runs, challenge links and the Daily Protocol by @fderuiter in #1559
  • feat(study-director): present messages and decisions as a real inbox by @fderuiter in #1593
  • test(trial-and-error): cover #925's presentation-hardening checks by @fderuiter in #1600
  • refactor(services): finish the ServiceResult migration for maintenance services and media storage by @fderuiter in #1584
  • chore(deps): upgrade TypeScript to 6.0.3 by @fderuiter in #1602
  • docs(changelog): record the changes merged since the 2026-09-29 release by @fderuiter in #1605
  • feat(study-director): show consequences and mark the passing of days by @fderuiter in #1606
  • fix(chrome): settle the status pings and pulses instead of looping forever by @fderuiter in #1607
  • feat(laser-loon): draw a real loon, shape-coded enemies and per-act parallax backdrops by @fderuiter in #1604
  • refactor(clinical-chaos): run the component and engine on one set of shift rules by @fderuiter in #1608
  • feat(simulator): reframe /simulator as an Architectural Archetype evaluation by @fderuiter in #1612
  • feat(study-director): briefing dossier and closeout report redesign by @fderuiter in #1615
  • feat(trial-and-error): add Codex and run history by @fderuiter in #1613
  • fix(a11y): restore focus to the original trigger when a handed-off dialog closes by @fderuiter in #1618
  • fix(clinical-chaos): count the final CRF in the phase report and unfreeze the auditor after a break by @fderuiter in #1620
  • feat(study-director): keyboard shortcut sheet and keyboard-only play by @fderuiter in #1621
  • fix(content): point stale simulator, CRF and brain-viewer links at the right pages and retire simulator_schedule_click by @fderuiter in #1622
  • feat(laser-loon): slim HUD strip, full-bleed stage and a docked boss plate with hit feedback by @fderuiter in #1623
  • fix(proof): release the terminal's Tab trap and move the workspace onto shared toast, hash and hotkey helpers by @fderuiter in #1619
  • feat(study-director): living office illustration that falls apart as the study does by @fderuiter in #1625
  • feat(trial-and-error): pick sponsor and stake in new run by @fderuiter in #1626
  • chore(deps): align eslint-config-next with next 16.3.6 by @fderuiter in #1630
  • refactor(arcade): move game loops onto useAnimationFrame and Duck keys onto useHotkeys by @fderuiter in #1627
  • feat(study-director): career file, visible saving and a shareable closeout card by @fderuiter in #1634
  • refactor: move the last clipboard and localStorage calls in CRF, Laser Loon, Garmin and Trial & Error onto the shared helpers by @fderuiter in #1633
  • feat(laser-loon): newsprint act cards and a shared ResultCard for stage clear and game over by @fderuiter in #1629
  • feat(study-director): fun pass with callbacks, wildcards, difficulty and a daily headline by @fderuiter in #1637
  • chore(lint): ban direct Web Storage access outside lib/safe-storage by @fderuiter in #1640
  • fix(arcade): expire Labyrinth side effects on one clock and read current rooms and subjects by @fderuiter in #1638
  • fix(a11y): bound the polite announcer queue so the latest state is heard promptly by @fderuiter in #1642
  • fix(layout): wrap navbar, cabinet and footer rows at 200% text on narrow phones by @fderuiter in #1644
  • fix(garmin-watch): keep fog wipes out of swipes and return Enter to the watch by @fderuiter in #1654
  • fix(arcade): show the Labyrinth hover tile in the TSP room and let Clinical Chaos timer bars glide by @fderuiter in #1656
  • test(trial-and-error): cover #925 release-hardening gaps by @fderuiter in #1653
  • fix(working-with-duck): freeze play while paused, show the score, and match tips to each location by @fderuiter in #1660
  • fix(layout): switch to the compact navbar when the desktop links don't fit at larger text sizes by @fderuiter in #1661
  • docs(changelog): record the changes merged since the last changelog refresh by @fderuiter in #1663
  • fix(arcade): resume Quasi level, enforce 0 GB rule for sorry, and point vault hints to the terminal by @fderuiter in #1664
  • test(canvas): add drawImage and other 2D methods to the pointer-events mock by @fderuiter in #1657
  • test(a11y): wait for the /simulator step card to finish fading in before axe scans it by @fderuiter in #1679
  • fix(layout): keep the desktop navbar on one row at 1536px and wider by @fderuiter in #1666
  • feat(working-with-duck): illustrated home office and a posed Duck sprite by @fderuiter in #1680
  • fix(og): trace og-fonts assets and fall back when fonts cannot load by @fderuiter in #1681

Full Changelog: v0.4.0...v0.4.1