Manual timezone is the single source of local-time truth (task 7e173881) #284
Closed
overseer
wants to merge 3 commits from
task/manual-timezone-authoritative_7e173881-fb99-426f-a2f0-2678439ffc39 into dev
pull from: task/manual-timezone-authoritative_7e173881-fb99-426f-a2f0-2678439ffc39
merge into: :dev
:dev
:main
:task/hacs-brand-icon_ac84fa96-3ff1-41d3-bf03-57eabe0c7574
:task/pwa-icon-from-logo_55e1e687-b0a8-4221-8a84-d2a35dd77b1b
:task/sse-disable-total-timeout_6c4b0fa4-8b7e-4fd0-822c-f93e87d4f2a0
:release/2026-10-06-sse-fix
:task/fix-sse-stream-async-for_4cbf2e96-4102-4358-b0a5-5c2c1bf4b770
:task/document-fa-picker_e2fc2dbc-b25c-4f68-9b11-d6d7c93ed214
:task/fa-searchable-picker_9ca0bc36-01c5-431b-a990-40deea2d8dcf
:task/fa-panel-render_3f21165f-0b68-436a-b2c5-0dba935f6972
:task/full-fa-solid-registry_7c3be300-ced7-4d32-b13e-b9803263df00
:task/document-manual-timezone_e9aa78f3-d762-48ef-ae52-a8db73791b4b
:task/manual-timezone-authoritative_7e173881-fb99-426f-a2f0-2678439ffc39
:task/admin-manual-timezone_ade35bd5-ec58-45a9-aa74-7c14631f94ec
:task/remove-automatic-timezone_7f685179-af49-4a8a-9931-edec86d91904
:task/tasks-show-overdue-before-local-due-time_fd1093b5-e6ae-47e6-aee9-1e8f5ee74e3f
:task/release-review-remediation-timezone_45243478-d697-459b-bdb1-58b48a14b789
:task/time-zone-errors_6351b36d-0eef-4e7d-bf5a-96b754cbc883
:task/return-button_987d2d0f-a5d1-4bb5-a1f3-80fd6adbf5e9
:task/timezone-configured_a0e7649c-58b0-4aa3-91b5-cf426e334a76
:task/admin-timezone_5abc26ed-64e1-4caa-b50a-11100c9be654
:task/delete-task_3efb07b4-7bfa-45af-b36a-57d81249a39d
:feature/916210e7-8736-48da-9136-424731156f8c-ui-bugs
:task/host-today-docs_d2e4f5a6-0000-0000-0000-000000000000
:task/settings-clock-docs_d1ce4976-43a2-4b49-9c1f-6ec2afe1fbea
:task/dst-scheduler_b8f6ac8b-a1c5-4951-8247-ddb799cb3df1
:task/meta-class-nothing_d72dcbc1-d4d2-450e-8059-e75805ee12d0
:task/quest-bugs-overdue-complete_fa7475ba-19ab-49d0-85b6-defaea5a2d3e
:task/ha-logo-update_4bf3c47f-bbd6-46c0-a7d8-0249c5a3af21
:feature/e0855415-bb64-4082-b5ae-c957eaa7307d-expanded-task-icons
:task/legacy-icon-edit_401cffb2-4038-403d-98c8-e5b861bf3a7f
:task/emoji-fecc-parity_8286a894-133f-4582-90fb-88f47eef6628
:task/icon-docs-attribution_a8cb5c40-f28d-4279-bc78-777b73a8ec89
:task/fix-questlog-crest-shield_b9d4c35f-41ad-491e-8000-47dbd3ebd678
:task/fix-questlog-crest-shield-v2_b9d4c35f-41ad-491e-8000-47dbd3ebd678
:task/panel-definition-icon_5e3f3a5a-f963-4519-87af-95046d40a4e3
:task/admin-icon-picker_7c29d925-3ec9-4b04-8bf1-453896f2b4f5
:task/fix-hidden-text-bottom-banner_28ceb0aa-9a07-4baa-9fc3-346588e52843
:task/shared-icon-registry_03ef0bb3-8228-4be6-bb73-ee8bb72c2f0f
:task/namespaced-icon-keys_707994b7-5601-4362-9273-5120edb010c4
:feature/4f6dfe1b-9469-4624-81dc-9f36b4d9c64e-definition-start-date
:task/definition-start-date_457530b6-3325-4bc7-b453-0c021601972d
:feature/802a8515-1841-4521-8969-617de8b5f7ef-create-materializes-instances
:task/create-materializes-instances_36761905-faf3-4c33-b29a-140dca87b09b
:feature/c1f79a07-da1e-4b29-bdb9-946bb33499ce-multiple-presence-patterns
:task/record-multi-pattern-decision_da2dd935-7786-4c75-ab39-861279dc559e
:task/multi-pattern-presence-model_e63a8e64-2f1a-4818-baf2-0d0431bcd014
:feature/24ce7ebf-40cc-432f-976d-f0814b8a375c-admin-pwa-weekstart
:task/calendar-week-starts-sunday_d5e6e19e-e564-4c0c-91e1-0bb6e8b8561e
:feature/24ce7ebf-40cc-432f-976d-f0814b8a375c-admin-pwa-settings
:task/settings-preferences-section_7b0e0002-0000-0000-0000-000000000002
:feature/24ce7ebf-40cc-432f-976d-f0814b8a375c-admin-pwa-followups
:task/manage-children-screen_7b0e0001-0000-0000-0000-000000000001
:feature/000fab07-638e-4f76-a473-afd909d37d8a-admin-pwa-hosting
:task/commit-the-pwa-hosting-artifacts-and-runbook-section_c0de0001-0000-0000-0000-000000000001
:feature/911b11a7-bdbb-4305-86f6-d666e181ed51-api-deployment-and-identity
:task/feature-review-remediation-firewall-unit-pinned-image-deps_f17a0001-0000-0000-0000-000000000001
:task/tested-restore-and-deployment-runbook_6e203451-d21c-4298-8145-13b2d86f4679
:task/continuous-backup-of-the-sqlite-file_47b27ccb-8a6f-4853-bc9a-3ff6bbcb9bf3
:task/reverse-proxy-and-tls-for-the-api_9d121e76-e1ce-479f-aef5-0e5e9756fda8
:feature/24ce7ebf-40cc-432f-976d-f0814b8a375c-admin-pwa
:task/fix-the-admin-auth-probe-path-and-refusal-state_af11a2c1-0000-0000-0000-000000000001
:task/undo-and-live-sse-updates_e57facc2-a4d9-41d9-bb38-4364b57e5eba
:task/csv-export-of-the-filtered-range_e5133d0f-b373-4fcd-b666-6c77dfa49b98
:task/history-tab-filters-rows-stats-footer_9b9188b8-c41e-4002-81dd-1f86b5c19eb9
:task/presence-override-with-live-consequence-count_4ae0c879-2bc3-4aee-a084-5e48b41c2085
:task/presence-schedule-month-grid_d96d8925-7e35-45a8-80f4-3509bd56c4d0
:task/lucide-icon-picker-shipped-subset_b50b048f-40f6-418e-b571-ef6be3796296
:task/recurrence-occurrence-preview_85b2f166-d9da-45b5-928e-3ff4d2cc6d89
:feature/fce8c1f9-3f3a-411e-8f7d-8361f2f886bb-admin-api-completion
:task/admin-transition-sse-stream_92f75680-6d28-4060-bbfc-be808d5c6361
:task/admin-override-consequence-count_7616e3eb-da8b-42cc-8fc7-bbfac2074662
:task/admin-presence-schedule-and-override-reads_07fde892-ddd0-4d8f-a03f-8775e77660e5
:task/admin-rule-occurrence-preview-route_5f843564-8399-4afc-b5f6-023dff146a8d
:task/definitions-list-and-edit-sheet_2e96585c-ca63-413d-bf99-7e203c39ddde
:feature/ec56eee6-a9a4-4c4e-a49b-91d6fb8b9312-definition-assignees
:task/editable-assignees-on-the-admin-definition-edit-route_1c8096f6-643d-441b-a61a-892e0d5b3b59
:feature/ec56eee6-a9a4-4c4e-a49b-91d6fb8b9312-admin-api-completion
:task/persisted-skip_on_away-on-quest-definitions_ded75ab8-0219-4d52-aefa-82c09e0b5e6b
:task/admin-quest-definition-list-route_d4667573-c35b-4eb2-9776-9722c0d74441
:task/today-tab_e0a2b862-8c1e-4d5b-95ad-48b460bfeaa0
:feature/63ee21d7-b495-4823-82ef-e2663d669ddc-admin-today-snapshot-api
:task/admin-snapshot-route-for-the-today-view_ef3f4877-502d-44dc-ba40-367de16fa355
:task/pwa-manifest-and-service-worker_96ab3c0b-7554-4098-8af1-2be7815f8929
:task/authentik-oidc-pkce-login-and-refusal-handling_630c3472-81a4-49bf-bf4c-9837193efa87
:task/react-scaffold-build-and-serve_0df715b5-c094-4cea-a496-ec43775e55b9
:chore/auto-promote-complete-features-20260923
:task/make-the-missed-sweep-watermark-claim-safe-across-processes_a232c4f5-3a09-4c00-bf7c-1476092be01f
:task/containerize-the-api-with-a-persistent-volume_d45cc3d2-fc99-4d8a-a9b0-7b3f55b53261
:feature/3e640c07-2132-46e2-a363-be72ee091291-zero-config-panel-dashboard
:task/auto-discovery-slug-must-match-home-assistants-real-slugify_67775be9-6b0d-4839-bbe1-bb8eaefaa5f4
:task/zero-config-runbook-and-test-updates_fc69c940-e993-4449-8dd8-b0c748dab7d0
:task/transitions-and-animations-to-the-mockups_50067c1f-c807-4d08-8c2a-ee6cb71b6498
:task/navigation-crest-tap-to-child-log-and-idle-return_107b8fbe-2557-4b21-a557-2da8daa3a722
:task/auto-register-the-dashboard-on-setup_c2d4dd8e-96f1-4f67-ab61-4ff370517dee
:task/dashboard-strategy-generating-the-views_c859af23-3156-47c7-a6fd-c4ec1848609b
:task/cards-auto-discover-children_1b6d91d2-7998-48e5-be06-2b4d726ee7b2
:feature/430f7f98-7650-43e9-aa98-4b340303602a-ha-integration-as-api-client
:task/remove-the-integrations-database-migrations-daos-and-business-modules_ad67fc44-f4ff-4538-b6db-946e6d087d57
:task/remove-the-ha-admin-services-and-permission-gate_d04f5bf3-7111-40af-aeb1-1b3199a10102
:task/last-good-snapshot-cache-and-staleness-handling_d25b875f-611b-418a-be2f-3026ef69b26e
:task/complete-quest-proxies-to-the-api_47c7c90e-cbe8-4192-a996-b639834f67b2
:task/sse-subscription-re-fires-the-four-ha-bus-events_b1ed9c45-e317-4ace-9b27-00cf1add739b
:task/coordinator-polls-the-snapshot-and-builds-the-sensors_6e70d166-8384-4be7-9374-bced90bb6598
:task/api-client-module-for-the-integration_37d5e806-8176-4360-a240-5583c50d31ba
:feature/cd03735b-2498-4b34-b84c-c1cb2b271ba7-nestquest-api-service
:task/run-the-missed-sweep-in-the-api-and-publish-quest-missed_058c7b69-d136-4ca4-854b-770fa9fc4b73
:task/admin-routes-settings-read-and-update_2b3de7e5-ea8c-4bbe-8e47-f103242d51b8
:task/admin-routes-history-query-and-csv-export_2d2dda53-55ae-439d-a1d0-7a40ff9671a9
:task/admin-routes-uncomplete-and-regenerate_da0226b3-a504-4db2-8cd8-b4fb07adbdb9
:task/admin-routes-presence-schedule-and-override_e4a9d31b-08a7-4465-b954-180b9e3c8991
:task/admin-routes-quest-definitions_b586a2f1-1532-4194-a19a-8f8386d22590
:task/admin-routes-children_e4845baa-2c2e-4b0a-abea-11afe697c555
:task/admin-auth-nestquest-admins-group-gate-and-service-token-rejection_0f2afb29-1136-4b93-b088-48d451bdbbbe
:task/admin-auth-authentik-jwt-validation_e70e6bfb-085a-4781-a3f4-276355bbbd19
:task/sse-publish-uncompleted-child-day-complete-and-missed_44c93cfd-79f8-4d47-a807-e9b8613992f1
:task/sse-endpoint-and-the-quest-completed-transition_4d7bae00-c930-4124-8d8e-36db7a96a0a7
:task/panel-plane-complete-route-idempotent_1860ef76-e936-4d4f-a150-1cf7b721f519
:task/panel-plane-service-token-auth-and-snapshot-route_ae7e90ae-84a5-49b6-9381-fb5e9e797cce
:chore/nq-foreground-orchestrator-20260922
:chore/nq-manual-cycle-20260922
:chore/nestquest-orchestrator-control-20260922
:task/extract-the-panel-snapshot-builder-into-core_9047a97b-b568-4f11-9422-5e6eb6898ec5
:task/fastapi-skeleton-health-openapi-core-wiring_042dfc5c-9082-4db9-9539-790cd21f5308
:feature/a9513378-856c-4ced-8722-c99850d3a524-domain-core-extraction
:task/no-ha-end-to-end-smoke-test_628473ad-85e5-4b6c-9072-05b3d7870bf1
:task/replace-ha-config-reads-with-a-settings-object_4dd8f870-9175-44f8-9db6-6b048546d0de
:task/extract-engines-and-business-layer-into-core_510c1f78-2bfd-46be-adb7-50d1bb0de326
:task/extract-storage-layer-into-core_d0b691d8-b061-4cd7-ba26-5e170c8e13cb
:fix/sensor-device-class-percentage
:feature/4bf51bbd-33d9-45c7-8815-b05a1ef052b3-kid-panel-lovelace-card
:task/touchhub-setup-runbook_afdf9f27-c885-4f58-8b7b-9ae43aadc2c3
:task/panel-card-tests-no-admin-controls_33306152-e5de-4dff-ab58-b979f6abc29f
:task/fit-and-verify-panel-layout-1920x1080_dceefeca-398c-41c7-a138-7ced3762257e
:task/live-sensor-event-subscription_1caa1b1d-b0f2-491f-b444-78888a218c39
:task/quest-complete-screen-1c_da99072a-de5d-439d-9e05-d3b65ee6c169
:task/complete-confirm-1j-complete-quest-optimistic-seal_e592022e-a832-4aa8-a200-7e313b7aaf7c
:task/define-and-implement-panel-empty-and-error-states_579110fe-6e95-403a-a4ad-d587230d62f9
:task/quest-log-card-1b-read-only_974f819c-3dd5-48f1-b625-b1b4d9b866a0
:task/party-board-card-1a-read-only_e9ce5357-b93b-4110-9610-545e695667f5
:task/frontend-groundwork-www-fonts-tokens-card-registration_77289ff3-d143-4d7d-9f9a-a845b02c1a65
:task/lit-build-toolchain-and-auto-registered-lovelace-resource_906b5ede-fafc-4c40-aace-8a19b67f984d
:feature/8c98e112-d997-424a-9de9-49cc282525f8-progress-automations-notifications
:task/document-the-automation-package-and-test-blueprint-validity_169cd7c7-1d47-4e3e-a970-80c805f0068f
:task/day-complete-celebration-blueprint_dfe4edc2-4174-4946-8b88-6f8133180986
:task/end-of-day-parent-report-blueprint_063108d2-42e1-4793-8e16-e6914e66b5a3
:task/afternoon-open-quests-reminder-blueprint_bceedae1-22bb-4985-85c9-9cec8752ded8
:task/morning-summary-blueprint_471f061d-ff53-44e6-aea1-1dfc39e2715b
:task/add-notification-configuration-to-the-options-flow_0851eee6-b230-4c80-8d55-db752024c840
:task/nightly-missed-quest-sweep-job_93129a74-cbcd-47d8-aae4-1a2341275dcc
:feature/5841198a-cca2-4268-88e5-96a551a03609-entity-event-surface
:task/tests-for-entities-and-bus-events_7aa407de-dc97-44e2-a9a1-c01a1324b495
:task/handle-entity-lifecycle-for-added-deactivated-and-reactivated-children_1a3a783f-93cb-4c53-bc11-6b5f95e5c4f5
:task/push-immediate-entity-updates-on-completion_aa5d615a-1beb-42c7-a1a6-0f165cd9b54b
:task/fire-the-bus-events-with-documented-payloads_9b4f89fd-7f9a-4888-8606-c1c2eab24fd7
:task/household-rollup-and-cycle-day-sensors_0f85dc10-365a-4407-8643-4c465743d4ec
:task/per-child-all-done-and-present-today-binary-sensors_57f21f59-bc3a-4e74-baea-9f54e3cf3601
:task/per-child-next-quest-due-sensor-with-attributes_62ee3730-3855-4492-9943-6ef5bc9192a0
:task/per-child-daily-count-and-percentage-sensors_e8a70a61-c28f-4064-96d4-f599a4adbf96
:task/build-the-shared-dataupdatecoordinator_be0010e2-a504-4b40-87ee-053d70d947b8
:feature/e2ac03c0-f830-42bd-ab05-fc727ae8352c-permission-enforcement
:task/permission-test-matrix-across-every-registered-service_dbe9259d-2243-4b47-8d72-5cc38e7e81e2
:task/log-denied-and-successful-admin-only-calls_8b870368-264a-4bc3-9c28-a4c161bed210
:task/fail-closed-when-no-user-context_8a3deedc-9350-43be-bd98-bc3cd39fba31
:task/implement-permission-decorator_d17696e6-763b-41e7-a8d4-c621a52a7f7b
:task/define-admin-only-versus-open-operation-registry_e3da52cb-3f4f-47e6-b17c-f77d2078dcf1
:task/register-canonical-nestquest-ha-services_e032ebb8-84f7-4439-97d9-4294367a50c8
:feature/a526b715-1fd2-4688-9696-a7eeb45f1644-quest-completion-event-log
:task/completion-lifecycle-tests_9cad8f81
:task/derive-missed-state_12eee79f
:task/was-on-time-at-completion_92748f9b
:task/uncomplete-instance_62ba2319
:task/complete-instance_1775b4aa
:task/instance-state-from-latest-event_32b50fbe
:task/completion-business-layer_8c814a3d
:feature/4a35e972-4c72-405d-8331-ce0776176784-quest-instance-materialization
:task/guard-stale-due-time_f1ce072c
:task/thread-horizon-days_2d3c0792
:task/end-to-end-generation_a3e67b25
:task/no-past-instances_ba5fd5f0
:task/ha-local-timezone_0d4d37de
:task/startup-backfill-service_95cbead8
:task/schedule-daily-run_3614e2ab
:task/regenerate-for-child_f8d5c346
:task/regenerate-for-definition_a0b8b5f7
:task/skip-completed-instances_de5e8223
:task/materialize-idempotency_d6a47fcb
:task/core-materialize-walk_fde0d4f5
:feature/b61a578c-2139-486e-af46-77303a185386-quest-definitions-assignment
:task/f06-integration-fixes_8c5cb85e
:task/quest-definition-tests_b55cdd5f
:task/quest-definition-query-helpers_d1492847
:task/deactivate-reactivate-definition_8668303a
:task/assign-unassign-children_696b9b35
:task/edit-quest-definition_b2175f99
:task/create-quest-definition_707f724c
:task/map-schedule-rule-storage_6d2a7581
:feature/167e3565-704d-41c7-adf6-3b88ed266f78-presence-custody-schedules
:task/5841f120-parity-regression
:task/7f0190c4-present-preview
:task/6a1e14aa-override-precedence
:task/46a867a4-override-overlap
:task/5059d16c-is-present
:task/06cc4782-cycle-arithmetic
:task/ede1dc76-presence-model
:feature/4f802471-1de1-4c35-844f-eebf3bea0de5-children-registry-admin-allowlist
:task/3f2eb268-is-admin-resolver
:task/288a953c-admin-allowlist
:task/31e80e1a-child-reorder
:task/35e97242-child-deactivate
:task/90a3a7a3-child-profiles
:feature/c16267ae-75be-4a4e-b14f-e41c06c8ab11-design-model-changes
:task/d77a9756-actor-child-id
:task/26762cd6-quest-instance-key
:task/c2a8597a-quest-windows
:task/5cc267f6-quest-assignees
:task/dfd0b9a9-quest-rename
:task/final-sync
:task/release-sync-04
:task/merge-f04-dev
:feature/ff8e0866-061f-411f-9de7-1728754ca01d-recurrence-rule-engine
:task/59087981-consolidated-calendar
:task/47b1bc60-occurrences-property
:task/776a046f-window-bounds
:task/2eb952f9-yearly-recurrence
:task/372882e7-monthly-weekday-recurrence
:task/01445d72-monthly-day-recurrence
:task/dd5c8c60-weekly-custom-recurrence
:task/6b5e012d-daily-recurrence
:task/66c097de-rule-model
:feature/8940567d-7b50-41ef-a510-8b234fe7290e-sqlite-data-layer
:task/2e147f1b-dao-test-suite
:task/d5bca74b-corrupt-db-startup
:task/a9ea75fc-dao-instances-events
:task/e5c9c4ad-dao-presence
:task/8c72300c-dao-rules-definitions
:task/4ce39f1a-dao-children-admins
:task/06782a75-migration-runner
:task/b8c54d04-schema-instances-events
:task/efcf1ae7-schema-presence
:task/2a317bcb-schema-rules-definitions
:task/98af7b2d-schema-children-admins
:task/745afd2a-async-sqlite-wrapper
:release-fix/rls-docs-sweep
:feature/58fafd51-67e5-4691-8b37-cf0bb545207c-integration-scaffold
:task/231563a9-de43-4c67-8ca5-b2659760d9b2-pytest-harness
:task/056f8ba7-71ce-415e-a1cc-a93a9ec4b37e-options-flow
:task/50c24cf4-de4c-4455-9e1b-217eccf6fef9-sqlite-path-helper
:task/899d914f-b700-4e35-93e2-b8a33190246a-setup-lifecycle
:task/b1a42fd5-1911-4ee5-97ba-d4ab9da9d918-hacs-metadata-and-docs
:task/d34d0887-57bf-49be-bf6a-26b0bc1f85d3-ui-config-flow
:task/335bb71c-82a8-49d7-aa28-b2fde84f14fb-define-shared-constants
:task/218b8bb8-963b-41d9-be60-77bfec8c5f04-package-structure-and-manifest
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
e48a0583c5 |
Publish the API's effective timezone and tolerate an older snapshot payload
TZ-002: with no zone stored the API reads its clock in the host's local time, but the panel fell back to Home Assistant's zone and the admin app to the browser's, so dates could disagree near midnight. The API now names the zone it actually uses (api/host_zone.py: the stored zone, else the host's own IANA zone from TZ, /etc/localtime or /etc/timezone) and publishes it as the panel snapshot's `timezone` and the admin settings' read-only `effective_timezone`. Both cards and the admin app format in that one zone; Home Assistant's or the browser's zone applies only when none is published. TZ-003: snapshot_from_api_payload reads `timezone` with a "" default, so an integration upgraded ahead of its API keeps refreshing against the pre-change payload. Task 7e173881-fb99-426f-a2f0-2678439ffc39 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
bb748c3647 |
Format the panel and admin date and clock in the stored application timezone
The panel snapshot now carries the admin-saved `timezone` ("" when unset);
the coordinator threads it onto the household due-today sensor, and the
Party Board and Quest Log cards format their kicker, header and dock
date and clock in it, falling back to Home Assistant's zone only when
none is stored. The admin app loads the stored zone once
(AppTimezoneProvider) and uses it for completion clocks, History day
grouping, clocks and lateness, and "today" in Schedule, History and new
task defaults; Settings publishes a saved zone app-wide at once.
Resolves review finding TZ-001 (task 7e173881).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
||
|
|
b3542b0551 |
Make the stored application timezone authoritative everywhere
The kids' Quest Log again renders each instance's overdue state from the API snapshot's `overdue` flag, which the API computes in the stored application timezone. The browser-local overdue check from task fd1093b5 (`_isOverdue` against `_now`) is removed; `_now` only drives the header clock and date. The admin settings route (PATCH /api/v1/admin/settings), the only settings writer, now holds the missed-sweep scheduler's settings_lock across the write and calls settings_changed, so saving `timezone` or `day_rollover_time` re-plans a sleeping scheduler (review finding TZ-001). An app without a scheduler just writes. Tests: the card shows the snapshot's overdue state whatever the browser's zone or clock says; an admin PATCH of the zone or the rollover re-plans a sleeping scheduler; one saved zone (Asia/Kolkata) is read identically by the panel snapshot, the admin snapshot and the scheduler delay. Task: 7e173881-fb99-426f-a2f0-2678439ffc39 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |