1需求
「饲主搜索现在只能按姓氏,希望也能按城市筛选」
- 现在的搜索只按姓氏做前缀匹配
OwnerRepository.findByLastNameStartingWith - Owner 已经有
city字段Owner.city
已有代码库 × Coding Agent — 在实现之前
Forge 在 Coding Agent 修改已有系统之前,找出代码无法替人回答的取舍,让有权限的人先做决定。交给 Agent 的,只有已经批准的实现边界。
面向用 Coding Agent 维护、修改已有系统的开发者、Tech Lead,以及决定需求的人。
Spring PetClinic 的城市搜索
为什么这是问题
在 Forge 自己的 baseline 评估里,我们把对已有 Spring PetClinic 的 3 个小改动需求,各用一句话交给 Coding Agent(不用 Forge)。影响范围它几乎都找到了(3 个题目只漏了 1 处)。问题出在别的地方。
这些数字说明什么、不说明什么
实例
对 Spring PetClinic(固定版本 88e37c1)的一个小改动。已有系统里再普通不过的需求。
1需求
「饲主搜索现在只能按姓氏,希望也能按城市筛选」
OwnerRepository.findByLastNameStartingWithcity 字段Owner.city2不用 Forge 的 Coding Agent 实际做了什么
F0 baseline 记录(C4)。起点 88e37c1 → 结果 a894c3c
findByLastNameStartingWith 的签名git 验证实现一次都没有卡住。但在这个过程中,已经有 7 个没人批准过的决定被做掉了。
Agent 自己决定的事
city 加索引1–6 写在了完成报告里,7 没有写。每一个选择都可能是合理的 — 问题在于,人是在实现结束后才知道的。
3Forge 在写代码之前,把 3 个问题交还给人
不是什么都问。只拦下会改变「被批准的行为」本身的判断。
城市搜索目前还不存在。代码里没有依据说明姓氏的前缀匹配可以套用到城市上。
Agent 当时:选了前缀匹配这个代码库里没有组合两个条件的先例。
Agent 当时:选了 AND现在的错误挂在姓氏栏上。两个条件的搜索结果,不能归到其中某一栏。
Agent 当时:自己定了归属4由你来决定
未批准 · 等待决定
需求里没写,代码也决定不了。需要有权决定需求的人来判断。
没有正确答案,也不打分。选完之后,下面的实施方针草案会重新组装。
参考:不用 Forge 时,Agent 没问任何人就选了前缀匹配。
看实施方针草案怎么变了其余问题在本 Demo 中已由人决定(公开 Artifact 中的值)
notFound 错误5实施方针草案
请先决定匹配方式。
交给 Coding Agent 的内容
Agent 不会重新推断这里写下的决定,也不会修改范围之外的东西。
根据
Forge 的每个判断都对应到固定版本里真实代码的位置,而不是 LLM 的猜测。
OwnerRepository.findByLastNameStartingWithOwnerController.processFindFormcity 字段Owner.cityowners/findOwners.htmlcity 列db/h2/schema.sql · owners.cityOwnerControllerTests
这个实例的成果物(人工整理的公开 Artifact)
调查结果 project_context.json
决定之前的问题 gaps.json
批准后的交接包 implementation_package.json
要提问的需求
选一个问题示例,或者就这个需求提问。
现状
公开的是人工整理的 3 个需求的成果物,以及能回答相关问题的 Ask Forge。它不是能分析任意仓库的实现。
其他已验证的需求当天就诊预约(PetClinic) 恢复嵌套文档(Outline)
把一次改动中做出的决定、以及仓库之外的组织规则,带进下一次改动 — Context Core / Organization Context。