Commit Graph
77 Commits
Author SHA1 Message Date
John Smith f460587d8a docs(parity): close 60 register rows after the W-P0 wave
Statuses: 60 fixed, 23 verified-clean, 2 open (H-12 menu rhythm, H-13
duplicate headings), 1 na (V-15 cropped headers are canon).
2026-09-11 11:39:37 -04:00
John Smith a84e789b76 fix(fan-prediction): wrap footer actions so all controls are visible
The refresh/standings/settings/about row now uses FlowRow instead of a
horizontal scroller; the fourth button no longer sits off-screen.
2026-09-11 11:39:28 -04:00
John Smith a606fcadf1 fix(apps): W-P0 remediation wave — 24 P0 defects + P1/P2 parity fixes
Harness: engine3d per-frame buffer allocations removed, bounded GPU mesh/
texture caches with sweep + release, atomic scene rebuild; cached uniform
lookups.

Game-breakers closed (register ids):
- A-01 run-and-jump death softlock; A-02 hairball frozen retry;
  A-03 splatter-bug frozen retry; goo-splat retry added.
- A-04 vine-climb stale-capture rewind; A-05 BBQ + A-06 Bees per-frame
  gesture churn (stable run tokens + rememberUpdatedState).
- A-07 slider-puzzle pause/autosave; A-08 wordmonger autosave + save&exit;
  A-09 castles live-camera taps; A-10 texas hold'em buy-in refund +
  persisted active event.
- A-11 facebook About trap; A-12 twitter orphan DMs (id-keyed store);
  A-13 piano octave snap; A-14 hearts PassPicker toggle.
- A-15 metronome drag survival; A-16 calendar month scroll;
  A-17/18/19 shell-game/snowball/tug-o-war sensorless fallbacks.
- A-20 AlarmManager exact-alarm guard; A-21 alarm sleep persistence.
- A-22 3D puzzle rebuild storm + texture cache; A-23 PGR mesh leak +
  lifecycle-gated engine audio; A-24 prop yaw; A-25 echoes countdown
  input; A-26 skate pause mid-grind; A-27 audiosurf stall fallback;
  A-28 bowling full-setup resume + background loop gates; A-29
  fingerpaint autosave/stroke commit; A-30 checkers AI plies in draw
  clock; A-31 sudoku timer persistence; A-32 supernova stale continue;
  A-33 cold-start clobber gates across 7 apps.
- H-08 Room/appState write throttling; H-09 recording out of composition
  with once-guards; H-10 synth.start; H-15 tap targets.

Visual/layout: fan-prediction overflow + 2-digit scores, shell-game shop
column, solitaire action column, msnmoney tabs, messenger presence,
shuffle rows, weather insets, zunereader/social row widths, note search
placeholder, calendar empty state, duplicate headings removed.

1219/1219 tests green (includes 63-app smoke at 3 parity configs).
2026-09-11 11:32:39 -04:00
John Smith b6be75ead5 fix(ui): W-H harness — back contract, menu anchoring, IME, shade, SFX
- DetailScaffold now routes hardware back through its in-app onBack (the
  header contract), so sub-screens no longer exit the whole mini-app; the
  context menu/prompt intercepts back to dismiss (H-01, H-02/03).
- ContextMenuOverlay anchored bottom-center inside a full-size Box (menus no
  longer render over the cropped header); PromptPanel resets per request so
  nested prompts no longer inherit the previous text (H-02/03).
- Root imePadding + windowSoftInputMode=adjustResize keep text fields above
  the keyboard (H-04).
- Wake shade on ON_STOP instead of ON_PAUSE: permission dialogs and
  deep-link relaunches no longer raise the unlock shade (H-07).
- Checkers/Chess/Hexic start MiniSynth so game SFX actually play (H-10).

