Skip to content

fix(chat): preserve complete Antigravity migration history - #7945

Merged
huangruiteng merged 2 commits into
mainfrom
codex/antigravity-visible-history-20261103
Nov 3, 2026
Merged

huangruiteng merged 2 commits into
mainfrom
codex/antigravity-visible-history-20261103

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

Antigravity 的既有管家迁移会从 Chat store 取得完整可见历史,provider 却只发送最后 16 条,并对正文做 strip()、忽略空白消息。早期约束因此可能在新线程丢失。

本修复在首次新线程输入中,以 JSON 保留全部已提供的 role/content、原始空白和顺序;不转发 transport metadata。后续 Turn 与成功的原生 resume 沿用原线程,不重复附加历史。实际迁移场景保留原 Session、完整 store 记录和两轮投递结果。

Author Declaration

  • Written by: model_agent — OpenAI Codex (GPT-6 family).
  • Specification: docs/architecture/rfcs/manager-runtime-profile-v0.md 的 Session consistency,revision 107e9e32e8f3df29f63b94524250f4044cc01a80。
Criterion Disposition Implementation / evidence
新线程迁移保留可见历史 implemented AntigravityAdapter._build_turn_prompt;早于 16 条窗口的约束、Unicode、空白及角色原样可读
后续 Turn / 原生 resume 不重复迁移 implemented 同一真实 HTTP / Chat caller 的两轮结果、原生 resume 兼容用例
原 Session、profile 与权限归属 implemented 隔离真实 store/Core、两种机器 profile 配置及原生 planner readback
真实安装 App / 模型采用及完整成本 deferred 隔离 wheel 已验证;实际宿主、原会话采用与长程效果继续由原 manager 工作验收

Scope And Continuation

复用原 Chat/runtime/store 与 native provider,不增加配置、Core 决策、跨 Session 读取或新的迁移触发条件。调用方仍只需沿既有 Chat 入口继续;在已有迁移边界自动使用完整历史。

这是可独立回滚的历史保真修复。#7937 继续处理 Core 输入布局与渐进读取,#7938 处理共享 import boundary;更广的跨执行器采用保持原有归属。当前提案进入正常评审,合并、实际 App 安装与真实模型验证分别保留。

Validation

  • Tested final source revision: 74f2dbee3cc83fc1068d570cf33d34d4fa5b8fcd.
  • Run state: finished.
  • Input classes: synthetic, public_fixture.
Check kind Result Evidence / limitation
integration / real_entrypoint passed 273 项相关 Python 回归,69.73s;包含原生 adapter、Chat 上下文/回传、manager profile、native steward/executor。真实隔离 Chat store/Core;外部模型为 loopback 合成 HTTP provider
regression_parity passed 冻结 target 的原 _build_turn_prompt,相同 6 场景复现 4 个历史丢失失败、2 个原生 resume 兼容通过;最终 6 场景全部通过。覆盖原文/顺序/空白、metadata 排除和后续不重放
integration / packaged_entrypoint passed 正常构建 wheel,在新建非 editable 环境、checkout 外运行相同 6 场景:6 passed / 8.83s。无 PYTHONPATH/source override;5 个实际加载的生产模块与源码逐字节一致,私有 runtime 已清理
static passed 修改路径及完整 CI Ruff 范围、CLI output budget、RFC staged/committed 双语检查、源编译、diff hygiene
static / integration passed premerge 6 direct、完整 semantic、8 risk 及 4 路径公开边界扫描;diff advisory 0 个支持的新 vocabulary carrier,保留其覆盖限制
static failed 原始 maintainability ratchet 仍报未改 render_canonical_todo_sections;selector 的 inherited advisory 不作豁免
static failed 完整配置 mypy:786 errors / 125 files。全部 119,338 bytes 诊断与保留的不可变 target 结果一致,stderr 为空、Python/包工具链一致;作者归因不豁免必检
integration not_run 全仓 Python suite、实际安装 App/native model、原私聊和跨执行器采用;完整 CI 与独立评审/readiness 继续

