デジタルガーデン

亡命者の発射場:赤色警報と十五回の点火

2026-09-18 · 約 5 分 · エッセイ · CI · ビルド

序章:城門は背後で閉ざされた

プロジェクトを収めていたあの都市は、一夜にして門を閉ざした。アカウントは停止され、リポジトリは取り上げられ、長年のコミット履歴は壁の内側に残された——亡命者が持ち出せたのは、ローカルディスクの中の最後の完全なコピーだけ。

新しい故郷の名は Codeberg。土地は本物で、空も本物だ。だが、発射塔の灯りは赤い:CI は一面の赤、ビルドはクラウドの深いどこかで音もなく墜ちていく。

こうして午後の戦役が始まった:14時10分から18時29分、四時間余り、十五回の点火。

第一次の消火:補給線

最初の敵はコードの中にはいなかった。ネットワークの中にいた。依存関係のダウンロードは TLS の途中で断ち切られ、ビルダーは建設資材の一本すら発射場に運べない。

解は新しい補給線を敷くことだった:依存リポジトリのミラーを阿里雲へ切り替え、accessor キャッシュを清掃し、configure-on-demand を切る。この点火(9279891a)は効いた——TLS エラーは消え、資材はふたたび入港した。

二度目の試し:エンジンを換える

続くは長い確認。AGP を 8.7.3 から 8.6.1 へ巻き戻す(361f80c1)——エンジンを丸ごと下ろして旧型と取り替えるようなもの——だが火花の署名(MissingValueException)は一度も変わらなかった。この失敗した点火は貴重な情報を買った:敵はエンジンの中にはいない。

主戦役:光らない星の追跡

報告は一行:Cannot query the value of this provider because it has no value available.——タスクグラフのどこかに、本来値を持つはずの鍵である provider が、空のまま浮いている。光も熱も出さず、Gradle が :app:compileDebugJavaWithJavac の依存を解決する瞬間に、グラフ全体を引きずり倒すだけ。

追跡は思ったより困難だった。雲が絶えず閉じてくるからだ:

雲を突き抜けてからは、天文学者の方法で星を探した:**トランジット法、一マスずつ。**タスクグラフ上の星一つ一つに個別の dry-run を回し、どの通過が背景の光を暗くさせるかを見る。help は通った、kapt も、ksp も、kotlin も——そして javac のマスで、光が沈んだ。

最後のコミット(cf61c160)は :app:kaptDebugKotlin を走査列に加えた。すべての証拠はひとつの座標へ収束する:署名設定の property.keystore.file から取られるあの鍵が、keystore の存在しない雲上の土地では、空の provider なのだ。

灯りはまだ緑ではない

率直に言う:戦役は未完だ。十五回の点火は緑をもたらさなかった——しかし精度を増す十五枚の星図をもたらし、容疑者の範囲はタスクグラフ全体から一枚の鍵へと縮んだ。

次の点火はすでに準備済み:空の鍵に、評価される前に「存在するか」と答えさせる。灯りは緑になる。亡命者の発射場は、赤色警報のために閉鎖したりしない。

コメント

← デジタルガーデン