2026-07-06 — 「本日の条件信頼度」を追加(表示+AI判定に反映)
その日のログ全体を見て、今日のセーリングが総観的に安定していたか(良い日か/荒れた日か)を 0〜100% で算出し、ヘッダーの診断行に表示するようにしました。単発のタックでは見えない「その日ずっと乗っている系統的な風のシフト」を捉えるための指標です。
- 指標(4つ): 気圧トレンド(hPa/時)+ 風向の振れ(°)+ 風速のムラ(kt)+ 潮流の疑い(対地 SOG/COG と対水 BSP/HDG の速度差から推定する Set/Drift, kt)を合成した 0〜1 のスコア。船の気圧計(Baro)もログから読むようにしました。
- ログ長で不利にならないよう時間正規化: 各指標は 1時間のスライディング窓で計算し、窓ごとの中央値(=典型的な1時間)を採ります。6時間ログが1時間ログより総変動量が多いのは当然なので、長いログの信頼度が不当に下がらないようにしました。
- 表示は右カラム上部の独立カード(Event Judgment とは別枠、良好=緑/普通=黄/不安定=赤の色分け+一言サマリー+4項目の内訳)。
- AI Screening / AI Chat にも反映: 信頼度が低い日(荒れた日)は採用のハードルを上げ、Not Usable 寄りに判定します。
- 例: 7/4 のログは気圧は安定(−0.17 hPa/時)でしたが、風向が1時間で約 69° ドリフトしていたため「普通 64%」。気圧だけでは見抜けない微風のシフトを風向ドリフトで検知しています。
※ 補正計算にも反映しました(方式B=適用時ブレンド)。TWA補正の Apply 時に、信頼度が低い日はセルを部分的にしか動かさないようになりました(適用値 = 現在値 +(提案値 − 現在値)× 信頼度)。良い日はフル適用、悪い日は控えめ。安全機構(±20°クランプ・stale guard・Undo)は保持し、同一操作での二重適用も防止。補正計算の変更のため 3社レビュー(Claude + Codex + Gemini)を通してから反映しています。
2026-07-05 — AI Screening の判定スタンス修正(疑わしきは不採用)
AI Screening / AI Chat の判定方針を修正しました。
- 操作者に主観的な質問をしなくなりました。「微風で振れていた感覚はありましたか?」のように、乗員の記憶に頼る質問をAIが返すことがありましたが、それをログのデータから割り出すのがこのツールの役目なので、質問ではなくAI自身が結論を出すようにしました。
- 疑わしきは不採用(Not Usable)を基本スタンスとして明文化しました。TWDのズレが「本当の補正シグナル」か「風の振れ・潮流・低速回復・不安定な区間」による汚染か判別しきれない場合は、採用せず除外に倒します。
2026-07-05 — AI を Claude Opus 4.8 に切替 + 強制ログアウト修正
AI Screening と AI Chat が使う AI を OpenAI から Anthropic の Claude Opus 4.8(claude-opus-4-8)に切り替えました。
あわせて、Event Detect の後に AI Screening を押すと強制ログアウトされる不具合を修正しました。
強制ログアウトの原因と修正
-
サーバーが AI プロバイダーから返ってきた
401 / 403をそのままフロントに素通ししており、フロント側はそれを「あなたのログインが無効」と誤解してログアウトしていました。 -
AI 側のエラー(キー・モデルアクセス等)は、ユーザー認証エラーとは別物として
502(AI upstream error)に包み替えるようにしました。これでAI がどんなエラーを返してもログアウトは起きず、画面にはエラー理由がそのまま表示されます。
使用モデル
- AI Screening / イベント解析: Claude Opus 4.8
- AI Chat(イベントチャット): Claude Opus 4.8
2026-07-05 — TWA 補正 方向符号バグの修正
TWA Correction Table の補正値を計算するとき、タック / ジャイブの向きを計算に入れていなかった不具合を修正しました。
同じセンサー誤差でも、風向 (TWD) の飛びの符号は回頭方向 (ポート→スターボード / スターボード→ポート) で反転しますが、
これまでの計算は飛びをそのまま -TWD delta / 2 としていたため、片方向のデータからは正しい符号の補正目標を、逆方向のデータからは符号が真逆の補正目標を出していました。
何が問題だったか
- 同じセル (例: 10kt / 140°) に両方向の回頭データが入ると、正しい値と真逆の値が打ち消し合って ほぼ 0 になったり、 severe-conflict と判定されてセルごと捨てられたりしていました。片方向のデータが多い日は、その日の偏りで補正の符号が決まってしまう状態でした。
- TWD Delta popup の validation mode も同じ盲点を共有しており、誤った補正目標を「改善している」と自己確認してしまうため、アプリ自身の検証ではこの不具合を発見できませんでした。
修正内容
-
補正目標の計算を
-(afterSide) × TWD delta / 2に変更しました。afterSideは「回頭後にどちら側で走っているか (±1)」で、 これを掛けることで回頭方向によらず、同じ物理誤差には常に同じ符号の補正が出るようになります。 -
validation mode の推定式も
estimatedDeltaAfter = delta + 2 × afterSide × correctionに揃え、検証と本体が同じ向きの前提で動くようにしました。 - 実ログ (2025-12-07) で、きれいなタック・ジャイブ 12 本の TWD の飛びが回頭方向に合わせて符号反転していること、方向正規化後は一貫することを確認済みです。
※ この修正の前に作られた現行の H5000 テーブルには、逆符号のデータが混入している可能性があります。 テーブルをゼロから作り直す運用を推奨します。
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 前提の旧解説は削除されています。