完整内容有成本:相同 20 条历史的 Chat 迁移,按生产 serializer 重编码的首次 RPC body 在 restricted 为 93,927 → 103,616 bytes,trusted-owner 为 96,473 → 106,162 bytes,均增加 9,689 bytes;早期约束得以保留。两轮 Send 数量及原生 resume 不变。模型 token、费用、物理 IO 和净收益未测。

CQR cqr_e90a0da79ef61b017187 已记录 FAIL,verify=invalid_receipt。一次允许的安全修复保留了原二字段边界,避免将 transport metadata 一并发送;最终全部差分已复核和重测。premerge 在记录前的聚合 gate 为 quality_receipt_missing,以上原始失败及必检缺口继续保持,当前不能合并。

Frontend / Visual Evidence

UI impact: none。改变既有迁移的模型输入,未改页面、设置或第一视口;截图不适用。隔离打包验证与实际安装采用分开报告。

Boundary Checklist

  • 仅 provider 修复、聚焦公共 fixture 与配对 RFC;无私人状态、原始轨迹、凭据或本机路径。
  • 未启动 benchmark 或付费模型工作;原 Session、来源、权限及审批 owner 保留。
  • 中英 RFC 同 PR;两个提交均有 DCO sign-off。

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max.

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

动机 / Motivation

在 Antigravity 管家切换 profile、恢复旧会话或迁移线程的用户。 以前新线程只收到最近 16 条历史,内容还会被 strip,早期限制和原始空白可能丢失;现在首次发送带上同一 Session 的完整可见历史,后续健康接续不重复发送。 真实 Chat/store 到原生 HTTP 的配对验证保留了全部历史、Session 和重试状态,早期内容、空白及引用标记不再丢失。 不扩大工具权限、受众或配置作用域;不把合成 HTTP 证明称为真实模型理解、安装版采用、token 节省或长程净收益。

改动思路 / Approach

完整历史已经由既有 Chat Session owner 提供,缺口位于最后的 Antigravity 编码;复用此 owner 删除截断即可,无需新增存储、reader、配置或权限。 本 PR 交付新原生线程首次输入的完整历史保真,以及健康恢复、缺失原线程和发送失败后的重试语义。 我比较了不改、在既有 owner 内修复和增加新机制三种选择;当前改动沿原生产入口生效,派生输入不成为新的状态或权限。实际失败由原 owner 拒绝并给出恢复;通过发送、读取或回执本身不能证明真实模型采用。这里采用正文说明控制流,未把未渲染的图示当测试证据。

具体改动 / Changes

完整评审 7945@74f2dbee3cc83fc1068d570cf33d34d4fa5b8fcd,merge base 107e9e32e8f3df29f63b94524250f4044cc01a80:4paths +128/-8; one production encoding block, focused native tests and both accepted RFC language files. 先读不可变基线 107e9e32e8f3df29f63b94524250f4044cc01a80 的 docs/architecture/rfcs/manager-runtime-profile-v0.md;本 PR 修改的文字没有被当成自己的验收依据。映射 criterion_id Session consistency、4、9:均为 implemented;原 Session、完整 visible history、profile 与既有绑定/受众限制保持。原 RFC 第6项的既有非 Codex 表述冲突没有被本 PR 改写或当作新门槛。

关键代码讲解

  • _build_turn_prompt:554:将既有 pending history 全部编码为只含 role/content 的 JSON,去掉最近16条和 strip。保留原始空白及引用标记,只有新线程尚未 primed 且有历史时才加入。
  • _run_turn:621:发送和 priming 的 owner 没变:只有原生 Send 成功后才清空历史。失败保留同一输入供重试,健康接续不重复,原 cascade 缺失时不暗建替代线程。

6个完整归属Python模块197PASS;独立10组相同输入配对为 base6FAIL/4PASS、head10PASS。使用24条原话、早期约束、Unicode、空白及引用 role/frame 标记;真实 Chat/store 迁移和原生 HTTP 证明新线程第一次发送完整数据、第二次不重复。缺失原 cascade 不暗建替代,503发送失败保留历史,成功重试后才清空;其他 Session、错误行和元数据没有进入输入。

