[AI辅助创作] Vestigra开发日记(三):AI能写代码以后,我开始重做项目管理
前言:最让我不安的,不是 AI 写错,而是它写得太像完成了
Vestigra 做到后半段,我经常遇到一种很麻烦的状态:
- config 有了;
- model 有了;
- status 有了;
- CLI 有输出;
- test 也是绿的。
从代码 diff 看,这个功能已经相当完整。换成以前,我大概会觉得可以收工了。
但放到真实机器上长期运行,再顺着数据往下查,结果可能完全不是那么回事:状态显示 active,Endpoint 的真实订阅却已经退化;字段出现在 plan 里,却从来没有驱动 Runtime;Dashboard 把 unknown 画成了健康;Story 能从 live cache 临时算出来,却没有 durable query 面。
AI 并不一定是把代码写错了。
更准确地说,它完成了“看起来应该存在的代码”,但没有证明产品承诺真的成立。
这比编译错误难处理得多。编译器至少会指着一行代码骂我,假完成只会安安静静地躺在一片绿色里。
于是我开始重新想一个问题:当 AI 已经可以快速实现大量功能以后,人到底还应该管理什么?
Vestigra 第三阶段,折腾的已经不只是产品架构,而是整套开发系统。
一、AI 很会补齐形状,但不会自动追问语义是不是真的
在开发过程中,我开始把一类“人工在真实现场发现”的问题标记成 human。
这个标签不是拿来吐槽 AI,也不是为了证明人比 AI 高明。它只是描述一类很具体的问题:
- 代码能编译;
- 单元测试不是完全没覆盖;
- 表面状态也没有明显报错;
- 但真实运行语义已经不对了。
例如:
- 状态显示 active,实际 Endpoint 订阅已经退化;
- 配置字段存在于 plan / status,却没有真正驱动 Runtime;
- Dashboard 把未知权限状态显示成健康;
- Story 来自 bounded live cache,却被展示得像 durable query;
- projection 已经截断,CLI 仍然像正常一样返回结果;
- warning 藏在机器可读输出里,用户根本看不见。
AI 很擅长根据上下文补出 config、model、status、CLI 和 test 这些“一个完整功能应该有的东西”。
但它不一定会主动追问:
- 这个字段真的驱动行为了吗?
- 这个状态来自事实,还是来自 projection?
- fallback 会不会把失败伪装成 success?
- warning 对用户真的可见吗?
- 测试跑的是构造环境,还是真实 macOS 语义?
- 这个查询来自 durable store,还是 bounded live cache?
这些问题很多时候只能靠真实机器、长期运行、现场状态,以及人那种“总感觉哪里不对劲”的直觉暴露出来。
以前我会把它们统称为 bug,修完就关。
后来我发现,这样太浪费了。
二、human 问题不应该只被修掉,还应该反过来修改流程
如果同一类问题出现两三次,说明它已经不只是某段代码的问题,而是开发流程没有防住它。
例如:
- 多次出现“状态绿色但真实不可用”,就应该统一建模 health、gap 和 degraded;
- 多次出现“字段存在但不驱动行为”,验收标准就必须加入
config → runtime effect; - 多次出现“live cache 有结果但 durable store 没结果”,就必须把 live projection 和 materialized query 分开;
- 多次出现“CLI text 能看但 Skill 无法稳定读取”,就应该建立稳定的
CLIResultEnvelope; - 多次出现“当前机器能讲故事,导出后却不能复核”,就要补上 case export / verify / replay。
所以 human 标签真正的价值,不是给问题分类,而是给流程喂反馈。
人不应该永远跟在 AI 后面修 bug。更好的做法是把每一次现场翻车变成下一轮的系统约束、测试要求和 Release Gate。
AI 犯一次错,我修一次,只能得到一个修复。
AI 犯一次错,我把它变成验收契约,才可能让后面的十次开发都少踩这个坑。
三、CLI + Skill dogfood:我不允许 AI 变成隐藏的 truth source
Vestigra 后来开始大量使用 CLI + Skill dogfood。这里最先要解决的,不是 AI 会不会分析,而是 AI 到底从哪里拿事实。
我给这条链路定了几个限制:
- AI 不能直接读取产品数据目录;
- 不能直接解析 ledger segment;
- 不能绕过 product data self-protection;
- 不能把自己的判断写成 observed evidence;
- 不能直接执行高风险响应。
如果 AI 可以为了“方便”绕开这些边界,那么 Vestigra 前面辛苦建立的 Ledger、Evidence、Gap 和 Audit 全都白做了。
所以正确的方向应该是:
1 | |
CLIResultEnvelope 对我来说不只是一个 JSON 格式,它其实是 AI 参与产品工作流的合同。
Skill 可以解释 Vestigra state、evidence、gaps、self-protect status、case results 和 performance alerts,但它不能悄悄成为新的事实源。
以前我容易把 AI 想成一个 magic backend:把数据交给它,它自然会给我一个聪明答案。
现在我更愿意把它当成一个能力很强、但必须被 contract 约束的协作者。
四、Case Export / Verify / Replay:好听的 Story 不算验收
如果一个 Story 只能在当前机器、当前 UI、当前 live cache 里看见,那它还不够可信。
尤其 AI 参与解释以后,文字可以变得很流畅,因果链也可以讲得很像那么回事。但只要离开当前环境就无法复核,它仍然只是一段漂亮叙述。
所以 Vestigra 后来补上了 case export / verify / replay 这条闭环。
一个 case 至少应该能够携带:
- evidence-backed stories;
- rule evaluations;
- coverage;
- privacy / redaction 信息;
- integrity report;
- gap;
- claim;
- 必要的 replay material。
导出以后,另一个环境仍然应该能 verify / replay。AI 生成的每个关键判断,也应该能回指 evidence、claim 和 gap。
这条要求看起来给开发添了很多麻烦,但它逼着我区分“当前界面能展示”和“结论真的可复核”。
对于安全产品,这两个完成度根本不是一回事。
五、我后来发现,Release Gate 比 Feature List 更重要
早期做项目,我很容易盯着功能列表:这个功能有没有,那个功能什么时候做完。
Vestigra 做到后面,我越来越关注另一张表:什么条件不满足,就绝对不能发。
安全产品不能因为一个按钮能点、一个 CLI 能跑就进入 release。发布前,至少要重新证明这些承诺还成立:
- 证据仍然可以追溯;
- Story 仍然是 evidence-backed;
- case 仍然可以 export / verify / replay;
- privacy / redaction 仍然生效;
- self-protect 退化时仍然会明确暴露;
- CLI JSON contract 没有漂移;
- 高风险 Response 仍然受控;
- AI / Skill 仍然不能绕过边界。
这也改变了我对“项目管理”的理解。
项目管理不只是开多少 issue、关多少任务,而是在管理:
- 什么才算完成;
- 什么必须可复现;
- 什么必须 fail-closed;
- 什么只是 warning;
- 什么必须 block release;
- 哪些结论必须回指 evidence;
- 哪些能力不能过度承诺;
- 哪些 AI 行为必须被 contract 约束。
这部分工作比让 AI 再补一个功能难多了,因为它要求我自己先想清楚产品到底承诺什么。
六、PerformanceWatch 之后,我还想让系统检查“自己有没有说真话”
PerformanceWatch 解决的问题是:程序是不是太慢。
但只盯 CPU、Memory、Queue 和 Latency 还不够。系统也可能性能完全正常,只是语义已经悄悄错了。
所以我后来开始想 Functional Watchdog。
它不问“系统快不快”,而是问“系统还诚实吗”:
- Story 是否真的 durable?
- live projection 是否已经截断?
- 查询来源是 live 还是 materialized?
- 有没有出现 out-of-order apply?
- coverage gap 是否影响当前 Story?
- Dashboard 是否把 unknown 显示成 healthy?
- 配置字段是否真的改变了 Runtime 行为?
- Endpoint Extension 授权状态是否被真实建模?
理想状态下,这套 Functional Watchdog 应该复用 PerformanceWatch 已经走过的 Self Feedback 路径:
1 | |
性能 Watchdog 解决“系统是不是太慢”。
Functional Watchdog 解决“系统是不是还在说真话”。
后者现在还不是一个可以随便夸口的完成态,它是我下一阶段想继续验证的方向。这个边界必须写清楚,否则我又会犯“有了设计名词,就当成功能已经存在”的老毛病。
七、当代码变便宜,真正昂贵的是设计开发系统
整个项目一路做下来,我的关注点一直在变。
最开始,我觉得代码实现能力最重要。
后来,我觉得架构设计最重要。
现在,我越来越觉得项目管理能力才是 AI 开发里的核心能力。
因为 AI 可以写代码、补实现、生成测试、解释状态,也可以整理一套看起来很完整的方案。但它不会自动替我决定:
- 验收标准是什么;
- 哪条工作流拥有事实;
- 出问题以后通知谁;
- 什么需要自动测试,什么必须真实机器验收;
- 上下文怎么收集;
- 问题怎么分类并回灌流程;
- 哪些 Gate 不允许绕过;
- Watchdog 最终要证明什么。
没有这些约束时,AI 的速度只是让混乱更快发生。
约束足够强以后,它才可能成为真正的工程加速器。
目前的结论:Vestigra 也成了我的开发黑匣子
Vestigra 最开始想记录的是 macOS 端点上发生了什么,把底层事件串成 Story,让用户看见证据链。
做到后来,它也开始记录我自己的开发过程:
- 我怎么做决策;
- AI 怎么犯错;
- Runtime 怎么退化;
- 自动化测试怎么漏掉真实问题;
- 人的现场直觉怎么被变成流程输入;
- 项目怎么从“功能完成”走向“语义可验证”。
所以 Vestigra 表面上是一个本地优先、证据中心、规则驱动、AI 辅助、受控响应的 macOS EDR-like runtime。
再往里一层,它也是我对 AI 开发方式的一次长期实验。
未来真正重要的,也许不是谁能让 AI 写代码最快,而是谁能设计出一套会持续反馈、持续修正、持续提高质量的开发系统。
至少这是我现在的阶段性结论。
等 Functional Watchdog 真正在真实机器上跑起来以后,我大概还会回来再推翻一次自己。