午前二時の更新ボタン

午前二時、決済サービスの監視画面が赤く染まった。

望月瑠璃の退職届は、その七時間後、午前九時に送信されるよう予約してある。けれど最後の夜勤は、静かに明けてはくれなかった。海外の年間契約者から、更新料金を二度引き落とされたという通知が連続している。今夜の当番は瑠璃一人。机には冷めた缶コーヒーと、三か月連続で埋まらなかった夜勤表があった。リーダーは「該当顧客だけ返金して、朝まで持たせて」と通話越しに言った。

一件ずつ返せば、朝には「対応済み」の数だけが残る。誰が午前二時に同じ画面を見たかは、また記録から消える。瑠璃が辞めると決めたのは、その繰り返しだった。

瑠璃は返金画面を閉じた。二重請求は結果で、原因ではない。

ログを時刻順ではなく契約更新日順に並べ直す。日付変更線をまたぐ地域だけ、〈更新日〉〈処理日〉が別々に判定されていた。午前零時の一括処理と、各国の午前零時処理が同じ契約を拾っている。

「個別返金では止まりません。更新処理を巻き戻します」

「全地域を止めたら売上が落ちる」

「止めなければ、三十分ごとに対象が増えます」

瑠璃は直前版へロールバックし、二重処理の識別子を無効化した。返金対象を自動抽出するSQLを書き、同じ条件で件数が増えたら鳴る監視も追加する。新人の大地がチャットへ「何を見れば気づけましたか」と書き込んだ。

〈件数より、偏り。国が違うのに同じ分に集中していたら、時刻を疑って〉

三時十二分、赤い通知は止まった。被害件数は二百七件。個別対応だけを続けていれば、朝には千件を超えていた。

リーダーから、障害報告の下書きが届いた。原因欄には〈夜間当番が全地域を停止〉とだけある。

瑠璃は、二重実行を許した設計と、夜間に承認者が不在だった事実を書き戻した。監視手順にも、〈夜間の単独判断を禁止〉と追記する。個人の決断だけを原因にすれば、次の誰かがまた午前二時に同じ画面を見る。

報告書を保存し、九時を待たずに退職届の予約送信を解除した。

退職届を今すぐ送る。続けて、週四日勤務の開発会社から届いていた内定通知を開き、入社日の候補を選んだ。

午前二時を越えない働き方へ、更新ボタンを押した。