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 保持分离,永远不会阻塞。 变更集是会话范围的:提交者时间在会话开始之后的提交所涉及的文件,加上工作区的改动,再减去在 SessionStart 时快照的“脏文件”——因此已存在的编辑、分支切换和 git pull 永远不会被算到代理头上。
如果代码动了、却没有跟进文档或状态产物,该关卡会拦下一次,并以修复清单作为原因。其他情况一律放行,所有内部错误也放行(fail-open)。FORGE_STOPGATE=0 可关闭它。
对于改动了代码的会话,该关卡还要求提供测试证据——要么在会话 diff 中包含一个测试文件,要么针对当前改动重新跑一次通过的 forge verify。仅有一次 forge handoff 快照,已经不足以清掉关卡中“代码变更”这一分支。 修复清单指向能把工作收尾的工具:

Handoff 与决策

两种存储让知识跨会话延续: 两者在写入时都拒绝密钥。state.md 会在每次会话开始时被重新注入; decisions.md 会在重新决定过往会话已定的事之前先被读到。

diff 驱动的文档清扫

forge docs sync 回答这个由 diff 决定形状的问题:变更的标识符 (来自新增 删除行中的路径、定义与被调用符号)对每个文档产物做扫描 → UPDATED / STALE(带 file:line 命中)/ VERIFIED-UNAFFECTED,并记录原因。它是纯报告器;真正咬人的牙齿由完成关卡提供。
recallcortex 仅仅是文件与提示级别的记忆——不是 权重级学习。合并操作是一个可能产生幻觉的总结器,所以它保持建议性、人工可复核,并且不包含密钥。