第19話 パッチの匂い
白い点が、出なかった。
それだけなら、普通は失敗だと思う。
コードを間違えた。環境が変わった。カメラが寝ぼけた。照明が悪い。端末の位置がずれた。
九日前の俺なら、その順で疑った。
今の俺は、まず手を止めた。
「MICA。環境差分」
「取得済みです。端末位置、照度、時刻、カメラ角度、実行バイナリ、設定ファイル、すべて昨夜の安全確認と一致します」
「昨夜と一致して、結果だけ違う」
「はい」
画面には、最小再現用の小さなウィンドウが出ている。余計な通信も、センサー入力も、顧客データもない。破棄直前の画面外座標だけを作り、机上の一点に白い点が漏れるかを見るための、いちばん小さな確認。
何度も見た。
見飽きるほど見た。
その点が、出ない。
レシートは動かない。方眼紙の隅に置いたクリップも、影を作らない。カメラのノイズだけが、何も知らないふりでざらついている。
世界の裏側へ開いていた小さな窓が、朝になったら、内側から鍵をかけられていた。
——
俺は、失敗の可能性を潰した。
一つずつ。機械的に。
別端末。再起動。録画なし。録画あり。照度を上げる。下げる。机の中央。ドア側の境界。レシート角。クリップ先端。古い仮想キーの座標。半月形の痕があった位置。
何も出ない。
「コード差分は」
「ありません。ハッシュ一致」
「設定差分」
「ありません」
「昨日の監査基準モデルを当てろ。濃くなる操作を避けた範囲だけで、白い点の入口を叩く」
「実行します」
MICA の返答は短かった。軽口がない。俺の呼吸が荒くなっていることを、マイク越しに拾っているのだろう。
安全な窓の内側だけを使って、観測網を組み直す。
点が出ない。
仮想キーの押下痕も出ない。
入力キャッシュに薄く残るはずの手触りもない。
昨日までそこにあった道具が、半分だけ、なくなっている。
「……これは」
言いかけて、飲み込んだ。
安堵ではなかった。
危険な入口が閉じたのなら、喜ぶべきかもしれない。俺は使用を止めた。規程を書いた。MICA に拒否権まで渡した。自分では塞げない穴が、勝手に塞がれた。普通なら、肩の力を抜く場面だ。
だが、胃の底にあったのは、違うものだった。
奪われた、という感覚。
あの白い点は、俺が見つけた。
俺が、ログに残らない物理変化を疑った。通常候補を潰し、再現条件を削り、方眼紙に座標を写し、入力にして、投影にして、危険を知った。
いつか、俺が原因まで掘って、影響範囲を切り分けて、俺の手で塞ぐはずだった。
それを、顔も見えない誰かが、先にやった。
俺は、机の端を指で叩いた。
「これは俺が直すはずだった」
言ってから、自分で嫌になった。
格好悪い。正しくない。危険な穴を塞ぐことに、発見者の所有権なんてない。
それでも、腹が立った。
先を越されたことに。
理解する前に取り上げられたことに。
そして、たぶん、この怒りそのものが、俺がまだ危ない証拠だった。
——
怒りは、使える。
邪魔でもあるが、燃料にはなる。
俺は、消えた範囲と残った範囲を分け始めた。修正の痕跡は、直された場所ではなく、直されなかった場所に残る。
雑な修正は、境界が汚い。
良い修正は、境界が綺麗だ。
そして、綺麗すぎる修正は、たいてい原因を直していない。危ない部分だけを、外から切り離している。
「MICA。表を作れ。入力は三つ。観測経路、入力経路、署名経路。出力は、再現可否、監査痕の濃さ、残留の有無」
「作成します」
「比較対象は昨日の夜中の最後のモデル」
「差分表を生成します」
表が埋まっていく。
透の観測経路。白い点、出ない。監査痕、薄い。残留、なし。
透の入力経路。仮想キー、出ない。押下痕、なし。operation_id の局所テスト、反応なし。
投影経路。表示格子、起動しない。アンカー補正、反応なし。
外部参照。接続は禁止のまま。存在応答だけ、拾える。
qx41 の署名経路。五分間隔、継続。
俺は、そこで目を細めた。
もう一度、走らせる。
結果は同じだった。
俺の白い点は出ない。
俺の仮想キーは死んでいる。
俺の投影格子も、入口を失っている。
だが、触らないログの端には、いつもの署名が来る。五分間隔。連番。発行者フィールドの固定部。無神経なほど規則正しい、あの収集の脈拍。
`qx41`
生きている。
「直してない」
俺は、声に出していた。
「隔離しただけだ」
「根拠を確認します」
「原因が直ってるなら、同じスコープ漏れを使う qx41 の経路も止まる。少なくとも揺らぐ。でも止まってない。俺の入口だけ、外された」
「透の観測・入力・投影経路は切断。収集経路は継続。原因層の恒久修正ではなく、対象単位の隔離と推定できます」
「だよな」
修正には、匂いがある。
本当に原因を直したときの匂いと、燃えている部屋の扉だけ閉めたときの匂いは、違う。
前者は、周辺の挙動が一緒に変わる。古い前提が通らなくなり、関連する副作用もまとめて消える。痛いが、筋が通る。
後者は、きれいに一箇所だけ沈黙する。
今回の沈黙は、後者だった。
俺の経路だけが、丁寧に切り離されている。昨日読んだ隔離準備記録の、依存の区切り方そのままに。
「なんでだ」
画面に向かって、俺は言った。
「直せるはずの奴が、なんで直さない」
答えは返らない。
直せないのか。
直さない理由があるのか。
互換性か。古い処理が、この穴に依存しているのか。塞ぐと別の物理整合性が崩れるのか。それとも、収集者を泳がせるために、あえて残しているのか。
どれも、嫌な答えだった。
——
昼過ぎ、莉央さんから連絡が来た。
声は、昨日より少し明るい。明るいぶんだけ、疲れていた。
「相馬さん。顧客先の打刻異常、止まったそうです」
「止まった」
「はい。少なくとも、今日の午前中は新しい異常が出ていません。会社は、再発しなければ様子見にする方向です」
予想通りだった。
消す者の隔離は、顧客先にも届いている。俺の手元で白い点が消えたのと同じように、現場の症状も、ぱたりと止んだ。
だが、喉の奥がざらついた。
止まったことと、直ったことは違う。
「莉央さんは、それで納得してるのか」
「してません」
即答だった。
「誰も原因を説明していません。ログは消えている。打刻は止まった。でも、止まった理由も分からない。これで様子見って、私は嫌です」
「正しい」
「正しいんですか」
「少なくとも、技術者としては正しい。理由のない沈静化は、解決じゃない」
電話の向こうで、莉央さんが小さく息を吐いた。
「相馬さんにそう言われると、少しだけ安心します」
「安心はするな。証拠はまだ持ってるか」
「スマホのスクショはあります。誰にも渡していません。クラウドにも上げていません」
「そのまま。あと、今日止まった時刻を、端末のログ以外で残せるものがあれば残してくれ。メールでも、作業メモでも、写真でもいい」
「端末の外に、ですね」
「そう」
「分かりました。……相馬さん」
「何」
「止まったのに、相馬さん、全然ほっとしてませんね」
俺は、画面の差分表を見た。
白い点、再現不可。
qx41、継続。
「直ってないからな」
「それ、断言できるんですか」
「断言はしない。だが、直ったなら、もっと汚く壊れる場所がある」
「汚く壊れる」
「本当に原因を直すと、古い前提に乗っていたものがまとめて揺れる。今回は、都合の悪い症状だけが綺麗に消えた。綺麗すぎる」
莉央さんは、しばらく黙った。
「綺麗すぎるのが、怖いんですね」
「そう」
「分かりました。様子見で終わらせないようにします」
「無理はするな」
「それ、相馬さんに言われると変な感じですね」
「俺もそう思う」
少しだけ、莉央さんが笑った。
通話が切れる。
部屋は静かだった。静かすぎた。白い点が出ない机は、ただの机に戻っている。レシートも、クリップも、方眼紙も、何も知らない顔でそこにある。
便利だった道具の半分は、もうない。
だが、世界は直っていない。
俺は、触らないスキャンを、規程の範囲内で一度だけ回した。参照を開かない。座標を動かさない。存在応答と発行者の時刻だけを見る。
五分間隔の列が、返ってきた。
`qx41`
`qx41`
`qx41`
俺の経路は、塞がれた。
署名の経路は、まだ開いている。
消す者は、収集者を捕まえられていないのか。
それとも、捕まえる気がないのか。
答えは、まだログの向こうにある。
ただ一つだけ、分かった。
俺は、白い点を失った。
だが、向こうが何を塞ぎ、何を残したかは、見える。
パッチの匂いは、残っている。
■ 技術メモ
【パッチ】
パッチは、不具合や脆弱性を修正するための変更です。
ただし、すべてのパッチが原因を根本から直すとは限りません。危険な入口だけを一時的に閉じる、影響範囲を狭める、特定の利用者だけを切り離す、といった応急処置もあります。
【根本修正と隔離】
根本修正は、同じ原因から起きる問題をまとめて起きにくくする変更です。
隔離は、問題のある経路や対象を周囲から切り離す対応です。すぐに被害を止められる一方で、原因そのものが残る場合があります。作中では、透の観測経路だけが止まり、別の署名経路が残っていたため、透は「直した」のではなく「隔離した」と判断しました。
【再現しない不具合】
昨日まで再現していた不具合が急に再現しなくなっても、それだけで解決とは言えません。
環境が変わったのか、偶然条件が外れたのか、誰かが暫定対応を入れたのかを切り分ける必要があります。原因が分からないまま症状だけ消えた場合は、再発や別経路への移動に注意します。
【触らない確認】
危険な対象を直接開かず、存在応答や時刻など最小限の情報だけを見る確認方法です。
詳細な中身を読めば多くの情報を得られますが、そのぶん相手の領域に踏み込みます。作中の透は、規程に従い、参照を開かずに署名経路が残っているかだけを確認しています。




