fix(recall): drive reroll reuse from host generation context

This commit is contained in:
youzini
2026-05-31 20:36:14 +00:00
parent 86ecdbeeae
commit f25ad9eaa1
11 changed files with 196 additions and 150 deletions

View File

@@ -75,10 +75,11 @@
- `assertRecoveryChatStillActive` — 异步恢复过程中,校验聊天没被切走(切走则抛 abort
- `getGraphPersistenceLiveState` — 把内部状态投影成面板/调试可读形态
## 向量门禁与 reroll 边界
## 向量门禁与 reroll 代际上下文
- `vector/vector-gate.js` — 向量准备/修复前置门禁,决定 skip / repair / blocked / sync。
- `runtime/reroll-transaction-boundary.js` — reroll 召回复用事务边界
- `runtime/generation-context.js` — 记录宿主本轮生成的 `type``normal` / `swipe` / `regenerate` / `continue` 等),并解析本轮应绑定的父 user 楼层
- `runtime/reroll-recall-input.js` — 基于代际上下文构造召回输入;不再用一次性 marker 猜测 reroll。
**reroll 不变量:**
@@ -86,6 +87,8 @@
换句话说:召回注入可以复用,但图谱状态该回滚还得回滚。两者不能混为一谈——这是"reroll 乱召回"修复的核心。
设计纪律:**信任宿主生成类型,不用输入源猜 reroll**。`GENERATION_STARTED` / `GENERATION_AFTER_COMMANDS` 传入的 `type` 是权威信号:`swipe``regenerate``continue` 属于 no-new-user 生成,优先绑定上方可见 user 楼层的持久召回;`normal` 才代表新输入,需要 fresh recall。`MESSAGE_DELETED` 在 regenerate 代际中只作为预期删除处理,不会擦掉本轮召回事务。
## 副本一致性模型
Authority 场景下有三处存储,它们**不是平级的版本副本**

View File

@@ -81,7 +81,7 @@ Restore Lock → 恢复期间阻断图谱变更
这次重构的核心理念是把**"做决定"(控制平面)和"执行副作用"(数据平面)分开**
- **控制平面**身份解析、持久化确认状态机、图谱可写性门禁、向量门禁、reroll 边界。这些是纯逻辑/策略,已抽成可独立测试的注入式模块。
- **控制平面**:身份解析、持久化确认状态机、图谱可写性门禁、向量门禁、生成代际上下文 / reroll 召回复用。这些是纯逻辑/策略,已抽成可独立测试的注入式模块。
- **数据平面**:实际的 IndexedDB/OPFS/Authority/Luker 读写。仍在编排层,由控制平面的决定驱动。
这条分界是过去大量 bug陈旧 pending、未进入聊天、reroll 乱召回、一致性漂移)的修复基础。详见 [`control-plane.md`](control-plane.md)。
@@ -152,9 +152,9 @@ ST-BME/
├── runtime/ # 运行时状态和设置
│ ├── identity-resolver.js # 身份解析核心
│ ├── runtime-state.js
│ ├── reroll-transaction-boundary.js # reroll 召回复用事务边界
│ ├── generation-context.js # 宿主生成 type 跟踪 + 父 user 楼解析
│ ├── recall-input-state.js # 召回 input/intent/trivial-skip 状态工厂
│ ├── reroll-recall-input.js # reroll 复用 + planner handoff 输入工厂
│ ├── reroll-recall-input.js # reroll/continue 召回输入 + planner handoff 输入工厂
│ ├── generation-recall-transactions.js # 生成召回事务生命周期工厂
│ ├── final-recall-injection.js # 最终召回注入解析工厂
│ ├── auto-extraction-defer.js # 自动提取 defer/resume 工厂