mirror of
https://github.com/kuhyx/diet-guard.git
synced 2026-11-11 13:07:40 +01:00
Eighth batch of the 250-line sweep (over-cap count 28 -> 25). _state.py 366 -> 197 (+ _state_today.py, _state_sync.py) test_state.py 400 -> 221 (+ test_state_today.py, test_state_sync.py) _tk_fakes.py 368 -> 167 (+ _tk_fakes_containers.py, _tk_fakes_canvas.py) _state.py is the file conftest patches FOOD_LOG_FILE on, so the split is constrained rather than free: `FOOD_LOG_FILE` and the two functions that open it stay put, and the derived read model (_state_today) and the sync/undo helpers (_state_sync) reach the file only through _state's private _read_raw_log/_write_log. Callers were rewired to import from the new modules directly rather than via a circular re-export. That constraint is now enforced instead of merely documented. Moving a reader of FOOD_LOG_FILE into a sibling would leave conftest's patch pointing at a name nothing reads: check_patch_targets.py still exits 0 (the path resolves) and the runtime is unchanged (a file write, not a network call), so the suite would go green while writing to the real ~/.local/share/diet_guard and the next sync tick would publish it. test_state_redirect.py asserts both halves -- only _constants and _state may name the constant, and the redirect demonstrably moves a real write off the live path. Verified it fails closed by adding a FOOD_LOG_FILE reader to _state_today: it named that module exactly. _tk_fakes.py keeps _FAKE_TK/_FAKE_TTK and gains an explicit __all__, since the re-exports are load-bearing and ruff would otherwise strip them as unused. The identity canary from the previous commit covers the split: breaking one entry in the assembly (Canvas=object) fails 8 gate tests loudly rather than silently building real widgets. Verified: 706 Python tests / 100% branch coverage, check_patch_targets 0, pre-commit clean, ~/.local/share/diet_guard byte-identical. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RA9ynjqXPnexRQnR5oAuCC
74 lines
2.1 KiB
YAML
74 lines
2.1 KiB
YAML
name: diet_guard_app
|
|
description: "Companion phone app for diet_guard: log meals on the go."
|
|
publish_to: 'none'
|
|
|
|
version: 1.0.21+1
|
|
|
|
environment:
|
|
sdk: ^3.12.2
|
|
|
|
dependencies:
|
|
crdt_sync:
|
|
git:
|
|
url: https://github.com/kuhyx/utils
|
|
ref: crdt_sync_dart-v0.10.0
|
|
path: crdt_sync_dart
|
|
crypto: ^3.0.6
|
|
flutter:
|
|
sdk: flutter
|
|
flutter_local_notifications: ^22.0.1
|
|
flutter_secure_storage: ^10.3.1
|
|
|
|
# One-tap sign-in for the sync account. App-side only: crdt_sync stays pure
|
|
# Dart so it keeps working on Linux desktop and headless.
|
|
github_device_auth:
|
|
git:
|
|
url: https://github.com/kuhyx/utils
|
|
ref: github_device_auth-v0.3.0
|
|
path: github_device_auth
|
|
google_sign_in: ^7.2.0
|
|
http: ^1.6.0
|
|
idb_shim: ^2.9.6+2
|
|
path: ^1.9.1
|
|
path_provider: ^2.1.5
|
|
permission_handler: ^12.0.3
|
|
shared_preferences: ^2.5.5
|
|
|
|
# Shared "Sync settings" screen (Firebase + optional local backup), reused
|
|
# across every kuhy app that syncs. GitHub mirror stays app-local (see
|
|
# lib/screens/github_mirror_screen.dart) since connecting it here also
|
|
# triggers a real log sync, not just a settings save.
|
|
sync_settings_ui:
|
|
git:
|
|
url: https://github.com/kuhyx/utils
|
|
ref: sync_settings_ui-v0.1.0
|
|
path: sync_settings_ui
|
|
url_launcher: ^6.3.2
|
|
uuid: ^4.5.3
|
|
web: ^1.1.1
|
|
workmanager: ^0.9.0+3
|
|
|
|
dev_dependencies:
|
|
# Generates the Android launcher icons from assets/icon/ (see
|
|
# python_pkg/app_icons in testsAndMisc for the shared style).
|
|
flutter_launcher_icons: ^0.14.4
|
|
flutter_test:
|
|
sdk: flutter
|
|
url_launcher_platform_interface: ^2.3.2
|
|
very_good_analysis: ^10.2.0
|
|
|
|
flutter:
|
|
uses-material-design: true
|
|
|
|
# Launcher icon generation. Source art is produced by the shared generator:
|
|
# PYTHONPATH=~/testsAndMisc python3 -m python_pkg.app_icons generate --app <key>
|
|
# then run: dart run flutter_launcher_icons
|
|
flutter_launcher_icons:
|
|
android: true
|
|
ios: false
|
|
image_path: "assets/icon/icon.png"
|
|
adaptive_icon_background: "#211D1B"
|
|
adaptive_icon_foreground: "assets/icon/icon_foreground.png"
|
|
adaptive_icon_monochrome: "assets/icon/icon_monochrome.png"
|
|
min_sdk_android: 21
|