Skip to content

v1.0.0 (2026-10-27)

Choose a tag to compare

@github-actions github-actions released this 27 Oct 02:28
05b351e

Features

  • feat(study-data): ADaM ADCM with prior, on-treatment and rescue flags (#3029)
  • feat(study-data): run CDISC CORE over every scenario and commit its findings (#3024)
  • feat(study-data): SDTM IE for screen failures, keyed to TI (#3028)
  • feat(arcade): guided tutorial system, starting with Laser Loon (#3016)
  • feat(platform): load the gold layer into Aurora DSQL from a manual workflow (#3013)
  • feat(study-data): tabulate medical history as SDTM MH (#3015)
  • feat(platform): vital signs feed and two central monitoring tests on them (#3008)
  • feat(platform): plan the Aurora DSQL load and parity fingerprints for the gold layer (#3004)
  • feat(clinical): link the pipeline back to CRF Studio and the dashboards to each other (#3001)
  • feat(infra): add the GitHub OIDC role stack for the always-free AWS data stores (#2995)
  • feat(platform): adverse event feed and an AE under-reporting test (#2993)
  • feat(nav): build every breadcrumb trail from the navigation (#2978)
  • feat(study-data): tabulate prior and concomitant medications as SDTM CM (#2986)
  • feat(platform): data quality scorecard on /platform/governance (#2983)
  • feat(platform): entry hour in visit facts and a time-of-day entry test (#2965)
  • feat(nav): regroup the site into Clinical, Labs, Arcade, Writing and About (#2954)
  • feat(study-data): add ECG scenarios for a QTcF outlier and a missing RR (#2959)
  • feat(arcade): Retro Labyrinth takes the dominant hand from the device settings (#2960)
  • feat(platform): data catalog, glossary and stewardship at /platform/governance (#2953)
  • feat(study-data): analyse ECGs in ADEG with a Fridericia QTcF (#2951)
  • feat(platform): in-browser sql workbench at /platform/sql (#2633) (#2950)
  • feat(arcade): wire the device settings into views, docks and haptics (#2949)
  • feat(study-data): tabulate the collected ECGs as SDTM EG (#2948)
  • feat(retro-labyrinth): phone action cluster with a More sheet (#2947)
  • feat(platform): self-service metrics explorer at /platform/explore (#2634) (#2945)
  • feat(study-data): collect 12-lead ECG intervals for DEMO-301 (#2946)
  • feat(study-data): check every ARS result resolves to rows that reproduce it (#2940)
  • feat(platform): portfolio risk heatmap with stated rules (#2914) (#2939)
  • feat(arcade): one cabinet Setup sheet for the device settings (#2938)
  • feat(study-data): check Define-XML parity with the datasets before export (#2937)
  • feat(study-data): fail conformance when a record does not trace to its source (#2936)
  • feat(platform): enrollment forecast with a what-if on the portfolio page (#2913) (#2935)
  • feat(retro-labyrinth): phone landscape stage with a one-row HUD (#2934)
  • feat(platform): budget and forecast at completion on the portfolio page (#2925)
  • feat(arcade): one device-settings record for every cabinet (#2926)
  • feat(retro-labyrinth): give the phone its own PhoneView (#2921)
  • feat(platform): portfolio dashboard with milestone swimlane and cycle-time benchmarks (#2911) (#2920)
  • feat(platform): event adjudication backlog on operations (#2881) (#2910)
  • feat(retro-labyrinth): lay a portrait iPad out under the maze (#2909)
  • feat(platform): site activation funnel on operations (#2880) (#2905)
  • feat(platform): screen failures by reason on operations (#2879) (#2892)
  • feat(retro-labyrinth): frame the maze with two columns on a landscape tablet (#2883)
  • feat(platform): deviation, queried form and query age breakdowns on operations (#2759) (#2878)
  • feat(dx): scaffold a three-view arcade game with its session and views (#2876)
  • feat(platform): risk tab on the operations dashboard (#2875)
  • feat(retro-labyrinth): give the tablet its own view (#2872)
  • feat(study-data): inject an issue on /study-data and show where the gate caught it (#2865)
  • feat(retro-labyrinth): grow the maze in whole steps on 1920 and 2560 screens (#2858)
  • feat(site): place Clinical Trial Chaos beside the journey, as a game (#2855)
  • feat(dx): flag stale status:in-progress claims in the tracker report (#2854)
  • feat(study-data): derive DTHFL and DTHDTC in DM and DTHDT in ADSL (#2825)
  • feat(dx): report epic checklist drift and in-progress claims (#2836)
  • feat(arcade): field manual as a bottom sheet on phones (#2819)
  • feat(release): flag destructive migrations in a release range (#2818)
  • feat(api): GET /api/version reports the live deployment's commit SHA (#2817)
  • feat(clinical): one clinical data journey from CRF to portfolio (#2814)
  • feat(arcade): one question per screen in the setup wizard on phones (#2812)
  • feat(arcade): full-screen ResultCard on phones with thumb-zone actions, share and a stats disclosure (#2809)
  • feat(platform): data catalog, business glossary and stewardship model (#2638 part 1) (#2800)
  • feat(study-data): seven more messy-data scenarios, unit standardization (#2798)
  • feat(platform): self-service explorer model over the semantic layer (#2634 part 1) (#2788)
  • feat(arcade): drive the phone gate, hub badges and phone order from the registry (#2785)
  • feat(platform): data quality rules, scorecards and issue log (#2636 part 1) (#2782)
  • feat(platform): SQL workbench query library, schema browser and read-only guard (#2633 part 1) (#2786)
  • feat(platform): column-level lineage, impact analysis and OpenLineage events (#2637 part 1) (#2783)
  • feat(study-data): show reviewer guides on the page, add the case study and attributions (#2781)
  • feat(platform): seeded enrollment forecast engine (#2779)
  • feat(study-data): messy-data scenario library with expected findings (#2784)
  • feat(platform): risk-based quality management engine (#2778)
  • feat(platform): monitoring plans in gold, and certified overdue monitoring metrics (#2772)
  • feat(study-data): generate cSDRG-lite and ADRG-lite reviewer guides from each run (#2771)
  • feat(platform): operations dashboards from portfolio to site (#2767)
  • feat(arcade): add the shared run-fairness contract (RunTags) (#2766)
  • feat(study-data): run the pipeline on a study exported from CRF Studio (#2765)
  • feat(arcade): add touch-control dock presets on the action layer (#2761)
  • feat(platform): data products with versioned data contracts and ODCS export (#2758)
  • feat(study-data): prepare CRF Studio USDM exports for a pipeline run (#2756)
  • feat(arcade): add the phone UI patterns (sheet, HUD, coach marks, tap tips) (#2755)
  • feat(duck): add trick-or-treaters, a costume trophy and an October card (#2751)
  • feat(platform): reporting framework with certified tiers and a report catalog (#2750)
  • feat(study-data): add /study-data page with in-browser pipeline and lineage explorer (#2742)
  • feat(duck): add a Halloween mode with a duck costume for Duck (#2739)
  • feat(platform): add governed metric registry compiled to SQL, MetricFlow and TMDL (#2735)
  • feat(study-data): add Kaplan-Meier figure with Greenwood CI and log-rank test (#2728)
  • feat(study-data): add Define-XML 2.1 for SDTM and ADaM from the pipeline specs (#2726)
  • feat(study-data): ARS-linked demographics, TEAE and change-from-baseline tables (#2725)
  • feat(study-data): Dataset-JSON, CSV and XPT exports in a hashed package (#2718)
  • feat(platform): seeded synthetic portfolio with DEMO-301 from the pipeline (#2713)
  • feat(study-data): derive ADAE and ADTTE with event and censoring boundaries (#2704)
  • feat(study-data): derive ADSL, ADVS and ADLB with SDTM traceability (#2702)
  • feat(study-data): gate SDTM and ADaM with versioned conformance rules (#2701)
  • feat(study-data): derive traceable DEMO-301 SDTM subject domains (#2700)
  • feat(study-data): derive DEMO-301 trial design domains (#2699)
  • feat(study-data): generate seeded DEMO-301 collected subjects (#2698)
  • feat(study-data): USDM v4 adapter and DEMO-301 definition (#2697)
  • feat(platform): add strategy decision toolkit (#2696)
  • feat(platform): add clinical data platform hub (#2688)
  • feat(arcade): phone Back walks the cabinet's Escape ladder through one history entry (#2656)
  • feat(arcade): shared useGesture and usePickPlace hooks, with pick-and-place in the Protocol Drift toolbox (#2597)
  • feat(arcade): seeded session RNG, fixed step and RNG state in the run snapshot (#2655)
  • feat(trial-and-error): vary the first-Blind opener by seed (#2653)
  • feat(arcade): add the arcade progress store with core and Daily slices (#2649)
  • feat(arcade): one cabinet pause service with a versioned run snapshot (#2581)
  • feat(arcade): host a game's desktop, tablet and phone views in the cabinet (#2572)
  • feat(quasi-puzzler): download proofs as .lean, export a step log, save custom Sandbox theorems (#2560)
  • feat(arcade): add one input action layer and move Duck onto it (#2566)
  • feat(patty-drive-thru): add a Custom shift with tunable dials and a hand-built order queue (#2525)
  • feat(arcade): classify the viewport as phone, tablet or desktop (#2527)
  • feat(arcade): add one registry for every arcade game and its view readiness (#2522)
  • feat: make card surfaces opaque and drop their backdrop blur (#2320)
  • feat: add a named type scale and move route headings onto it (#2322)
  • feat(retro-labyrinth): polish list from the 10/10 audit (#2319)
  • feat: make amber the single interactive accent in site chrome (#2318)
  • feat: unify site grays on one graphite ramp (#2317)
  • feat(study-director): say how long a quiet site has gone unvisited (#2316)
  • feat(retro-labyrinth): sweeping drones in the middle rooms (#2300)
  • feat(protocol-drift): let the seed place the study's puzzle beats (#2297)
  • feat(retro-labyrinth): trophies for real moments in a run (#2272)
  • feat(protocol-drift): vary each study by seed so the Daily plays differently (#2265)
  • feat(working-with-duck): give sprints 2 to 5 a signature twist each (#2258)
  • feat(protocol-drift): skip to the next event, readable chip names and a way back (#2257)
  • feat(retro-labyrinth): give the Neural Warden its own fight (#2256)
  • feat(laser-loon): give each of the four bosses its own attack pattern (#2250)
  • feat(protocol-drift): mark reference-loaded runs as assisted and waive design par (#2243)
  • feat(laser-loon): save each act's best stars and time, and tally them on the final card (#2238)
  • feat(study-director): give the late game real work and vary the first weeks by seed (#2242)
  • feat(working-with-duck): open each sprint with its clock stopped (#2230)
  • feat(laser-loon): Arcade Survival you can lose, with waves that ramp (#2220)
  • feat(garmin-watch): balance pass and finish (#2022) (#2213)
  • feat(trial-and-error): play Trial & Error properly on iPad (#2120) (#2216)
  • feat(patty-drive-thru): ramp the shift to a dinner rush and vary the week (#2217)
  • feat(garmin-watch): play Monkey C Mayhem properly on iPad (#2122) (#2182)
  • feat(for-better-or-bulk): play For Better or Bulk properly on iPad (#2123) (#2183)
  • feat(garmin-watch): badges and run history in the companion panel (#2119)
  • feat(patty-drive-thru): play Patty's Drive-Thru properly on iPad (#2116) (#2118)
  • feat(garmin-watch): finisher card match at the finish pole (#2114)
  • feat(arcade): Arcade Daily, one shared daily seed across seed-capable games (#2117)
  • feat(clinical-trial-chaos): play Clinical Trial Chaos properly on iPad (#2105) (#2115)
  • feat(study-director): deal a seeded event deck within day windows, with late mail to day 110 (#2112)
  • feat(trial-and-error): synergy relics, rarity tiers and a shop per act (#2111)
  • feat(garmin-watch): gear bag on the training plan map (#2110)
  • feat(patty-drive-thru): shift dilemmas, hidden Solidarity and three endings (#2109)
  • feat(study-director): short 35-day study and a "Delegate the day" button (#2108)
  • feat(retro-labyrinth): make meta progression real with firmware tiers and class milestones (#2107)
  • feat(clinical-trial-chaos): the FDA inspection as the campaign finale (#2106)
  • feat(garmin-watch): training plan map, recovery huts and race day against the wall (#2101)
  • feat(laser-loon): play Laser Loon properly on iPad (#2104)
  • feat(quasi-puzzler): Act 2, twelve levels of quantifiers, induction and inequality chains (#2103)
  • feat(patty-drive-thru): a week of shifts, Monday to Friday (#2099)
  • feat(quasi-puzzler): constrained variants per level, unlocked after a clear (#2098)
  • feat(trial-and-error): shells in the shop and a run-level deck carried between acts (#2097)
  • feat(garmin-watch): virtual partner ghost of your best race (#2094)
  • feat(retro-labyrinth): branching route map and a 1-of-3 reward pick after each room (#2096)
  • feat(clinical-trial-chaos): procedural observations generated from parameters (#2095)
  • feat(garmin-watch): race mode speedruns (#2060)
  • feat(study-director): play Study Director properly on iPad (#2080)
  • feat(protocol-drift): efficiency scorecard with par values and saved bests (#2079)
  • feat(study-director): choose Calm, Standard or Rescue in the office (#2078)
  • feat(working-with-duck): escalating endless quarters and puppy hiccups (#2077)
  • feat(trial-and-error): seeded deck shuffle per Blind and a smoother quota ramp (#2075)
  • feat(meme-vault): play Meme Vault properly on iPad (#2074)
  • feat(quasi-puzzler): step par, a Golfed badge and sandbox goals (#2073)
  • feat(for-better-or-bulk): par time and a time-based best (#2072)
  • feat(patty-drive-thru): score rewards speed, clean orders and dignity (#2070)
  • feat(protocol-drift): play the pipeline workbench by touch on iPad (#2069)
  • feat(working-with-duck): three stars per sprint and finish the unlock track (#2068)
  • feat(clinical-chaos): endless Audit Years and the two stub amendments (#2067)
  • feat(laser-loon): weapon counters so optic choice matters (#2066)
  • feat(retro-labyrinth): seven-room campaign with the unused rooms wired in (#2065)
  • feat(meme-vault): Echo, a repeat-the-sequence game on the pads (#2062)
  • feat(arcade): milestone trophies for real play (#2061)
  • feat(garmin-watch): second wind stage events (#2046)
  • feat(quasi-puzzler): make Quasi Puzzler play well on iPad (#2044)
  • feat(garmin-watch): aid station checkpoints, finisher medals and secret exits (#2040)
  • feat(working-with-duck): play it properly on iPad with a touch dock, keyboard case and a focus-trapped cabinet (#2041)
  • feat(garmin-watch): running buddy and medicine ball (#2036)
  • feat(retro-labyrinth): play it properly on iPad, both orientations, Pencil, keyboard case and Split View (#2037)
  • feat(garmin-watch): burpee slam, wall jump and spin jump (#2035)
  • feat(garmin-watch): pool, basement gym and open water stages with the Tri Suit (#2034)
  • feat(arcade): swap the hub trailer for the 12-game sizzle reel (#2033)
  • feat(arcade): tablet-first kit with iPad immersive cabinet, Pencil and keyboard case (#2031)
  • feat(garmin-watch): run clock, auto lap splits and pace (#2029)
  • feat(garmin-watch): water stations, plyo boxes, rest day switch, treadmill belts and PR boards (#2028)
  • feat(garmin-watch): fitness rules with body battery, gym culture and opt-in dev mode (#2017)
  • feat(garmin-watch): gym enemy roster with kickable kettlebells and a Rep Max mini-boss (#2013)
  • feat(garmin-watch): pace meter and compression cape (#2008)
  • feat(garmin-watch): heat map power-up and heat bolts (#2004)
  • feat(arcade): mobile-first kit with immersive touch cabinet (ADR 0061) (#2002)
  • feat(for-better-or-bulk): north lantern crate, helper on by default, visible unplanned tables (#2001)
  • feat(garmin-watch): power tiers, Runner's High and lives (#2000)
  • feat(garmin-watch): platformer course, variable jump and stomps (#1953)
  • feat(for-better-or-bulk): reactive jokes, ceremony playback, receipt card (#1929)
  • feat(for-better-or-bulk): challenge stars, run-code replays, achievements (#1928)
  • feat(for-better-or-bulk): seeded Friday events, grounded line bank, daily seed (#1926)
  • feat(for-better-or-bulk): solo assist moves the idle partner (#1925)
  • feat(for-better-or-bulk): sound and one-shot bursts for the loud moments (#1924)
  • feat(for-better-or-bulk): first-run coach, fair bin and floor rules, pacing (#1922)
  • feat(for-better-or-bulk): playable co-op wedding-setup cabinet and arcade route (#1912)
  • feat(for-better-or-bulk): real-time co-op wedding-setup engine and ADR 0060 (#1909)
  • feat(seo): screenshot link previews for the site and every game (#1908)
  • feat(wedding): static one-year anniversary archive at /wedding (#1901)
  • feat(crf): save whole forms as templates and share them as a package (#1894)
  • feat(crf): compare the draft with another study's file (#1892)
  • feat(garmin-watch): run telemetry export and a configurable ground strip (#1890)
  • feat(patty-drive-thru): named shift scenarios and a shift data export (#1888)
  • feat(study-director): keep meeting and site visit history, export it and add a meeting archive (#1886)
  • feat(study-director): seeded full-run simulations, office-run share card and playtest checklist (#1885)
  • feat(study-director): sites 04 and 05, a sponsor visit and a vendor meeting (#1884)
  • feat(study-director): daily priority, interruptions, wrap-up and relationship actions (#1883)
  • feat(study-director-world): doorway slide, walk costs, office sounds and action feedback (#1882)
  • feat(study-director-world): stage UI with camera, minimap, dialogue box, devices and cards (#1881)
  • feat(study-director): pixel art for the world floor, sprites, light and sites (#1879)
  • feat(proof): download the proof export as a file (#1878)
  • feat(nav): follow the navigation groups in llms.txt, sitemap, breadcrumbs and palette (#1875)
  • feat(nav): one Preferences menu for reading mode, sound and text (#1874)
  • feat(patty-drive-thru): first-person booth cabinet, diary pages and arcade route (#1858)
  • feat(patty-drive-thru): headless booth-shift engine (#1857)
  • feat(nav): restructure site navigation as data, move Protocol Drift to Simulators (#1852)
  • feat(study-director): open in the walkable office, with first-run help (Phase A) (#1850)
  • feat(merch): link the Laser Loon Minnesota flag at Flags for Good from /merch (#1810)
  • feat(merch): add Laser Loon merch page, coming soon until the shop opens (#1807)
  • feat(oss): open source acknowledgments page and license compliance gates (#1805)
  • feat(arcade): Protocol Drift data-pipeline simulation (#1795)
  • feat(dx): fresh-clone setup framework with profiles and safe database stage (#1793)
  • feat(arcade): shared kit finish and art passes for six games (#1791)
  • feat(study-director): walkable office, team, events, site visits and office decay (#1790)
  • feat(arcade): add gameplay trailer to the arcade hub (#1789)
  • feat(crf): phase 5 studio workflows, review package and benchmarks (#1787)
  • feat(narrative): phase 4, peer engineering narrative and a fact-checked Equipose case study (#1782)
  • feat(terminal): add event-bus integrated macro engine and dynamic command registry (#1761)
  • feat(trial-and-error): implement arcade deck builder and URL-compressed scenario payload engine (#1762)
  • feat(study-director): decoupled export engine and schema-driven scenario manager (#1760)
  • feat(proof): reactive client-side AST rule matcher and dynamic graph auto-step solver (#1776)
  • feat(working-with-duck): shared result cards, office daylight and screen effects (#1766)
  • feat(proof): reactive client-side AST rule matcher and dynamic graph auto-step solver (#1758)
  • feat(quasi-perfect): Pratt formula compiler & Lean 4 live server synchronization (#1759)
  • feat(crf): bulk assign and clear toggles for the visit matrix (#1764)
  • feat(crf): integrate in-modal export toolbar with CSV, JSON, and text serializers (#1757)
  • feat(proof): add inline canvas counterexample badges and dynamic custom proof serializer (#1740)
  • feat(proof): contextual node inspection panel with dual hover and tap binding (#1737)
  • feat(arcade): implement event-driven achievement and local leaderboard registry (#1735)
  • feat(security): implement lockfile-native license audit engine (#1741)
  • feat(security): implement dynamic nonce generation and strict CSP hash pinning (#1744)
  • feat(proof): add dual-surface inline fallacy rollback controls (#1747)
  • feat(terminal): add persistent logs, hash sync, and script export capabilities (#1746)
  • feat(crf): implement interactive AST step debugger and form test trace breakdown (#1733)
  • feat(contact): persist contact form draft state in safeStorage (#1738)
  • feat(crf): implement in-browser multi-format import dropzone for USDM JSON, CDISC ODM XML, and CSV specs (#1751)
  • feat(security): expand security audit severity gates and enforce lifecycle script allowlist (#1745)
  • feat(clinical-chaos): Interactive In-Engine Stress Control Panel and Live BIMO Compliance Stream (#1742)
  • feat(sandbox): add 1-click output copy button to SandboxTerminal JSON header (#1750)
  • feat(crf): add export error state and inline retry banner in ExportDocumentModal (#1749)
  • feat(crf): implement touch drag and drop polyfill and integrate across CRF Studio (#1736)
  • feat(showcase): integrate persona tab filtering into primary showcase control bar (#1732)
  • feat(dx): support configurable target paths for repository markdown link verification (#1731)
  • feat(neuro): implement worker-based mesh and contour analytics pipeline (#1723)
  • feat(schedule): build interactive agenda customizer and context builder (#1710)
  • feat(ci): automate GitHub security triage issue creation, lifecycle management, and auto-resolution (#1712)
  • feat(dx): automated LLM discovery manifest drift verification and doctor integration (#1726)
  • feat(core): implement dead-letter queue and failure events for offline requests (#1705)
  • feat(crf): in-place visit window conflict evaluator and forecasting engine (#1708)
  • feat(security): tiered override expiry caps and automated issue triage (#1701)
  • feat(ui): fluid responsive SVG viewports with dynamic coordinate boundaries (#1699)
  • feat(command-palette): add workspace command registry and macro engine (#1697)
  • feat(study-director-world): ADR 0055 and the world kernel with clock, energy, focus and the day loop (#1694)
  • feat(duck): one HUD bar, dismissible tip and grouped action docks (#1683)

Fixes

  • fix(study-data): refresh recorded CORE findings after SDTM IE (#3032)
  • fix(ci): run the live smoke test in a weekly train dry run (#3027)
  • fix(crf): one study model, lossless native save and reopen (#3023)
  • fix(seo): let crawlers fetch /_next/ assets (#3009)
  • fix(nav): hide drawer badges below 360px so page titles stay whole (#3005)
  • fix(security): remove the dormant lean-verify exec route (#2999)
  • fix(analytics): drop the pinned va.vercel-scripts.com tags (#2982)
  • fix(study-data): write SDTM variables in SDTMIG 3.4 order (#2929)
  • fix(crf): run the pipeline from the header and open presets without schedule errors (#2933)
  • fix(clinical): fold the journey panel on phones and on workbench pages (#2928)
  • fix(a11y): hydrate cleanly when the visitor asks for reduced motion (#2904)
  • fix(trial-and-error): fit the table to a phone held sideways (#2916)
  • fix(study-data): derive SVPRESP, SVOCCUR, TA branch rules and TV ARMCD (#2915)
  • fix(a11y): give shared site chrome 44px touch targets on touch screens (#2908)
  • fix(platform): name the metric in each calculation panel (#2888) (#2907)
  • fix(study-data): derive EXDOSFRM, LBCAT and lab reference ranges (#2906)
  • fix(blog): treat a Redis read timeout as a cache miss, not a Sentry error (#2903)
  • fix(arcade): stop the standby card clipping Launch Cabinet on phones (#2902)
  • fix(study-data): derive the AE dictionary hierarchy so AESOC matches AEBODSYS (#2900)
  • fix(study-data): drop EPOCH from SV, which SDTMIG 3.4 does not define (#2882)
  • fix(study-data): give Define-XML variables their SDTMIG 3.4 roles (#2877)
  • fix(study-data): TS parameter codes within 8 characters, plus INTTYPE and PCLAS (#2874)
  • fix(retro-labyrinth): keep the hotbar on one row at 1024x768 (#2857)
  • fix(study-data): add DEMO-301's sponsor, masking and activity content (#2852)
  • fix(study-data): derive end study days, RACE and RFPENDTC (#2853)
  • fix(retro-labyrinth): clear the objective and side effect behind the run-complete card (#2851)
  • fix(chaos): issue the 483 in the frame an expiry maxes suspicion (#2848)
  • fix(study-data): order DEMO-301's USDM timeline and plan its duration (#2837)
  • fix(trial-and-error): put Play Hand under the right thumb on a sideways phone (#2838)
  • fix(study-data): correct DEMO-301 USDM coded values and timing type codes (#2829)
  • fix(study-data): record the seriousness criteria of serious AEs (#2827)
  • fix(arcade): readable boot and loading text that stops under reduced motion (#2820)
  • fix(crf): annotate oncology blood pressure and lab fields with SDTM test codes (#2816)
  • fix(study-data): leave a screen failure's DM arms null, with ARMNRS (#2815)
  • fix(study-data): record SITEID and COUNTRY in collected DM and SDTM DM (#2811)
  • fix(glossary): correct the PHI and SAE definitions in the site glossary (#2810)
  • fix(env): inline NODE_ENV and NEXT_PUBLIC_* values for browser env reads (#2808)
  • fix(duck): name the dialog close buttons and fix their heading order (#2747)
  • fix(crf): cite the CDISC CT package's codelist and term codes (#2748)
  • fix(ci): raise typecheck heap ceiling and CI budget by 512 MB (#2744)
  • fix(a11y): start accessible names with visible text for axe-core 4.14 (#2714)
  • fix(clinical): describe implemented checks instead of compliance claims (#2712)
  • fix(proof): play first snap tick immediately (#2694)
  • fix(deps): patch markdown-it and Vite advisories (#2693)
  • fix(crf): clear codelist on pasted none and reset field option mode per field (#2616)
  • fix(offline-queue): dead-letter exhausted retries and replace duplicate ids (#2599)
  • fix(utils): widen generateId to 48 bits so the 10,000-id test stops colliding (#2598)
  • fix(arcade): preserve Meme Vault unlock and Quasi save keys (#2562)
  • fix(security): replace the fast-uri and js-yaml audit waivers with patched pins (#2521)
  • fix(quasi-puzzler): keep a failed Sandbox tactic armed (#2348)
  • fix(study-director): say a decision's price where it is made and what Be with the team counts (#2347)
  • fix(retro-labyrinth): make class cards and the manual promise only what the game does (#2346)
  • fix(protocol-drift): place toolbox chips by their stage and keep focused cards clear of the navbar (#2343)
  • fix(study-director): show the day's spend, keep the interruption card and fix day-end copy (#2342)
  • fix(trial-and-error): close post-marketing loose ends, the stranded boss and the daily link (#2341)
  • fix(working-with-duck): give endless its own best, a rising ramp and due surprises (#2340)
  • fix(trial-and-error): stop the post-marketing blind clear from crashing (#2339)
  • fix(security): resolve the braces advisory instead of excepting it (#1783) (#2329)
  • fix(garmin-watch): recapture the phone-gate preview with the current panel (#2321)
  • fix: raise studio dim text to WCAG AA contrast (#2315)
  • fix(working-with-duck): say "first run" instead of "best 0" on an unplayed sprint (#2305)
  • fix: reserve Study Director decision budget (#2304)
  • fix: keep Study Director world cards in view (#2303)
  • fix(protocol-drift): settle the locked workbench and plain-language copy (#2302)
  • fix(study-director): give Calm real headroom, stop blaming time away, vary day 1 by seed (#2296)
  • fix(trial-and-error): keep the guided Blind offer readable on touch (#2295)
  • fix(quasi): honest rfl, compact iPad portrait hand, fresh hub preview (#2294)
  • fix(protocol-drift): give the desktop canvas room at 1024 and 1280 (#2282)
  • fix(trial-and-error): fix copy slips in the shop, loss note, labels and coach (#2280)
  • fix(garmin-watch): keep gauge values on one line in the side panel (#2271)
  • fix(laser-loon): stop repeating the survival clock and left-align the star row (#2270)
  • fix(study-director): readouts count what the day actually did (#2269)
  • fix(working-with-duck): answer the package delivery from the keyboard (#2268)
  • fix(trial-and-error): keep focus on the coached card after Next (#2267)
  • fix(quasi): finale card focus, Γ row, rfl numerals and polish (#2266)
  • fix(garmin-watch): read out a fitness run's own numbers to screen readers (#2264)
  • fix(study-director): shared links keep their study after a reload (#2263)
  • fix(trial-and-error): say what a footnote seal does in the shop (#2260)
  • fix(garmin-watch): say PAUSED for a pause the player pressed and plate the pause text (#2261)
  • fix(garmin-watch): stop scoring a runner held at a station and tell them to jump (#2255)
  • fix(garmin-watch): list every key in the hints and name the race restart (#2245)
  • fix(trial-and-error): name relics on the rack instead of their ids (#2244)
  • fix(garmin-watch): clear the run clock of the battery icon and fix contrast and headings (#2237)
  • fix(protocol-drift): make the desktop canvas legible and wireable by hand (#2236)
  • fix(quasi): Act 2 finish beat, trophy and copy polish (#2235)
  • fix(retro-labyrinth): one contact hit per second, with damage text on a bump (#2234)
  • fix(study-director): fix copy slips and keep focus in the intro dialog (#2233)
  • fix(trial-and-error): fit the campaign-won dialog and open it title first (#2231)
  • fix(laser-loon): no invisible Tab stops, readable status, and the right name (#2229)
  • fix(study-director): share links open the same study, career counts office runs, trophies match their text (#2228)
  • fix(garmin-watch): open the run-over card beside the watch (#2227)
  • fix(protocol-drift): fit the workbench in the viewport so the header stays clear of the navbar (#2226)
  • fix(quasi): honest hub count, false-goal feedback and a11y names (#2225)
  • fix(study-director): announce visitors, vary interruptions and let them lapse (#2224)
  • fix(working-with-duck): score the work and the care, add par time and per-sprint bests (#2223)
  • fix(protocol-drift): lead the final wave to Database Lock instead of an empty clock (#2222)
  • fix(quasi): keep the induction tree reachable on iPad and desktop (#2221)
  • fix(garmin-watch): lead the companion panel with run mode and hide the unused ground strip (#2218)
  • fix(study-director): readouts that tell the truth and a closeout that does not flatter (#2219)
  • fix(trial-and-error): keep the CSR lock once a won run is submitted (#2215)
  • fix(retro-labyrinth): hex grid, reward prompt, class picker dialog, contrast and copy (#2214)
  • fix(protocol-drift): let a late correction still reach Database Lock (#2212)
  • fix(garmin-watch): start the run on Enter after a run mode is clicked (#2211)
  • fix(study-director): no soft-lock at 10 PM, results on screen, stay in a meeting (#2207)
  • fix(for-better-or-bulk): 10/10 audit polish for layout, receipt and stars (#2210)
  • fix(working-with-duck): real Duck photos, guarded result card, Escape pause, park cooldown (#2209)
  • fix(patty-drive-thru): ticket key numbers, dilemma voice, readable intro checkboxes (#2208)
  • fix(clinical-trial-chaos): accurate puzzles, honest final report, full flagged values (#2206)
  • fix(laser-loon): retries start from the act's score and each mode keeps its own best (#2205)
  • fix(trial-and-error): fail a staged Boss once no accepted hand can be formed (#2204)
  • fix(garmin-watch): show the screen-reader watch buttons when they take focus (#2203)
  • fix(meme-vault): keep Echo in view, show the missed pad, reward streaks (#2174)
  • fix(quasi-puzzler): show an unsolved goal as open, not admitted via sorry (#2162)
  • fix(build): type-check in its own phase so Vercel's build fits in 8 GB (#2102)
  • fix(ci): give typecheck a heap ceiling and a CI memory budget (#2016)
  • fix(trial-and-error): focus the hand, preview stale cards honestly, explain a loss (#2009)
  • fix(clinical-trial-chaos): correct SDTM copy and a real Sign choice (#2006)
  • fix(patty-drive-thru): pause key, key caps, score line and a rush (#2007)
  • fix(laser-loon): soft keyboard aim, game-time par, roll-up floor (#2005)
  • fix(study-director): keep finished runs, show cards on screen, honest readouts (#1998)
  • fix(meme-vault): reduced-motion sound opt-in, honest trophy, cleared payoff (#1997)
  • fix(for-better-or-bulk): full grill names what to lift, unused lantern crates, helper waits (#1984)
  • fix(retro-labyrinth): solvable terminals, boss grace and cover, Esc pause, run totals (#1982)
  • fix(working-with-duck): no free resets, honest result cards, keyboard park and toys, two-row dock (#1958)
  • fix(for-better-or-bulk): Tab keeps the keys while Fred is out, neutral brothers copy (#1981)
  • fix(for-better-or-bulk): receipt says each fact once, refusals carry no key (#1979)
  • fix(for-better-or-bulk): clearer helper, grill, petals and receipt copy (#1977)
  • fix(for-better-or-bulk): bin takes only burnt food, early toast follows 3:00 (#1975)
  • fix(for-better-or-bulk): credit people on unfinished receipt lines (#1972)
  • fix(for-better-or-bulk): plain station names, solid chair spots, named burns (#1970)
  • fix(for-better-or-bulk): solo shows the idle partner, truthful refusals, honest phone countdown (#1968)
  • fix(for-better-or-bulk): hold E to drop on the floor, honest chair prompt, named keys (#1966)
  • fix(for-better-or-bulk): F works as the work key, helper line, clearer drops (#1964)
  • fix(for-better-or-bulk): every refused press says why, plus round 9 copy (#1962)
  • fix(for-better-or-bulk): brothers dialog focus, straddle prompts, clearer calls (#1957)
  • fix(patty-drive-thru): return focus to the game when a menu key unmounts (#1961)
  • fix(quasi-puzzler): reachable gold, honest scoring, campaign end and on-screen tactic hand (#1956)
  • fix(protocol-drift): make both scenarios finishable and keep feedback on screen (#1954)
  • fix(for-better-or-bulk): burnt-batch restock, chair stacks, one outline, corner slide (#1949)
  • fix(for-better-or-bulk): stations beat the floor, stage-by-stage coach (#1947)
  • fix(for-better-or-bulk): item progress, unclipped receipt, helper credit (#1934)
  • fix(for-better-or-bulk): helper as partner, clean receipt, readable labels (#1932)
  • fix(for-better-or-bulk): fixes from the full-stack playtest (#1930)
  • fix: guard initial focus timer after document teardown (#1923)
  • fix(for-better-or-bulk): input, focus and soft-lock fixes, facing-tile outline, state-true copy (#1921)
  • fix: guard deferred focus restoration after document teardown (#1910)
  • fix(crf): make review package zip bytes deterministic (#1880)
  • fix(deps): upgrade next and eslint-config-next to 16.3.8 (#1873)
  • fix(dx): fail lint on warnings and silence jsdom scrollTo noise (#1861)
  • fix(oss): build credits from the lockfile and registry with full license texts (#1806)
  • fix(content): unpublish legacy /case-studies/equipose and redirect it (#1794)
  • fix(security): unblock main's audit gate with a 30-day braces exception (#1783) (#1786)
  • fix: phase 1 small bugs (arcade snapshot, a11y names, CRF storage, Labyrinth focus, Form 483 panel) (#1777)
  • fix(working-with-duck): draw Duck as an English Cream and redraw the bath (#1774)
  • fix(a11y): add scope="col" and caption elements to table components (#1718)
  • fix(garmin): propagate flash storage write errors and handle quota limits (#1722)
  • fix(mobile): direct pass-through to PageLayout dynamic viewport container (#1698)
  • fix(retro-labyrinth): fair enemy contact, winnable boss retry, crypto scored once, manual pauses (#1692)
  • fix(clinical-chaos): name expired CRFs, trap dialog focus, add pause, keep lifelines and phase locks (#1682)

Performance

  • perf(isr): keep Redis-reading pages static so ISR applies in production (#3034)
  • perf(isr): rebuild editorial pages and preview cards daily, not hourly (#2979)
  • perf(study-data): nest Kaplan-Meier risk sets so 5,000-subject ARS JSON stays small (#2745)
  • perf(test): cut unit-suite import and environment time (#2559)
  • perf: make pages static again to cut Vercel function CPU (#1902)
  • perf(database): reorder CaseStudyReaction unique index columns for prefix matching (#1715)
  • perf(narrative): implement time-sliced incremental idle rehydration for RichNarrative (#1696)

Other changes

  • chore(deps): carry Dependabot's next and minor/patch groups (#3012)
  • refactor(arcade): phone view owns the Labyrinth's phone stage (#3011)
  • ci(release): browser-test the release candidate before the weekly train deploys it (#3010)
  • test(study-data): record each rule's CDISC CORE twin and every scenario's findings (#3006)
  • ci(release): smoke-test the live site before publishing each weekly release (#2998)
  • refactor(arcade): tablet view owns the Labyrinth's tablet stage (#2997)
  • docs(adr): ADR 0070 always-free AWS data stores, read at build time (#2984)
  • ci(release): weekly release train with versioned GitHub Releases (ADR 0063) (#2981)
  • refactor(arcade): Retro Labyrinth's desktop view reads no device (#2977)
  • docs(blog): Oct 26 post, a check that always fails is worse than none (#2973)
  • docs(deploy): record that production keeps no Vercel Deployment Checks (#2901)
  • docs(adr): list ADR 0066 stages one per line instead of a table (#2891)
  • docs(arcade): add a how-to for building a game for three views (#2887)
  • refactor(clinical-platform): split types.ts into one file per stage (#2871)
  • test(crf): wait for the export preview instead of a fixed 50 ms sleep (#2864)
  • dx(doctor): enforce the three-view guardrails for arcade games (#2849)
  • refactor(retro-labyrinth): move the desktop layout into views/DesktopView.tsx (#2844)
  • test: enforce wall-clock budgets only when TIMING_BUDGETS is set (#2828)
  • docs(blog): four posts on this week's build and what it taught (#2805)
  • refactor(arcade): move Retro Labyrinth onto a session seam (#2774)
  • test(platform): real-browser axe, overflow and keyboard checks for the operations drill-down (#2775)
  • refactor(clinical): share one versioned clinical standards profile across the site (#2777)
  • ci(study-data): validate the pipeline outputs with CDISC CORE (#2773)
  • test(study-data): weekly mutation scope and branch floor for the derivations (#2768)
  • test(arcade): add the phone device projects and shared view assertions (#2764)
  • chore(ui): remove the remaining ambient glows from page content (#2762)
  • build(deps-dev): bump @duckdb/node-api from 1.5.6-r.1 to 1.5.6-r.2 (#2753)
  • test(mutation): add the Garmin engine to the weekly mutation run (#2754)
  • test(e2e): add a /study-data synthetic probe at desktop and phone widths (#2752)
  • test(study-data): independent QC of the derivations and table counts (#2749)
  • chore(deps): upgrade Vitest to 5 and Stryker to 10.1.1 (#2746)
  • docs(platform): define site activation from the governed protocol date (#2738)
  • build(deps): bump the npm-minor-and-patch group with 8 updates (#2733)
  • build(deps): weekly minor and patch bumps (React 19.3.1, Playwright 1.64.1, three 0.186) (#2732)
  • dx(deps): fix Dependabot npm PRs with one command (#2731)
  • docs(study-data): propose a synthetic device safety and performance study (#2703)
  • docs(crf-agent): decide beta proposal and review contract (#2695)
  • test(coverage): raise the components/ and app/ floors after the studio splits (#2660)
  • test: make load-sensitive suites drive time explicitly (#2658)
  • docs(adr): add ADR 0066 clinical data platform and lib/clinical-platform skeleton (#2659)
  • docs(adr): add ADR 0065 study data pipeline and lib/study-data skeleton (#2654)
  • test(neuro): split MultiPlanarSliceViewer into tested geometry, drawing and pointer hook (#2619)
  • test(schemaflow): split SchemaFlowWorkspace into tested proof, console and telemetry hooks (#2652)
  • docs: describe the main ruleset that replaced branch protection (#2651)
  • docs(arcade): score the playtest rubric per view and add a real-device check (#2580)
  • build(deps): bump the nextjs group with 2 updates (#2574)
  • ci: skip the merged report jobs when a run is cancelled (#2579)
  • test(crf): split CRFStudioContainer into tested hooks (#2578)
  • style(design): resolve corner radii to three and add a 4px spacing scale (#2570)
  • style(site): drop glow from the site chrome and left-align landing headings (#2567)
  • test(coverage): ratchet components/ and app/ coverage floors to measured levels (#2556)
  • test(proof): split ProofWorkspaceClient into tested hooks (#2557)
  • refactor(garmin): move the 30 lib/garmin-* files into lib/garmin/ (#2558)
  • build(deps): add npm to Dependabot and take in-range patch/minor updates (#2551)
  • test(e2e): replace fixed waitForTimeout sleeps with state-based waits (#2565)
  • test: cover the weakest lib, hooks and terminal files and fix three bugs they exposed (#2561)
  • test(mutation): mutate Trial & Error scoring and the Duck engine weekly (#2563)
  • docs(adr): record the arcade progress store and sync code (ADR 0064) (#2554)
  • ci: run drafts on quick checks, start the build beside static-gate, and document the merge lane (#2555)
  • docs: audit every hand-written doc against the current code (#2523)
  • ci: run the arcade tablet and phone specs for touched games on pull requests (#2520)
  • dx(run-portfolio): arcade play flow, dev-badge hiding, tap/sleep/full-page shots (#2516)
  • docs(adr): record three dedicated views per arcade game (ADR 0062) (#2507)
  • chore: skill-review — update 2 skills (#2509)
  • test(clinical-chaos): make Form 483 UI test deterministic (#2301)
  • test(study-director): pin a quiet-phone seed in the world-day spec (#2299)
  • test(study-director): make lapse warning check deterministic (#2121)
  • test(clinical-trial-chaos): allow auditor hold to finish in full suite (#2012)
  • docs(case-studies): rewrite the wedding website case study to match the real site (#1920)
  • chore(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2 (#1897)
  • chore(deps): bump actions/download-artifact from 8.0.1 to 8.0.2 (#1896)
  • chore(deps): bump actions/setup-node from 7.0.0 to 7.1.0 (#1895)
  • docs(adr): first-person 3D cabinet architecture for Patty's Drive-Thru (#1856)
  • docs: refresh navigation, architecture, changelog and repo links (#1855)
  • dx: phase 3 tooling (safe-storage, shared hooks, ESM Vitest config, mutation 80, overrides audit, WSL 2) (#1780)
  • ci(perf): parallel gates, one build per PR, sharded suites (phase 2, #1767) (#1778)
  • docs(changelog): record the changes merged since the last changelog refresh (#1753)
  • refactor(admin): consolidate admin page route queries into BlogPostService (#1734)
  • chore(deps): bump actions/setup-node from 5.0.0 to 7.0.0 (#1729)
  • chore(deps): bump actions/checkout from 5.1.0 to 7.0.1 (#1728)
  • chore(deps): bump actions/cache from 4.3.0 to 6.1.0 (#1727)
  • refactor(utils): centralize PRNG logic into lib/utils/prng.ts (#1716)
  • refactor(quasi-perfect): remove unreferenced quasi-perfect-puzzler helper module (#1711)
  • refactor(case-studies): remove unreferenced fallback-case-studies re-export (#1725)
  • chore(ci): pin GitHub Actions to full commit SHAs and configure Dependabot (#1713)
  • refactor(crf): remove unreferenced exporters index module (#1717)
  • chore(deps): bump dompurify from 3.4.13 to 3.4.16 in the npm_and_yarn group across 1 directory (#1709)
  • refactor(dx): centralize dx environment variables in lib/env.ts (#1700)
  • refactor(api-client): extend apiClient for FormData and migrate client network calls (#1704)
  • refactor(telemetry): decouple Sentry SDK from logger core and migrate client instrumentation call sites (#1703)

Commit: 05b351ee02b9b1b51052e3172bf0c8baffba5102

Full changelog: v0.4.1...v1.0.0