成本确实增加:相同24条固定历史的实际 RPC serializer,restricted 首发52877→71932B、trusted54097→73152B;真实 Chat 迁移分别92158→111213B、94704→113759B,均增加19055B。这是完整历史的可见成本,不是 token/CPU/模型收益证明;已验证后续 Turn 不重复发送。

对主干的风险 / Risks

最强反例是:原 cascade 消失或首次 Send 返回503;历史同时包含另一 Session、错误行和引用 role/frame 标记。 已观察:缺失恢复不创建替代 cascade 或发送;503之后历史保留到成功重试,随后清空;另一 Session、错误行和元数据没有进入 prompt。 现有生产消费者是 ChatRuntimeController._get_adapter:888, AntigravityAdapter.init:425, AntigravityAdapter._build_turn_prompt:554, AntigravityAdapter._run_turn:621;本次不新增 capability、provider、配置或独立设置页面,数据和命令继续经过原 owner。Applied deletion: remove last16 slicing, per-message strip and lossy ad-hoc role formatting; encode one existing role/content list as JSON. 历史/身份兼容被保留,没有为了旧回执另开请求解码器或并行规则。

标准 premerge、typecheck、适用 Ruff、diff semantic advisory、public boundary 和适用 RFC bilingual 检查通过,premerge没有阻塞失败或手工 hold。原始 strict mypy 在相同17个配置root、Python3.14.8/mypy1.20.2及uv.lock下仍为786errors/125files;同命令完整身份、顺序、细节和重复次数均比较,完整119338B输出和125个完整因果源码文件相同。原始 maintainability ratchet 仍FAIL,完整393B输出及因果renderer相同;premerge advisory没有被称为原检查通过。没有改阈值、移除断言、过滤诊断或将CQR声明为通过。

CI未查询、轮询或等待,状态保持UNVERIFIED且仅为诊断;未独立核实的历史 CI 叙述没有被称为已修复。改变的不变量已有上面的独立当前证据,因此未知CI不作为批准门槛。最新主干 374c152ba18a062804b2f7e9b72656cdce0a8b4c 的相关调用方变更已读:7941的资格反馈、7934的native idle与7935/7938的context读路径各有自己的边界;本次没有将旧head验证扩张成最新主干集成资格。

我的整体评价 / Verdict

APPROVE,problem_context为goal_achieved,范围限于本次命名的可逆切片。长程工作:早期约束在原生线程迁移中完整可用,后续健康 Turn 不重复发送;失败发送保留原始历史,未丢承诺或新增执行。 用户体验:使用既有会话与配置入口即可迁移,没有新的配置、补录、确认或人工搬运;首次发送的完整历史增加输入大小。 已检查既有 Chat Session/profile 设置与 native adapter 输入路径;本 diff 没有页面、首屏、布局或新配置控件变更。 未验证范围:未验证真实模型采用、安装版可读性或大历史的完整成本;source/RPC 不能证明这些结果。 完整历史已经由既有 Chat Session owner 提供,缺口位于最后的 Antigravity 编码;复用此 owner 删除截断即可,无需新增存储、reader、配置或权限。 本 PR 交付新原生线程首次输入的完整历史保真,以及健康恢复、缺失原线程和发送失败后的重试语义。 语义词汇复用原 owner,无新枚举、分类器、执行义务或默认工具授权。独立证据支持此 head 的正向价值与比例;诊断失败、安装/模型限制、合并就绪和合并授权仍分别保留。

English verdict: APPROVE the exact reviewed head; changed invariants are independently verified, CI remains diagnostic, and merge authority is separate.

@huangruiteng
huangruiteng merged commit e263c3a into main Nov 3, 2026
28 of 39 checks passed
@huangruiteng
huangruiteng deleted the codex/antigravity-visible-history-20261103 branch November 3, 2026 02:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants