会话锚定
在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,并记录原因。它是纯粹的报告工具;完成门提供牙齿。