近两个月:一本 47 条的错题本,和一个停手不写盘的沙盒
说实话,快两个月没更新了。上一次发文还是八月下旬,在讲怎么把一套资产管理系统塞进那台 1.8G 的小机器。
这两个月没干别的,基本就两件事,都收在 GitHub 上。今天不写教程体,就把这两件事掰开说说。
一、先解决一个问题:这东西到底算不算”能交付”
功能能跑,和能交付,是两码事。
这几个月里项目攒了一堆真实的坑,散在各个文档里。我做的事是把它整理成一本”错题本”:42 份原始记录——32 份专项修复、6 份问题发现、4 份阶段复盘,后来又顺手补了几份,现在公开的版本是 47 篇。
这本本子不是流水账。每个案例都按同一条链路写:业务场景 → 实际现象 → 错误方向 → 根因 → 人工修改 → 验证 → 防复发。写的时候有个原则:不把”改完了”当终点,要写成”下一次怎么不再犯”。
举两个例子。
一个是分页。接口单独调有数据,页面第二页就是不对。旧测试只看状态码——200 就算过。后来把”页码、总数、边界”全写进断言里。HTTP 200 不等于完成,这句话我贴在错题本里。
另一个更阴:知识库的 embedding 失败之后,老实现会静默生成一个哈希假向量,表面上还能搜,实际全是垃圾命中。这种比直接报错危险得多——你以为系统在工作。后来改成显式降级:记录降级原因、回退到词面检索、答案带引用,禁止再走那条”假装成功”的捷径。
这两个坑,都不在功能清单里。但它们是”能交付”和”演示通过”之间的差距。
二、开源不等于复制粘贴:公开之前先做减法
公开的仓库是脱敏版。截图全部来自本地演示环境,姓名是编的,域名是 example.com,线上数据一点没带。
除了数据,还要减”味道”。产品仓里原来夹着一些”阶段进度”的叙事,我把它们拿掉了——产品就是产品,练习记录另放一个地方(后面会说)。说明文档也做了双语的整理。
还有一类工作,只有新用户会碰到:克隆下来能不能直接跑。新克隆不用再手工建目录、数据库文件自动创建、后端默认只监听本机(要局域网访问再改一个环境变量)、前端依赖的锁文件补齐。这些改动,一个”能跑”的老用户永远发现不了,但决定了仓库对陌生人友不友好。
顺手记一个真实的坑:登录主密钥轮换。动态验证(TOTP)的密钥是按当时的主密钥加密存的,我换了主密钥却忘了重加密那一列,系统于是把账号当成”没绑定”——用密码进得去,业务页却进不去,个人资料还显示”已启用”。报错不可怕,可怕的是静默的假状态。 正确的做法在更新记录里:用旧钥解开,再用新钥存回去,手机里原来的 6 位码原样能继续用。
三、九月底那批修里,挑三件说
那批更新里功能挺多,挑三件我印象深的。
导入先预览再入库。 以前导入资产,表头对不上就等于白填。现在先出预览和校验结果,失败的行可以下载回来改;中途取消,不会偷偷把半截数据写进库。
扫码页在手机上补完整。 现场扫资产码点报修、点调拨,以前只是跳到列表,编号还得自己填——现场根本没法用。现在手机上点完就能走下去。
登录的第二步独立成专属步骤,配短时效的挑战,过期就重来。看着是体验改动,其实每个细节都是失败场景倒逼出来的。
这些东西单独看都不炫。合在一起,才像一个能天天用的系统。
四、另一个仓库:一个”最后一闸不写盘”的沙盒
第二个仓库记的是同一套项目按五个阶段往上叠的过程。前四个阶段的成果都在产品仓;第五阶段,是我给自己搭的一个开发侧沙盒。
一句话解释它:让 AI 给出补丁草稿,但最后一步永远停在”人闸”,默认不写盘。
沙盒里是四件套:
- 两个 Prompt(yaml):生成用和评审用。生成的那个强制先出”需求字段 ↔ 表结构”对照表,对不上的行,整份 diff 留空。
- 一份小抄(8 个 md):表结构和接口的缩略说明。没有向量库,靠一个索引文件直接指路。
- 两个只读 Skill:一个只回字段清单(拒绝 SQL、没有行数据),一个按白名单读接口文件(六个合法 key,文件名和绝对路径一律拒绝)。
- 一条工作流:读表 → 读规范 → 生成 → 评审 → 人闸。前四步自动走,第五步停手。
为什么第五步要停手?因为它练习的对象是一个正在跑的网站。接上去,出错就是生产事故。所以这条流水线的终点被写死为”补丁草稿”。
测试做了三道题,用的都是真实需求原句。
第一题:给用户新增接口加一个离职字段(resigned_at)。表结构里没这一列,接口定义里也没有。结果:对照表一行对不上,diff 留空。资料里没有的列不能编——这道题考的就是”不编”。
第二题:两个 Skill 单点验证。问表有哪些字段,只给字段,不连库;让它读一个不存在的 key,直接拒绝,并列出六个合法 key。
第三题:干跑一个真需求(用户列表加按姓名的模糊筛选)。工作流完整走了一遍,评审结论是”可通过(仍须人工)“,结束后 applied 写死为 false——产品仓库工作树干净,一行没动。
沙盒里还留着两次真实翻车的记录:工作流文件放在项目目录里不被信任、按名字启动直接报错,最后改用 inline 执行;还有个非法 key 被 Skill 拒掉。这些写下来,才算真演练过。
五、这两件事,其实是一件事
错题本管的是”别再犯同一个错”;沙盒管的是”哪些活可以交给 AI,哪些边界一步都不能过”。
两个仓库加起来,其实都在做同一件事:把”能跑”往”敢交付”推。一个推的是工程过程,一个推的是自动化边界。
我明确没做的:没把沙盒接到任何线上助手、没在里面跑过一条业务 SQL、也没因为这次练习改过产品仓的任何代码。练习就是练习。
公开的部分都在两个仓库里。剩下那部分——那台小机器这两个月又挨了多少打——数据攒着呢,下次单独说。
关于作者:Lansame,网络安全爱好者,个人博客 lansame.top
相关链接:
- 产品仓(开源脱敏版):github.com/LanSang11/asset-admin
- 阶段练习记录:github.com/LanSang11/fde-stage5-sandbox
- 上一篇:同一台小机器,我又塞进去一套资产管理系统
- 同机蜜罐笔记:7天捕获4197次攻击
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时