Repository navigation
Backups: one "Turn on backups" path with health alarms; short breaks are always paid - #652
Merged
Merged
Conversation
…; short breaks are always paid Backups (production's encrypted backups were refused for 10+ days with no key and nobody was told): - BackupHealth: one answer (off / starting / working / needs attention) from the active key and the layer reports the scripts already write. After a key is turned on each layer gets one interval of its schedule before an older "refused: no key" report counts as a failure. - Settings → Backups: status first (last good backup, weekly check, key), then a two-step "Turn on backups" path: the kit downloads, the page moves to the check code by itself, and after the code it refreshes when the first backup lands. Plain words on what the kit is and what losing it means. Encryption, the one-time kit, the check code and the reauth rule are unchanged. - While backups are off or failing, super admins see a red alert on the bell, a dashboard banner and a red status bar entry (which used to show the unused Drive backup); BackupHealthAlertJob leaves one notification a day. Time & pay: a punched break of 20 minutes or less is paid time even as a "meal" or where the store marks the kind unpaid (FLSA, 29 CFR 785.18-785.19). One predicate (ClockBreak#unpaid?) feeds the clock, Pay page, timesheet import and so the payroll export. No automatic break deductions exist. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
techmore
added a commit
that referenced
this pull request
Nov 11, 2026
* Backups: deploy receipt for #652 Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * Deploy receipt: name the pre-existing warnings Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Production's scheduled encrypted backups have been refused since late October ("no active backup key") and nothing told the owner. Separately, a punched "meal" of a few minutes came off paid hours, which federal law does not allow.
Backups
BackupHealth: one plain answer (off / starting / working / needs attention) built from the active backup key and the per-layer reports the backup scripts already write. Nothing new is stored and no second backup system is added. After a key is turned on, each layer gets one interval of its own schedule to make its first encrypted backup before an older "refused: no key" report counts as a failure.BackupHealthAlertJob(hourly) leaves one notification a day until it is fixed.Time & pay
A punched break of 20 minutes or less is paid time even when punched as a meal or where the store marks that kind unpaid (FLSA, 29 CFR 785.18-785.19). One predicate,
ClockBreak#unpaid?, feedsClockShift#unpaid_break_secondsandpaid_hours_between, so the clock, the Pay page, the timesheet import and the payroll export agree. A break is judged by its whole length when a day boundary clips it. Checked that nothing deducts a break automatically: only punched breaks come off (scheduled-shift break minutes are a planning figure, and Square timecards keep Square's own paid flag). Approved sheets are not rewritten.Tests
bin/rails test(4,059 runs, 0 failures) andbin/rubocopclean locally. New:backup_health_test.rb,backup_health_alerts_test.rb, three break tests infoundation_test.rb, and a timesheet import → pay run test.No migration.
🤖 Generated with Claude Code