diff --git a/CHANGELOG.md b/CHANGELOG.md index 090d2e2..a49f2be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,3 +21,11 @@ Tag sections feed the release notes — see [`docs/RELEASING.md`](docs/RELEASING translations, release (F-Droid repo + Codeberg release + Google Play) and Renovate, with the F-Droid reproducibility rules intact. - The locked specification: `docs/PLAN.md` and `docs/ROADMAP.md`. +- Preferences over floret-kit's new `core-prefs`: `SettingsPrefs` holds the + appearance slice (theme mode, dynamic colour) in a DataStore of Clockula's own, + under the family's key names. The theme now follows the stored preference — + light/dark override and dynamic colour persist across launches instead of + always following the system — and an unrelated preference write no longer + re-emits it. +- floret-kit's `core-di` supplies the `@IoDispatcher` the preference store runs + on, so Clockula no longer declares its own dispatcher qualifier. diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index dc77dfd..62a773c 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -10,10 +10,10 @@ Status legend: ✅ done · 🚧 in progress · ⬜ not started ## Current state (one line) -✅ **M0 done.** The project builds, installs and shows a themed placeholder; -floret-kit is wired in as a composite build, the identity is seeded, and the -full Codeberg-canonical release pipeline is in place. **M1** (the `core-prefs` + -`core-di` extraction into floret-kit) is next. +✅ **M1 done.** floret-kit 0.4.0 ships `core-prefs` and `core-di`, and Clockula's +theme now follows its own stored preference over a typed DataStore. **M2** (the +whole storage stack — Room, domain models, repositories, and the first +`ARCHITECTURE.md`) is next. --- @@ -69,7 +69,7 @@ The project exists, builds, is themed, and ships itself. unwritten by design — M2 writes it, once there is an architecture to describe. -### ⬜ M1 — floret-kit: `core-prefs` + `core-di` +### ✅ M1 — floret-kit: `core-prefs` + `core-di` Pay the extraction the kit's roadmap has been waiting for a third app to trigger. - In the kit: `core-prefs` (`ThemeMode`, `dynamicColor`, typed DataStore wrapper, `toEnum()`) and `core-di` (`@IoDispatcher` + provider), each with tests, module @@ -79,6 +79,17 @@ Pay the extraction the kit's roadmap has been waiting for a third app to trigger - **Done when:** the kit's tests pass, Clockula builds against the new modules, and both repos are committed (submodule first, then the pointer bump). + ✅ floret-kit 0.4.0. `core-prefs` (56 kit tests) gives the family a typed + `Pref`/`PrefStore` over DataStore; reads degrade to the default instead of + throwing, and `flow()` is distinct-until-changed. The appearance key names are + frozen at what Calendula and Agendula already write, so the sibling migration — + a follow-up in the kit's roadmap, not here — needs no data migration. + `core-di` carries `hilt-compiler` itself, since an `@InstallIn` module only + reaches a consumer's component if its own library was processed; Clockula's + `assembleDebug` is the integration test for that binding. Clockula's theme now + reads the stored preference, with the DataStore built on a corruption handler + so an unreadable prefs file cannot brick startup. + ### ⬜ M2 — Data layer The whole storage stack, headless. No UI. - Room: `alarms`, `timers`, `world_clocks`, `stopwatch_laps` (`PLAN.md` §5),