Authority 比 Abstraction 更重要:ForgeFlow 的一次语义收缩
这篇文章不是在介绍 ForgeFlow 的“能力”,而是在复盘它的一次语义修正:我为什么开始删 abstraction,以及我删的其实不是“未来”,而是当前不可承担的语义债。
早期:我把它越讲越像一个 runtime
ForgeFlow 一开始的动机很朴素:我在做 AI-assisted coding 时,经常感觉自己在“局部盲动”——能推进两步,但很难稳定回答三个问题:
- 我们现在到底处在哪个工程阶段?
- 我们有哪些结论?它们的证据是什么?哪些还可信?
- 出现失败/不确定性时,到底应该停留(STAY)还是回流(BACKFLOW)?
但在写 README、画架构、补术语的时候,我的叙事开始滑向另一个方向:
- “AI workflow runtime”
- “orchestration runtime”
- “multi-agent system”
- “layered governance runtime”
我不断加层:Core / Profile / Shell、控制面语义、治理与审批、回放与审计……它们都不一定错,但一个更关键的问题被遮住了:
ForgeFlow 的 primary object 到底是什么?
当 primary object 不清晰时,抽象会变成一种“默认扩写”:每遇到一个不确定点,就用更大的框架把它包起来;每遇到一个边界问题,就用新术语把它命名掉。
这在早期很容易发生,因为早期没有真实压力——系统还没跑进长期项目,语义也还没有被现实验证。
压力出现:我开始为“长期一致性”付代价
真正的压力来自两类体验:
第一类是 Codex-driven development 的体感:
它确实能让局部推进更快,但这种速度会放大“工程状态不稳定”的问题:你会更频繁地进入一种状态——看起来完成了,但你不敢相信它真的完成了。
第二类是语义漂移本身开始反噬:
- README / docs 说的是一套东西,runtime artifacts 暗示的是另一套东西
- “流程在跑”的叙事变强了,但“结论可信度”的交代变弱了
- 失败之后,STAY vs BACKFLOW 变成一种靠直觉的选择,而不是可复核的决策
- 文档与实现开始脱节(documentation/implementation divergence),并且脱节的成本越来越真实
外部反馈也把这个问题戳得更明显:当别人问我“你到底在解决什么”时,我能讲出一套架构,但很难用一个稳定对象把所有语义收敛起来。
其中一次更具体的压力来自一位长期高频使用 AI coding agents 的软件工程老师:他指出 ForgeFlow 最大的风险并不是“功能不够”,而是 primary object 与语义边界不稳定,导致你很难判断哪些结论已经落地、哪些只是叙事。
这类反馈让我更清楚地看到:当对象不清晰时,系统会不断用 abstraction 自我扩写,但这种扩写并不会自动带来可复核的 authority。
最痛的其实不是“抽象不够”,而是出现了几种典型的工程性失败:
- pseudo-completion:看起来 done,但缺少可验证的 done criteria 和证据
- rollback ambiguity:失败后不确定该回到哪里,回流条件也不稳定
- broken traceability:结论无法回指输入、上下文或产生它的过程
- artifacts drifting away from runtime evidence:产物存在,但它不再能解释 runtime 发生了什么
这些问题会累积成一种“工程认知不稳定”:同一个项目,隔一周再看,你会发现自己只能相信少量东西,其余都要重新问一遍、跑一遍、对一遍。
关键意识:我缺的不是 orchestration,而是 continuity
直到那一刻我才把两件事拆开:
- workflow orchestration 解决的是“怎么把步骤串起来跑”
- engineering-state continuity 解决的是“长期项目里,什么是当前状态,什么结论可信,为什么可信”
我之前不断扩写的很多抽象,属于“未来可能性”,而不是“当前必要性”。
而且最关键的是:它们不自带 authority。
这里的 authority 不是权力或组织结构,而是一个很工程化的含义:
当 README、口头解释、以及 runtime artifacts 产生冲突时,谁是最终裁决?
如果答案不是 runtime artifacts,那你就很难在长周期里建立可迁移的工程状态,因为你随时可能被“解释”带偏。
语义回滚:把 ForgeFlow 开始收缩到 engineering state system
我做的修正本质上很简单:把叙事从“workflow runtime”开始收缩回“工程状态系统”(并且刻意避免把这种收缩描述成“已经完成”)。
具体落地是几件可以被检验的事情:
- README 重写:把 primary object 改成
project engineering state - 项目页重写:把“workflow runtime”改成 “engineering state system”,并把失败模式写清楚
- “agents”降级:它们不是主抽象,只是 state producers(产生状态与建议的实现手段)
- STAY vs BACKFLOW 从“术语”变成“失败处置的显式决策”
- hard vs soft evidence 明确化:未来可能做很多自动化,但当前要先把“哪些证据算数”讲清楚
我开始刻意强调一句话:future possibility ≠ current implementation。
这不是保守,而是在避免把“可想象的架构”当作“已经拥有的 authority”。
hard / soft evidence(一个可操作的区分)
对我来说,一个足够可操作的划分是:
- hard evidence:能被复查、能回放、能从 runtime artifacts 中直接读出来的东西(例如运行事件、审批记录、summary 的结构化输出)
- soft evidence:来自人或模型的解释性输出(例如一段看似合理的结论、一个“我觉得可以”的设计描述),它可以被记录,但默认不应当自动升级为“已证实”
需要补一句现实:ForgeFlow 目前真正具备的 deterministic authority 其实很少;多数结论仍然由人来扛,hard/soft 的语义也还处在早期探索期。
所以这里的区分更像是一个“写作与实现都要遵守的自我约束”,而不是已经成熟的证据体系。
这并不意味着 soft evidence 没价值;相反,长周期项目里大部分结论最初都只能以 soft 形式出现。
但它必须有一个被 hard 化的路径,否则它就会在下一次推进中变成语义漂移的起点。
我删掉的 abstraction,实际上是在删语义债
回头看,我删掉的主要是这些“未经授权的宏大叙事”:
- 把自己称为通用 workflow engine
- 把多 agent 当作核心卖点
- 过早许诺 rollback / checkpoint / mutation runtime(哪怕只是“将来会有”)
- 用架构层级替代证据链路
我保留的,是能让 authority 逐步变强的最小骨架:
- 单一状态源与可检查的状态语义(谁负责裁决)
- runtime artifacts(发生了什么,为什么这么走)
- 明确的边界矩阵(实现了什么,没实现什么)
当抽象带来的复杂度超过它能提供的 authority 时,它几乎必然会变成 semantic debt。
结论:软件工程不是让 agent 写更多,而是让状态可迁移
我现在更愿意把目标说得非常克制:
软件工程的关键不是“让 agent 写更多代码”,而是让工程状态变得:
- inspectable(可检查)
- evidence-bound(与证据绑定)
- reproducible(可复现)
- transferable(可交接、可迁移)
ForgeFlow 仍然很早,runtime authority 也仍然很弱:很多决策依然依赖人,很多证据仍然是 soft。
但这次语义收缩至少让我重新开始区分一件事:如果 authority 还不在 runtime,那么很多复杂度就只是在叙事层面累积。
下一步也应该同样克制:不是继续扩写架构,而是让更多关键结论拥有可复核的证据路径;同时承认在相当长一段时间里,人仍然会是最终 authority——ForgeFlow 更像是在逐步外置工程连续性,而不是在做“自治工程”。
后续
这篇文章记录的是 ForgeFlow 从 workflow/runtime 叙事收缩到 engineering state system 的阶段性思考。
后来项目继续收缩到 requirements artifact / requirements sieve,相关记录见: