feat: Background Jobs M1 β Foundation (org timezone + DB schema + cron wrappers)#151
Open
clemenshelm wants to merge 29 commits into
Open
feat: Background Jobs M1 β Foundation (org timezone + DB schema + cron wrappers)#151clemenshelm wants to merge 29 commits into
clemenshelm wants to merge 29 commits into
Conversation
added 24 commits
April 15, 2026 07:51
Adds browserTimezone param to createAdmin, calls setOrgTimezone (fallback UTC). Setup form sends Intl.DateTimeFormat().resolvedOptions().timeZone in POST body.
Adds a TimezoneSettings component with an IANA timezone select (Intl.supportedValuesOf) and Save button, wired into a new "Organization" admin tab in Settings. POSTs to /api/settings with key org.timezone, shows success toast on save and inline error on failure.
Generates migration 0028_parallel_rocket_racer.sql with CREATE TABLE for briefings, briefing_runs, notifications, and notification_recipients, including all foreign keys and indexes. Also fixes a drizzle snapshot chain collision (0025/0026 had identical content pointing to a non-existent prevId) caused by merging the audit and Odoo branches β rebuilt both snapshots with correct table sets and proper UUID chain.
This was referenced Apr 29, 2026
added 4 commits
April 29, 2026 20:41
# Conflicts: # packages/web/drizzle/meta/0028_snapshot.json # packages/web/drizzle/meta/_journal.json # packages/web/src/components/settings-page-content.tsx # packages/web/src/lib/audit.ts
# Conflicts: # packages/web/src/__tests__/app/setup-page.test.tsx # packages/web/src/app/api/settings/route.ts # packages/web/src/app/api/setup/route.ts # packages/web/src/lib/audit.ts
The drift guard caught these as missing from APPLICATION_TABLES after merging main β main added the guard, this branch added the tables.
3 tasks
Add a Reference page describing the org-wide IANA timezone setting introduced by Background Jobs M1 (#138 / #151): where it lives, default behavior, format, validation, and audit shape. Linked from the Reference sidebar so the field is discoverable before later milestones add user- facing automations on top of it. Closes #194
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.
Closes #138 (partial β M1 of 6 milestones)
Closes #194 (org timezone docs, folded in from #386)
Summary
briefings,briefing_runs(slim β telemetry stays in OpenClaw),notifications,notification_recipients. Drizzle migration included.briefing.created / updated / deletedadded toAuditEventType.cron.list / add / update / remove / run / runs / status. Used by M2 (sync layer) and beyond.What's NOT here yet (M2βM6)
No Automations tab, no Activity feed, no scheduled briefings running. All background jobs infrastructure is invisible to users β the only user-visible change is the Org Timezone field in Settings.
Test Plan
docker compose -f docker-compose.yml -f docker-compose.dev.yml up --buildsettings.updatedwithchanges.timezone.from / toSELECT * FROM settings WHERE key = 'org.timezone';in DB β timezone from browser capturedbriefings,briefing_runs,notifications,notification_recipientspnpm --filter web testβ 2697 passed