Android overhaul: stale comments and the module README

* Milestone and ownership notes that no longer hold ("owned by M5/M6/M8", "M8 replaces it", "(M8b)", "M7x add",
  "proposed decision in the M5 report", which is D-027 and D-028) in build scripts, :core:design, :core:fakes, :data,
  :app, :core:model and the settings string files.
* SyncEngine: the clock_skew KDoc sat orphaned above restampAfterClockSkew's; it now documents renewMutationId.
* libs.versions.toml header: no milestone, the drift date.
* README: the module table as built (no owners, no DebugFakesModule, which M8 removed), the test fixtures in the
  architecture check and the shared screenshot harness.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
2026-10-18 23:09:43 +02:00
parent 0714242954
commit a92c236689
24 changed files with 46 additions and 41 deletions
@@ -569,7 +569,7 @@ fun TopBarSheet() {
KvittTopAppBar(w("Ny utgift", "New expense"), navigation = TopBarNavigation.Close, actions = {
KvittButton(w("Spara", "Save"), {}, icon = KvittIcon.Check)
})
// Edge to edge (M8b): a 24 dp status-bar inset as on a phone; the fill runs behind it, the content sits below it.
// Edge to edge: a 24 dp status-bar inset as on a phone; the fill runs behind it, the content sits below it.
KvittTopAppBar(w("Statistik", "Analytics"), scrolled = true, windowInsets = WindowInsets(top = StatusBarSample))
}
@@ -360,7 +360,7 @@ private const val INVITE_MAX_LINES = 3
/**
* Groups the raw invite code for display (S-1): "7K3MQX9D2HPA" shows as "7K3M-QX9D-2HPA". The field's value stays the raw
* normalised code, so the platform keeps the cursor where the user typed and never lands it before a hyphen that
* appeared after the fourth or eighth character (M8b). A hyphen is shown only between groups, followed by a zero-width
* appeared after the fourth or eighth character. A hyphen is shown only between groups, followed by a zero-width
* space so a line may break after any group: the line breaker does not break between a hyphen and a digit
* ("QX9D-2HPA"), which cut the value at 200 % font scale. A cursor at a group boundary sits after the separator.
*/
@@ -228,7 +228,7 @@ object KvittDimens {
const val DISABLED_CONTAINER_ALPHA = 0.12f
const val DELETED_ALPHA = 0.62f
// Screen measures of design-spec §4 that the feature modules use (moved here from the features, M6b).
// Screen measures of design-spec §4 that the feature modules use (no feature writes a size of its own).
/** App mark (Sunny, `primary`, `receipt_long`): S-1 brand block 88 with icon 44; S-22 About 96 with icon 48. */
val appMark = 88.dp
val appMarkIcon = 44.dp
@@ -6,7 +6,7 @@ import org.junit.Assert.assertTrue
import org.junit.Test
/**
* The invite code field's grouping (S-1, M8b): the value is the raw normalised code and the hyphens are display only, so
* The invite code field's grouping (S-1): the value is the raw normalised code and the hyphens are display only, so
* typing one character at a time keeps the cursor after the last character, and deleting across a hyphen removes the
* character before it. Each step mirrors the field: the edit lands at the original cursor, the field normalises the
* text, and the cursor is shown through the offset mapping.
@@ -28,7 +28,7 @@ import se.hagstedt.kvitt.design.KvittTheme
import java.util.Locale
/**
* A snackbar shown with [showKvittSnackbar] follows a language change while it is on screen (M6b item 5), and
* A snackbar shown with [showKvittSnackbar] follows a language change while it is on screen, and
* [styledStringResource] keeps the `<b>` parts of a resource.
*/
@RunWith(RobolectricTestRunner::class)
@@ -7,7 +7,7 @@ import se.hagstedt.kvitt.model.Account
import se.hagstedt.kvitt.model.AccountId
/**
* Scenarios of the account screens (S-5, S-6; M7b) on the household of [HomeScenarios]. Open S-5 with the account ids
* Scenarios of the account screens (S-5, S-6) on the household of [HomeScenarios]. Open S-5 with the account ids
* named here; S-6 creates or edits against the same household.
*/
object AccountScenarios {
@@ -19,7 +19,7 @@ import se.hagstedt.kvitt.model.Share
import se.hagstedt.kvitt.model.SplitMode
/**
* Scenarios of S-11 (analytics) and S-12 (drill-down), M7e. All share FakeScenarios.empty's household and clock
* Scenarios of S-11 (analytics) and S-12 (drill-down). All share FakeScenarios.empty's household and clock
* (today 2026-10-17); the expense data is plain and deterministic so every screenshot is reproducible.
*
* - [loaded]: May to October 2026, eleven default categories, four accounts (one archived), settlements none.
@@ -23,7 +23,7 @@ import se.hagstedt.kvitt.model.UpdateState
import se.hagstedt.kvitt.model.UserId
/**
* The household of the design spec's frames (S-4, S-5, S-16, S-17; M7b): Jacob (the viewer) and Anna, the accounts
* The household of the design spec's frames (S-4, S-5, S-16, S-17): Jacob (the viewer) and Anna, the accounts
* Vardag, Huset, Japan 2027 and Gotland 2026 (archived). The phone's clock is 17 October 2026 14:02 in Stockholm, the
* last sync three minutes earlier. Balances come from the expenses through `:domain`: Vardag +1 184,50 kr, Huset
* −3 084,50 kr, Japan 2027 −1 350,00 kr, Gotland 2026 0, globally "Du är skyldig Anna 3 250,00 kr".
@@ -45,7 +45,7 @@ class OnlineScript {
/**
* The fakes of [FakeRepositories] with the online calls of the settings screens routed through one [script]: the
* error, loading and in-progress states of S-14, S-15, S-19, S-20, S-21 and S-22 (M7f). Reads pass straight through.
* error, loading and in-progress states of S-14, S-15, S-19, S-20, S-21 and S-22. Reads pass straight through.
*/
class ScriptedSettingsRepositories(scenario: FakeScenario) {
val fakes = FakeRepositories(scenario)
@@ -29,7 +29,7 @@ import se.hagstedt.kvitt.model.User
import se.hagstedt.kvitt.model.UserId
/**
* Scenarios of `:feature:settings` (M7f; S-13 to S-15, S-19 to S-22), as in the design spec's frames: Jacob (admin) and
* Scenarios of `:feature:settings` (S-13 to S-15, S-19 to S-22), as in the design spec's frames: Jacob (admin) and
* Anna, the accounts Vardag, Huset and Japan 2027, the 14 defaults plus the archived custom "Pant", four recurring
* templates, both phones and one pending device invite. The phone's clock is 17 October 2026 14:02 Stockholm.
*/
@@ -2,7 +2,7 @@ package se.hagstedt.kvitt.model.analytics
import kotlinx.datetime.LocalDate
// Analytics input and output types (SPEC §14.5.4), package per the orchestrator's M2b decision.
// Analytics input and output types (SPEC §14.5.4), package se.hagstedt.kvitt.model.analytics (D-017).
data class AnalyticsExpense(val date: LocalDate, val accountId: String, val categoryId: String, val amountOre: Long, val shares: Map<String, Long>)