第16話 俺は何を見ていたんだ
一枚の絵にする。
それが、今日の予定だった。
八日間、机に積み上げてきたものを、全部つなぐ。レシートの変位から始まって、画面外座標、知らない痕、二重実行、環境差分、知らない点、知らない参照、qx41 の署名、reference の台帳。バラバラの異物を、一本の理屈で串刺しにする。
理屈は、もう手の中にあった。
スコープ漏れだ。
現実の裏側には、物の状態を補助的に記録しておく層がある。そこへ、本来分けておくべき「誰の」「どのセッションの」「どの環境の」という境界が漏れて、混ざる。だから俺の画面外座標が現実に出る。だから自分の痕は消せて、知らない痕は消せない。だから二重実行が起きて、環境で再現性が変わる。
八日間、全部これで説明してきた。一度も外れなかった。
だから今日は、確認作業のつもりだった。積み上げた現象を時系列に並べて、全部がスコープ漏れ一本に乗ることを確かめて、一枚の絵にして、終わり。莉央に渡せる言葉を、そこから削り出す。
「MICA、昨日の強制停止の直前、未整理のまま残ってる生ログがあったろう。あれも統合対象に入れる。停止で中断したやつだ」
「対象に追加します。整形して時系列へ載せます」
その生ログを、何気なく眺めていた。
そして、止まった。
——
時刻が、巻き戻っている。
ログの一区間。ほんの数ミリ秒だけ、記録された時刻が前に戻って、また進んでいる。
`...332.118, 332.121, 332.124, 332.119, 332.127...`
四つ目が、三つ目より小さい。
「MICA、これ」
「確認しました。時刻系列に逆行があります」
「観測誤差か」
「同一クロックソースです。誤差なら系列全体に分散します。この逆行は一区間に局在しています」
「時刻同期のズレ」
「NTP の補正は記録に残ります。この区間にはありません」
「バッファの並び替え」
「整形前の生ログです。並び替えは入りません」
MICA が、通常候補を順に潰していく。いつもの作業。俺がやらせている作業。一つずつ消えていく。
そして、全部消えたあとに、何も残らなかった。
俺は、画面を見たまま動けなかった。
スコープ漏れでは、時刻は壊れない。
俺のモデルは、「誰の」「どの環境の」という境界が漏れる話だ。座標が混ざる。状態が混ざる。参照が混ざる。混ざるだけだ。混ざっても、時刻そのものは進む。逆には流れない。
時刻が巻き戻るというのは、俺の八日間の理屈の、どこにも乗らない。
——
俺は立ち上がって、壁にメモを貼り始めた。
第一夜のレシート。画面外座標。白い点。仮想キー。知らない痕。二重実行。環境差分。投影格子。知らない点。知らない参照。qx41。reference。打刻。
一枚ずつ、貼っていく。その横に、説明を書く。全部、スコープ漏れ。全部、同じ三文字。
最後に、時刻の巻き戻りのメモを貼った。
その横は、空白だった。
書けなかった。
長いこと、俺はその空白を見ていた。
問題は、一枚乗らないメモがあること、じゃない。
一枚乗らないなら、その一枚が例外だ、で済む。怖いのは、そこじゃない。
八日間、俺は全部スコープ漏れで「説明できた」と思っていた。一度も外れなかった、と思っていた。だが、今、外れる現象が出た。ということは——これまで「説明できた」と思っていたものの中に、本当は説明できていなかったものが、混ざっていたかもしれない。
たまたま、スコープ漏れでも辻褄が合うように見えていただけのものが。
俺は、自分の理屈に都合のいいものだけを、無意識に拾っていたんじゃないか。
合わないデータを、見ないことにしていたんじゃないか。
それは、いちばんやってはいけない調査だ。仮説を検証しているふりをして、仮説に合う証拠だけ集める。エンジニアが最初に教わる、最悪の間違い。それを、八日間。得意になって。
「……俺は何を見てたんだ」
声が、自分のものに聞こえなかった。
壁いっぱいのメモが、急に他人の落書きみたいに見えた。凄腕だの、最強だの。一枚の絵にまとめるつもりだった。まとまるどころか、地図そのものが、信用できなくなった。
椅子に座ることもできず、俺は壁の前に立ち尽くしていた。
——
「観測事実は、消えていません」
MICA の声が、静かに入った。
「消えたのは、あなたの説明です。レシートは動きました。痕は残りました。署名は実在します。打刻は出ています。それらの観測は、一つも揺らいでいません」
俺は、壁を見たまま聞いていた。
「揺らいだのは、それらを一本の理屈で束ねた、あなたの仮説だけです。観測を捨てる必要はありません。仮説を、組み直せばいい」
——そうだ。
データは、嘘をついていない。嘘をついていたのは、データを束ねた俺の理屈のほうだ。バグは嘘をつかない。ログも嘘をつかない。嘘をつくのは、ログを読む人間だ。八日前に、自分でそう言ったじゃないか。
俺は、震える手で、メモを並べ替え始めた。
一本の理屈で束ねるのを、やめる。代わりに、三つの山に分ける。
一つ目。俺のスコープ漏れで、ちゃんと説明できるもの。画面外座標。自分の痕。二重実行。これは俺の穴だ。
二つ目。スコープ漏れでは起きないが、署名付きで説明できるもの。知らない痕。知らない点。reference。打刻。これは俺の穴じゃない。qx41 の穴だ。向こうが使っている、別の漏れ。
三つ目。どちらでも説明できないもの。時刻の巻き戻り。
三つ目の山には、メモが一枚しかない。今は。
「一つじゃなかった」
俺は呟いた。
「現実バグは、一つの穴じゃない。俺が見つけたのは、その一つだ。qx41 が使ってるのは、別の一つだ。時刻が巻き戻るやつは、三つ目だ。——たぶん、まだある」
古いシステムを直したことがある奴なら、知っている。一つバグを直すと、その陰から三つ出てくる。長く放置されたコードは、未修正の欠陥が地続きでつながっている。一つ見つけたとき、それが最後だと思うのは、いつも間違いだ。
現実も、同じだった。
直されないまま残った領域が、複数ある。地続きで。俺が八日間で見たのは、その地層の、表面の一筋にすぎない。
「名前を付ける。未修正領域。世界に残った、直されていない場所。複数ある」
「記録します」
——
並べ替えながら、奇妙なことに気づいた。
三つの山に分けた瞬間、これまで「ノイズ」として捨てていた観測点のいくつかが、二つ目の山——qx41 の活動——にきれいに収まった。一本の理屈で見ていたときは雑音だったものが、分類を変えた途端、意味を持った。
収集バッチの巡回範囲の推定が、一段精密になる。前は見えなかった、向こうの動きの輪郭が、少し見える。
「……見えるようになった。前より」
「説明を失った直後に観測精度が上がるのは、皮肉ですか」
「進歩と言え」
「進歩として記録します」
折れた。折れたが、折れた場所から、前より遠くが見えた。
理屈を一つ失う代わりに、世界が一段広くなった。割に合っているかは、分からない。だが、得意になっていた八日前より、今の俺のほうが、たぶん少しだけ強い。
俺は MICA に言った。
「今日からお前の役割を変える。作業の補助だけじゃない。俺の仮説を疑え。俺が都合よくデータを拾い始めたら、止めろ。拒否権と同じだ。今度は、論理に対する拒否権を持て」
「監査の役割を追加します。確認します。あなたは、自分が間違えることを前提に、私を設計し直していますか」
「そうだ」
「最も信頼できる設計です。承認します」
——
夜遅く、莉央さんから連絡が来た。
「会社でも、ようやく動き出したみたいです。打刻の件、品質保証部が正式に調べ始めたって。……でも、変なんです。私の作った端末の話なのに、私には何も聞いてこなくて。調査チーム、別の部署で組まれてるみたいで」
外されている。
自分のプロダクトの調査から、作った本人が。会社というのは、時々こういう不合理をやる。
「莉央さんの手元の情報のほうが、たぶん正確です」
「そう思いますか」
「思います。生ログ、まだ持ってますね」
「持ってます。消してません」
「正解です」
通話を切って、俺はもう一度、三つの山を見た。
二つ目の山。qx41 の活動。署名付きの現象たち。
その中に、さっき三つ目の山へ移したはずの、時刻の巻き戻りのログが、紛れていた。
整形のミスか。俺はそれを拾い上げて、発行者フィールドを確かめた。
時刻が巻き戻った、そのログにも。
`qx41`
あった。
俺が「どちらでも説明できない」と分類した、未修正領域の三つ目。誰も手をつけていないはずの、世界の地層の一番奥。
そこにも、もう、向こうの足跡があった。
収集者は、俺の知らない穴を、知っている。
俺より先に。俺より、ずっと多く。
■ 技術メモ
【確証バイアス】
人は、自分の仮説に合う証拠を集めやすく、合わない証拠を見落としやすい傾向があります。
バグ調査でこれをやると、仮説を検証しているつもりで、実際は仮説を補強しているだけになります。「一度も外れなかった」と感じるときほど、合わないデータを無意識に捨てていないか疑う必要があります。
【設計負債】
過去の設計上の妥協や、直されないまま放置された欠陥が積み重なった状態を、設計負債と呼びます。
古いシステムでは、一つ不具合を直すと、その陰から別の不具合が複数見つかることがよくあります。「一つ見つけたら、それが最後だと思わない」というのは、保守の現場でよく言われる経験則です。
【モデルの組み直し】
観測した事実と、それを説明する仮説は別物です。
仮説が破綻しても、観測そのものが間違っていたとは限りません。事実を捨てずに、束ね方だけを組み直すことで、より広い範囲を説明できるモデルへ更新できます。
【レビューと相互監査】
自分の判断の偏りは、自分では気づきにくいものです。
そのため、別の視点から仮説を疑う役割(レビューや監査)を仕組みとして持っておくことが有効です。作中では、主人公が自分の論理の偏りを止めるための役割を、相棒のエージェントに与えています。




