"git log"。
林星晚在APP的开发者后台输入了这行命令。她以为会报错APP的代码仓库应该是私有的,外部人员没权限。但顾言之给她的管理员权限比她预想的大。屏幕上刷出了一长串提交记录,从最新的一条一直延伸到
最早的一条:三年零两个月前。
"fork: 初始分支,来源学术成果库/社交共振分析工具"。
林星晚的手指在触控板上停住了。
"怎么了?"傅晏从厨房端了两杯水过来,放了一杯在她旁边。
"你来看这个。"她指着屏幕,"最早的fork记录。三年零两个月前有人把我的脚本从一个'学术成果库'里fork出来了。"
"学术成果库?"
"我大三那个课程作业我以为只存在我自己的硬盘里。但老师可能把优秀作业提交到了学校的学术成果库。我毕业的时候签过一个'学术成果授权使用'的协议没仔细看。大概就是那条口子。"
傅晏拉了把椅子坐在她旁边,两个人一起看屏幕。
"往下翻。"他说。
林星晚往下翻。提交记录按时间倒序排列最新的在最上面。她滚到最底部,从第一次fork开始往上捋。
第一次fork之后,是一系列零散的小提交改了文件结构、调整了依赖库、重命名了几个函数。提交信息全是英文"refactor: restructure modules"、"chore: update dependencies"。提交者的用户名是一个代号"RL_lab_dev01"。
"RL"傅晏念了一下,"Research Lab?"
"可能是。"林星晚继续翻。
然后第二次重大更新出现了。提交信息:"feat: add bidirectional interaction module"。
"双向交互模块。"林星晚念出来。
她点开这个commit的diff。代码变动很大新增了三百多行。核心改动在一处:原来她的情感分析引擎只做"分析"读取用户的情感数据,输出分析结果。新的代码在分析的基础上加了一层"引导"。
"你看这个。"林星晚指着diff里的一段新增代码,"原来的函数叫'analyze_emotion'只读不写。他们加了一个新函数'guide_emotion'。输入是用户的当前情感状态,输出是推荐的操作。推荐什么操作、用什么语气说话、什么时候主动发起互动全是这个函数算的。"
"从'分析情绪'变成了'引导情绪'。"傅晏说。
"对。"林星晚的嘴唇抿了一下,"而且注释从中文变成英文了。我写的时候全是中文注释他们改的时候全换成了英文。像是不想让我认出来似的。"
"或者只是团队规范。"
"也许。"
她继续往上翻。第三次重大更新提交信息:"feat: add target recommendation system"。
"目标推荐系统。"林星晚念出来。她的声音变了低了一个调。
她点开diff。代码里出现了一个新的概念"target"。"target"不再是泛指的"用户",而是特定的"目标对象"。新模块的功能:扫描用户周围的人际网络,识别"高价值目标"情感频率兼容度高、互动潜力大的个体然后生成"推荐互动策略"。
"这就是攻略系统。"林星晚说。
"嗯。"
"他妈的。"她低声骂了一句,"你看这个'推荐互动策略'。它根据目标对象的情感频率特征,生成一套'接触方案'什么时候出现、说什么话、用什么表情、怎么制造'偶遇'。这不是社交工具这是操纵工具。"
她往下翻。注释风格也变了不再是她那种潦草随性的写法,变成了冷冰冰的技术文档格式。"Module: Target Recommendation"、"Input: user_profile, social_graph"、"Output: strategy_list"。每一个变量、每一个函数都起了正规的名字。
但底层的算法她看得出来还是她的。情感频率匹配、人群聚类、情绪传播模型。核心逻辑没变。只是在上面叠了一层又一层的"应用功能"。
"继续翻。"傅晏说。
第四次重大更新。林星晚点开diff这次她没有马上念出来。她盯着屏幕看了好几秒。
提交信息:"chore: temporarily disable safety protocol trigger"。
"临时禁用安全协议触发条件。"
她点开代码变动。在安全协议模块里,原本的触发条件"emotion_variance > 2.5 * sigma"被注释掉了。在下面,有人加了一行新的注释:
"// 临时禁用,待测试。"
日期两年半前。
"临时。"林星晚重复了一下这两个字,"两年半。临时了两年半。"
"这期间就是Sync系统运行的时候。"傅晏说。
"对。"林星晚的声音压得很低,"安全协议一直在代码里。一直都在。但触发条件被注释掉了它收不到异常信号。等于一个保安被绑在椅子上,眼睛蒙着布,嘴里塞着毛巾。他在那儿但他什么都做不了。"
她继续往上翻。最后一次重大更新提交信息:"release: package as mobile application"。
代码被封装成了一个手机APP。核心框架她的脚本还在最底层。但中间的所有层双向交互、目标推荐、攻略策略全打包在了外面。用户看到的是一个"心动任务"APP。看不到的是里面有一千万行代码,最核心的三百行是一个大三女生在实验室里边吃泡面边写的。
林星晚关掉提交记录。
屏幕回到了普通的文件管理界面。光标在空白的命令行里一闪一闪的。
她沉默了很长时间。
傅晏没催她。他坐在旁边,偶尔喝一口水。等着。
"他们把我的安全协议禁用了。"
她说这句话的时候声音很平。但傅晏认识她声音越平,里面压着的东西越大。
"一行注释。"她接着说,"就一行。'// 临时禁用,待测试。'七个小写字母和两个标点符号。然后两年半几百万用户情绪依赖、焦虑、睡眠障碍安全协议一个都没拦住。因为它被'临时'禁用了。"
"你知道是谁干的吗?"傅晏问。
"提交者的用户名是'RL_lab_dev01'。RL可能是研究机构。但不一定是最终决策者。"
"那你打算怎么办?"
林星晚转过头看他。"我要找到这个人。或者至少找到做这个决定的人。"
"为了什么?"
"为了问一句'你们有没有想过,这个'临时'会持续两年半?'"