Full suite 1150/1150 (includes 63-app smoke suite).
2026-09-11 11:04:18 -04:00
John Smith 365f3dde56 docs(parity): Phase 1 UI parity audit + gap register
Consolidates three static audit passes, the Robolectric smoke baseline
(63/63) and the emulator crawl (63/63 launch, 0 crashes) into a severity-
ranked report plus 86-row machine register: 24 P0, 26 P1, 13 P2, 23
verified-clean entry screens. Canon clarification: cropped headers are
intentional; functional overflow is not.
2026-09-11 11:01:21 -04:00
John Smith 44c1e82328 test(ui): emulator crawl tool (Phase 0 baseline)
Launches every registry app via the debug deep link, screenshots it, and
reports crashes (filtered to the app package) and blank screens. Baseline
run: 63/63 launch, 0 crashes, 0 blanks. Screenshots + JSON land in
git-ignored reports/emulator/.
2026-09-11 11:00:31 -04:00
John Smith 75066e46a9 test(ui): catalog-wide AppSmokeSuite (63 apps x 3 parity configs)
Every registered mini-app renders through the real host path at device
480x272, adaptive portrait and adaptive landscape with a non-empty
semantics tree and no composition crash. ParameterizedRobolectricTestRunner
keeps Robolectric active per parameter; the harness provides the
MenuController the real root injects. 63/63 green.
2026-09-11 10:47:44 -04:00
John Smith 1861f5dafa test(ui): Phase 0 harness — Compose UI tests under Robolectric
- Add ui-test-junit4/ui-test-manifest (test classpath) and enable
  unitTests.includeAndroidResources; pin Robolectric sdk=34.
- Debug-only deep link dorado://app/<slug> (release ignores) for automation.
- TestDoradoApp disables the app-level Media3 connect, which cannot bind
  under Robolectric; DoradoApp is open with an autoConnectPlayback flag.
- MiniAppTestSupport: real app graph + real host path (MiniAppScreen) inside
  DoradoTheme/DeviceCanvas at DEVICE 480x272, PORTRAIT 400x800 and
  LANDSCAPE 800x360; MiniAppHarnessTest proves it renders.
2026-09-11 10:40:12 -04:00
John Smith c3eecde8e8 docs(apps): close out the official-app program + lint fixes
- Canon §8 now enumerates all 62 implemented packages by category with the
  provenance rule (re-derived behavior, re-authored content).
- README counts and the mini-app section describe the full 62-app matrix,
  the engine3d core and the dead-service local UIs.
- Parity roadmap gains §9 (M16 program record: waves, evidence, gates,
  known deltas, corpus acquisition results).
- Audit/gaps regenerated: 55 native + 7 dead-service shells, zero unmapped
  catalog rows.
- Lint: replace unused BoxWithConstraints scopes with Box (8 apps) and read
  the locale from LocalConfiguration in Animalgrams.

Gates: assembleDebug + test 1086/1086 + lintDebug all green.
2026-09-11 07:40:23 -04:00
John Smith 49911e5bd2 fix(corpus): capacity gate counts only missing bytes
A resumed mirror was blocked because the pre-flight summed every item,
including the 48 GB already verified on disk. The gate now subtracts present
files and reports total vs still-missing; the full archive (70 items,
51.4 GB) then completed with 0 failures.
2026-09-11 07:32:48 -04:00
John Smith 1a7658a8bd feat(apps): W7 — pixel-faithful local dead-service UIs
Email, Facebook, Twitter, Messenger, Weather, MSN Money, Zune Reader and
Zune Social rebuilt from the decompiled screen inventory as offline local
surfaces (simulated content, clearly labelled): mail chooser/inbox/viewer/
composer with validation, the Facebook pivot shell with composer and
threads, the Twitter timeline/replies/favourites/DM shell with 140-char
compose and @-to-DM retargeting, the Messenger presence/thread/roster hub,
paged city weather with a deterministic forecast model, Money
watchlist/markets/converter/articles, the Reader library/pagination/TOC/
bookmarks with original sample text, and the Social memorial card.

Pure-Kotlin models (EmailModel, FacebookModel, TwitterModel, MessengerModel,
WeatherModel, MoneyModel, ReaderModel) with persistence via appState; 55 new
tests. Registry migrated to the new *App() names. Full suite 1086/1086.
2026-09-11 07:27:41 -04:00
John Smith 8f80e4ce42 refactor(apps): split Mocks.kt into one file per dead-service surface
Pure move plus MockPage/MockBody widened to internal in MockCommon.kt. No
behavior change; unblocks per-app W7 fidelity work.
2026-09-11 07:15:50 -04:00
John Smith 86cad6d768 feat(apps): W6 — six big engines (3D parity tier)
- echoes: deterministic arena with input-path echo replay, 12 original maps,
  five modes, power-up table, achievements, lives/invulnerability.
