|
6 | 6 |
|
7 | 7 | --- |
8 | 8 |
|
9 | | -**Currently stable — v1.5.5.2** |
| 9 | +**Currently stable — v1.5.5.1** |
10 | 10 |
|
11 | 11 | --- |
12 | 12 |
|
13 | 13 | ## Planned |
14 | 14 |
|
15 | 15 | --- |
16 | 16 |
|
| 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 | + |
17 | 47 | ### v1.5.5.3 — Unified Date Parser in Quality Module |
18 | 48 |
|
19 | 49 | 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 |
229 | 259 |
|
230 | 260 | --- |
231 | 261 |
|
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 | | - |
254 | 262 | ## Planned — v1.6 |
255 | 263 |
|
256 | 264 | ### v1.6 — Dashboard Render Registry |
|
0 commit comments