2026-05-28 — TWA solver Direction G リリース
TWA Correction Table の suggest / Apply 経路を全面的に作り直し、暴走と巻き戻しの問題を構造的に解消したリリースです。 あわせて、Applied ステータスに依存せず現在のテーブルで全イベントを再評価できる validation mode も導入しました。
TWA Correction Table の solver を全面刷新 (Direction G)
- セルごとに独立した weighted median で補正値を決めるようになりました。 これまでの最小二乗 (LSQ) ベースの全セル同時最適化は廃止し、各セルは「そのセルに寄与するイベントの中央値」をベースに、信頼度に応じた重みを掛けて計算します。 これにより、1 件のノイズイベントが全体を引っぱる現象が起きなくなりました。
- 入力段階で ±20° の物理レンジに clamp します。実艇では起こりえない巨大な補正値で他のセルを汚染することがなくなりました。
- severe-conflict suppression: 同じセルに対して相反する強い信号が複数イベントから出ている場合、そのセルは suggest 一覧から完全に除外します。 信頼度を下げて出すのではなく「出さない」判断にしたので、運用者が見ても判断材料が混乱しません。
- stale Apply guard: 「Suggest を押した時点の表示」と「Apply 時点の table」が食い違っていたら、その差分セルだけ skip して再 Suggest を促します。 別タブ操作、手編集、Undo などで table が動いていても、古いスナップショットで上書きされる事故が起きません。 localStorage と DOM 両方を比較して double-check する 2 層構造です。
Apply 暴走の停止
- セル値を保存する瞬間にも改めて ±20° clamp をかけるようになりました。change handler を経由しない paste や programmatic な書き込みも、保存段階で安全側にクリップされます。
- suggest 候補同士が衝突しているときは Apply 前に confirm dialog が出ます。コンフリクトを見過ごしたまま大きな補正がかかるのを防ぎます。
"Revert all Applied" ボタンを追加 (Apply 追跡のみクリア)
- Detected Events 側の Applied バッジと Undo 履歴をまとめてクリアできるボタンが H5000 Setup の TWA Correction Table セクションに追加されました。
-
このボタンは テーブルのセル値には一切手を触れません。
テーブル自体を初期化したいときは隣の
Reset TWA Tableを使います。Apply 追跡を消すボタンと、テーブルを消すボタンを分離したことで、運用者の意図と操作が一致するようになりました。
TWD Delta popup を validation mode に拡張
-
これまで
Applied状態のイベントしか「補正後の corrected TWD delta」を表示できませんでしたが、今回から Candidate / Applied / None / 未判定の全イベントで補正後の値が見えるようになりました。 - 算出基準は 現在の永続 TWA Correction Table です。「raw TWD delta」と「Corrected by current TWA table」を並べて表示し、現在のテーブルがこのイベントの delta をどれだけ縮めて (または広げて) いるかを cross-validation できます。
-
UI 文言から曖昧だった
after correctionを排除し、Corrected by current TWA tableに統一しました。chart title はGYBE corrected TWD delta/TACK corrected TWD deltaのようにイベント種別で動的に切り替わります。 - この popup は 完全に read-only です。判定 / Apply 追跡 / table のいずれにも一切書き込みません。Apply / Undo / Suggest / AI Chat / solver の挙動は変わりません。
AI Chat の説明文を新算法に合わせて刷新
- AI Chat に渡している system prompt から旧 LSQ ベースの解説を取り除き、per-cell weighted median + bounded input + severe-conflict suppression + stale Apply guard の新しい方針を反映しました。
- 判定が 0 件のときの empty-state テキストも、新算法の用語に統一しました。
マルチタブ race condition の修正
-
複数タブで同時に Apply / Undo を走らせたときに発生していた競合を解消しました。「ローカルで rendered な table」と「永続化された table」を両方比較する
stale Apply guardによって、古いタブの操作が新しい状態を上書きすることがなくなりました。
Rescue tooling (緊急対応)
-
H5000 Setup ダイアログ内に
Reset TWA Tableボタンを追加し、TWA 補正テーブルを 0 で完全初期化できるようにしました。Direction G 以前に発生していた「暴走済みテーブル」のリカバリ手段です。 -
管理者向けに、Firestore に保存された TWA テーブルを dump → 確認 → 適用できる
scripts/rescue-twa-table.mjsを追加しました。 ドライランがデフォルトで、--apply --confirm-uid <uid>を明示しないと書き込みません。
ドキュメント
-
新しい TWA 解算法とそのリスケジューリング方針を
hercules-webui/docs/ai-screening-event-judgment-twa.mdに書き直しました。LSQ 前提の旧解説は削除されています。