M12f: S-16 lost version read-only, S-22 versions from /health, settle start without a partner (D-109 to D-111)

- Rejection.lost: RejectedVersion (the pushed entity from sync_rejections.rejected_payload as a ledger row, account,
  payer, split, notes, deleted); S-16 "Öppna" shows it read-only in a dialog with "Visa nuvarande version" (S-8/S-10);
  without one it opens the current version as before. Ledger rows take a null onClick (read-only).
- AboutState.schemaVersion; AboutRepositoryImpl calls E-1 /health once per collection when online; header fallback.
  S-22 shows "1.1.0 (schema 3)".
- SettlementRepository.start/recompute return null without a session or partner; save is Invalid(payer); no
  checkNotNull/requireNotNull in :data.
- :feature:home screenshot harness: one more frame and an idle looper before each capture; the committed sv_dark,
  200 % and dialog goldens were one variant stale (light instead of dark, en instead of sv_200).
- Tests: lost version (stale, refused deletion, unreadable payload), /health online and offline, settle without a
  partner, category reorder PATCHes, recurring toWire splits, §9.2 effect cases.

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 22:32:24 +02:00
parent 7fb86f5524
commit dc7a296d70
90 changed files with 550 additions and 70 deletions
@@ -40,6 +40,10 @@
<string name="home_sync_status_dismiss">Remove from list</string>
<!-- opens the rejected change read-only -->
<string name="home_sync_status_open">Open</string>
<string name="home_sync_lost_title">Your version</string>
<string name="home_sync_lost_body">This is how it looked on your phone. It was not saved and cannot be changed here.</string>
<string name="home_sync_lost_deleted">You deleted this</string>
<string name="home_sync_lost_show_current">Show current version</string>
<!-- §14.4.6 -->
<string name="home_sync_reject_stale">Your change was replaced by a newer change from %1$s</string>
<!-- sv genitive as onboarding_profile_joining -->