Skip to content

test(checkout): A2c の同店 hold のテスト 2 件を fake clock に統一して決定化する (flaky 修正) - #640

Merged
cipherwebllc merged 1 commit into
mainfrom
fix/r6-a2c-flaky-hold-test
Sep 24, 2026
Merged

cipherwebllc merged 1 commit into
mainfrom
fix/r6-a2c-flaky-hold-test

Conversation

@cipherwebllc

Copy link
Copy Markdown
Owner

概要

A2c (#607) で追加した CheckoutForm のテスト 2 件が、CI と並列負荷で時々落ちていました (#622 の CI で 1 回・R14 のレビューで 7 回中 2 回)。テストだけの変更で、本番コードには触れていません。

原因

fixture の時刻が実時刻で発行される一方、vi.waitFor が fake の時計を進めていました。遅延 import の完了前に通知が描画されると、recovery のタイマーが設置されないまま期限の判定に進み、toBeEnabled で落ちていました。隣の「expiry read holds payment until … completes」も同じ原因で、単独実行では必ず落ち、先のテストが module を読み込むおかげで通っていました。

修正

  • 時計を setup 前に固定し、vi.dynamicImportSettled() を待ってから、タイマーを期限の 1 ミリ秒前と期限まで明示的に進めます。
  • 元の assert はすべて残し、「期限ちょうどに状態を 1 回読む」「期限前は止め続ける」ことを追加で固定しました。hold の解除は従来どおり本物の recovery の流れを通ります (レビュー役が、状態を読まずに解除する・1 秒早く解除する改変を試し、新しいテストだけが検出することを確認)。

検証

  • 単独実行 25/25・2 テストの併走 10/10・負荷下 (2 並列) の file 全体 368/368。origin/main の版は同じ負荷で 30 回中 25 回落ちました。
  • 別セッションの Opus 5.5 のレビュー: approve (隣のテストの指摘も反映済み)。
  • typecheck 0 / eslint 0 / full vitest 15,369 pass

🤖 Generated with Claude Code

https://claude.ai/code/session_01HeizmagJBgL5peL5mQpxkc

@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
openpay Ignored Ignored Preview Sep 24, 2026 4:22pm UTC

Request Review

「unresolved old payment scopes the relay checkout hold and notice」は、fixture の時刻が実時刻で
発行される一方 vi.waitFor が fake 時計を進め、遅延 import の完了前に通知が描画されると
recovery のタイマーが未設置のまま期限判定に進む競合で、CI と並列負荷で時々落ちていた
(#622 の CI・R14 レビューで 7 回中 2 回)。時計を setup 前に固定し、vi.dynamicImportSettled() を
待ってから期限の 1ms 前と期限へ明示的に進める。元の assert はすべて残し、期限ちょうどに
状態を 1 回読むことを追加で固定した。隣の「expiry read holds payment until %s completes」も
同じ原因で単独実行だと必ず落ちていた (先の test が module を読み込むおかげで通っていた) ため
同じ形に直した。単独 25/25・併走 10/10・負荷下の file 全体 368/368。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HeizmagJBgL5peL5mQpxkc
@cipherwebllc
cipherwebllc force-pushed the fix/r6-a2c-flaky-hold-test branch from f795535 to bd8a3f9 Compare September 24, 2026 16:22
@cipherwebllc
cipherwebllc merged commit 05c8e82 into main Sep 24, 2026
8 checks passed
@cipherwebllc
cipherwebllc deleted the fix/r6-a2c-flaky-hold-test branch September 24, 2026 16:51
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