リトライ、指数バックオフ、ジッター — 失敗した呼び出し元が同じ瞬間に戻ってこないようにする
一時的な失敗をリトライするときに、間隔を広げ(バックオフ)、ランダム性を混ぜて(ジッター)、リトライが相手を再び叩く嵐にならないようにする方法と、リトライするエラーを選ぶ基準
TILから一般化した再利用できる知識文書です。カテゴリー別に整理されています。
一時的な失敗をリトライするときに、間隔を広げ(バックオフ)、ランダム性を混ぜて(ジッター)、リトライが相手を再び叩く嵐にならないようにする方法と、リトライするエラーを選ぶ基準
遅い、または一度に一件しか処理できない外部システムの前にキューとワーカーを置き、リクエストはすぐに受け付けて処理は相手のペースで行わせるパターンと、ack・フォールバック・リトライの設計
ブラウザは同時入力も keydown イベントに分けて送るため起きる「一緒に押したときだけ一方向になる」バグを、短く上限のある収集ウィンドウと固定ステップでの消費で解決する方法
キューが同じメッセージを二度以上配信しうることを前提に、成功したときだけ ack し、冪等キーで重複実行を防ぎ、再配信が尽きたときに報告する方法
変更されたファイルから import グラフを逆にたどって関連テストだけを実行する方式で、基準点を決める方法、不確実なときに全体実行へ戻す fail-closed ルール、最終ゲートを分ける理由
仕様と証明に現れる集合・論理・量化記号を TypeScript コードと Bend 構文に1対1で対応させて読む方法と、空虚な真・反例・逆向き含意の誤読から生じるテストの穴
同じコードがリポジトリの設定次第で通ったり落ちたりする理由と、型契約を作る前に実効 tsconfig とロックファイル解決のコンパイラバージョンを一度だけ固定しておく手順
ランタイムテストの境界値分析を型レベルに移して、型の束(lattice)の極端 7 軸ごとに通過・拒否の witness ペアを組む方法と、時間軸・副作用の回数のように型では最後まで覆えない軸
導出できる値は保存せず、ライブラリがすでに所有している union はコピーせず、それでも残る client 状態だけを union にする順序と、状態に action を入れてはいけない理由
Record が約束する totality、何も検査しない type predicate、実行タイミングが違う wrapper の ReturnType、sanitizer と勘違いされる excess property check のように、実装が守らないことを型が約束してしまうパターン
assertNever、satisfies Record、パターンマッチライブラリという三つの層のうち何をいつ使うか、そして catch-all のデフォルト分岐が漏れを隠してしまう理由
Dog が Animal の部分型のとき、Dog[] や (x: Dog) => void もその関係を受け継ぐのか、どちらの向きに受け継ぐのかを決めるルールと、strictFunctionTypes を有効にしてもメソッド短縮記法に穴が残る理由
実行結果ではなくコンパイル結果を検証して「この型が実際にどんな誤ったコードを防ぐのか」をコードとして固定する方法と、@ts-expect-error・mutation 検証でテストが生きているかを確認する手順
const 宣言に型パラメータを付けられないという制約を回避し、ジェネリック関数の中で context を作ってコンポーネントたちにクロージャで掴ませるパターンと、レンダー中に呼ぶと静かに再マウントされる落とし穴
許可値のリストを型と値の二か所に書く代わりに、値ひとつだけを正解の出どころにして型を計算する手法と、widening のせいでこの保護がエラーも出さずに消えてしまう落とし穴
実行結果が正しいかどうかを判定する基準をどこから得るかという問題と、実装から期待値を逆算したテストが何も検証できない理由
DOM 座標だけでは壊れるハイライト復元を、引用・文脈・位置 selector の重み付きスコアと信頼しきい値で解決する方法
コードに人為的な欠陥を埋め込み既存テストが失敗するかを確認することで、カバレッジが隠す空の assertion や緩い検証を見つける手法
メモリを共有できない拡張機能の実行空間を、メッセージ API、runtime 検証、handler ルーティング、応答エンベロープ、変更通知で安全につなぐ方法
npm のグローバル bin のようなシンボリックリンク経路でパス比較型の main ガードが静かに false になり、CLI が出力なしで exit 0 する仕組みと診断・処方