淩晨一點四十六,東川金融大廈二十一層,風控技術部隻剩一排還亮著。
林淵坐在最裏麵那張工位上,盯著螢幕沒動。
辦公室太安靜,空調出風口的嗡鳴都像有人在耳邊吹氣。玻璃幕牆外,城南高架的車流已經稀了,偶爾有一輛夜班出租掠過去,尾燈拖出一道細長的紅。
他桌上的咖啡早涼了,杯口浮著一層薄薄的油光。右手邊堆著兩份回滾報告,左手邊是一盒沒拆完的胃藥。顯示器上,資料庫審計日誌不斷往下滾,綠色、白色、紅色,像一條一直不肯停的河。
林淵三十歲,程式設計師幹了八年,習慣把生活拆成一段段可執行流程。
上班,修 Bug,回出租屋,洗澡,睡覺。週末如果沒臨時加班,就打兩把遊戲,或者去健身房把自己練得像個沒情緒的機器。
朋友不算多,能半夜叫得動的更少。
他不是社恐,隻是懶得把時間浪費在無用社交上。對他來說,大部分人說話像寫一堆沒有任何呼叫價值的注釋,字很多,資訊量很低。
今天原本不該加班。
係統本來已經通過了夜間批處理,按流程他十點前就能走。偏偏十一點四十七,風險引擎突然彈出一條異常記錄,像有人在幹淨地板上按了個血手印。
`ERROR: Anchor deviation exceeds threshold.`
這條報錯第一次出現時,林淵還以為是哪個新來的把測試欄位帶進生產環境了。
可問題在於,整個風控係統裏,壓根沒有叫 `Anchor deviation` 的欄位。
他全域性搜了一遍。
沒有。
查依賴包。
沒有。
翻最近一週提交記錄。
還是沒有。
那條報錯卻每隔七分十三秒跳一次,準得像鬧鍾。
林淵把呼叫鏈拉出來,一層層往下翻,翻到最底層時,螢幕短暫黑了一下,又重新亮起。像有人隔著玻璃,輕輕用指節敲了敲他麵前這台電腦。
然後,第二條報錯彈了出來。
`WARNING: Local probability chain polluted.`
林淵後背一涼。
這已經不是工程師亂起名字的風格了。
“你媽的……”
他低低罵了一句,重新坐直,十指落回鍵盤。
如果說第一條還能解釋成髒資料,那第二條已經像某種惡作劇。問題是,能繞過公司審計係統,在覈心日誌裏留這種東西的人,整個技術部一個巴掌都數得過來。
他先鎖死了外部介麵。
再切換隻讀映象。
然後把生產日誌和備份日誌做差分比對。
淩晨一點五十八,他盯著結果看了整整十秒,才緩緩眯起眼。
兩份日誌完全一致。
一致到離譜。
哪怕是複製貼上,也不可能連一個時間抖動都沒有。
這說明那兩條報錯不是被人“加進來”的,而像是它本來就在那裏,隻是以前沒人看見。
他抬手揉了揉眉心,胃裏一陣發空。
辦公室最外麵的感應燈忽然滅了。
整層樓隻剩他這邊的工位還亮著。隔著玻璃看過去,黑下來的辦公區像一塊一塊切好的棺材板。林淵盯著螢幕,莫名想起白天同事說的那起新聞。
東城區舊公寓,電梯墜落。
死了一個剛畢業的女孩。
新聞稿寫得很標準,說是線路老化,物業失責,已責令排查。可白天茶水間有人提了一嘴,說那女孩死前半小時,剛在網上被人掛了身份證和住址。
林淵對這種事一向不愛摻和。
不是冷血,是他太清楚一件事:輿論場裏九成的人根本不在乎真相,隻在乎自己有沒有站在熱鬧中間。
但也不知道為什麽,他這會兒忽然把新聞頁麵調了出來。
手機亮起,慘白的光落在他指節上。
新聞配圖是那棟舊公寓樓下拉起的警戒線。電梯門半開,裏麵一片漆黑。死者照片打了碼,隻剩半張模糊的臉和一截白得過分的手腕。
林淵的目光停了一秒。
那截手腕上,似乎有一道很細的紅痕。
不是擦傷。
更像遊戲角色受擊後殘留的那種紅色描邊。
他皺了皺眉,點開評論區。前幾條全是罵物業的,再往下翻,一條高讚回複突然讓他手停住了。
“她也算活該,誰讓她自己裝無辜。”
這條評論下麵,跟了上千條附和。
林淵麵無表情地看完,又退回新聞頁,心裏卻有根線被悄悄扯了一下。
就在這時,電腦螢幕右下角的工作軟體忽然最小化。
沒任何操作。
沒任何彈窗提示。
整個桌麵像被一隻看不見的手掀開一層皮,露出底下一片極淡的灰白色紋路。那些紋路先像雪花,隨後又慢慢組成了類似地圖的東西。
林淵本能想截圖。
手剛碰到快捷鍵,那片灰白色紋路突然一震。
他看見了一棟樓。
舊公寓。
看見了半開的電梯門。
看見地上有個人影,姿勢扭曲得不像摔死,更像是被人強行按成那個形狀。
然後,一切停住。
在那段靜止畫麵裏,最不對勁的不是屍體。
而是牆上的監控時間。
23:17。
比新聞裏公佈的死亡時間,早了整整二十分鍾。
“……幻覺?”
林淵喉結動了一下,聲音很低。
沒人回答。
下一秒,螢幕恢複正常,工作軟體重新彈回最前。彷彿剛才那幾秒隻是他熬夜過頭產生的錯覺。
可林淵的心跳已經徹底亂了。
他不是容易被怪力亂神嚇到的人。程式設計師這個行當做久了,最不缺的就是對異常的耐心。可剛才那一眼太具體,具體到不像幻覺,像一次短暫成功的“呼叫”。
他立刻去調東城區那棟舊公寓的公開監控備份。
這種小區級監控,正常情況下外網看不到原始檔案,但媒體平台為了做報道,往往會在二次轉碼時殘留一些低清快取。他順著視訊 CDN 抓了三層快取,十分鍾後,真從一段模糊到發糊的片源裏,把電梯口畫麵拉了出來。
很糊。
噪點很重。
但能看。
林淵把進度條一點一點拖過去。
23:16。
電梯還沒開。
23:17。
門開了。
一個穿白外套的女孩踉蹌著從畫麵外側衝進來,像在躲什麽人。她按下關門鍵,動作急得幾乎在發抖。
可鏡頭右下角還有另一個東西。
不是人。
是一道影子。
它比女孩慢了一拍,先貼著牆滑過來,隨後纔像被什麽東西拽住似的,跟進電梯門裏。
林淵眼神瞬間沉了。
正常人不會注意這個。
因為監控太糊,燈光也差,乍看像壓縮造成的拖影。但林淵做過視訊去噪和模型識別,他很清楚壓縮噪點怎麽走,動態拖影怎麽抖。
這不是拖影。
這是一個獨立的輪廓。
他把畫麵暫停,放大,再放大。
女孩的臉已經糊得看不清了,那道影子卻莫名清晰了一點。像是它不屬於現實光線,反而更像屬於另一套顯示規則。
林淵盯了五秒,指尖忽然開始發涼。
因為他看見,那道影子抬頭的時候,正對著監控。
而它沒有臉。
隻有一團模糊的黑。
螢幕右下角,那兩條離譜的係統報錯,又無聲無息跳了出來。
`ERROR: Anchor deviation exceeds threshold.`
`WARNING: Local probability chain polluted.`
林淵坐著沒動,耳邊卻像突然灌進了一整層樓的風。
他終於意識到一件事。
今晚出問題的,不是公司係統。
是這座城裏,有什麽東西先出了錯,而他正好成了第一個看見報錯日誌的人。
手機忽然震了一下。
是周嶼發來的訊息。
“沒睡吧?東城電梯案有點怪,你以前不是最會扒監控?幫我看個東西。”
林淵盯著那條訊息,半天沒回。
螢幕裏,那道沒有臉的影子還停在電梯門內,像在等他做決定。
他慢慢把椅子往後推開,站起身,拿起外套。
這已經不是強迫症能不能忍的問題了。
是他看見了一個 Bug。
而那個 Bug,正站在監控裏,回頭看他。