Workflow-driven skill that builds a timezone + DST + leap-related test matrix from a code-base's time-touchpoint inventory. Walks through: inventorying time-related code (grep for datetime / Date / Instant / time.time / current_user_tz), categorizing each touchpoint (storage, business-logic, display, cron, billing), picking the relevant test categories (DST spring/fall, ambiguous local time, leap day Feb 29, leap second, ISO/RFC 3339 round-trip, zone-database update tolerance), and emitting per-touchpoint test stubs using the language-native fake-clock skill. Composes dst-transition-reference + leap-second-reference + iso-8601-vs-rfc-3339-reference.
timezone-test-matrix-builder
Overview
Time-related bugs are scattered across the codebase - storage, display, business logic, scheduled jobs. The test matrix needs to systematically exercise the canonical edge cases at each touchpoint.
When to use
Introducing time-test coverage to a new codebase.
After a time-related incident (DST bug, leap-day failure).
# tests/time/test_billing_service.pyimport pytestfrom freezegun import freeze_timefrom billing import BillingService@freeze_time("2024-02-29T00:00:00Z")def test_billing_handles_leap_day(): charge = BillingService.create_charge_for_month(2024, 2) assert charge.days_in_period == 29@freeze_time("2025-02-28T00:00:00Z")def test_billing_handles_non_leap_february(): charge = BillingService.create_charge_for_month(2025, 2) assert charge.days_in_period == 28@freeze_time("2026-11-01T05:30:00Z") # Just past fall-back in NYdef test_billing_period_spans_dst_fall_back(): # Period from Nov 1 00:00 to Nov 2 00:00 in New_York # is 25 hours of UTC due to fall-back period = BillingService.month_period(year=2026, month=11, zone="America/New_York") assert period.duration.total_seconds() == 30 * 24 * 3600 + 3600 # 1 extra hour
Step 6 - Coverage doc
# Time Test Matrix Coverage## Touchpoints covered| Service | Category | Tests | File ||---|---|---|---|| BillingService | billing | leap-day, dst-fall-back, month-end | tests/time/test_billing.py || ScheduledTask | cron | dst-spring-forward, leap-day | tests/time/test_cron.py || API serialiser | storage | rfc-3339-round-trip | tests/time/test_api_format.py |## Coverage gaps- BillingService - leap-second tolerance: deferred (low likelihood)- Display layer: per-user-TZ rendering - manual QA only## How to add a new touchpoint1. Run inventory grep (Step 1).2. Categorise (Step 2).3. Update matrix.yaml.4. Generate test from template (per Step 5).