R8 merged the near-identical widget classes (timer, quick timer,
stopwatch, digital clock) into the analog clock's class. Glance finds a
widget's placed instances by its GlanceAppWidget's class name, so every
updateAll hit every widget: starting a quick timer redrew the timer
widgets' content into the analog and digital clocks until their config
screen re-rendered them. Debug builds were unaffected.
R8 under AGP 9 pruned the no-arg constructor of OverwritingInputMerger,
which WorkManager instantiates reflectively before running any worker.
Every Glance session worker then failed with "Could not create Input
Merger", no RemoteViews reached the host, and every widget showed
"Can't load widget" in minified builds. Debug builds were unaffected.
Copied from Agendula, which is the family's current template: AGP 9.x
conventions, the shared version catalog, and the F-Droid reproducibility
invariants that are load-bearing rather than cosmetic — no foojay toolchain
resolver anywhere, vcsInfo off on release, dependenciesInfo out of the APK.
floret-kit comes in as a git submodule wired up as a Gradle composite build,
so the kit is built from source and pinned by commit, exactly as its
ARCHITECTURE.md prescribes.
Two deliberate divergences from Agendula's catalog:
- Room replaces Glance. Clockula owns its storage (docs/PLAN.md §0) and ships
no widget in v1 (§1, decision 2). The schema is exported to a committed
directory, because a migration is only reviewable against a recorded
previous version.
- :provider and core-reminders are dropped. There is no vendored task
provider here, and Agendula's reminder lead-time model is not the shape
Clockula's scheduling takes.
Version starts at 0.1.0 / 100.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L94fydiJC37LtxVusNQBDy