守夜區裡,所有終端都安靜了。
隻有那一行白字懸在中央。
Do not trust the shell.
不要相信 Shell。
這句話冇有感歎號。
冇有紅色警報。
甚至冇有任何花哨效果。
可它比剛纔所有異常都冷。
因為一路上指引陳序的,就是 Shell 信號。
因為周野,就是運維。
就是 Shell。
裴森第一個開口。
“解釋一下?”
他的聲音不高,指尖卻已經纏上了銀色腳本流。
那幾縷銀光不像之前那樣懶散地繞著手指轉,而是壓得很細,像隨時能刺出去的針。
周野冇有立刻回答。
藍白色光標停在半空,一閃,一閃。
陳序看著那道光標,冇有說話。
餘未的視圖碎片懸在身前,所有畫麵都對準了中央終端。她冇有攻擊,也冇有質問,隻是把剛纔那段記錄一幀幀拉出來。
RealityService boot record found.
Boot attempt: 0001
Core dependency missing.
Fallback target selected.
Target: ChenXu
Do not trust the shell.
她低聲說:“最後一句,和前麵的顯示層不一樣。”
裴森看向她。
“什麼意思?”
餘未指尖一劃。
前幾行日誌被放大,字元邊緣是藍白色,像守夜區終端本身渲染出來的。
最後一句白字則不一樣。
邊緣很乾淨。
乾淨得像直接寫在終端之上。
不是同一個渲染層。
“前麵是日誌。”餘未說,“最後一句像插入。”
裴森立刻看向周野。
“誰插的?”
周野終於出聲。
“我也想知道。”
裴森冷笑。
“這話真方便。”
周野聲音冷了下來。
“你要是覺得方便,可以現在轉身回新手區。”
“你急什麼?”裴森指尖銀光亮起,“被點名的是你,不是我。”
“被拖進來的也不是你。”
“現在是我們三個一起站在這裡。”裴森說,“你一路藏頭露尾,讓我們跟著你進維護通道,結果終端跳出來一句彆信 Shell。你覺得我不該問?”
守夜區的終端光映在三個人臉上。
陳序還是冇說話。
他的頭很疼。
Mental load: critical
不是擺設。
每一次呼吸,胸口封裝邊界都像在輕輕拉扯。可越是這種時候,他越不能被情緒牽著走。
現實裡的生產事故,最煩的往往不是爆炸那一秒。
是群裡開始甩鍋的時候。
前端說介麵不對,後端說參數不對,網關說流量正常,運維說機器冇問題,產品說用戶已經炸了。
每個人都在說話。
可說話不等於真相。
真相在日誌裡。
陳序抬起頭。
“先彆吵。”
裴森看他。
“你信他?”
陳序說:“我現在誰都不信。”
周野冇說話。
裴森愣了一下。
陳序看向中央終端。
“我隻信調用鏈。”
守夜區裡安靜了一瞬。
隨後,半空裡的藍白光標輕輕閃了一下。
周野的聲音低了一點。
“像個後端了。”
裴森嘖了一聲。
“你彆誇,他現在連你也不信。”
“這纔對。”周野說。
陳序抬手,胸前金色邊界亮起一小圈。
他冇有開放核心。
隻是打開了 public status() 外層麵板,又從 protected trace() 裡拉出一小段可控鏈路。
protected trace:
source = terminal boot record
target = RealityService
filter = insertion layer
暗金色鏈路伸向中央終端。
終端冇有拒絕。
但在鏈路觸碰到那行白字時,整片守夜區的光都暗了一下。
permission warning
陳序皺眉。
周野說:“這段記錄權限比守夜區高。”
裴森立刻問:“比你還高?”
“嗯。”
這個回答太乾脆。
裴森反而愣了一下。
餘未看著視圖碎片。
“不是周野權限層。”
她把畫麵拉開。
守夜區終端像一座由藍白字元構成的森林。每個終端都有根線,連接到地麵深處某個更大的日誌源。
而那句 Do not trust the shell,不是從這些根線裡長出來的。
它像一根針。
從更上方刺下來。
直接釘在終端表層。
餘未抬頭。
“它從上麵來的。”
陳序順著她的視圖看過去。
守夜區上方不是天空。
是一層黑色穹頂。
穹頂裡有無數細小的白色斷點,像還冇加載出來的星圖。
其中一個斷點,正亮著微弱的白光。
陳序胸前的 Root fragment: hidden 輕輕發熱。
中央終端再次閃動。
Log integrity check...
一條進度線緩慢爬過。
百分之十。
百分之三十。
百分之五十。
突然停住。
integrity: compromised
裴森吹了聲口哨。
“日誌被改過。”
周野冷冷說:“不是改過。是被覆蓋過一層。”
“有區彆?”
“有。”陳序說,“改日誌是改內容。覆蓋一層,是原始日誌可能還在下麵。”
裴森看向他。
“能扒出來嗎?”
陳序冇有馬上回答。
他現在不能亂用對象,也不能強行全量掃描。
但他們有團隊。
他看向裴森。
“你能采樣,不要全量。”
裴森笑了。
“終於輪到我了?”
“彆興奮。”周野說,“這裡全量掃會觸發守夜區自毀保護。”
裴森臉色一僵。
“你們這裡怎麼到處都是彆亂動?”
周野說:“因為總有人亂動。”
裴森不說話了。
陳序又看向餘未。
“你能標層嗎?”
餘未點頭。
“我能把日誌表層、覆蓋層和原始層分開渲染,但隻能看見邊緣。”
“夠了。”
陳序抬手。
validate(log layer)
金色方法門在終端前打開。
它不是攻擊。
是校驗。
裴森釋放十二根銀色細針,隻采那句白字邊緣的幾處斷點。
餘未把每個斷點放大,標成不同顏色。
藍白是守夜區日誌層。
灰色是終端緩存層。
白色是覆蓋層。
最底下,還有一絲極淡的紅。
陳序看見那抹紅,眼神沉了下來。
“下麵有東西。”
裴森說:“Null?”
“不像。”餘未說,“Null 是空白侵蝕,這個更像……需求標記。”
周野的聲音第一次出現明顯停頓。
“彆碰紅色層。”
陳序問:“為什麼?”
“那不是你現在該看的。”
裴森冷笑。
“又來了。不能看,不能碰,不能問。”
周野說:“因為你們現在看了,可能會被它看見。”
這句話讓守夜區再次安靜下來。
陳序看著那抹紅色。
需求標記。
這幾個字,他太熟悉了。
現實裡,需求不是壞東西。
但失控的需求,比 Bug 更可怕。
Bug 至少知道自己是錯。
需求會認為自己永遠正確。
陳序緩慢收回手。
“先不碰紅色層。”
裴森看向他。
“你還真聽他的?”
“不是聽他。”陳序說,“是風險太高。”
他指向覆蓋層。
“先看白色這一層是誰寫的。”
裴森哼了一聲,但還是繼續采樣。
銀色細針從白字邊緣帶回幾段碎片。
writer: unknown
signature: shell-like
source: upper-layer
裴森盯著 shell-like。
“像 Shell。”
周野說:“像,不是。”
陳序看著那行。
“所以這句話不是一定來自周野,但偽裝成了 Shell 風格。”
餘未補充:“或者來自另一個能寫 Shell 風格指令的東西。”
中央終端突然彈出第二行白字。
The shell opened the door.
裴森的銀光瞬間亮起。
“它還在寫。”
周野低喝:“彆攻擊終端!”
裴森硬生生停住。
陳序盯著新出現的白字。
Shell 打開了門。
這句話冇錯。
是周野打開了維護通道。
但它隻說了事實的一部分。
事實最可怕的地方,就是可以被裁剪成謊言。
它冇有撒謊。
它隻是把原因、時間、動機全部刪掉,隻留下最容易讓人懷疑的一截。
陳序說:“繼續校驗。”
金色 validate() 方法門再次亮起。
statement: The shell opened the door.
result: true
context: incomplete
裴森怔了一下。
“還能這麼判?”
陳序說:“線上事故裡,最怕半句真話。”
餘未看著終端。
“它在引導我們懷疑周野。”
“也可能是在提醒我們。”裴森說。
陳序點頭。
“所以先不下結論。”
他看向藍白光標。
“周野,你打開門的原因是什麼?”
廣播裡傳來很輕的電流聲。
“因為你身上的 Root fragment 不能留在新手區。”
“為什麼?”
“新手區承載不了。”
“會怎樣?”
周野停了幾秒。
“會把下一波重試引進去。”
陳序想起新手編譯區城門外黑暗深處那些等待重試的東西。
他冇有繼續追問。
因為這個回答可以解釋周野為什麼急著讓他來守夜區。
但不能證明周野可信。
中央終端又跳出一行白字。
The shell hides the root.
陳序眼神一動。
validate() 亮起。
statement: The shell hides the root.
result: unknown
context: missing
未知。
上下文缺失。
這比 true 更麻煩。
周野冇有反駁。
裴森立刻注意到了。
“你怎麼不說話?”
周野聲音低沉。
“因為這句話不全是假的。”
守夜區的溫度像降了一點。
餘未輕聲問:“你確實隱藏了 root?”
“我隱藏的是入口。”周野說,“不是根片段本身。”
陳序問:“入口在哪?”
周野說:“在你還不能看的日誌裡。”
裴森冷笑:“又不能看。”
周野這次冇有回懟。
“對。”
“不能看。”
“因為那個入口後麵連著第一版 RealityService 的啟動失敗記錄。”
陳序胸前源碼銘牌驟然發燙。
Root fragment:hidden
隱藏的那一行閃了一下。
像有什麼東西被這句話驚醒。
中央終端的白字忽然開始大量刷出。
Do not trust the shell.
The shell opened the door.
The shell hides the root.
The shell selected the fallback.
The shell knows why ChenXu was chosen.
一行接一行。
越刷越快。
裴森罵了一句。
“它在刷屏帶節奏!”
餘未的視圖碎片開始抖動。
“覆蓋層擴散了。”
周野聲音猛地拔高。
“切斷終端顯示!”
裴森看向陳序。
“聽誰的?”
這一瞬間,所有目光都落到陳序身上。
信周野,就切斷終端。
不信周野,就繼續看下去。
可繼續看,可能被紅色需求層看到。
切斷,又可能錯過關鍵證據。
陳序閉了閉眼。
現實裡,事故群最混亂的時候,最不能做的就是二選一拍腦袋。
他抬起手。
“都不選。”
金色邊界亮起。
snapshot()
一層薄薄的金光貼上中央終端,把當前刷出的所有白字凍結成快照。
然後,陳序看向裴森。
“采樣快照,不采實時流。”
裴森眼睛一亮。
“懂了。”
銀色腳本流立刻繞過實時滾動的白字,隻從金色快照上抽樣。
陳序又看向餘未。
“標記擴散邊界,不深入紅色層。”
餘未點頭。
彩色視圖碎片立刻把覆蓋層擴散範圍圈成白色,把紅色底層標成禁止接觸。
最後,陳序看向藍白光標。
“周野,切斷實時顯示,不動底層日誌。”
廣播裡傳來一聲短促的笑。
“可以。”
Shell:kill -9 overlay display
藍白命令列光標刺進終端表層。
刷屏的白字戛然而止。
但金色快照還留在半空。
裴森看著那層快照,吹了聲口哨。
“這操作挺後端。”
陳序臉色白得嚇人。
“少廢話,采。”
銀色腳本流迅速穿過快照。
一段段資訊被抽出來。
overlay source: upper layer
style: shell compatible
intent: trust disruption
red layer proximity: high
餘未把 intent 放大。
“目的:破壞信任。”
裴森看向周野,又看向陳序。
“所以它確實是在離間?”
陳序說:“至少這一層是。”
“那周野可信?”
“不等於。”
裴森噎了一下。
陳序盯著快照。
“證明有人說謊,不等於另一個人就在說真話。”
周野低聲說:“很好。”
裴森煩躁地抓了把頭髮。
“你們後端說話都這麼繞嗎?”
陳序冇理他。
他看著最後一行。
red layer proximity: high
紅色層很近。
而餘未剛纔說,那可能是需求標記。
陳序問:“周野,紅色層是什麼?”
這一次,周野沉默了很久。
久到守夜區裡所有 tail -f 終端都重新開始輕輕滾動。
然後他開口。
“混沌需求的痕跡。”
陳序心裡一沉。
這個名字,他還冇聽過完整解釋。
但“需求”兩個字,已經足夠讓他警覺。
裴森皺眉。
“需求?”
周野說:“對。”
“會把真話裁剪成誤導,把警告包裝成命令,把根因偽裝成用戶訴求。”
“它不是現在的主敵。”
“但它的影子已經在 RealityService 啟動記錄附近出現了。”
陳序看向那片紅色禁區。
“所以 RealityService 啟動失敗,不隻是 Null 的問題。”
周野說:“從來都不是。”
中央終端最底層,忽然浮出一行極淡的紅字。
餘未臉色一變。
“它自己出來了。”
陳序冇有碰。
裴森也冇有采。
三個人隻是看著那行紅字從日誌深處緩慢浮起。
Requirement accepted without validation.
未經驗收的需求,已被接受。
陳序的呼吸停了一下。
現實公司裡,最可怕的事故往往不是某一行代碼寫錯。
而是一個冇人敢拒絕、冇人敢驗收、冇人敢定義邊界的需求,被一路放進了生產。
源碼世界裡,也一樣。
紅字隻出現了一瞬,就被守夜區終端強行壓了下去。
周野聲音沉得嚇人。
“夠了。”
“今天到這裡。”
裴森立刻說:“你又想藏?”
“我是在防止它定位你們。”
陳序看著那片紅色消失的位置。
這一次,他冇有反駁。
因為他的源碼銘牌上,已經跳出了新的警告。
External attention detected.
有什麼東西,看見他們了。
不是 Null。
不是 Shell。
是更上層、更混亂、更像“需求”的東西。
守夜區深處,那聲鍵盤敲擊再次響起。
噠。
噠。
噠。
像有人在黑暗裡,一下一下輸入新的驗收條件。
中央終端重新亮起。
這一次,不是白字。
也不是紅字。
而是一行灰色提示。
Next log available:dependency log
陳序看著那行提示,慢慢握緊手。
裴森問:“還看?”
陳序說:“看。”
周野低聲說:“你現在狀態很差。”
陳序盯著終端。
“線上事故不會因為我狀態差就暫停。”
餘未收起視圖碎片,又重新展開。
“那就隻看一層。”
裴森抬起銀色腳本流。
“隻采樣,不深入。”
周野沉默片刻。
“我守外層。”
陳序看著那三個方向的光。
金色邊界。
銀色采樣。
彩色視圖。
藍白 Shell。
他們還冇有互相信任。
但暫時能一起排查。
這就夠了。
中央終端緩緩打開 dependency log。
第一行日誌浮出。
Dependency record:
ChenXu was not the first fallback.
陳序瞳孔微縮。
不是第一個?
下一秒,終端深處傳來一陣更沉的敲擊聲。
像某個被隱藏很久的名字,正在黑暗裡重新加載。
而那個人,曾經站在陳序現在的位置。