梁子謙的工作室在一棟舊商辦的七樓。
電梯門打開時,葉龍浩先看見的是三排貼著年份的灰色收納箱,接著才是沿牆堆放的硬碟座、掃描器和幾台早已停產的讀取設備。最裡面那張桌子被六個螢幕包圍,桌角卻擺著一只很普通的馬克杯,上面寫著「先備份,再後悔」。
「我先說,違法的事不做,幫你猜密碼也不做。」
梁子謙把椅子踢開一點,讓三人有地方放資料。他三十多歲,頭髮像是起床後只用手隨便壓過,說話速度很快,視線卻已經掃過葉龍浩帶來的每一只檔案袋。
「我只是請你看資料。」葉龍浩說。
「每個來找我的人一開始都這樣講。下一句通常就是『可不可以順便進一下原系統』。」
陳柏青把資料調閱同意與來源清單放到桌上。「不進原系統。公開檔、專案授權資料、個人申請副本,還有她本人同意提供的紀錄。」
他說到最後,指了一下林曦雨。
林曦雨把自己的同意書推過去。「先提醒你,等一下如果你忘了我是誰,不代表我偷偷混進來。」
梁子謙抬頭看她,又看向葉龍浩。「你們的案子現在連開場白都這麼特別?」
「先寫名字。」葉龍浩說。
「寫哪?」
「你平常最常看的地方。」
梁子謙半信半疑,最後在螢幕旁貼了一張黃色便條:林曦雨,紀錄當事人。寫完還加了一行小字:本人在場,別再問一次。
「滿意了?」
林曦雨看著便條。「目前很有禮貌。」
梁子謙和葉龍浩是在三年前的舊城圖資轉換案認識的。那次承包商把兩套不同年代的門牌欄位硬塞進同一個格式,造成二十多條巷弄在新版底圖上彼此重疊。所有人都以為是座標錯置,只有梁子謙在一堆欄位裡找出真正問題:舊系統把「附號」——也就是「二十五之三號」裡的「之三」——當文字,新系統卻把它當成可排序數字,原本「之十」排在「之二」前面,轉換後順序全部改變,連帶讓整批地址資料發生錯位。
他不是駭客,也不喜歡別人這樣叫他。
他做的是舊庫遷移、資料救援和系統轉換後的差異查核。用他的話說,就是替那些「明明還能開,大家卻已經不敢碰」的老資料收拾後事。
葉龍浩先把十三號的資料交給他。
舊水務服務點、電力負載、郵遞路線、醫療轉送索引與不同年代的街廓圖都只保留查核所需欄位。梁子謙沒有急著看內容,先驗檔案建立時間、匯出來源和雜湊值,再把每份資料的欄位沿革列出來。
「如果是轉檔事故,通常會有一個共同傷口。」他說,「同一批空值、同一種編碼錯誤,或同一天突然多出一堆預設資料。只要找到第一個出問題的版本,後面都是子孫。」
「現在看起來呢?」陳柏青問。
「現在看起來,你們帶了五個不同家庭的小孩來問我誰是同一個爸爸。」
梁子謙把水務資料拉到左側螢幕,又將2014年前後的欄位對照放到右邊。十三號的服務點沒有被刪除。它在新版系統裡被標成「併戶」,歷年讀數則依比例分配到相鄰十二戶;每一筆調整都有規則可循,沒有突兀空值。
郵務資料用的是另一種做法。
投遞路線中的十三號先被註記為「查無此址」,下一次路線重編時不再出現。原本排在它後面的門牌沒有跳號,因為新路線只保留實際投遞順序,不保留舊地址的連續性。
醫療索引更乾淨。那筆從十三號送出的紀錄沒有消失,只是轉出位置被歸入「地址無法辨識」,與其他幾筆字跡模糊的紙本一起進入例外欄位。
「三個系統,三種補法。」梁子謙說,「如果是同一支轉檔程式弄壞的,不會這麼有創意。」
葉龍浩把林曦雨同意提供的紀錄放到桌上。
她的情況和十三號不同。醫療、租屋、通訊與帳務資料都承認她存在,欄位格式也沒有異常。真正奇怪的是來源關係。每一套系統都能說明「現在為什麼有這筆資料」,卻無法一路追到最早建立她的那個入口。
她第一次留下的醫療紀錄像是接續某次觀察,前面卻沒有初診;最早一份租屋資料寫著「續約」,找不到前一份合約;通訊帳務的客戶狀態是「既有戶移轉」,原業者欄位卻只剩一個已停用的代碼。
「這種通常是舊公司倒掉、紙本沒掃完,或資料交換只拿到半套。」梁子謙仍在說明可能性,「單看任何一份都不稀奇。」
「合在一起呢?」葉龍浩問。
梁子謙沒有回答。
他建立一張時間表,把各機關的資料依「本筆來源」與「前一筆關聯」往回追。螢幕上很快出現幾條不同顏色的線。每一條都能往前走,也都在接近2014年時自然轉向別處:醫療把起點交給紙本轉入,租屋把起點交給前約,帳務把起點交給舊業者。
沒有一條線真的斷掉。
可也沒有一條能抵達林曦雨最初出現的地方。
梁子謙起身去後方拿另一台讀取器。回來時,他站在桌邊看了林曦雨兩秒,目光移到黃色便條,才把原本要問的話吞回去。
林曦雨沒有拆穿,只把椅子往旁邊讓了一點。
接下來一個多小時,梁子謙的玩笑越來越少。
他檢查時區、欄位預設值、批次作業時間和可能的人工補登,又把每份資料的錯誤模式分開重做一次。結果仍然一樣:十三號與林曦雨不是被同一種技術手段刪除;資料甚至沒有表現出「曾被刪除」的樣子。
它們只是在每個可能產生矛盾的地方,剛好得到一個合理去處。
水量被別戶吸收,門牌被路線重編略過,醫療位置被歸到無法辨識;林曦雨的每一份紀錄則都把起點交給另一份已經不存在的前件。
「會不會是有人很早以前就知道所有系統怎麼運作?」陳柏青問。
「那他不只要知道。」梁子謙盯著螢幕,「他還得跨十幾年,預先知道每個機關以後會換什麼格式、哪些欄位會保留、哪些例外值會被接受。中間任何一次改版方式不同,這些資料早就應該撞出錯誤。」
「可是沒有。」葉龍浩說。
「對。」
梁子謙把最後一份檢查結果放大。
畫面上沒有紅色警示,也沒有破損欄位。每一列狀態都是綠色,驗證通過,前後總數一致。
他沉默很久,才把螢幕轉向三人。
「這不是資料壞掉。」
梁子謙指著那一整片過分乾淨的綠色。
「是資料太努力讓自己看起來沒壞。」