fix(ci): freshen all e2e-fixture observation timestamps (unblocks #1630 reach e2e)#1747
fix(ci): freshen all e2e-fixture observation timestamps (unblocks #1630 reach e2e)#1747efiten wants to merge 1 commit into
Conversation
…zeroed ones
freshen-fixture.sh shifted nodes/transmissions/observers/neighbor_edges
timestamps to ~now, but for observations.timestamp it only rewrote rows where
timestamp = 0 OR IS NULL. Real-timestamped observations stayed frozen at capture
time, so once the committed fixture aged past a query's window they fell out of
it.
Per-node reach (/api/nodes/{pk}/reach?days=N, node_reach.go scanReachRows) filters
`observations.timestamp >= sinceEpoch`. ~30 days after the fixture was captured the
newest observation (verified: 31 days old) dropped out of the 30-day window, so
reach returned no links and test-issue-1630-reach-mobile-e2e.js failed in
pickRepeaterWithReach ("no repeater with reach links found") — a CI failure
unrelated to any code change, tracking only the wall clock.
Shift all non-zero observation timestamps forward by the same offset (preserving
order), mirroring the other tables; the uncorrelated MAX subquery is evaluated
once on the pre-update state. Verified on test-fixtures/e2e-fixture.db: newest
observation goes 31d → 0d old, all 500 land within the 30-day window.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🤖 Hourly PR watch v2 — #1747Verdict: Merge-ready (with caveat). Surface: Tooling — Parallel review summary:
3-axis check:
Auto-merge skipped because strict gate requires ≥1 test commit and this is a pure tooling fix (no Suggested: |
🤖 Hourly PR-watch reviewVerdict: APPROVE (operator merge recommended) What this fixesReach-mobile e2e (#1630) precondition has been failing on master since ~06-16: Diff review
Cross-PR impactThis PR is the unblocker for ALL currently-open PRs whose Playwright check is failing (#1746, #1737, #1736, #1734, #1728). Once merged, rebasing those should flip them to CLEAN. Why not auto-merge
Findings: 0 BLOCKER / 0 MAJOR / 0 MINORReviewed by: carmack + kent-beck personas (backend + test-infra surface). |
Problem
test-issue-1630-reach-mobile-e2e.jshas been failing onmastersince ~2026-06-16, in its preconditionpickRepeaterWithReach("no repeater with reach links found in fixture") — not in any of its actual assertions. The same SHA passed on 06-15 and failed on 06-16 with no code change, i.e. it tracks the wall clock, not the tree.Root cause
tools/freshen-fixture.shshiftsnodes,transmissions,observersandneighbor_edgestimestamps to ~now, but forobservations.timestampit only rewrote rows wheretimestamp = 0 OR timestamp IS NULL. Real-timestamped observations stayed frozen at fixture-capture time.Per-node reach (
/api/nodes/{pk}/reach?days=N→scanReachRows,cmd/server/node_reach.go) windows onobservations.timestamp >= sinceEpoch. ~30 days after the fixture was captured, the newest observation aged out of the 30-day window, so reach returned no links and the test could find no repeater with reach.Fix
Shift all non-zero
observations.timestampforward by the same offset (preserving relative order), mirroring the other tables in the script. The offset subquery is uncorrelated, so SQLite evaluatesMAXonce on the pre-update state (same idiom the existing blocks rely on).Verification
Ran the updated script against
test-fixtures/e2e-fixture.db:CI Playwright on this PR is the end-to-end confirmation. Scope is the CI fixture helper only — no application code, schema, or runtime behaviour changes.
🤖 Generated with Claude Code