pool_ids,就是那个未经清洗的、塞满1668个序号的原始数组。
没有过滤,没有校验,没有try…except,甚至没加个注释。
它就那么跑着,跑过了三年,跑过了两百多万字,跑过了四千次更新,跑到了今天凌晨,把两个幽灵塞进了中奖名单。
我盯着那行代码,忽然笑了一声。
笑声干涩,把自己都吓了一跳。
原来最抽象的从来不是系统——是我。
是我亲手写的规则,是我懒得加的校验,是我以为“应该没问题”的侥幸,是我把“相信平台”当成了免责条款。
我低头,看着自己左手无名指上那道浅疤——去年签纸质出版合同时划的,钢笔尖扎进去半厘米,血珠冒出来,像一粒凝固的红痣。当时编辑笑着说:“你这手气,写小说够狠,签字都带血光。”
现在想想,那哪是血光。
那是预警。
我重新坐直,打开Word文档,新建一页,标题栏敲下:
【致所有在灰域里等光的人】
手指悬停半秒,删掉。
再敲:
【关于03.08抽奖池的静默修正说明】
还是不对。
太冷,太公文,太像在推卸。
我关掉文档,点开备忘录,新建一条,只写了一句话:
“对不起,是我把你们的期待,算进了系统的bug里。”
然后我把这句话,复制,粘贴进全订群。
发送。
群里安静了三秒。
接着,消息像潮水一样涌上来:
【阿沅不吃葱】……啊?
【山海不倦】……?
【纸鸢与猫】所以……我中了的秋风,作废?
【青黛】等等,我序号1211,秋风,我刚把票根二维码发给你了……
【老陈】(撤回了一条消息)
【老陈】天线,你先别慌。我黑进了测试环境。
我一怔。
“黑进”?老陈是银行IT,不是黑客。他上次说“黑进”,还是为了帮我查某章错别字的IP来源。
我正想问,他发来一张截图——不是代码,是起点内部测试后台的界面,灰蓝色调,左侧导航栏写着【抽奖沙盒模拟器】。他正在手动导入数据:把1668个序号过一遍风控库,筛掉所有marked as deleted的ID。
最终,有效池缩减为1666人。
而57和28,已被标红剔除。
他接着发来一行字:
【老陈】重抽。现在。用你电脑上的网页。我语音教你改参数。
我咬了咬后槽牙,点开语音通话。
老陈的声音透过听筒传来,冷静得像在调试ATM机:“打开你那个随机数网页源码,Ctrl+U。找到第142行,把max_num改成1666。别怕,这是沙盒,不连生产库。”
我照做。手抖,但没点错。
“然后,把刚才抽中的57和28,手动从零食名单里删掉。”
我删了。
光标在“57”上停留半秒,按下Backspace。数字消失,像从未存在过。
“现在,生成两个新号。”他顿了顿,“记住,只生成两次。不多不少。”
我深吸一口气,点下回车。
网页刷新——
第一个数字:**1193**
第二个数字:**301**
我抄下来,发到群里:
【天线】零食新增中奖序号:1193、301。原57、28名额作废,已同步通知两位读者。补发流程今日内完成。
群里安静了一瞬。
然后,【阿沅不吃葱】发来一张图——不是票根,是他家窗台。一盆绿萝,叶片上还挂着水珠,底下压着张便利贴,手写字迹稚拙:
“中了!但听说有问题,等你通知~”
【山海不倦】发来三个字:
“知道了。”
再无其他。
我盯着那三个字,忽然想起什么,点开起点后台,搜“山海不倦”的阅读历史。最近一本,是《系统很抽象》第一卷,发布时间:02.28。
他入坑,只比活动开始早三天。
而他撤回月票的时间,是03.07 23:58:02——就在活动结束前两小时。
为什么?
我点开他的书架,只有两本书:《系统很抽象》,和一本叫《灰域生存指南》的冷门科幻。
作者名:佚名。
我心头一跳,点进那本书的详情页——简介栏只有一行:
“所有被系统判定为‘无效’的存在,都在灰域里排队等一个重载指令。”
发布时间:03.07。
就在他撤回月票前五分钟。
我猛地抬头看向窗外。
雨停了。东方天际渗出一线微青,像伤口初愈时泛起的淡痕。
手机又震。
是起点编辑林姐:
【林姐】天线老师,刚收到技术组加急通知——《灰域生存指南》作者实名认证失败,IP归属地与注册信息严重不符,疑似……测试账号。
【林姐】他们让我转告你:
【林姐】“如果有人在灰域里喊你的名字,请一定回头看看。”
我盯着最后那句话,手指悬在屏幕上方,迟迟没有落下。
这时,QQ弹出一条好友申请。
头像是一片纯白。
昵称栏空着。
验证消息只有一串数字:
**1667**
我点通过。
对话框弹出,对方秒发来一张图。
不是二维码,不是截图,是一张手绘。
铅笔线条,潦草却精准:一个穿旧卫衣的少年坐在数据流组成的台阶上,仰头望着上方。台阶尽头不是天空,而是一扇半开的门,门缝里漏出暖黄光线。少年脚边散落着几颗糖纸,其中一张,印着歪歪扭扭的“零食礼包”四个字。
画角写着小字:
“系统很抽象,还好我也是。”
我盯着那幅画,眼眶突然发热。
原来不是我在写故事。
是故事,在等我醒来。
我抬起手,用拇指用力擦了下眼角,然后点开输入框,