Skip to content

Commit 28b8bc4

Browse files
committed
2 parents 9d688fc + b54efff commit 28b8bc4

3 files changed

Lines changed: 32 additions & 24 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,4 +602,4 @@ GUI changes are verified manually before release. Full CI/CD with automated buil
602602
603603
---
604604

605-
*Built with Claude · [☕ buy me a coffee](https://ko-fi.com/wewoc)*
605+
*Built with Claude · [☕ buy me a coffee](https://ko-fi.com/wewoc)*

docs/ROADMAP.md

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,44 @@
66
77
---
88

9-
**Currently stable — v1.5.5.2**
9+
**Currently stable — v1.5.5.1**
1010

1111
---
1212

1313
## Planned
1414

1515
---
1616

17+
### v1.5.5.2 — Quality Log Transaction API
18+
19+
Architectural hardening of `garmin_quality.py`. Eliminates the existing
20+
sole-write-authority violation in which `garmin_collector.py` calls private
21+
internal methods directly and manages raw state dictionaries outside the
22+
State Owner.
23+
24+
**What changes:**
25+
- `garmin/garmin_quality.py` — new public method `record_attempt(day, status,
26+
error_msg, source)`. Encapsulates load → upsert → save as a single atomic
27+
operation under the existing `QUALITY_LOCK`. Internal helpers `_upsert_quality()`
28+
and `_save_quality_log()` remain private — no external caller permitted.
29+
- `garmin/garmin_collector.py` — all direct calls to `quality._upsert_quality()`
30+
and `quality._save_quality_log()` replaced by `quality.record_attempt()`.
31+
Collector no longer holds or mutates raw quality dictionaries.
32+
33+
**What does not change:**
34+
- `QUALITY_LOCK` — existing lock, no changes to scope or ownership
35+
- `quality_log.json` schema — no structural changes
36+
- All other callers of `garmin_quality.py` — public read API unchanged
37+
38+
**Why before v1.5.6:**
39+
`garmin_import_mirror.py` writes through existing owners by design. If the
40+
Collector still bypasses the State Owner at import time, the invariant is
41+
broken from the first line of the new module.
42+
43+
*Pre-condition: v1.5.5.1 stable.*
44+
45+
---
46+
1747
### v1.5.5.3 — Unified Date Parser in Quality Module
1848

1949
Removes redundant date-extraction logic scattered across three functions in
@@ -229,28 +259,6 @@ Third tab in the existing `QTabWidget` structure (Tab 1 "Actions", Tab 2 "Dashbo
229259

230260
---
231261

232-
### v1.5.8 — Standalone EXE: --onedir Migration
233-
234-
Replaces `--onefile` with `--onedir` in `build_standalone.py` for T3.
235-
Eliminates the per-launch extraction to `%TEMP%\_MEIxxxxxx` — all files
236-
sit permanently unpacked next to the EXE. Startup time for T3 drops
237-
significantly as a result.
238-
239-
**What changes:**
240-
- `compiler/build_standalone.py``--onefile``--onedir`
241-
- `build_combined_zip()` — ZIP logic updated to pack the output folder
242-
instead of a single EXE file
243-
- `tests/test_build_output.py` — T3 checks updated for folder structure
244-
245-
**What does not change:**
246-
- T2 (`build.py`) — stays `--onefile`, unaffected
247-
- Total installed size — identical, only distribution format changes
248-
- User workflow — ZIP download unchanged, EXE name unchanged
249-
250-
*Pre-condition: v1.5.5.7 stable — or skipped if no v1.5.5.7 planned.*
251-
252-
---
253-
254262
## Planned — v1.6
255263

256264
### v1.6 — Dashboard Render Registry

screenshots/data_flow_1-5-x.png

31.1 KB
Loading

0 commit comments

Comments
 (0)