Around New Year the empty-rota guard keeps the old year's cached rows while resolveRange has already moved to the new year's tab, so an auto-assignment could write an old-tab row index onto the new tab. Stamp each DutyWeek with the tab it was fetched from and prefer it when building the assignment range (clock fallback for pre-upgrade caches). Also: widen the default fetch range to A1:G200 so a full year of rows plus roster can't be silently truncated, add -race/golangci-lint/ govulncheck gates to CI (container pinned to 1.26.4-alpine), and add .env.example documenting every configuration variable. |
||
|---|---|---|
| .. | ||
| workflows | ||