周砚盯着那条灰线,半晌没说话。
“资料归档协调岗”四个字像一枚磨钝了边的钉子,钉在曲线图的末端,不疼,却足够让人知道这里被人动过手脚。岗位明明去年就已经调离,权限却还挂在链路里,像一根早该拔掉的旧线,偏偏还牵着新曲线的尾端。只要这根线不拔,问名就会被拖进历史保留里,拖进旧制度、旧口径、旧流程的阴影里,最后谁都能说一句“那不是现行责任”。
可现在的问题,不是这根线该不该拔。
而是它为什么还在。
“继续往下翻。”周砚说。
林序把图层再展开,新的关联节点从灰线后面慢慢浮出来,像被水面遮了很久的石头终于露了边。归档协调岗下方并没有直接连到抽样执行组,而是先接到一个更低一层的节点,名字很陌生,叫“继承机制维护池”。
信息中心主任的眉头一下子皱紧了。
“什么东西?”他低声问。
“维护池。”林序也像第一次见到这个词,“看权限归属,它不是现行业务系统的常规岗位,而是从旧治理系统迁移过来的遗留模块。它的作用是,把历史模板、历史口径、历史责任名全部保留在一套兼容链里,避免重组后系统断档。”
周砚听着,眼神一点点沉下去。
兼容链。
这个词太熟了。
前面的几年里,他们见过太多类似的表达。为了不让系统断档,为了避免结构切换失真,为了保证“历史可以继承”,公司把一切旧痕迹都留了下来。可留痕这件事,一旦没人负责清理,就会变成最方便的遮挡。旧的名字不删,新的责任就能被旧的名字吞掉;旧的权限不收,新的动作就能借旧的权限过门。继承机制原本是为稳定服务的,可一旦被人拿来压盲区,继承就会变成偷换。
“盲区实验。”周砚忽然开口。
屋里的人同时抬头看向他。
周砚没有解释得太快,只把屏幕上那条“继承机制维护池”拖到了最前面,又把前一章查到的“专项抽样口径预置说明”并排放在一起。两个看似不相干的东西,一左一右,像两块被刻意隔开的拼图,可当他把中间的字段拉直,所有人的视线都停住了。
维护池里有一个子标签:
【盲区实验接口】
那一行字极浅,若不是周砚把分辨率放大到最高,几乎根本看不见。它的位置也很巧,藏在继承机制的说明文档末尾,像一条默认注释,像一段不该被念出来的旁白。
“这是什么实验?”信息中心主任的声音已经有些发紧。
周砚没有立刻回答,因为他也在看第二层字段。
盲区实验接口的调用时间,不是近期,而是从更早的年份开始就被反复触发。每一次触发后面都跟着一个相同的关键词:
“变量翻转”。
第一个变量翻转,发生在六年前。
第二个,四年前。
第三个,两年前。
最近一次,是本季度。
周砚的目光在那几个年份上停了半秒。
“他们不是在单独做专项。”他说,“他们是在拿继承机制,反复验证盲区实验。”
方进的神色彻底冷了下来。
“也就是说,专项只是壳。真正被反复试的,是继承。”
周砚点头。
这比单纯的口径篡改更难处理。因为专项至少还像专项,能被当场追、能被抽样查、能被问名;可继承机制不同,它藏在所有历史操作下面,平时谁都看不见,一旦有人想翻旧账,它就会跳出来说:你不能删,不能改,不能断,因为这关系到历史连续性。于是,真正被拿去做实验的盲区,反而被“连续性”保护起来了。
“盲区实验的目标是什么?”林序问。
周砚把那份维护池说明往下拉,停在一条被折叠过的注释上。
“验证变量翻转后,继承链是否仍可维持同名同责。”
这句话念出来时,屋里的人都沉默了。
同名同责。
同一个名字,承担同一份责任,哪怕人已经换了,岗位已经变了,权限已经移了,只要名字还在,就能继续把新旧动作并成一条线。原来他们不是单纯保留历史,而是在用历史名字压住新变量。谁接手了动作,谁就被强制套进旧名;谁想翻变量,谁就必须先问名。
“问名不是问人。”周砚缓缓道,“是问这条机制里,谁在替谁继承。”
信息中心主任抬头看了他一眼,像是终于意识到问题真正的重量。
“如果盲区实验是为了验证同名同责,那前面抽样之日的曲线,就不是为了制造完成口径,而是为了测试继承机制能不能把一个已经变形的专项继续挂在旧名下。”他说到一半,声音慢了下来,“也就是说,曲线是在帮实验找样本。”
周砚没有否认。
他把“盲区实验接口”点开,接口页底部果然有一行极细的说明:
【实验对象:历史保留节点】
【实验目的:在变量翻转后,验证旧名是否仍可稳定继承结果】
历史保留节点。
周砚看着这几个字,几乎能想象出背后那套冷静到残忍的逻辑。先把旧节点保留下来,再在节点上做变量翻转,看看换了岗位、换了时间、换了动作、换了责任人之后,这个节点还能不能继续承接同一份结果。只要它还能承接,就说明盲区仍在,实验成功;只要它承接得足够顺,说明继承机制足够稳,外面的人就只会看到“流程连续”,看不到内部已经换了骨。
而现在,这个实验已经跑到了年变量上。
“年。”周砚轻声重复了一遍。
“对。”林序也看到了,“维护池里还有一层年月标签,标签不是年份本身,而是‘年的变量’。”
周砚把那层标签拉出来,屏幕上出现一串极有规律的字段名:
year_var_a
year_var_b
year_var_c
每一个变量后面都对应一个继承节点。
起初只是三年。
后来扩成五年。
再后来,开始出现“翻年”标记。
周砚盯着“翻年”两个字,指尖在桌边轻轻敲了一下。
“他们在用年做变量。”他说。
“什么意思?”信息中心主任没跟上。
“不是自然年的年。”周砚抬眼,“是继承链里的年。年份不是时间,是一次变量翻转的计数单位。每翻一次,旧名就被再校验一次,同名同责就再压一次,盲区实验就再跑一次。”
屋里的人一下子安静得更厉害了。
如果说前面的抽样之日,还是把专项写成完成;那么现在,继承机制压着的这层盲区实验,就是把完成再写成可继承。不是做完就算,而是要看做完之后能不能继续挂在旧名上。翻一次年,变量就翻一次;变量一翻,就要重新问名。因为只要名没问清,谁都可以借着继承继续往前压。
“所以它会逼近问名。”方进说。
周砚点了点屏幕上的“year_var_b”。
“是它已经开始逼问了。”
他把最近一次翻年的记录展开,记录页没有写具体项目,只写了很短的流程名:
【盲区实验第七轮结果回收】
【年变量重置】
【继承链一致性通过】
【问名延后】
问名延后。
这四个字像一声冷笑。
不是不能问,而是先让它延后。只要延后,就可以继续跑下一轮变量。只要下一轮变量跑起来,旧名就还在,旧责就还在,盲区实验就能继续在继承机制里压着,像一块石头压着水面,看起来风平浪静,其实底下全是暗流。
“问名被谁延后了?”周砚问。
林序迅速去看权限链,几秒后脸色微变。
“不是单点账号。”他说,“是继承机制维护池自动发起的延后,触发条件是‘年度变量未完成归档确认’。”
周砚眯了眯眼。
自动发起。
这就更麻烦了。
如果是人手工延后,还能追问是谁点的;可如果是机制自动发起,那就说明这套盲区实验已经深到足以把“延后问名”写成默认动作。也就是说,系统不是在等人批准,而是在自己替实验找缓冲。只要年度变量没完成归档确认,问名就自动延后,变量就继续翻,旧名就继续继承,盲区就继续被压住。
“把自动发起的条件再往前追。”周砚说。
林序快速点开归档确认链。
页面跳出一串很长的前置条件,其中一条让周砚的眼神微微一变。
【继承节点存在未命名分支时,自动进入盲区实验观察期。】
未命名分支。
“这就是问名的入口。”周砚低声说。
信息中心主任猛地看向他:“未命名分支是哪个?”
周砚没有马上答。他已经看见了更深的一层。归档确认链下面还有一条补充规则:
【如命名链与责任链不一致,优先保留责任链;命名链暂挂盲区实验池。】
优先保留责任链。
这句话听起来像合理的治理原则,实际上却是最大的陷阱。因为一旦责任链被先保留,命名链就可以被说成“暂挂”,而暂挂的东西最容易被实验池拿走。等实验池一接手,后面的年变量就开始翻,翻到最后,谁还在问名,已经不重要了。重要的是谁能继续保留那个未命名分支,把它一直拖在盲区里。
“那个分支,不在现行系统里。”周砚说,“它在旧治理系统迁移表里。”
他说完,直接把迁移表调了出来。
果然,在一条几乎被人忽略的历史迁移记录里,周砚看见了那个分支的原始命名。它不是新项目名,也不是专项名,而是一串非常普通的旧字段:
【A-7】
A-7。
看上去像一个毫无意义的占位编号,可周砚在看见它的一瞬间,就知道这不是普通编号。这种命名方式太像试验样本了。前面抽样之日的准备单里,专项准备说明A就是这么来的;现在,继承机制里的未命名分支也叫A-7。A不是随意,A是第一批。第一批变量,第一批保留,第一批盲区。
“这是继承机制的实验样本。”周砚说。
方进缓缓点头:“而且它是从最早的一批开始翻的。”
周砚的手指在桌面上停了半秒。
如果说A-7是第一批,那后面的year_var_a、year_var_b、year_var_c,很可能不是独立变量,而是在A-7基础上逐轮演化出来的年度翻转标记。也就是说,盲区实验不是某个时间点才启动,它从最早的旧节点保留下来那一刻就开始了,只是一直被继承机制包着,没人能真正看见它的骨架。
“把A-7的继承路径展开。”周砚说。
林序照做。
路径一展开,所有人都看见了最上面那条线。
A-7最早挂在资料归档协调岗名下。
后来岗位调离,A-7没有清。
再后来,A-7转入继承机制维护池。
再后来,它又被挂到了专项联络组的历史保留权限上。
再后来,盲区实验接口第一次被调用。
路径链像一条咬住自己尾巴的蛇,一次次换壳,一次次换名,可始终没离开那一个旧节点。周砚看着那条线,忽然觉得这不是简单的权限延续,而是一种有意设计过的命名陷阱。只要A-7不被问清,后面所有翻年变量都能借它续上去,所有结果都能被解释成“继承正常”。
“他们想保住的不是项目。”周砚说,“是问名之前的空白。”
这句话一出口,屋里的人都像被点了一下。
信息中心主任喉结动了动:“那现在怎么办?”
周砚看着屏幕,沉默了几秒。
怎么办?
现在不是把某个字段删掉就能解决的事了。删字段只会触发更深层的兼容预案,甚至可能直接把盲区实验从观察期推进到强制归档。真正能做的,是先把问名从延后状态里拽出来,把继承机制里那层自动保护打断,让A-7不能再以“未命名分支”继续挂在盲区里。
但要打断自动保护,必须先让它自己承认:它在保留一个不该继续保留的东西。
“先做两件事。”周砚终于开口。
林序立刻直起身。
“第一,把A-7的所有继承节点按年份分组,单独导出。我要看它每一年是怎么翻过去的,谁签了延后,谁签了保留,谁默认了同名同责。”
“第二,把盲区实验接口的自动延后条件抓出来,存成离线证据。尤其是‘未命名分支’和‘年度变量未完成归档确认’这两条,必须单独截。”
信息中心主任马上转向人手,屋里顿时又响起一片急促的键盘声。
周砚却没动。
他还在盯着A-7最早那一层归档记录。那一行记录下面,有个小得几乎看不见的备注:
【如需问名,请由原始责任链发起。】
原始责任链。
周砚忽然意识到,答案也许并不在现在这套系统里,而在更早的那个原始责任链上。继承机制能把盲区压这么久,靠的不是技术多强,而是把原始责任链切断了,让后来的人只能在继承链上打转。可只要原始责任链还没真正断尽,就一定有能把盲区实验翻回来的入口。
“原始责任链的发起人是谁?”他问。
林序手一顿,抬头看向他。
“查不到完整人名。”他迟疑了一下,“只显示一个被遮掉一半的签批缩写。”
周砚眯起眼:“什么缩写?”
林序把屏幕放大到最底端。
那一行被遮掉一半的字母慢慢露出来。
只剩三个半字母能看清:
Y. W.
周砚盯着那两个缩写,脑子里像有什么东西轻轻一撞。
Y.W.
他没有立刻说出声,只是把这两个字母在心里反复过了一遍。年变量,原始责任链,继承机制,盲区实验,抽样之日,曲线一开。所有线条在这一刻似乎都被扯到了一处,像终于摸到了那根一直藏在幕后、决定谁能问名的线头。
而这根线头,正从Y.W.那里,安安静静地垂着。
周砚抬起眼,声音很轻,却冷得像铁。
“先别动他。”
他顿了顿,目光重新落回屏幕上那条A-7的路径。
“先把他的继承痕迹全挖出来。我要知道,盲区实验到底是从哪一年开始压在继承机制里的。”