会话锚定
在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 可关闭它。forge verify。仅有一次 forge handoff 快照,已经不足以清掉关卡中“代码变更”这一分支。
修复清单指向能把工作收尾的工具:
Handoff 与决策
两种存储让知识跨会话延续:
两者在写入时都拒绝密钥。
state.md 会在每次会话开始时被重新注入;
decisions.md 会在重新决定过往会话已定的事之前先被读到。
diff 驱动的文档清扫
forge docs sync 回答这个由 diff 决定形状的问题:变更的标识符
(来自新增 与 删除行中的路径、定义与被调用符号)对每个文档产物做扫描 → UPDATED / STALE(带 file:line 命中)/ VERIFIED-UNAFFECTED,并记录原因。它是纯报告器;真正咬人的牙齿由完成关卡提供。