- labyrinth: engine3d tilt-marble with swept physics, 116 seed-generated
  mazes across five acts + bonus, checkpoint rewind, par stars.
- audiosurf tilt: AudioFeatures-driven deterministic courses (Normal/Hard/
  Visualizer), lane steering, chain/perfect scoring, exact medal fractions.
- lucky lanes bowling: deterministic pin physics, full 10-frame scoring,
  Exhibition/Blackjack/Golf, five original lanes and 3D lane rendering.
- pgr ferrari: fixed 30 Hz sim (torque/gears/grip/drag/downforce), three
  spline circuits, 4-car AI, full kudos catalogue + combo/stash, 12-event
  career and garage economy, engine3d city rendering.
- vans sk8: paraboloid pool physics, swipe trick table, grinds with balance,
  combo/multiplier rules, 12 events, 27 achievements, engine3d bowl.

All six registered and catalog-wired; audit regenerated. ~250 new tests;
full suite 1032/1032 green.
2026-09-11 07:15:20 -04:00
John Smith 2fec24f373 feat(apps): W5 — 5 touch/toy/physics titles (first engine3d title)
- 3d picture puzzle: engine3d OpenGL board with 3x3/4x4 grids, one/two-sided
  play (single shared empty slot model), generated 7-category artwork via
  PuzzleTextures, ray-picked tiles, flip/hint/timer and per-config best times.
- dr optics: pure-Kotlin 2D optics tracer (mirrors, arcs, polygons, lenses,
  Snell + TIR) with 41 authored levels and the 6/16/20/24 unlock ladder.
- finger physics: shared sequential-impulse Physics2d solver (circles + OBBs,
  joints, explosions, gravity variants) with 10 modes x 9 authored levels.
- tiki totems: physics block-removal with 13 packs x 8 authored levels.
- fingerpaint: stroke model with undo/redo/eraser/RDP + local pass-and-play
  draw-and-guess rounds (original networked play replaced by local mode).

All 5 registered and catalog-wired; audit regenerated. 69 new tests; full
suite 872/872 green (DesignInvariantTest included).
2026-09-11 06:38:44 -04:00
John Smith 562a12fb08 feat(engine3d): dependency-free OpenGL ES 3.0 scene core
Phase 2 infrastructure for the 3D official titles:
- Math3d: pure-Kotlin Vec3/Mat4 (column-major, inverse/normal matrices),
  Camera3d with NDC ray construction, ray/sphere and ray/plane intersection.
- Mesh3d: procedural box/plane/cylinder/quad builders with bounds for picking.
- Scene3d: tagged nodes, materials (flat/textured/unlit/emissive), directional
  light, ambient, fog, bounding-sphere picking and ground picking.
- GlSceneView: GLSurfaceView renderer (cached mesh/texture uploads, context-
  loss safe) plus a Compose AndroidView host with tap-to-pick; no third-party
  dependency, all geometry/textures authored in code.
- Engine3dTest: 11 pure-JVM tests for matrix/ray/pick/mesh invariants.

Full suite 803/803 green.
2026-09-11 06:02:41 -04:00
John Smith 657a7b7feb feat(apps): W4 — 11 new casual/word titles implemented
New pure-Kotlin engines + Compose apps (original content only; own word
corpora, authored waves/levels, procedural art, synth SFX):
a beanstalk tale (tilt climber with specials/bosses/cups), animalgrams
(25-animal authored anagram bank), wordmonger (7x7 tile board, hazards,
rush), bbq battle (tower defense with 30 authored waves), castles and
cannons (one-lane siege, 16 levels, skill tree), bees (5-theme hive
harvester, 25 levels), decoder ring (15x15 cipher crossword, 12 authored
puzzles), space battle 2 (10-stage shmup + 5 race tracks + parts),
vine climb (4-lane endless climber), penalty flick soccer (physics
shootout, bracket, Mad Minute, Goal Streak), fan prediction (offline
fixture simulation with standings).

All 11 registered and catalog-wired; register statuses -> native; audit
regenerated. 190 new tests; full suite 792/792 green.
2026-09-11 06:00:56 -04:00
John Smith 0c45d03702 feat(apps): W3 — 12 new casual/puzzle titles implemented
New pure-Kotlin engines + Compose apps (original procedural art, synth SFX,
graph.games high scores, appState resume):
color spill (flood-fill, corpus-blocked provisional constants), supernova
(chain reactions, level tables), tiles (3x3 8-puzzle, shuffle/countdown),
slider puzzle (4x2/5x3/6x4 with timed top-10), shell game (robot tracking,
shake charge, trophy reveal), trash throw (flick physics, wind, scenes),
tug-o-war (rhythm pulls, AI ramp), snowball (8x13 tile melt campaign +
survival), run and jump (58-level platformer with boost pads/warps),
hairball (tilt + sludge grid), splatter bug (spawn/HP/life sim),
goo splat (sludge/jelly physics with power-ups).

All 12 registered in DoradoApps and wired to their catalog entries; register
statuses flipped to native and the audit regenerated. 165 new tests; full
suite 602/602 green.
2026-09-11 05:32:51 -04:00
John Smith dc667f7c5f feat(apps): W2 fidelity — hexic, checkers, chess
- hexic: board rebuilt to the device hex cluster (8/9-cell rings, 5-7
  colors), standard/flower rotation cursors, stars/bombs/flowers/black
  pearls, gravity cascades, Marathon/Timed/Survival with the 7-level tables
  and score formulas; legacy square-board API kept for LogicTest.
- checkers: bounded negascout at 1/3/8 plies + 4-ply hint, Suicide mode,
  snapshot undo, FEN/save codecs, per-difficulty records, mandatory-capture
  and multi-jump rules preserved.
- chess: 1/3/5-ply levels with a synthesized opening book, 2-half-move undo,
  hint, two-player mode, FEN save/restore; castling/en-passant/promotion
  verified.

38 new tests; full suite 437/437 green.
2026-09-11 05:11:45 -04:00
John Smith 1608f0bfb4 feat(apps): W2 fidelity — hearts, spades, texas hold 'em
- hearts: Standard/Wildcard/Turbo modes, shoot-the-moon, passing rotation
  (Left/Right/Across/None) with simultaneous passing, first-trick point ban,
  Easy/Hard AI, 100-point games, autosave; stall fixes in the trick loop.
- spades: Easy/Hard bidding and play AI, Nil/Blind Nil (+/-100/200), official
  bag-out formula, 500/300 targets, round-history scoreboard, deterministic
  one-action-per-state loop (fixes the 'ai playing' stall).
- texas hold 'em: new 6-seat PokerTableEngine with layered side pots, six AI
  personalities across Easy/Medium/Hard, pot/blind-aware sizing, seven-event
  tournament ladder with bankroll gating and hand history; heads-up hand
  ranking APIs preserved for LogicTest.

34 new tests; full suite 437/437 green.
2026-09-11 05:11:45 -04:00
John Smith 9a2d110964 feat(apps): W2 fidelity — solitaire, sudoku, reversi
- solitaire: Standard/Vegas scoring (stake, 3-pass cap, time bonus),
  1/3-card draw, multi-card run moves, history undo, hint, autocomplete,
  resumable deal + per-mode stats via appState/graph.games.
- sudoku: seeded uniqueness-checked generator (Classic 6x6/9x9, three
  difficulties) replacing the curated set; pencil notes, conflict highlight,
  undo, candidate hint, aggregate solve, timed records.
- reversi: Easy random / Medium greedy / Hard weighted + bounded lookahead
  AI, side/difficulty setup, undo, hint toggle, per-difficulty records.

35 new tests; full suite 437/437 green.
2026-09-11 05:11:45 -04:00
John Smith a9c7e16dea refactor(apps): split Games/MoreGames into per-game engine + app files
Pure move in the same package: solitaire/sudoku/hexic/reversi and
hearts/spades/checkers/chess/poker each get <Game>Engine.kt and <Game>App.kt;
shared card chrome moves to CardViews.kt (EdgeText/rankLabel/suitGlyph/
PlayerHand/PassPicker widened from private to internal). No behavior change;
330/330 tests green.
2026-09-11 04:41:38 -04:00
John Smith 6aaf48daf7 feat(apps): W1 fidelity — music quiz, shuffle by album, piano, drum machine
- music quiz: deterministic 20-question timed rounds (4/6 options, five
  question kinds, hint, 30s bonus round), seeded QuizEngine, per-mix high
  scores via graph.games, settings via appState.
