straw/strawApp/src/main
Sulkta 7c90f70a0a vc=90: cold-start store hydration off-Main + video-page status-bar fix + RYD FFI slim
Resume + Enrichment stores no longer JSON-decode on the main thread in Application.onCreate (Resume is the heaviest cold-start cost: ~50-100ms decode at its 100k-entry cap). Both seed an empty StateFlow and hydrate off-thread on their PrefsWriter single-thread dispatcher. Mutations that arrive before the hydrate finishes defer onto that FIFO dispatcher (a hydrated gate) so they re-run on fully-loaded state -- correct for adds AND clears; a naive loaded+live merge would resurrect a clear that landed on the empty seed. Subscriptions/Playlists/History/Settings stay eager (tiny + rendered directly -> would flash empty). (audit 2.1)

Video page: details/related rows no longer leak into the status-bar strip above the player when scrolled. topPadding is now a layout inset on the detail LazyColumn, so the scroll viewport begins+clips at the player's bottom edge instead of letting rows scroll up over the clock/signal.

RYD: dropped the dead rating + view_count fields from the strawcore RydVotes FFI Record + Kotlin shim -- only likes/dislikes are rendered; RYD's rating restates the like/dislike ratio and its viewCount is a stale aggregate conflicting with the real YouTube count already shown. (audit #2 L-9)

Adversarially reviewed (Opus): clear-resurrection closed, no defer-loop, FFI slim has no readers. Headless compileDebugKotlin green.
2026-06-22 05:10:48 -07:00
..
kotlin/com/sulkta/straw vc=90: cold-start store hydration off-Main + video-page status-bar fix + RYD FFI slim 2026-06-22 05:10:48 -07:00
res vc=88: deferred-hygiene sweep (audit #2 leftovers, no behavior change) 2026-06-21 20:03:45 -07:00
AndroidManifest.xml Public-flip audit: scrub audit-ticket prefixes + internal references + tighten README 2026-05-27 13:29:53 -07:00