> 公开阅读副本。JARVIS_ROOT 表示你本机的 Jarvis2 项目目录；本地证据链接仅作定位，不公开上传验收日志。权威内容仍以项目内交接为准。

# S2.3：独立会话、上下文装配与恢复交接

日期：2026-10-25。用途：交给后端 Codex 的下一包任务，不是完成记录。用户报告 S2.2 已完成；已核对其后端隔离交付。真实模型发送仍关闭，S1 连续 24h 与历史日历风险不因此销账。

## 1. 依据与本包目标

使用 `jarvis-development-engineering`；本机项目根目录为 `<JARVIS_ROOT>`。读取 S2 分包计划（项目内：`S2-INFERENCE-PROVIDERS.md`） §3 的 S2.3、§4，S2.2 交付（项目内：`../维护记录/S2.2-规则路由验收.md`） §2–4、§7，以及 路线图（项目内：`JARVIS-IMPLEMENTATION-ROADMAP.md`） §4。按实际调用点核对 AgentSession、LLM/MCP 历史、Supervisor 最近状态与 `jarvis_compact`，不通读全仓库或重做 Router。

把目前多个组件各自保管的聊天历史，收敛到一套受控的 **Session Store + Context Assembler**：同一会话能续聊、不同会话不串线；重启可恢复已接纳历史及明确任务引用；每次送给模型的内容有界、来源可解释。它不是学习事实库、长期人格记忆或 RAG。

## 2. 必须实现

1. **单一历史所有者。** 列出当前历史读写点及迁移表，组件通过统一接口取得只读快照/提交已接纳记录，不继续镜像多份可写列表。会话键沿用已有可信身份范围（入口/账户/actor/session），不能仅凭消息正文、展示名或最后活跃会话认人。
2. **持久性与并发。** 区分用户输入、待接纳回答、最终接纳历史、摘要和任务引用；失败、取消或被 fence 拒绝的回答不能安装成成功历史。提交与已存在的 Coordinator/来源检查协调，使用版本检查阻止旧摘要覆盖新消息。先说明持久数据归属；需迁移时走现有非破坏迁移与备份/恢复规则，不另开无人管理的 JSON 存储。
3. **有界上下文。** Context Assembler 显式接收会话快照、可信策略、任务引用与 Provider 能力/预算，输出不可变的上下文及装配清单。区分系统指令、用户消息、工具结果和外部资料；外部资料不能升级为系统或用户授权。按消息/工具调用完整配对裁剪，不留下悬空工具回执。
4. **预算可核查。** 说明预算给系统、近期对话、摘要、工具与预留输出如何分配；无精确 tokenizer 时标明估算方法及保守余量，不声称精确 token。展示保留/省略/截断了什么；超限时明确拒绝或要求缩小范围，不无界追加，也不默默丢掉关键确认绑定。
5. **摘要不是事实。** 摘要带来源消息范围、会话版本、生成策略/Provider 来源；只在合法接纳后安装。摘要模型调用也经过既有 Gateway，本包使用替身；失败时保留有效旧状态并采用明确的有界替代策略，不为摘要偷偷调用真实模型。
6. **恢复不重发。** 重启恢复历史和绑定任务引用，但过期卡、未完成运行及未知外部结果先从原核心重新核对。不能把摘要中的“已确认”变成授权，不能重放工具或未知模型请求；未完成响应明确保留中断/未知。模型切换不丢会话与确认绑定，也不继承旧 payload 的授权。
7. **冻结输入。** 每次推理基于明确版本的冻结上下文；消息、摘要、工具结果或附件变化会产生新版本/hash。为后续 CloudConsentGrant 提供可验证输入，不在本包实现或绕过真实外发授权。

## 3. 不做什么与协作边界

- 不常驻 9B/小模型，不训练，不建设向量库/跨会话自动个性化，不做完整 S2.5 评测集。
- 不改 S2.2 有限路由语义，不恢复 IM 模型/MCP/设备/delegate 权限；保留 IM 实际 worker 退出前串行、有界队列、来源和取消 fence。
- 不访问真实凭据、模型、学校/IM/Calendar、`~/.jarvis`；用独立 HOME/SQLite/附件/日志、合成会话与模拟传输。构造/恢复/确定性规则路径零模型发送，所有真实网络尝试为零。
- 不修改 Swift/U2、共享 IPC/投影协议，不实现 U3 Unix socket 服务。U3 的后端动作桥是独立包，不能因为 Claude 需要接口就塞进 S2.3。
- 不覆盖已有工作区修改，不安装依赖/插件，不提交推送、不发布网站。阶段交付后停止。

## 4. 验证及五步直观验收

先复现 A/B 历史隔离、重启或摘要覆盖缺口，测试先行；只替换外部依赖，验证实际 Supervisor/Runtime/LLM/MCP 接线，不只测孤立存储类。专项至少覆盖双身份、错绑定、并发旧摘要、上下文超限、工具配对、坏持久记录、取消迟到、摘要失败、恢复不重发和 Provider 切换。复跑受影响前序及统一离线入口，分开记录新回归、既有失败与环境限制。

复用现有人工验收启动器，最多五步：

1. 在合成会话 A 说明一个任务，在 B 说明另一个；查询上下文，彼此不包含对方内容。
2. 追加足够长的合成对话触发预算；显示实际保留、摘要与裁剪清单，仍能找到当前绑定任务。
3. 正常退出并重启；A/B 各自恢复，不自动发模型或工具请求。
4. 取消阻塞回答/摘要再释放结果；历史与任务引用不被污染，旧摘要不能覆盖新轮。
5. 切换模拟 Provider，再查同一候选；会话仍在，确认仍需当前有效绑定，旧卡不能确认。

## 5. 交付与停止点

交付真实调用链、历史所有权/迁移表、上下文预算与来源格式、专项及回归原始结果、五步验收和保留既有改动的回退方案。新增 `文档/维护记录/S2.3-会话上下文验收.md` 与独立日志，不覆盖前序记录。不把 mock 恢复或摘要测试写成真实模型质量、真实 UI 或 S1/S2 总体通过；停止等待用户验收，不进入 S2.4。
