Skip to main content
这一层要消灭两种失败模式:半途而废的工作(代码变了,但依赖它的产物没跟上)和会话失忆(下一场会话重新假设这场会话已知的东西)。指令提升正确行为的_概率_;确定性钩子保证一个_底线_。

会话锚定

SessionStart 时 (src/session.js),Forge 每次会话记录一次 HEAD,清理一周前的会话产物,并注入一份新鲜的定位:

学到的经验

从过往纠错中挖出的 cortex 经验。

锚定的目标

既定目标,用来衡量漂移。

handoff 快照

上一场会话写下的有界 .forge/state.md

近期提交 + 变更

近期提交和未提交变更 —— 是证据,不是先验。
新会话依据证据而非先验来定位。

完成门

Stop 路径上唯一被允许回答的 guard 是 completion-gate.sh (src/gate.js)。它同步运行;负责挖掘经验的 cortex.sh stop 始终在分离进程中,永远不会阻塞。 变更集是会话范围的:committer time 大于等于会话开始时间的提交涉及到的文件,加上工作树变更减去 SessionStart 时快照的脏文件 —— 因此已存在的编辑、分支切换和 git pull 永远不会被算到代理头上。
如果代码动了但没有对应的文档或状态产物跟进,该门会阻断一次,阻断原因就是修复清单。其他情况一律放行,内部错误也一律放行(失败开放)。FORGE_STOPGATE=0 可禁用它。
修复清单指向能收尾这项工作的工具:

Handoff 与决策

两个存储让知识跨越会话: 两者在写入时都会拒绝密钥。state.md 在每次会话开始时被重新注入;decisions.md 在重新决定过往会话已经定下的事项之前会被读一遍。

由 diff 驱动的文档扫描

forge docs sync 回答 diff 形式的问题:变化过的标识符(路径、定义、被调用的符号,来自新增_与_删除两侧的行)对每一份文档产物做扫描 → UPDATED / STALE(带 file:line 命中)/ VERIFIED-UNAFFECTED,并记录原因。它是纯粹的报告工具;完成门提供牙齿。
recallcortex 只是文件和提示词记忆 —— 不是权重级学习。合并是一个可能出现幻觉的摘要,所以它一直是建议性的、可人工审阅的、且不含密钥。