PreparedContext 是一次请求的临时值
宿主调用prepare_context 时会带上 scope_id、当前查询和 max_bytes 字节预算。
Server 从当前启用状态 Memory 和已批准当前 Experience 中选择相关内容,再返回一个 PreparedContext。
正常结果有两种。
empty 不是 Server 故障,也不是认证失败。
带精确 Citation,并使用明确的信任标记。
哪些路径可以 fail-open
自动召回
Server 停止、超时、模式不认识或响应过大时,宿主跳过注入,继续原来的模型请求。它应记录有界诊断,但不能输出查询、Scope、准备好的内容、令牌或响应体。自动提示词或轮次采集
采集失败不应中止宿主任务。它也不能删除已经准备好的有效上下文。 反过来也一样。召回失败时,支持采集的宿主仍可尝试保存 Source。这两条路径不是一个事务。可选边界刷新
有些宿主会在采集后或会话边界尝试刷新,帮助新 Source 尽快进入抽取流程。刷新追不上游标或 Server 暂时不可用时,当前轮次仍可继续。统计和 telemetry
统计失败不应让已经成功的领域写入回滚。哪些操作必须明确失败
这些操作会改变或发布状态。静默继续会让调用方误以为修改已经发生。
显式操作失败后,宿主的对话本身可以继续,但必须说明这次动作没有完成。
一次对照实验
假设 Claude Code 收到下面这条问题。召回失败,采集成功
这时不注入 PreparedContext。原提示词继续交给 Claude Code。提示词 Source 仍可能保存成功。诊断标记server_unavailable 或对应的失败类别。
召回成功,采集失败
已验证的additionalContext 仍然注入。采集错误不会抹掉召回结果。当前任务继续。
显式停用失败
用户随后通过 MCP 要求停用一条精确 Memory。此时 Server 已停止。MCP 操作返回不可用或错误。宿主不能声称 Memory 已停用。用户可以继续其他工作,等 Server 恢复后重试。 这三种情况都不中断宿主,但只有前两种属于自动 fail-open。安全边界仍然失败时关闭
认证失败不是空召回
401 或 403 表示配置或授权有问题。把它当成empty 会掩盖故障,也可能让用户误以为当前 Scope 没有历史。
不跟随重定向
Hook 不应携带授权信息请求头跟随 30x 到另一个宿主。重定向目标拿不到凭证,比尽量完成召回更重要。不接受未知模式
响应能解析成 JSON,不代表宿主理解它。模式版本不匹配时跳过注入,记录version_mismatch 或 invalid_response。
不接受无限响应
Hook 对响应大小和总墙钟时间设上限。超过限制就中止自动路径,不读取到内存后再处理。不放行不安全传输层
PowerContext 客户端拒绝非本机回环地址的明文 HTTP。Server 绑定非本机回环地址时,默认也要求认证。否则必须显式启用不安全选项。fail-open 不能取消这些检查。degraded 不等于 not_ready
就绪探测把数据库故障和可选推理故障分开。数据库或运行时不可用时返回 not_ready,HTTP 503。已配置的生成或嵌入探测失败时返回 degraded,HTTP 200。不依赖故障推理能力的数据库操作仍可继续。需要该生成或嵌入模型提供方的具体操作仍可能失败。
看到 degraded 时先检查具体能力,不要把整个 Server 当成离线。
诊断应告诉你什么
好的自动路径诊断只包含排错所需的元数据。empty、authentication_failed、version_mismatch、server_unavailable 和 invalid_response。
判断规则
遇到失败时,先问两个问题。这是宿主自动尝试的辅助操作,还是用户明确要求的持久动作?跳过它会不会让用户误以为状态已经改变? 自动辅助路径通常可以继续。任何会改变长期状态、批准内容或发布文件的动作,都必须返回真实结果。怎么知道分清了
empty不是故障,也不是 401 或 403。- 自动召回失败时,原任务还能继续。
- 你明确写入 Memory、提交 Handoff、批准或导出时,失败看得见。
degraded不是整个 Server 离线。
ready、degraded 和 Server 完全不可用时的行为。
下一步
启动本地 Server
先写出一条 Memory,搜到它,再拿到带 Citation 的 PreparedContext。
对上最像的那条故障
Server 停了却指望自动召回报错,或把 401/403 当成没有内容?先对照已经出现过的情况。