- shuffle by album: scoped shuffled album queue with in-order track playback
  and auto-advance, five-album drag carousel, queue sheet, idle screensaver,
  controller integration.
- piano: 52-white-key scrolling keyboard (A0-C8), octave bar, multi-touch
  glissando, sustain/dampen, volume, notation; pre-rendered synth voices
  with documented AudioTrack serialization limits.
- drum machine: layered pads with zone splitting, hold-to-loop, three kits,
  record/playback sequencer, 40-340 BPM, synth-only voices.

40 new engine tests; full suite 330/330 green.
2026-09-11 04:40:07 -04:00
John Smith d1d3f53226 feat(apps): W1 fidelity — alarm, level, metronome, chord finder
- alarm: four-page clock/alarm/sleep/settings flow, minute-match firing with
  snooze and 30-min bow-out, source fallback to buzzer, sleep timer with
  shake-to-reset via rememberTilt(); existing Room alarm list preserved.
- level: all three instruments on one canvas with 90-degree travel clamps,
  0.1-degree readouts and peak-hold memory; shared rememberTilt() replaces
  the inline sensor, with a graceful no-sensor state.
- metronome: 40-340 BPM dial with drag, tap tempo, 16-cell accent grid,
  beat-count handling; synth clicks.
- chord finder: 12 enharmonic roots x 8 qualities with multiple voicings,
  fret-window shift, finger-number dots, built-in metronome.

39 new engine tests; full suite 330/330 green.
2026-09-11 04:40:07 -04:00
John Smith da3f1e79c2 feat(apps): W1 fidelity — calculator, calendar, notes, stopwatch
- calculator: stacked expression machine (memory, DEG/RAD/GRAD, parens,
  repeat-equals, div-zero/NaN/Inf -> Err, 15/19-digit caps), four-page
  landscape scientific keypad with stats, portrait/landscape shared value.
- calendar: day timeline / agenda / month views over the existing Room
  appointments, recurrence expansion, clash detection, all-day + notes.
- notes: notes|lists pivot with checklist strikethrough items, three sort
  modes, live search, text-size setting, sort/size persisted via appState.
- stopwatch: countdown H/M/S timer with synth alarm and crescendo, split vs
  total laps, wall-clock-correct resume, appState persistence.

65 new engine tests; full suite 330/330 green.
2026-09-11 04:40:02 -04:00
John Smith 1cd47b1b35 refactor(apps): split MiniAppsUtilities into one file per app
Pure move: CalculatorApp, NotesApp, StopwatchApp, MetronomeApp, LevelApp,
ChordFinderApp, ShuffleByAlbumApp, MusicQuizApp, AlarmClockApp, CalendarApp
each get their own file in the same package (private helpers travel with
their app). No behavior change; unblocks parallel fidelity work per app
without shared-file conflicts.
2026-09-11 04:26:49 -04:00
John Smith 4182f6043e docs(apps): fill all 62 behavioral specs from the decompiled corpus
Phase 1 completion: every official package now has a synthesized spec with
screens/flow, rules/scoring/AI, controls, content inventory, implementation
plan and an Assembly!Type.Method citation log. 62 specs / ~9,000 lines;
documentation-first gate is closed.

Notable corpus findings recorded in the specs:
- color-spill is blocked upstream: its marketplace package shares a GUID with
  Reversi, so the archive payload is Reversi.exe (register notes + spec gap).
- W2 AI tiers, W3 score/simulation constants, W6 30 Hz deterministic
  simulation and content inventories are now pinned for implementation.

No Microsoft content is committed; analysis only.
2026-09-11 04:25:51 -04:00
John Smith 1acdf2d64b feat(apps): shared runtime — app state store, synthesized SFX bank, tilt helper
Phase 2 infrastructure for the official-app program:
- Room v6 app_state table (AppStateEntity/Dao/MIGRATION_5_6) behind
  AppStateRepository, wired into the graph for save/resume and board snapshots.
- Sfx.kt: deterministic LCG noise, tone/sweep/noise/arpeggio generators, and a
  cached 16-cue SfxBank for games (synthesized only; no sampled audio).
- AppSensors.kt: rememberTilt() accelerometer helper (level, tilt calculator,
  motion games).
- OfficialCatalog: the seven dead-service mocks now carry installedIds so the
  marketplace resolves them.
- Tests: AppStateStoreTest (round-trip + reopen), SfxTest (determinism,
  inventory), OfficialAppsTest (register⇔catalog⇔registry⇔spec gate).

186/186 unit tests green (JDK 21).
2026-09-11 03:53:22 -04:00
John Smith 529f3aef2d feat(apps): corpus miner, 62-app register, behavioral specs, audit register
Phase 1 of the official-app reimplementation program:
- tools/app_mine.py: batch-decompiles the external corpus with ilspycmd,
  emits per-app indexes (types/methods/strings/constants/content with PNG
  dimensions and XNB headers), generates spec skeletons, and regenerates the
  audit matrix + machine-readable gaps register.
- docs/official-apps.json: the 62-package register (slug/title/exe/category/
  corpusDir/installedId/status/wave/spec) that drives tooling and tests.
- docs/apps/: a behavioral spec per package (documentation-first gate).
- docs/official-apps-audit.md + official-apps-gaps.json: tracked matrix.

61/62 packages mined (weather is a dead service with no shipped package). No
Microsoft content is committed; counts and synthesized analysis only.
2026-09-11 03:53:18 -04:00
John Smith d5d1ac480f feat(corpus): archive.org mirror + decompiled app corpus extract/verify tools
Phase 0 of the official-app reimplementation program:
- zune_archive_mirror.py: staged, resumable, checksum-verified mirror of the
  Zune Archive (70 items, 51.4 GB pre-flight) into an external untracked dir,
  with a capacity gate, --root override, and per-item manifests.
- zune_app_corpus.py: extracts the 61 decompiled official-app ZIPs and
  verifies every file against the published hashes.txt (7843/7844 ok; the
  one miss, sudoku Database.xml, is absent upstream).

No Microsoft content is committed; both scripts write to the external corpus
only.
2026-09-11 03:38:23 -04:00
John Smith b8403621da feat(re): kernel module reconstruction and ZCSTFS/keyvault findings
- Add scripts/reconstruct_nk_modules.py to rebuild the kernel-only modules
  (zcstfs.dll, keyvault.dll, DwXfer.dll, zcblock.dll, zpartstream.dll) from
  NK.bin into the external corpus.
- Update the module inventory and API reference: 114/114 modules, 67,399
  functions decompiled, 4,236 exports.
- Correct the ZCP inventory and asset notes: the payload is a ZCSTFS volume
  (plaintext for the runtime), and marketplace keys are per-package AES keys
  unwrapped from an RSA-2048 blob by a device-provisioned keypack.
2026-09-11 03:26:21 -04:00
John Smith 9fceea6341 docs(audit): close-out pass record
Document the follow-up fixes that were listed but not applied in the first
pass, update the deferred register (fling cap, visualizer and eager
device-link items are done), and add close-out on-device evidence.
2026-09-11 03:23:06 -04:00
John Smith 5f61115356 fix(radio,device): dial action overlay; lazy Device Link; crop constraints
Radio actions move onto the dial so the station list gets a full-height
region; Device Link becomes a LazyColumn (keyed device/pending items) and
long titles crop at their column instead of overlapping 'copy back'.
2026-09-11 03:23:05 -04:00
John Smith cc34724c7c fix(motion,scaling): density-normalized fling cap, tablet headroom, draw-scope visualizer, dp drift
- Fling velocity cap scales with the adaptive density multiplier so it no
  longer shrinks on scaled layouts (device-mode behavior unchanged).
- Adaptive scale ceiling 2.1 -> 2.6 for tablets/foldables.
- Visualizer reads phase in the draw scope (no per-frame recomposition)
  and the 60s loop is seamless (integer harmonics over 2pi).
- Screensaver drift expressed in dp instead of raw px.
2026-09-11 03:22:57 -04:00
John Smith c73ec3597a fix(widget): album art thumbnail, 2-cell sizing, preview; drop dead helper
Glance 1.2 has no URI-based ImageProvider, so the updater decodes a
128px PNG off-main and the widget renders it beside title/artist/album;
declared size raised to 110dp/2 cells with description and preview image;
removed the dead legacy albumArtUri helper.
2026-09-11 03:22:56 -04:00
John Smith 81a0ce52b9 fix(detail): MiniPlayer insets, empty states, related wrap, MusicBrainz URL
Album/artist/genre/playlist track lists reserve the MiniPlayer strip;
album-not-found and empty-genre states replace blank panes; album play/
shuffle hide when there are no tracks; the related-artists explanation
wraps instead of cropping and links to MusicBrainz search (artist pages
require an MBID).
2026-09-11 03:22:47 -04:00
John Smith 4333f7812b docs(audit): UI/UX deep-audit report; calculator del label
Adds docs/ui-ux-audit.md: scope, severity table of the 42 defects found and
fixed across screens and all 29 mini-apps, on-device verification evidence,
and the deliberately deferred items (mediaId namespacing, eager device-link
composition, fling-cap density, visualizer recomposition).
2026-09-11 02:54:50 -04:00
John Smith 677743bd2d fix(games,mocks): cell sizing; mocks scroll and wrap
- Hexic circles derive their radius from the tighter axis, so tiles no
  longer overflow their cells or overlap the score line; Sudoku/Reversi
  subtract the inter-cell gaps so the last row fits the viewport.
- Every mock page scrolls, reserves MiniPlayer space and wraps long
  sentences instead of clipping them at the screen edge.
2026-09-11 02:48:14 -04:00
John Smith 31922b4e48 fix(screens): podcasts parser/IO, radio dial, marketplace details, settings info
- Podcast RSS parser scopes titles to channel vs item, reads
  itunes:duration and summary, and no longer mis-attributes episode
  titles; feed fetch runs on IO; feeds gain a refresh action; feed
  screen shows the real title and an empty state; the video pivot says
  it is unsupported rather than duplicating audio.
- Radio: drag detector no longer re-keys while dragging; needle maps
  frequency left-to-right and ticks align to 87.5–108; list padding.
- Marketplace: details' back returns to the list (was popping the whole
  marketplace), description wraps and scrolls, videos show a loading
  state, music has an empty state, lists reserve MiniPlayer space.
- Settings: multi-line info rows wrap instead of clipping, sign-in
  reports success/failure, update check distinguishes unreachable from
  up to date; lyrics reserve bottom space.
- Device link: status copy derives from pairing state; manifest shows
  '+N more' instead of silently truncating.
2026-09-11 02:40:20 -04:00
John Smith 4c69cdbe63 fix(screens): clipping, scrolling, gestures, playback and cloud defects
Home: Smart DJ uses the full library; history long-press can pin (unpin was
a no-op); watermark clears the MiniPlayer; 'new' has an empty state.
Music: album tiles are square; search long-press menu; per-pivot empty
states; MiniPlayer/footer padding so rows are never covered.
Videos: playback is a fullscreen route (MiniPlayer suppressed, header
returns to the list), seek bar accepts tap/drag, music pauses on entry.
Pictures: tapped photo opens at its index; favorites open the viewer;
albums pivot scrolls; system Back closes the viewer; pan is edge-clamped.
Internet: WebView released on exit; bookmarks/history are tappable.
Social/Radio/Marketplace lists reserve MiniPlayer space.
Now Playing: back arrow exists with nothing playing; control taps reset
the screensaver timer; volume readout times out and shows 0; dim is a
translucent veil above the saver; OSD clock ticks; skip deadband is
density-corrected.
Components: AlbumArt falls back on load error; crossbar hit targets fill
the bar and gaps no longer select neighbours; the alphabet rail only
appears on long lists and reserves end padding.
Lock shade: unlock animates before dismiss, offset resets, Back closes it,
wallpaper is decoded off-main and downsampled.
Cloud: token exchange is IO-dispatched, malformed JSON cannot crash,
state must match exactly, sign-out disables cloud, redirect host checked;
POST_NOTIFICATIONS requested for the media notification.
2026-09-11 02:36:51 -04:00
John Smith e451d1bf2c fix(games): unstick engines, scale boards, correct hit-testing and scoring
- Sudoku: generated puzzle (not the solution) is dealt; given-mask fixed;
  win compares against the stored solution; board scales to the viewport.
- Hexic: clearing no longer re-creates clusters (infinite loop/freeze);
  board is observable state; canvas draws and hit-tests with one mapping.
- Solitaire: exposed cards flip, waste pile is playable, black suits are
  readable, compact layout fits 272dp.
- Reversi: board scales; game-over result + new game; win/loss recorded.
- Hearts: passing phase completes (was stuck forever); opponent hands are
  summaries; 13-card hands fit; scores recorded once.
- Spades: spadesBroken flag, correct follow/discard rules, team scoring
  with bags, AI auto-advances (a fresh deal no longer stalls).
- Checkers: winner detection fixed; multi-jump AI continues; board and
  taps share one canvas (overlay was offset and covered the header).
- Chess: castling rights revoked on rook capture (NPE fix, in-place masks
  corrected); piece letters drawn; AI search off the main thread at depth
  2; only terminal results recorded.
- Hold'em: per-street contributions/acted tracking actually deals flop/
  turn/river; showdown compares kickers and awards the pot; AI hole cards
  hidden until showdown; cards rendered by SolCardView.
2026-09-11 02:31:29 -04:00
John Smith 26ec13f962 fix(miniapps): device-mode fit, audio, calculator, alarms, calendar, quiz
- Calculator keypad rows are weighted so the full basic/scientific pad fits
  the 224dp device-mode content area; +/- no longer corrupts subtraction;
  engine gains ^ and sin/cos/tan/ln/log/sqrt.
- Synth: piano no longer multiplied by exp(-6) (was ~-52dB inaudible);
  AudioTrack writes move off the main thread (suspend playSamples).
- Piano gains black keys; drum machine gains a BPM control and re-reads
  tempo each bar; metronome retimes on BPM change with one click loop.
- Notes placeholder overlays the field; back is the cropped header and
  autosaves (DetailScaffold grew an optional onBack).
- Stopwatch shows centiseconds, split laps, scrollable lap list.
- Shuffle-by-album play button fits 272dp (side-by-side layout); quiz no
  longer hangs when the library lacks 4 artists/albums; level shows both
  axes; chord finder stops substituting C major for unknown shapes;
  fretboard draws O/X and fret 5.
- Alarm: time prompt (hour+minute), delete cancels PendingIntent, edit
  respects disabled state, full 64-bit request codes, weekly mask fixed.
- Calendar keys appointments by full date; long-press lists/deletes.
2026-09-11 02:24:43 -04:00
John Smith 7548ba1e06 fix(ui): de-duplicate mini-app scaffold, fullscreen MiniPlayer rules, device-canvas insets
- MiniAppScreen no longer wraps apps in a second DetailScaffold; every
  mini-app already provides its own cropped header. Removes the stacked
  double header that consumed 96 of 272 device-mode design units.
- MiniPlayer is suppressed on mini-app and fullscreen viewer routes
  (canon 8) and its transport target is a bare 32dp box instead of a
  48dp Material IconButton that overhung the bar.
- safeDrawingPadding moved outside the scaled canvas so real insets no
  longer shrink/offset the 480x272 device composition.
- Device mode keeps the landscape 480x272 canvas in portrait instead of
  swapping axes (screens are landscape-authored).
- Widget transport actions run on the main looper (MediaController).
2026-09-11 02:19:41 -04:00
John Smith df3579a6f4 ci: emit prune tags newline-separated so an empty list is a no-op 2026-09-11 02:02:05 -04:00
John Smith b5454d25d5 ci: scope gh release prune to the repo (publish job has no checkout) 2026-09-11 01:56:31 -04:00
John Smith 5cc17665a2 ci: publish debug APK as per-commit prerelease tagged by short commit hash
- add publish job on main push / dispatch (PRs build+test only)
- dorado-hd-<sha7> prerelease with dorado-hd-<sha7>.apk
- keep last 10 prereleases; serialized via concurrency group
2026-09-11 01:45:24 -04:00
John Smith 27833a78c1 feat(m15): local Zune Card on social screen 2026-09-11 01:40:29 -04:00
John Smith aa80bc458e feat(m13-m15): dimmer+status OSD, picture zoom, item snap, EQ presets, sort keys, share, marketplace discovery 2026-09-11 01:38:18 -04:00
John Smith 6115175f85 feat(m12): NP scrubber, queue/showlist, library search, fling cap; kinetic provenance fix 2026-09-11 01:29:56 -04:00
John Smith 22ff5f2847 docs(parity): on-device parity audit vs Zune HD disassembly + gap register; correct kinetic provenance 2026-09-11 01:20:10 -04:00
John Smith f8ac21c29a feat(re): full 109-module Zune HD decompilation corpus with symbol recovery + analysis docs 2026-09-11 00:28:29 -04:00