88 lines
4.7 KiB
Markdown
88 lines
4.7 KiB
Markdown
# Development log — Period
|
|
|
|
```
|
|
Status: Current
|
|
Owner: _null
|
|
Last reviewed: 2026-08-18
|
|
Governs: the dated record of what happened
|
|
Review trigger: Nothing. This file is appended to, never revised.
|
|
```
|
|
|
|
## How to use this
|
|
|
|
Newest first. **One entry per work session**, written before you stop — that is
|
|
step 6 of `docs/WORK_CYCLE.md`, and the two lines it insists on are `Next
|
|
action` and `Blockers`.
|
|
|
|
Those two are not decoration. The next session starts by reading the top of this
|
|
file, and a session that ended without saying what came next hands the one after
|
|
it a re-derivation instead of a starting point — which is where drift enters.
|
|
Neither line competes with anything: the live next action is the field on the
|
|
project at privacyllc.dev and the live blockers are issues in the tracker, while
|
|
these say what both were **at this date**. A record of then never disagrees with
|
|
a record of now.
|
|
|
|
**Append-only by convention.** Correcting an old entry rewrites the record of
|
|
what was known at the time, which is the one thing this file is for. If an entry
|
|
turns out to be wrong, add a later entry saying so; do not edit the first.
|
|
|
|
Note the Review trigger above says "nothing", deliberately. A dated log cannot
|
|
rot the way a description of current state can — the entries were true when
|
|
written and stay true. It is exempt from review for the same reason a receipt is.
|
|
|
|
## Entries
|
|
|
|
### 2026-08-18 — Template adopted; Kotlin/Compose skeleton builds
|
|
|
|
Period went from a bare directory holding one specification file to a git
|
|
repository with the standard documentation tree, a tracker, and a project that
|
|
compiles. Adoption followed `Projects/Template/START-HERE-New-Project.md`.
|
|
|
|
**Documents.** `scaffold.sh` created 19 paths, 0 skipped. The specification moved
|
|
from `Docs/period_tracker_product_plan.md` to `docs/planning/PRODUCT_PLAN.md`
|
|
unchanged in substance, with a status header added; the capitalised `Docs/` is
|
|
gone, since every script and the Command Center expect the lowercase tree. Every
|
|
scaffolded document was filled in for Period rather than left with placeholders.
|
|
docs/OPERATIONS.md was deleted — an offline app is not a deployed service.
|
|
`docs/DOC_TRUST_MAP.md` was written last and describes what is actually here,
|
|
including a section naming what this project deliberately does **not** have.
|
|
|
|
**Code.** Four Gradle modules: `app`, `core/designsystem`, and `domain/cycle`
|
|
and `domain/prediction` as `kotlin("jvm")` so the engine is testable without an
|
|
emulator. 17 tests pass, 12 of them the acceptance cases from `PRODUCT_PLAN.md`
|
|
§51. `BaselinePredictionEngine` is a robust-median prototype and is explicitly
|
|
not the product — it exists so Batch 02's replacement can be shown to be better
|
|
rather than merely different.
|
|
|
|
**Three things that cost time and are worth knowing next session:**
|
|
|
|
- **AGP 9 ships Kotlin built in.** Applying `org.jetbrains.kotlin.android` is now
|
|
a hard error, not a redundancy. The Compose compiler plugin is still separate.
|
|
- **Current AndroidX requires `compileSdk 37`.** Only up to 36 was installed;
|
|
`platforms;android-37.0` and `build-tools;37.0.0` were installed into
|
|
`~/Android/Sdk`. `targetSdk` stays at 36 — Play's floor from 2026-08-31 — and
|
|
the two being different is deliberate, not an oversight to tidy up.
|
|
- **Versions were verified, not inherited.** Kotlin 2.4.10, AGP 9.3.1, Gradle
|
|
9.7.0, Compose BOM 2026.08.00, Room 2.8.4, Hilt 2.60.1 — each checked against
|
|
its official source today, which `PRODUCT_PLAN.md` asks for rather than
|
|
trusting its own numbers.
|
|
|
|
**Tracker.** Eight milestones opened, `Batch 01 — Foundation` through
|
|
`Batch 08 — Polish`, and nine issues filed under Batch 01 only. Seven milestones
|
|
are deliberately empty: the roadmap is genuinely known and worth being visible,
|
|
but the work items under it are not, and inventing them would make every tracker
|
|
percentage permanently wrong. `forgejo-issue.py check` warns about this, and the
|
|
warning is correct about the mechanism and expected here.
|
|
|
|
- **Closed:** #1, #2
|
|
- **Next action:** Start issue #3 — core/database with Room entities for
|
|
`PeriodRecord`, `SpottingRecord`, `PredictionRecord` and `NotYetObservation`,
|
|
DAOs returning `Flow`, schema export committed, and a version-1 migration test
|
|
that proves the harness works before there is a migration that matters. Its row
|
|
goes in `docs/architecture/README.md`'s migration table in the same commit.
|
|
- **Blockers:** None for the code. Two things need a person rather than an agent:
|
|
the three branding marks (#8), which cannot be drawn here and must not be
|
|
faked, and the Command Center webhook (#9), whose URL and secret are not in any
|
|
credential file readable from this machine. Without the webhook an opened `P0`
|
|
raises no alert at all — it waits for the next reconcile.
|