Conversation
削除通知の取りこぼしを直しても(f561f56)、既に取りこぼした分は syncToken が 先に進んでいるため二度と届かない。全同期は applyFullSyncAtomic で stale を全消しして 置き換えるので、全同期さえ走れば残骸は消える ― しかし利用者が全同期をやり直す導線が 無かった。 サーバー側は変更していない。POST /api/sync の forceFull(2026-07-22、eventType バックフィル用)が既に「syncToken を無視して全同期する」を実現しており、破棄用の エンドポイントを足すと同じ結果に至る第二の経路と認可面が増えるだけになる。 欠けていたのは UI の導線だけだった。 あわせて syncScheduler の trailing rerun を直した。通常同期の走行中に schedule() された 場合、これまでは初回の run を再実行していたため、**再同期が黙って増分同期に格下げされる**。 利用者が明示的に押す脱出口が、たまたま同期中だったというだけで効かないのは致命的なので、 最後に要求された run を使うようにした。同一キーの run は互換なので、より新しい要求を 採るほうが常に安全側になる。 設定モーダルの2段階確認 UI が5つ目になったので ConfirmActionControl に畳んだ。 DOM は1文字も変えていない(クラス名・要素の並び・disabled の付き方まで同一)。 デスクトップ版のときだけ、ビルド情報の直下に ⌘R で読み直す旨を出す。リモート URL 方式で 再デプロイが自動反映されないため、「古いビルドを見ていると気づかせる」ビルド情報に対して 次の行動が書いていないのは片手落ちだった。 Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HGESE2zBNzoW8MYvtEySBQ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
なぜ
f561f56(アプリ外で削除された予定が消えないバグ)の修正はこれから届く削除通知にしか効かない。既に取りこぼした分は Google 側のsyncTokenが先に進んでいるため二度と送られてこない。全同期は
applyFullSyncAtomicが stale を全消しして置き換えるので、全同期さえ走れば残骸は消える。しかし利用者が全同期をやり直す導線が無かった。サーバー側は変更していない
調査の結果、
POST /api/syncのSyncRequest.forceFull(2026-07-22、eventType バックフィル用に追加)が既に「syncTokenを無視して全同期する」を実現していた。破棄用エンドポイントを足すと同じ結果に至る第二の経路と認可面が増えるだけなので追加していない。欠けていたのは UI の導線だけだった。付随して直した既存バグ: scheduler の trailing rerun
syncScheduler.tsは「走行中なら完了後にもう1回だけ再実行する」方式だが、再実行するのが初回の run だった。そのため通常同期の走行中に再同期を要求すると、全同期が黙って増分同期に格下げされる。利用者が明示的に押す脱出口が、たまたま同期中だったというだけで効かないのは致命的。rerunRequestedをSet→Map<key, SyncRunner>にして最後に要求された run を使う。同一キーの run は「同じカレンダーを同期する」処理で互換なので、より新しい要求(= より強い要求を含みうる)を採るほうが常に安全側。回帰テスト2本追加。UI
設定モーダルのキャッシュ削除の直下。住み分けを文言で明示した。
2段階確認。通信量と時間がかかること、作業実績・連携アカウント・設定は消えないことを明記。
2段階確認 UI が5つ目になったので
ConfirmActionControlに畳んだ。DOM は1文字も変えていない(クラス名・要素の並び・disabledの付き方まで同一)。正味 −約120行。デスクトップ版への一言
isTauri()のときだけ、ビルド情報の直下に「最新にするには ⌘R(またはトレイの「再読み込み」)」。リモート URL 方式で再デプロイが自動反映されないため、「古いビルドを見ていると気づかせる」ためのビルド情報に対して次の行動が書いていないのは片手落ちだった。ブラウザ/PWA には出さない。検証
pnpm --filter web test1076 passed /pnpm --filter sync test615 passedpnpm lint(エラー0、警告はベースラインと同数)/build/build:site🤖 Generated with Claude Code
https://claude.ai/code/session_01HGESE2zBNzoW8MYvtEySBQ