Skip to content

test(root): recover the clock-bound commit stranded by #867 - #871

Merged
mobeenabdullah merged 1 commit into
mainfrom
fix/recover-rewound-clock-bound
Aug 16, 2026
Merged

mobeenabdullah merged 1 commit into
mainfrom
fix/recover-rewound-clock-bound

Conversation

@mobeenabdullah

@mobeenabdullah mobeenabdullah commented Aug 16, 2026 •

Copy link
Copy Markdown
Collaborator

#867 merged without its final commit, and main carries an assertion that already failed CI.

What happened

git log <headRefOid>..<ls-remote tip> names one commit absent from the merge:

be8a0a0ba test(root): bound the rewound clock rather than pinning it

Confirmed by CONTENT, with a control proving the search works: toBeLessThan(-29000) is present on the branch head and absent from merge commit 88b44fce8. main still reads:

expect(applied?.currentTime).toBe(-30000);

Why that matters rather than being cosmetic

That exact-equality assertion is the one that failed Browser tests on #867's own CI:

Expected: -30000
Received: -29983.334

The animation's clock advances between the assignment and the read — one frame, 16.7ms. It held locally and lost that frame on the runner. So main currently carries a canvas test that fails whenever the round trip costs a frame, which is most of the time on a loaded machine.

The recovered commit replaces it with a bound. What makes the fixture the case it claims to be is that the effect is rewound far into the past — stable. The exact value is not, and asserting it measures how long the round trip took rather than the rewind.

Verification

  • Cherry-picked onto main, one file, +6/-1.
  • Guard suite: 32 passed.
  • The same stranded-tail check that found this reports the recovered branch clean.

This is the second tail this lane has stranded — #825 did it too, recovered as #854 — and both times the cause was the same: pushing a fix while a merge was being computed. Worth noting on the merge procedure rather than only in a PR body.

Summary by CodeRabbit

  • Bug Fixes
    • Improved animation rewind test reliability by allowing for minor timing differences when validating the current playback position.

@mobeenabdullah

Copy link
Copy Markdown
Collaborator Author

@codex please review this PR

@coderabbitai

coderabbitai Bot commented Aug 16, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 22813293-b1b5-4fbd-8091-c5f2ebfad2c1

📥 Commits

Reviewing files that changed from the base of the PR and between 88b44fc and 03b0639.

📒 Files selected for processing (1)
  • e2e/tests/canvas/geometry-settle-matches-the-canvas.test.ts

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The canvas animation test now checks that a rewound animation remains below -29000 instead of requiring an exact -30000 value.

Changes

Canvas animation tests

Layer / File(s) Summary
Relax rewound time assertion
e2e/tests/canvas/geometry-settle-matches-the-canvas.test.ts
The test accepts elapsed time during rewinding by asserting currentTime < -29000.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Merge Risk: ⚪ Minimal · up to 03b06

The change makes the canvas test resilient to the animation clock advancing between writes and reads without changing product behavior; no actionable merge-blocking risk remains after normal checks and review.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the recovered clock-bound test commit and references the related pull request.
Description check ✅ Passed The description explains the issue, rationale, affected assertion, related pull request, and verification, but it does not follow the template headings or checklist format.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/recover-rewound-clock-bound

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@pkg-pr-new

pkg-pr-new Bot commented Aug 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@nextlyhq/adapter-drizzle

npm i https://pkg.pr.new/@nextlyhq/adapter-drizzle@03b0639

@nextlyhq/adapter-mysql

npm i https://pkg.pr.new/@nextlyhq/adapter-mysql@03b0639

@nextlyhq/adapter-postgres

npm i https://pkg.pr.new/@nextlyhq/adapter-postgres@03b0639

@nextlyhq/adapter-sqlite

npm i https://pkg.pr.new/@nextlyhq/adapter-sqlite@03b0639

@nextlyhq/admin

npm i https://pkg.pr.new/@nextlyhq/admin@03b0639

@nextlyhq/admin-css

npm i https://pkg.pr.new/@nextlyhq/admin-css@03b0639

@nextlyhq/blocks-engine

npm i https://pkg.pr.new/@nextlyhq/blocks-engine@03b0639

@nextlyhq/blocks-react

npm i https://pkg.pr.new/@nextlyhq/blocks-react@03b0639

@nextlyhq/builder

npm i https://pkg.pr.new/@nextlyhq/builder@03b0639

create-nextly-app

npm i https://pkg.pr.new/create-nextly-app@03b0639

nextly

npm i https://pkg.pr.new/nextly@03b0639

@nextlyhq/plugin-form-builder

npm i https://pkg.pr.new/@nextlyhq/plugin-form-builder@03b0639

@nextlyhq/plugin-page-builder

npm i https://pkg.pr.new/@nextlyhq/plugin-page-builder@03b0639

@nextlyhq/plugin-sdk

npm i https://pkg.pr.new/@nextlyhq/plugin-sdk@03b0639

@nextlyhq/plugin-seo

