array(5) { ["chapterid"]=> string(8) "49247955" ["articleid"]=> string(7) "7279460" ["chaptername"]=> string(7) "第8章" ["content"]=> string(12487) "维护通道的门,比陈序想象中窄。
窄得不像通往安全区深处,倒像通往机房后面那条没人愿意走的消防通道。
门上浮着一行蓝白色小字。
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。
守夜区深处,传来一声很轻的键盘敲击。
哒。
像有人在黑暗里按下了回车。
也像有人刚刚确认,他们已经走进了正确的陷阱。" ["create_time"]=> string(10) "1785508771" }