You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
e2e/canonical-capability-behavior.spec.js:311 Home preserves real ready data and honest partial failure recovery
e2e/canonical-route-parity.spec.js:511 contains task and workflow dialog focus and restores recreated route targets
Both exhausted all 3 attempts with fresh fixture IDs, so neither is a flake.
Root cause
The specs date their fixtures in Berlin (berlinToday() at backend/e2e/canonical-route-parity.spec.js:12, and an Intl Berlin format at canonical-capability-behavior.spec.js:331), but the app resolves "today" in the browser timezone:
backend/playwright.config.js sets no timezoneId, so the browser inherits UTC on the runner. The run started 23:17 UTC = 01:17 Berlin the next day, so fixtures were dated 2026-08-15 while the app queried 2026-08-14.
Evidence (proved, not inferred)
Within the same UTC window:
At fdf359b: TZ=UTC fails both with identical errors; machine default (Berlin) passes both.
Probable product defect: this portal is explicitly Berlin-scoped — backend/src/routes/calendar.ts enforces timeZone must be Europe/Berlin — but todayIsoDate() uses browser-local time. An operator working from another timezone would see the wrong "today" queue.
Pinning timezoneId: Europe/Berlin in the Playwright config would make CI deterministic but would MASK the product behavior. Grooming must decide whether the app should resolve "today" in Berlin, and treat the CI fix as a consequence of that decision rather than the fix itself.
Side effect
Capability evidence exits 1 on a failed suite, so it printed no stable-state count. The 4 uncovered states are all home.*, owned by the failing canonical-capability-behavior.spec.js:311 journey. process-docs.unavailable is NOT among them, so #192 emitted its evidence correctly; the 138 to 139 increment simply cannot print until the suite is green.
Do not resolve this by re-running the workflow after 00:00 UTC. The same commit goes green purely because the boundary passed, which records a misleading green.
Raw On-Call finding from main SHA
fdf359b8a8e81f0984de6040defd971f8ef7326f(orchestrator intake).Validate Backend Browser E2Erun https://github.com/DataTalksClub/dataops/actions/runs/31849854631 finished red: 2 failed, 67 passed. The failures are NOT from the #192 merge that triggered the run.Both exhausted all 3 attempts with fresh fixture IDs, so neither is a flake.
Root cause
The specs date their fixtures in Berlin (
berlinToday()atbackend/e2e/canonical-route-parity.spec.js:12, and anIntlBerlin format atcanonical-capability-behavior.spec.js:331), but the app resolves "today" in the browser timezone:backend/playwright.config.jssets notimezoneId, so the browser inherits UTC on the runner. The run started 23:17 UTC = 01:17 Berlin the next day, so fixtures were dated2026-08-15while the app queried2026-08-14.Evidence (proved, not inferred)
Within the same UTC window:
fdf359b:TZ=UTCfails both with identical errors; machine default (Berlin) passes both.478e5e2— the commit BEFORE the Show a docs outage as an outage on the operations surfaces, not as an empty corpus #192 merge —TZ=UTCfails both identically.53c9fea(Show a docs outage as an outage on the operations surfaces, not as an empty corpus #192) touches neither spec, norworkspace.js, nor any date logic. Both failing tests also run beforedocs-outage.spec.jsin single-worker order, so contamination is impossible.Why this is two problems, not one
backend/src/routes/calendar.tsenforcestimeZone must be Europe/Berlin— buttodayIsoDate()uses browser-local time. An operator working from another timezone would see the wrong "today" queue.Pinning
timezoneId: Europe/Berlinin the Playwright config would make CI deterministic but would MASK the product behavior. Grooming must decide whether the app should resolve "today" in Berlin, and treat the CI fix as a consequence of that decision rather than the fix itself.Side effect
Capability evidence exits 1 on a failed suite, so it printed no stable-state count. The 4 uncovered states are all
home.*, owned by the failingcanonical-capability-behavior.spec.js:311journey.process-docs.unavailableis NOT among them, so #192 emitted its evidence correctly; the 138 to 139 increment simply cannot print until the suite is green.Do not resolve this by re-running the workflow after 00:00 UTC. The same commit goes green purely because the boundary passed, which records a misleading green.
Related: #190, #192.