docs: mark M1 done

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-11 12:47:46 +02:00
co-authored by Claude Opus 5
parent 52f3296dc7
commit 29b213efc6
2 changed files with 24 additions and 5 deletions
+8
View File
@@ -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 translations, release (F-Droid repo + Codeberg release + Google Play) and
Renovate, with the F-Droid reproducibility rules intact. Renovate, with the F-Droid reproducibility rules intact.
- The locked specification: `docs/PLAN.md` and `docs/ROADMAP.md`. - 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.
+16 -5
View File
@@ -10,10 +10,10 @@ Status legend: ✅ done · 🚧 in progress · ⬜ not started
## Current state (one line) ## Current state (one line)
✅ **M0 done.** The project builds, installs and shows a themed placeholder; ✅ **M1 done.** floret-kit 0.4.0 ships `core-prefs` and `core-di`, and Clockula's
floret-kit is wired in as a composite build, the identity is seeded, and the theme now follows its own stored preference over a typed DataStore. **M2** (the
full Codeberg-canonical release pipeline is in place. **M1** (the `core-prefs` + whole storage stack — Room, domain models, repositories, and the first
`core-di` extraction into floret-kit) is next. `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 unwritten by design — M2 writes it, once there is an architecture to
describe. 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. 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, - In the kit: `core-prefs` (`ThemeMode`, `dynamicColor`, typed DataStore wrapper,
`toEnum()`) and `core-di` (`@IoDispatcher` + provider), each with tests, module `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, - **Done when:** the kit's tests pass, Clockula builds against the new modules,
and both repos are committed (submodule first, then the pointer bump). 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<T>`/`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 ### ⬜ M2 — Data layer
The whole storage stack, headless. No UI. The whole storage stack, headless. No UI.
- Room: `alarms`, `timers`, `world_clocks`, `stopwatch_laps` (`PLAN.md` §5), - Room: `alarms`, `timers`, `world_clocks`, `stopwatch_laps` (`PLAN.md` §5),