npm i https://pkg.pr.new/@nextlyhq/plugin-seo@03b0639

@nextlyhq/storage-s3

npm i https://pkg.pr.new/@nextlyhq/storage-s3@03b0639

@nextlyhq/storage-uploadthing

npm i https://pkg.pr.new/@nextlyhq/storage-uploadthing@03b0639

@nextlyhq/storage-vercel-blob

npm i https://pkg.pr.new/@nextlyhq/storage-vercel-blob@03b0639

@nextlyhq/ui

npm i https://pkg.pr.new/@nextlyhq/ui@03b0639

commit: 03b0639

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

Reviewed commit: 03b0639ae8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@mobeenabdullah

Copy link
Copy Markdown
Collaborator Author

@nextly-bot review

@github-actions

github-actions Bot commented Aug 16, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @mobeenabdullah's task in 18m 13s —— View job


Review complete — round 1, no new findings

Ran the full review protocol on 03b0639 and posted the result as a PR review (pullrequestreview-4946514254).

  • Phase 0 — pre-flight (PR open, not draft, head 03b0639ae8, base main @ 88b44fce8)
  • Phase 1 — load the law (AGENTS.md, comment-convention checker, pr-title.yml allowlist)
  • Phase 2 — round awareness (no prior bot rounds, zero review threads)
  • Phase 3–4 — understand task, expand context (full enclosing file, sibling tests, poc-driver)
  • Phase 5 — the hunt
  • Phase 6 — adversarial verification
  • Phase 7–8 — compose and post the review

Verdict: clean. The recovery claim checks out content-wise — git diff be8a0a0ba..03b0639ae on the changed file is empty, and be8a0a0ba is absent from origin/main — so this PR restores exactly what #867's merge stranded.

The substantive question I attacked was whether the new bound weakens the fixture, since the test exists to prove the live-span comparison catches an API-moved schedule. It doesn't: at any currentTime < -29000 the live span is ≥49000ms against a declared 20000ms, still orders of magnitude past the 1ms tolerance, so the /running effect claims/ refusal still fires. In the other direction, the bound buys ~1000ms of clock slack against a ~17ms round trip, and the assertion still fails if the rewind never applied (currentTime would coerce to 0).

Process sweep is also clean: title/scope valid, no changeset (correct for a test-only PR), comment passes the repo's comment-convention gate, no AI attribution, all CI green including Browser tests.

@mobeenabdullah
mobeenabdullah merged commit 291da03 into main Aug 16, 2026
20 checks passed

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nextly Review Bot: round 1 - clean

Verdict: The PR does exactly what it claims — it restores, byte-for-byte, the commit that #867's merge stranded — and in doing so replaces the only exact-equality clock assertion in the file, one main's own Browser tests job had already failed on a single frame of drift. Safe to merge.

New findings: 0 P0/P1, 0 P2, 0 P3

Prior rounds: none — this is round 1. Zero review threads exist on the PR and no earlier pr-review-agent marker was posted, so there is nothing to re-verify or duplicate.

Not inline-anchorable: none

Pre-existing (not this PR): none noted. The defect this PR fixes (main carrying toBe(-30000) at 88b44fce8) is the thing being repaired, not a bystander.

Checked:

  • Content-verified the recovery claim. git diff be8a0a0ba..03b0639ae -- e2e/tests/canvas/geometry-settle-matches-the-canvas.test.ts is empty (identical blobs, 833ebe273), and git merge-base --is-ancestor be8a0a0ba origin/main fails — the stranded commit is genuinely absent from main and this PR restores it exactly. The PR's +6/-1 matches the diff stat, and its "32 passed" matches the 32 top-level tests in the file.
  • Attacked the fixture's purpose (the bound must not weaken the test). Traced geometrySpanMs to its live-span formula at lines 406-421: min(delay + activeDuration, endTime) - currentTime. At any currentTime < -29000 the live span is ≥49000ms against a declared 20000ms, still far past the 1ms TIMING_TOLERANCE_MS at line 611, so the /running effect claims/ refusal at line 1566 still fires. The bound cannot mask the mechanism it exists to exercise.
  • Checked the false-failure direction. The one-sided bound buys ~1000ms of clock slack against a ~17ms assignment-to-read round trip (a 60x margin), a strict widening from the previous 0ms slack. animation.ready would have to stall for a full second to fail — and the assertion still fails if the rewind never applied at all, since Number(animation.currentTime ?? 0) coerces an unapplied rewind to 0, which is not < -29000.
  • Process sweep. Title test(root): ... is a valid type and a scope on the pr-title.yml allowlist, lowercase, no trailing period. A test-only PR correctly carries no changeset (git diff origin/main HEAD -- .changeset is empty). The new comment describes the code's timing behavior rather than a conversation and passes the repo's check:comments gate (CI job green). No AI attribution in the commit or PR body. All 7 workflow runs on this head are green, including Browser tests.

An empty round here is the merge signal for this PR: the change is one assertion and its rationale, both of which hold up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant