mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
2201 字
6 分钟
近两个月:一本 47 条的错题本,和一个停手不写盘的沙盒

近两个月:一本 47 条的错题本,和一个停手不写盘的沙盒#

说实话,快两个月没更新了。上一次发文还是八月下旬,在讲怎么把一套资产管理系统塞进那台 1.8G 的小机器。

这两个月没干别的,基本就两件事,都收在 GitHub 上。今天不写教程体,就把这两件事掰开说说。

一、先解决一个问题:这东西到底算不算”能交付”#

功能能跑,和能交付,是两码事。

这几个月里项目攒了一堆真实的坑,散在各个文档里。我做的事是把它整理成一本”错题本”:42 份原始记录——32 份专项修复、6 份问题发现、4 份阶段复盘,后来又顺手补了几份,现在公开的版本是 47 篇。

这本本子不是流水账。每个案例都按同一条链路写:业务场景 → 实际现象 → 错误方向 → 根因 → 人工修改 → 验证 → 防复发。写的时候有个原则:不把”改完了”当终点,要写成”下一次怎么不再犯”。

举两个例子。

一个是分页。接口单独调有数据,页面第二页就是不对。旧测试只看状态码——200 就算过。后来把”页码、总数、边界”全写进断言里。HTTP 200 不等于完成,这句话我贴在错题本里。

另一个更阴:知识库的 embedding 失败之后,老实现会静默生成一个哈希假向量,表面上还能搜,实际全是垃圾命中。这种比直接报错危险得多——你以为系统在工作。后来改成显式降级:记录降级原因、回退到词面检索、答案带引用,禁止再走那条”假装成功”的捷径。

这两个坑,都不在功能清单里。但它们是”能交付”和”演示通过”之间的差距。

二、开源不等于复制粘贴:公开之前先做减法#

公开的仓库是脱敏版。截图全部来自本地演示环境,姓名是编的,域名是 example.com,线上数据一点没带。

除了数据,还要减”味道”。产品仓里原来夹着一些”阶段进度”的叙事,我把它们拿掉了——产品就是产品,练习记录另放一个地方(后面会说)。说明文档也做了双语的整理。

还有一类工作,只有新用户会碰到:克隆下来能不能直接跑。新克隆不用再手工建目录、数据库文件自动创建、后端默认只监听本机(要局域网访问再改一个环境变量)、前端依赖的锁文件补齐。这些改动,一个”能跑”的老用户永远发现不了,但决定了仓库对陌生人友不友好。

顺手记一个真实的坑:登录主密钥轮换。动态验证(TOTP)的密钥是按当时的主密钥加密存的,我换了主密钥却忘了重加密那一列,系统于是把账号当成”没绑定”——用密码进得去,业务页却进不去,个人资料还显示”已启用”。报错不可怕,可怕的是静默的假状态。 正确的做法在更新记录里:用旧钥解开,再用新钥存回去,手机里原来的 6 位码原样能继续用。

三、九月底那批修里,挑三件说#

那批更新里功能挺多,挑三件我印象深的。

导入先预览再入库。 以前导入资产,表头对不上就等于白填。现在先出预览和校验结果,失败的行可以下载回来改;中途取消,不会偷偷把半截数据写进库。

扫码页在手机上补完整。 现场扫资产码点报修、点调拨,以前只是跳到列表,编号还得自己填——现场根本没法用。现在手机上点完就能走下去。

登录的第二步独立成专属步骤,配短时效的挑战,过期就重来。看着是体验改动,其实每个细节都是失败场景倒逼出来的。

这些东西单独看都不炫。合在一起,才像一个能天天用的系统。

四、另一个仓库:一个”最后一闸不写盘”的沙盒#

第二个仓库记的是同一套项目按五个阶段往上叠的过程。前四个阶段的成果都在产品仓;第五阶段,是我给自己搭的一个开发侧沙盒。

一句话解释它:让 AI 给出补丁草稿,但最后一步永远停在”人闸”,默认不写盘。

沙盒里是四件套:

  1. 两个 Prompt(yaml):生成用和评审用。生成的那个强制先出”需求字段 ↔ 表结构”对照表,对不上的行,整份 diff 留空。
  2. 一份小抄(8 个 md):表结构和接口的缩略说明。没有向量库,靠一个索引文件直接指路。
  3. 两个只读 Skill:一个只回字段清单(拒绝 SQL、没有行数据),一个按白名单读接口文件(六个合法 key,文件名和绝对路径一律拒绝)。
  4. 一条工作流:读表 → 读规范 → 生成 → 评审 → 人闸。前四步自动走,第五步停手。

为什么第五步要停手?因为它练习的对象是一个正在跑的网站。接上去,出错就是生产事故。所以这条流水线的终点被写死为”补丁草稿”。

测试做了三道题,用的都是真实需求原句。

第一题:给用户新增接口加一个离职字段(resigned_at)。表结构里没这一列,接口定义里也没有。结果:对照表一行对不上,diff 留空。资料里没有的列不能编——这道题考的就是”不编”。

第二题:两个 Skill 单点验证。问表有哪些字段,只给字段,不连库;让它读一个不存在的 key,直接拒绝,并列出六个合法 key。

第三题:干跑一个真需求(用户列表加按姓名的模糊筛选)。工作流完整走了一遍,评审结论是”可通过(仍须人工)“,结束后 applied 写死为 false——产品仓库工作树干净,一行没动。

沙盒里还留着两次真实翻车的记录:工作流文件放在项目目录里不被信任、按名字启动直接报错,最后改用 inline 执行;还有个非法 key 被 Skill 拒掉。这些写下来,才算真演练过。

五、这两件事,其实是一件事#

错题本管的是”别再犯同一个错”;沙盒管的是”哪些活可以交给 AI,哪些边界一步都不能过”。

两个仓库加起来,其实都在做同一件事:把”能跑”往”敢交付”推。一个推的是工程过程,一个推的是自动化边界。

我明确没做的:没把沙盒接到任何线上助手、没在里面跑过一条业务 SQL、也没因为这次练习改过产品仓的任何代码。练习就是练习。

公开的部分都在两个仓库里。剩下那部分——那台小机器这两个月又挨了多少打——数据攒着呢,下次单独说。


关于作者:Lansame,网络安全爱好者,个人博客 lansame.top

相关链接:

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

近两个月:一本 47 条的错题本,和一个停手不写盘的沙盒
https://lansame.top/posts/two-months-47-notes-and-a-sandbox/
作者
Lansame
发布于
2026-10-16
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录