diff options
Diffstat (limited to 'CHANGELOG.md')
| -rw-r--r-- | CHANGELOG.md | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 3babe97..425418c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,31 @@ All notable changes to this product tree are recorded here. This file describes the packaged product, not the history of the five source copies (that history is documented in `docs/CANONICAL.md`). +## 1.0.1 — 2026-11-09 + +Seven defects found by driving the app in Chromium, plus three data-integrity guards. + +- **Settings never opened**: `openSettings()` called `openModal('settingsModal')`, whose hook called + `openSettings()` again — `RangeError: Maximum call stack size exceeded` on every click. The cycle is + broken at the source; the hook is the single caller. +- **"+ Worker" overwrote the last person you edited.** `openWorkerModal()` never cleared `#workerId`, + and the header button opened the modal directly, bypassing the reset. Adding a worker now starts blank. +- **Dates were off by one west of UTC**: `getPrevDay()` built a local-noon `Date` and formatted it with + `toISOString()`. Day arithmetic is done on the date string in local time; verified in Pacific/Auckland, + America/Los_Angeles and UTC, including a month boundary. +- **Overlaps were never detected.** The check only looked at the previous calendar day, so 22:00–06:00 + followed by 02:00–10:00 the same day passed. Shifts are compared as absolute intervals now, including + overnight spill into the next day. +- **The generator sliders did not persist**: conflict detection kept using 5/11 while the wizard showed + the new values. Both are written to `settings` on change and before generating. +- **CSV export could execute formulas.** Cells are quoted with doubled inner quotes, and a leading `'` + is added to any value starting with `= + - @`, tab or CR. +- **The header never wrapped**: at 390 px the document became 1139 px wide. It wraps now; 390 px stays 390 px. +- Data integrity: an unparseable saved plan is copied to `shiftplanner_v2_recovery_<timestamp>` instead of + being silently overwritten, wrong-typed fields are normalised instead of blanking the page, unknown + top-level fields survive a save, `saveToStorage()` is guarded, and a `storage` listener reacts to + another tab. + ## [1.0.0] - 2026-11-09 ### Added |