Repository navigation
fix(chat): open the Core-qualified steward conversation after quota fallback - #8071
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; OpenAI Codex; OpenAI; self_reported(host session attribution unavailable,未冒称人工独立评审或精确模型构建)。
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
APPROVE,未发现此精确 diff 的阻断缺陷。在原管家已经安全切换到既有 Codex 备用通道后,从 App 继续原私聊的用户。同一原会话在 Core 已通过资格检查,界面仍把 Antigravity 配置偏好与当前 Codex 执行器直接比较并报不可用;修复后可直接打开原记录,撤权或无效分配仍拒绝。同一真实 HTTP/SQLite/Core 场景使基线前端复现原错误,候选普通与备用两条旅程通过;打包页面已目视核对长记录、撤权草稿阻断及恢复。本 PR 不创建替代会话、执行模型切换或发送业务消息,不修改 Core 授权、模型池、服务消费者或历史回传的完成标准。真实安装后的原 App 采用、模型回答质量及父级历史问题清账仍需分别验收。
配置偏好是用户希望优先使用哪个通道,当前执行器是原会话已经实际采用的通道,两者不是同一事实。这里不需要用户再选择账号、重建会话或重发原消息;原服务已经保留了安全切换的来源与历史。错误的前端比较会把这个合法状态变成不可用提示,重复刷新也无效,用户反而可能丢失继续阅读原问题的入口。该增量先修复这个确定的入口故障,不用一条可读记录宣称所有历史问题或父级同步目标已完成。
改动思路 / Approach
复用既有 Core 对准确绑定与规范 Session 的资格判断,删除前端错误的二次路由决策;无需新字段、兼容分支、队列或执行器。同一个来源已被 Core 核验后,前端只消费准确 Session 与受众,不把配置偏好当作活动执行器;后续输入仍逐次受原 Core 授权。
依据已接受的 docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md,spec_revision 0423908e9cf46afd7a765552323b842441bd6512,本次相关条款是 ORIGINAL-SELECTOR(准确绑定回显及冻结 Session)、NO-ENTRY-EXECUTION(入口不新建、不改模型或执行器)、CORE-QUALIFIED-SOURCE(同一次新鲜 Core 验证产生来源)和 MATCHING-EXECUTOR(匹配执行器及来源失败关闭)。这些条款按该基线原文审查,未修改 RFC 使其迁就补丁。匹配执行器的资格仍由已有 Core 的规范状态规则决定:既有 Antigravity 偏好下的 Codex 备用必须带准确分配原因、配置身份与原上游证明;不是看到两个端点不同就放行。前端消费这个已核准的来源,不再把配置名称相等当作另一套权限规则。
| 输入状态 | 基线入口 | 当前候选 |
|---|---|---|
| 原 Core 核准同一会话的安全备用通道 | 因配置偏好不同而误报不可用 | 直接读取原会话 |
| 无效分配、撤权、外国绑定或缺失原目标 | 原 Core/入口拒绝 | 继续拒绝并保留恢复入口 |
此表是所读路径的说明,不替代执行证据。最短合法旅程仍是用户打开已有原会话;已有意图和授权下新增选择、复制、确认回合均为零。真正撤权则保留原来必要的恢复步骤,而不是为减少操作绕过来源验证。
具体改动 / Changes
关键代码讲解
resolveBoundConversation保留 source schema 和 binding id 的检查,删除配置端点必须等于活动 agent 的错误判断。生产变化只有 +2/-3 行,两个新增注释解释为什么该比较不成立,没有新增前端路由政策或缓存成功标记。fetchChatSessions仍发送准确 binding selector,要求服务回显原绑定,并只接受冻结的那一个 Session。旧服务忽略 selector、来源缺失、外国绑定、群受众和关闭会话仍拒绝;读取不会退回普通管家或另一段历史。- 既有
boundExecutorMatches以及listLocalBoundSessions是实际权限判断者,当前 PR 没有改它们。匹配已有原会话还需来源、工作区、受众、上下文与规范分配/历史共同成立;之后任何输入也重新经过原 Core。把检查集中回这个既有 owner,是减少错误的重复判断,不是新增执行许可。
测试复用原 HTTP/SQLite/Core fixture;默认 smoke 串行跑普通项目和已恢复管家两条旅程。备用场景在临时规范存储构造已恢复状态并保留原上游证明,随后所有读取、来源拒绝和分配拒绝都走真实 Core。它不冒称付费模型的实际额度切换;后者仍由既有原 worker 的独立 8 项回归覆盖相应合成边界。原 bootstrap 的两处晚导入增加局部 lint 说明,不改运行行为。曾有一项前端 mock 把「配置端点不同」本身当成错误,本次将它替换为真实 Core 对错误分配原因和错误 configured endpoint 的两项拒绝检查,原来源、受众、回显与 Session 身份反例仍保留。
对主干的风险 / Risks
最强反对理由是删除前端检查可能放过不属于原会话的执行器。独立反例实际经过 HTTP/Core:把分配原因改成不表示安全备用的值,或让 configured endpoint 与原绑定不符,均得到 409,前端保持不可用;来源撤权、原目标关闭、错误回显与跨受众反例也继续拒绝。读取没有新增 Session,普通场景保持两个预置会话,带独立 peer 的备用场景保持三个;页面交互前后规范消息仍为 14 条且没有新活动 Turn。该比较原本不能代替服务端授权;所有实际输入的权限栅栏完整保留。
精确基线 0423908e9cf46afd7a765552323b842441bd6512 的生产前端与同一新 fixture 会在原 executor mismatch 抛错,候选 0445dc63f7f98addde2a2d8dbd67fab4e6759443 的默认两旅程通过;最终 committed head 也完整重跑,避免把 fixture 构造错误或旧成功结果当新版本证明。TypeScript/生产打包与 Ruff 通过,标准 premerge 5 项直接检查和 5 项选择检查全部通过。此 Goal 不查询或等待 CI,本次没有将未观测的远端检查视为通过。公开正文和全部三份改动已独立扫描及读回;首次扫描误把私有证据路径本身作为公开目标的失败保留,重扫的是完全相同正文的内容,不把该失败伪装为原本成功。
该发布包没有迁移 Session、改权限或扩大候选池。旧 UI 仍可能误拒绝合法备用,因此要沿正常包升级路径让真实 App 加载新前端;失败应继续保留原记录和明确恢复,不改配置或创建第二消费者来制造成功。合成页面证明渲染、恢复和边界,不证明模型答案质量或真实飞书全量同步;部署验收和历史欠答继续单独进行。
我的整体评价 / Verdict
复用既有 Core 对准确绑定与规范 Session 的资格判断,删除前端错误的二次路由决策;无需新字段、兼容分支、队列或执行器。同一个来源已被 Core 核验后,前端只消费准确 Session 与受众,不把配置偏好当作活动执行器;后续输入仍逐次受原 Core 授权。long_horizon 与 user_experience 均 improved:原记录在既有安全额度切换后仍可访问,用户无需为显示错误重新选择模型、输入已有信息、确认或重建会话;真正来源故障保持准确提示及可继续的恢复步骤。原 Session 与累计状态仍归既有 owner,不增加后台任务、重试循环或每条消息的人工维护。
已目视检查候选真实打包整页的 1200×888 桌面视口,覆盖 14 条记录、6 篇重复长正文、较早记录、底部输入区及撤权/恢复;无布局或响应式规则变更,本轮不新增窄屏资格。实际画面中的原来源、活动 Codex、用户请求和长正文层级清楚,早期记录与最新记录均可回看,完整答复阅读入口保留;底部故障提示不会被解释为任务完成。撤权后输入草稿保留、发送被禁用,恢复后同一草稿与记录重新出现,未提交该草稿。本机已安装 App 的更新后界面仍待合并部署核验;隔离来源和模型为合成,不证明真实回答质量或完整双端同步。本改动不引入密度、折叠或响应式布局调整,因此不把窄屏、展开控件或长期服务稳定性冒称已验收。
生产实现保持最小、原规范身份与跨层责任一致,测试复用已有真实边界并证明旧实现会失败。认可这个独立可回滚的入口修复;正常升级后的本机 App 和原受众返回仍须实查,父级未答问题、原失败及保护门保持开放。
English verdict: APPROVE — head 0445dc63f7f98addde2a2d8dbd67fab4e6759443 removes an incorrect UI preference-equality check while preserving existing Core qualification of the exact original Session. The immutable UI baseline reproduces the failure; exact-head ordinary/fallback journeys, actual Core refusal cases, packaged-page draft recovery and standard premerge checks pass. Installed App adoption and outstanding original answers remain separate acceptance.
原管家从 Antigravity 安全切到既有 Codex 备用通道后,Core 已核准同一原会话,App 仍因「配置偏好必须等于当前执行器」的重复判断而显示原会话不可用。现在由既有 Core 原绑定读回决定会话资格;前端保留绑定回显、准确 Session、私有受众和来源验证,继续展示真实执行器。
扩展原 bound-conversation smoke,默认串行覆盖普通项目和已切换管家两条真实 HTTP/SQLite/Core 旅程。无效分配原因、错误配置端点、撤权、外国绑定、关闭会话及旧服务缺失回显继续拒绝;读取不创建替代会话。fixture 仅在临时存储构造已恢复的规范状态,上游模型仍为合成,不将它声称为付费模型切换验证。
Validation: 同一 fixture 对精确基线 0423908 的生产前端复现原 executor mismatch;候选两条旅程通过。原安全额度恢复 8 项检查、TypeScript/打包构建及 Ruff 通过;标准 premerge 的 5 项直接检查和 5 项选定检查全部通过。真实安装后的 App 原会话读回在合并后单独验收。原历史漏答、部分结果和保护门保持开放。
English: trust the existing Core-qualified original Session after a safe steward executor fallback. Do not equate a configured preference with the active executor. Preserve source/audience/Session checks and effect-time Core authorization.