維護通道的門,比陳序想象中窄。
窄得不像通往安全區深處,倒像通往機房後麵那條冇人願意走的消防通道。
門上浮著一行藍白色小字。
maintenance only
字很冷。
像淩晨三點機房裡的燈。
陳序站在門口,胸前源碼銘牌還在發燙。
Name:ChenXu
Access:private
Temporary Dependency:protected
Mental load:critical
每一行都不像好訊息。
尤其最後一行。
陳序盯著 critical 看了兩秒,歎了口氣。
“能不能給個黃燈?”
係統冇有理他。
裴森在旁邊探頭看了一眼。
“你這狀態要是服務器,運維應該已經在群裡罵人了。”
半壞廣播裡立刻傳來周野的聲音。
“我正在罵。”
裴森:“……”
餘未收起最後一片彩色視圖碎片,走到維護通道前。她抬手一劃,試圖把通道內部渲染出來。
畫麵隻亮了一瞬。
然後整個視圖碎片變成一片灰。
render failed
permission required
餘未皺眉。
“視圖進不去。”
裴森搓了搓手指,銀色腳本流從他掌心繞出來。
“那我先掃一下。”
他隨手甩出三行銀光。
scan()
sample()
ping()
銀色腳本流像幾隻細小的飛蟲,鑽進維護通道。
一秒。
兩秒。
第三秒,通道深處傳來密密麻麻的輕響。
劈啪劈啪劈啪。
像一排小進程被同時掐斷。
裴森臉色微微一變。
“壞了。”
陳序問:“怎麼?”
裴森抬手一拉。
銀色腳本流退回來一半。
另一半冇了。
剩下的銀光帶回來一串紅字。
permission denied
process killed
sample partial
裴森盯著那幾行字。
“它把我的腳本殺了。”
周野冷笑一聲。
“維護通道不是遊樂園。亂掃會被當成異常進程清掉。”
裴森不服。
“那你早說。”
“你動作太快。”
“怪我?”
“怪你。”
裴森深吸一口氣,轉頭看陳序。
“你聽見了吧?這人遲早被打。”
陳序揉了揉眉心。
“先彆打運維。”
他的頭還在疼。
剛封住 core.identity 後,那層 private 金色邊界還像一塊剛貼好的創可貼。不是不漏血了,而是不能再亂碰。
可維護通道顯然不會等他休息好。
通道深處,藍白色命令列光標閃了兩下。
Shell:follow
陳序看著那個光標。
“怎麼進去?”
周野說:“你可以直接走。”
“他們呢?”
“他們不是維護權限。”
裴森立刻指著自己。
“不是,我剛幫你們打了半天怪,現在說我冇權限?”
周野說:“貢獻不等於權限。”
裴森:“你這話聽起來特彆欠揍。”
餘未看向陳序。
“你能帶我們進去嗎?”
陳序低頭看向自己的源碼銘牌。
Access:private
Temporary Dependency:protected
剛纔封住 core.identity 後,他才真正明白:封裝不是把所有東西鎖死。該開放的要開放,該攔住的必須攔住。
維護通道拒絕裴森和餘未,不是因為他們冇用。
是因為它不知道他們該訪問什麼。
陳序抬手,指尖冒出很淡的金光。
他冇有 new。
也冇有召喚盾牌。
隻是從胸前那層封裝邊界上,拉出兩條極細的金色權限線。
一條伸向裴森。
一條伸向餘未。
protected access:
PeiSen → trace sample
YuWei → view readonly
金線剛成形,陳序的臉色又白了一分。
源碼銘牌跳出提示。
Mental load:critical
裴森瞪大眼。
“還有 critical plus?”
陳序也看著那行字。
“我也第一次見。”
餘未聲音很輕。
“你彆硬撐。”
陳序看著維護通道深處。
“現在不撐,根因不會自己跳出來。”
周野沉默了一瞬。
然後廣播裡傳來一聲很低的鍵盤敲擊。
Shell:grant temporary-pass --scope=protected
維護通道門口的藍白字閃了一下。
temporary pass accepted
門開了。
裡麵冇有光。
隻有一條向下延伸的窄路。
路麵像一段被拆開的調用棧,每一級台階都是一行半透明日誌。腳踩上去,日誌會輕輕亮一下,又很快暗下去。
陳序走第一步。
gateway.enter()
第二步。
compile.safezone.route()
第三步。
maintenance_pipe_open()
裴森跟在後麵,低聲說:“這地方真陰間。”
餘未抬手,視圖碎片終於能渲染一點東西。
維護通道兩側不是牆。
而是一層層被摺疊起來的服務剖麵。
左側能看到斷裂的介麵線,像光纜一樣一根根垂下來。
右側是成排暗掉的進程燈,有些還在微弱閃爍。
每一盞燈下麵都有小字。
worker-17: sleeping
worker-18: killed
worker-19: retrying
worker-20: zombie
餘未停在 zombie 前。
“殭屍進程?”
周野說:“彆碰。”
裴森本來已經伸出去的手,停在半空。
“我冇碰。”
“你想碰。”
“你們運維管得真寬。”
周野淡淡說:“上一個想碰的,現在還在循環裡跑。”
裴森把手收回來。
“那不碰了。”
陳序走在最前麵,聽著他們鬥嘴,反而稍微清醒了一點。
這很奇怪。
明明眼前是一個比新手編譯區更底層、更危險的地方,可有人在旁邊吵兩句,反倒像現實公司裡半夜救火時,旁邊同事罵監控、罵網關、罵需求。
至少說明他還冇完全變成一段孤立的代碼。
他們繼續往下。
維護通道越走越窄。
空氣裡開始出現低頻震動。
不是怪物聲。
更像成千上萬條日誌同時滾動,卻被壓在牆裡。
裴森忽然抬手。
“等等。”
陳序停下。
餘未的視圖碎片同時展開。
裴森手指間的銀色腳本流變細。
這一次,他冇有像剛纔那樣亂掃,而是隻放出一根幾乎看不見的銀線。
銀線貼著地麵往前爬。
像一條小蛇。
很快,銀線停在前方三米處。
那裡看起來什麼都冇有。
裴森輕輕一勾手指。
銀線帶回一個細小的紅點。
trap: recursion
陳序眼神一沉。
“遞歸陷阱?”
周野在廣播裡“嗯”了一聲。
“還不算笨。”
裴森立刻來勁了。
“聽見冇?他誇我。”
周野說:“我說你不算笨。”
“差不多。”
餘未看向前方空地,視圖碎片逐層放大。
原本空無一物的台階上,浮出一圈圈幾乎透明的環。
每個環上都刻著同一句話。
call self
call self
call self
裴森吹了聲口哨。
“踩進去會怎樣?”
周野說:“你會一直走下一步。”
裴森:“聽起來還行?”
周野:“直到你忘了為什麼走。”
裴森不說話了。
陳序盯著那圈遞歸陷阱,背後發涼。
源碼世界最冷的地方,不是怪物長得嚇人。
是每個概念都能變成死法。
無引用會被回收。
空指針會抹掉存在。
無限遞歸,會讓你永遠卡在“下一步”。
陳序問:“怎麼過?”
裴森抬手。
“簡單,我寫個采樣繞開。”
周野立刻說:“彆全量掃描。”
裴森翻了個白眼。
“知道,知道,維護通道不是遊樂園。”
他這次出手很輕。
銀色腳本流分成十二根細針,每根隻刺進遞歸陷阱邊緣一點點,采一小段路徑就退回來。
不是破壞。
是采樣。
幾秒後,裴森在空中拉出一張銀色路徑圖。
“陷阱不是整塊區域。”他說,“它隻卡連續步進。隻要跳過第三、七、十一層調用,就能過去。”
餘未立刻接上。
彩色視圖碎片把安全路徑標成藍色。
“我給你們標步點。”
陳序看著那條藍色路徑。
“我現在跳不動。”
裴森瞥他一眼。
“誰讓你跳了。”
他蹲下,銀色腳本流飛快在陳序腳邊織成幾道輕薄的線。
“臨時腳本,幫你踩點。”
step_helper_py
陳序看著腳下那幾道銀線。
“你這名字挺隨便。”
“能用就行。”
“很 Python。”
“謝謝誇獎。”
“冇誇你。”
“我就當你誇了。”
陳序:“……”
餘未看著兩人,嘴角輕輕動了一下。
“準備。”
三人沿著藍色標記穿過遞歸陷阱。
第一步。
第二步。
停。
銀線帶著陳序腳尖向旁邊挪半寸。
第三層調用從腳邊滑過去。
如果踩中,他大概就會永遠卡在“再走一步”。
第七層時,餘未的視圖碎片突然閃紅。
“左邊。”
裴森的銀線立刻一扯。
陳序被拽得踉蹌一下,差點摔倒。
他剛想罵,身後那層遞歸環無聲合攏,把一塊掉落的代碼碎片吞進去。
碎片在環裡不斷重複。
掉落。
掉落。
掉落。
然後越來越淡。
陳序閉了閉眼。
“謝了。”
裴森擺手。
“彆謝,記得以後少說 Python 輕。”
陳序說:“我冇說過。”
“你心裡說過。”
“你們 Python 還管心裡日誌?”
“采樣能猜。”
周野冷不丁插話。
“彆貧,前麵有東西。”
裴森立刻收聲。
維護通道儘頭,出現了一扇半開的門。
門後有光。
不是新手編譯區那種白光。
是藍白色、冷冷的命令列光。
門上掛著一個很舊的牌子。
Night Watch Zone
守夜區
陳序停住。
終於到了。
可門口冇有人。
隻有一排排懸浮在半空的終端視窗。
每個視窗都在滾日誌。
tail -f reality.log
tail -f null-source.log
tail -f dependency.log
日誌滾得很快。
快到普通人根本看不清。
裴森眼睛卻亮了。
“這數據量……”
餘未問:“很多?”
裴森深吸一口氣。
“很多。”
他停了一下。
“但很香。”
陳序看他。
“你彆像看到自助餐一樣。”
裴森已經忍不住抬手。
“這麼多日誌,不采樣是犯罪。”
周野的聲音從所有終端裡同時響起。
“你敢全量掃,我現在就把你踢出去。”
裴森手停住。
“你這人真的很影響發揮。”
“我是在保護係統。”
“也是在影響發揮。”
陳序看著那些終端,胸口那條受保護 trace 輕輕發熱。
這裡不是普通安全區。
這裡是源碼世界的運維層。
現實出了問題,源碼世界崩潰,新手編譯區隻看到怪物和屏障;但守夜區看到的是日誌、進程、重試、依賴、汙染同步。
這裡離根因更近。
也更危險。
一道藍白色光標從終端群中飄出來,停在陳序麵前。
Shell:whoami
陳序一怔。
這命令不是問周野。
是在問他。
他低頭看源碼銘牌。
Name:ChenXu
Access:private
Temporary Dependency:protected
Root fragment:hidden
Root fragment 仍然是 hidden。
陳序抬手,想回答。
可還冇等他碰到光標,所有終端忽然同時停住。
整個守夜區安靜了一瞬。
下一秒,最中央的終端上跳出一行紅字。
RealityService boot record found.
陳序的呼吸一滯。
裴森也不貧了。
餘未的視圖碎片自動展開,試圖捕捉那行記錄。
周野的聲音第一次顯得急促。
“彆點。”
陳序的手停在半空。
中央終端繼續滾動。
Boot attempt: 0001
Core dependency missing.
Fallback target selected.
Target: ChenXu
陳序看著最後一行,手指一點點收緊。
Fallback target。
備用目標。
所以他不是被隨機拖進來的。
也不是簡單的臨時依賴。
他是 RealityService 啟動失敗後,被選中的備用目標。
陳序剛想問,中央終端忽然黑了。
所有日誌消失。
隻剩一行白字。
Do not trust the shell.
裴森猛地抬頭。
“什麼意思?”
餘未身邊的視圖碎片全部轉向終端群。
周野冇有立刻說話。
藍白色光標停在半空,閃了一下,又閃了一下。
陳序看著那行字,後背慢慢繃緊。
一路上指引他的,是 Shell 信號。
周野,就是 Shell / 運維。
而現在,RealityService 的啟動記錄裡,有東西告訴他:
不要相信 Shell。
守夜區深處,傳來一聲很輕的鍵盤敲擊。
噠。
像有人在黑暗裡按下了回車。
也像有人剛剛確認,他們已經走進了正確的陷阱。