# Changelog 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_` 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 - Initial packaged release of ShiftPlanner as a single-file, offline-capable web application at `src/index.html`. - Canonical file selected on measured evidence from five divergent copies: `spaces/mindtech/downloads/shiftplanner-v12-ai.html` (2,789 lines, 136,212 bytes, md5 `37207b2227899603f90c42e59ff1875a`). It is the only copy that is a superset of both other v2.x builds and also carries the AI advisor panel. - Four non-canonical copies preserved unmodified in `archive/`, with flattened names: `mindtech__shiftplanner.html`, `mindtech__downloads__shiftplanner.html`, `mindtech__shiftplanner_v1.3.html`, `agando__shiftplanner_v1.3.html`. - Documentation: `README.md`, `docs/USAGE.md`, `docs/CANONICAL.md` (full measurement table, decision rationale, archive feature comparison and the verified AI endpoint/model strings). - `LICENSE` (source-available terms) and `VERSION`. ### Notes - Feature set: staff register, shift templates, month calendar with day notes, vacation/sick/day-off tracking, automatic plan generation with fairness and rest rules, conflict detection, CSV export, JSON export/import, themes, and an optional local-Ollama AI advisor. - No external dependencies: 0 `