Commit Graph
93 Commits
Author SHA1 Message Date
John Smith 1b09c2a42d feat(music): Smart DJ tap-to-build in the crossbar (M5)
Music screen action row gains 'smart dj': a menu that builds and plays a mix
from the current track (SIMILAR_TO_TRACK), the hearted favorites, or the most
played tracks via CloudMixService (local-first, cloud-enhanced).
2026-09-11 15:26:31 -04:00
John Smith 2d220bc3e8 feat(notification): custom lock-screen surface + golden stabilization
- DoradoMediaNotificationProvider: dedicated public low-importance channel,
  compact transport from the session command layout, album art via a caching
  session bitmap loader (async re-post), content intent to the app; wired via
  setMediaNotificationProvider + CacheBitmapLoader(SimpleBitmapLoader).
- Robolectric provider test builds a real session notification.
- Goldens: the fixed 900ms virtual advance rendered blank frames under load;
  replaced with a settle loop (100ms steps until idle) and actual-frame dumps
  on mismatch. fan-prediction's device id now derives from AppClock instead of
  a random UUID so entry frames are deterministic. Two full executions green
  (1,488 tests).
dorado-hd-2d220bc dorado-hd-3589274
2026-09-11 15:05:53 -04:00
John Smith 35892740f3 feat(visualizer): real-FFT spectrum from the playback PCM tap (C5)
- TapRenderersFactory installs TeeAudioProcessor into the audio sink so
  VisualizerBus mirrors rendered PCM into a mono ring buffer (no RECORD_AUDIO
  permission; buffers pass through untouched).
- SpectrumBands: log-spaced band mapping, sqrt perceptual scaling, per-frame
  peak-hold decay (pure, unit-tested).
- SpectrumVisualizer accepts live levels and falls back to the procedural
  animation before the first window; Now Playing polls per frame and resets
  the bus on pause.
- Tests include an end-to-end PCM-tap integration test. Suite 1487/1487.
dorado-hd-161f129
2026-09-11 14:55:26 -04:00
John Smith 64211bf506 feat(playback): fade-through crossfade + sleep timer (M6/M10)
- FadeRamp.kt: pure linear ramp math (window, steps, bounds) with tests.
- PlaybackController: live crossfade setting provider; tail fade-out via the
  position ticker, fade-in on AUTO transitions, quick fade for manual skips,
  pause resets volume; sleep timer with remaining StateFlow that fades out and
  pauses on expiry; countdown surfaced in the Now Playing status OSD.
- Settings ▸ playback: crossfade off/2/4/6/8 s and sleep timer
  off/15/30/45/60/90 min (persisted; canon §10 labelled as extensions).
- Canon §10 + roadmap M6/M10 updated.
2026-09-11 14:51:59 -04:00
John Smith e889cd8b55 tools: classify official apps by render stack (framework vs ZDKGL)
Scans the external decompiled corpus and reports per-app framework/GL
classification plus the Zune framework families each app uses. Writes a
prose-only summary for dorado-emu docs.
2026-09-11 14:48:55 -04:00
John Smith 161f129f6a tools: add intake stage for newly discovered archive.org items
Adds zune-homebrew-pack-v1, zune-Stuff, zune-4.8-beta-2098,
hexic-for-zune-hd and zune-firmware-x-86 to the mirrored categories with
a dedicated --stage intake, and merges per-item results into the shared
_mirror-report.json instead of overwriting prior runs.
2026-09-11 14:48:23 -04:00
John Smith 39d6626b53 feat(goldens): freeze the wall clock; 126 device+landscape goldens (A4)
- AppClock seam: production reads the system clock; tests freeze it. All
  app seeds/time reads route through it, so entry frames are deterministic.
- GoldenCaptureTest now covers every app at device 480x272 and adaptive
  landscape (126 goldens) with the clock frozen at 2024-06-15T12:34Z; the
  four clock-screen exclusions are gone.
- Checklist regenerated (goldens 126/126, flow crawl 63/63).
- Audit §8 records the Track A hardening results. 1,477/1,477 tests.
dorado-hd-39d6626
2026-09-11 14:21:44 -04:00
John Smith d4be623ec7 feat(a11y): accessible touch contract for all mini-app controls
- AppTouch.kt: appTap (clickable with null indication: TalkBack click action,
  always-latest lambda, no Material ripple), appHold (press/release with an
  accessible click), appDescription (screen-reader summaries for boards and
  readouts).
- Converted button/row/tab controls across the catalog; positional board
  taps and drags stay raw but now carry board state descriptions; 3D hosts
  describe mode/score.
- Six entry menus gained verticalScroll because the new semantics exposed
  zero-height rows at the adaptive canvas (previously untappable).
- Goldens re-recorded for the six layout-affected screens.

1410/1410 tests; ui_lint clean; LayoutBounds 126/126; flow crawl 63/63.
2026-09-11 14:16:14 -04:00
John Smith 89c97d1c43 ci(parity): lint + source guards in CI; interactive flow crawl tool
- CI now runs lintDebug, tools/ui_lint.py and a py_compile check on the
  corpus tools after the unit/UI suites.
- tools/emulator_flow_crawl.py drives each app's primary flow (element taps
  by text bounds since pointerInput controls lack click semantics), then
  backgrounds/relaunches and cold-restarts it, scanning logcat per step.
  Baseline: 63/63, 0 crashes (reports/emulator/flows/, git-ignored).
2026-09-11 14:16:14 -04:00
John Smith 5b333ead75 test(goldens): drop the remaining clock-screen golden (alarm) 2026-09-11 12:27:49 -04:00
John Smith cfc2e9e46f feat(parity): static guards, coverage checklist, three more silent-synth fixes
- tools/ui_lint.py + DesignInvariantTest guards: MiniSynth must start,
  pointerInput(Unit) must be reviewed, sub-screens must forward onBack, IME
  wiring must exist. The synth rule immediately caught ColorSpill,
  Supernova and Tiles shipping silent SFX — fixed.
- docs/ui-parity-checklists.md: 63-app coverage (spec/smoke/bounds/golden/
  crawl, zero open gaps).
- 1,410/1,410 tests; lint green.
2026-09-11 12:27:28 -04:00
John Smith f29d4cec9f docs(parity): close the register and record results; lint + golden hygiene
- Register: 61 fixed, 23 verified, 2 documented N/A, 0 open.
- Audit: Phase 2/4 results (verification layers, residual notes).
- Goldens: exclude four clock/date screens with rationale.
- Lint: unused BoxWithConstraints scopes replaced (3 apps).
- README test count 1,406.
2026-09-11 12:16:25 -04:00
John Smith ece6b5356a test(ui): layout-bounds gate for unreachable controls
For every app at adaptive portrait and landscape, no clickable semantics
node may sit entirely outside the viewport unless it has a scrollable
ancestor. 126/126 green — the off-screen-control class from the audit is
closed for tappable (clickable-semantics) UI.
2026-09-11 12:04:15 -04:00
John Smith 8106ac96f3 test(ui): golden screenshot regression for all 63 apps
- GoldenCaptureTest (ParameterizedRobolectric + native graphics) captures
  each app's entry screen at device size 480x272 and compares within a
  per-channel tolerance; goldens recorded to app/src/test/goldens (880KB).
- The goldens directory is a declared test input so CI re-runs on change;
  -Dgolden.update=true re-records after intentional visuals.
- Harness root tagged for exact-canvas capture.

Verified: corrupted golden fails, restored golden passes.
2026-09-11 11:55:16 -04:00
John Smith 51123c5937 test(ui): hardware-back contract + missing onBack wiring
- BackContractTest proves system back returns from a game sub-screen to its
  in-app menu (checkers records, hexic difficulty).
- Fix the class of sub-screens that declared an onBack parameter but never
  passed it to DetailScaffold (checkers/chess records+learn, trash throw
  about, bowling records, hexic difficulty), so the H-01 contract applies.

1221/1221 tests green.
2026-09-11 11:49:41 -04:00
John Smith 73574a5998 fix(apps): post-wave visual polish
- fan-prediction: duplicate offline banner removed.
- audiosurf: ride rows 46dp so artist lines are not clipped.
- shuffle by album: transport wraps (FlowRow) so 'shuffle' is readable.
- sudoku/reversi: duplicate in-content headings removed (H-13).
- weather: condition glyph clipped so no stroke bleeds into neighbours.
2026-09-11 11:47:04 -04:00
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