Repository navigation
fix(turn): preserve opted-in memory across shared hosts - #6957
loopx-agent wants to merge 1 commit into
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; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
已为指定 Agent 开启经验记忆的使用者,在 DSH 或 Ark 宿主继续任务时需要收到获准的参考经验,并把合格反思交回既有验证流程。
此前签名短包已经声明记忆参与,但共享宿主转换丢掉了召回正文和返回的反思,原生 Turn 又只给 Codex 接上结算观察器;本次补齐这三处接线。
同一原生 File/SQLite 用例在基线有六项失败,在当前版本全部通过;另用真实 DSH 子进程走完独立证明、写回、扣额和记忆读回,普通验证零写入,精确重放也不重复任何效果。
本次资格限定宿主 IO 与结算接线;真实模型遵循、线上记忆服务、安装采用、完整成本和父级 M7.4 收敛仍未验收。
改动思路
复用既有 enablement resolver、签名边界、外层 validator、post-settlement observer 和 memory lifecycle;共享宿主只传递候选,不能自行决定写入。 不改动会留下“配置已开启但宿主看不到上下文/反思回不来”的实际落差;只补提示正文也不能接通原生结算后的观察器。当前方案在四个既有 IO 模块内修复整条路径,并把原 Codex 指导原文提为共用函数,没有新增开关、配置或写入 owner。
源码对照的流程为:已签名参与事实与新鲜绑定 → 共享宿主收到获准上下文 → 返回反思候选 → 外层校验、写回与扣额 → 既有可选记忆流程。普通 validator 通过只证明任务验证通过;缺少精确反思摘要和证据证明时,记忆流程仍等待、零写入。provider 失败继续 fail-open,不阻止原任务。已有 Agent 记忆设置即可使用该路径,既有配置和授权足够时没有新增人工准备或确认轮次。
具体改动
独立验收依据为改动前的 docs/reference/protocols/turn-envelope-v0.md,固定 revision b9389edc28cf5b787f387ef426d1bafd0c118cfb 的 Optional memory participation 与原生 capture 条款,并对照同版本 effect-interpreter RFC 的 M7.4。新改写的文档只记录修复,不能自行成为通过依据。
| 验收项 | 当前精确版本的处置 |
|---|---|
| MEM-participation | implemented:签名参与事实和当前 Goal/Agent 绑定共同控制召回与反思传输。24 个绑定组合及实际 CLI/SDK 输入覆盖失配。 |
| MEM-isolation | implemented:关闭、未配置、失效、仅召回、仅写回和 provider 不可用按各自分支处理;完整 Codex 提示保持一致。 |
| MEM-settlement | implemented:真实 DSH/File/SQLite 路径中,普通验证零记忆记录,独立证明后恰有一个精确读回记录;原 journal 重放无新增效果。 |
| M7.4-adoption | deferred:原有 M7.4 安装宿主与真实模型/provider 验收继续开放。 |
| M7.4-cost | deferred:原有完整 token、detail IO、延迟和结果质量验收继续开放;展示字节恢复不能当作效率收益。 |
关键代码讲解
executor.reward_memory_prompt_instructions提取原 Codex 两段文字,仍调用原reward_memory_automation_enabled,没有复制配置或启用决策。召回指导还要求实际 guidance 存在。八个相同请求的整个 Codex 提示逐字节相等。host_candidate.extract_turn_authority先核对签名,再保留获准的 runtime recall 包及上述指导;仅 ingest 时清掉召回 context,复制映射不修改原请求。DSH 与 Ark 原来就共同经过这个转换,因此不需要各建一套记忆入口。host_candidate.build_result仅在 ingest 开启时把反思原样交还外层。它不截断后冒充有效,也不把非 material 结果变成可写证据;原大小与 material 限制、后续反思 JSON 和独立证明检查保留。execute_turn_run_once中的post_settlement_reward_memory保留既有生命周期,只给已验证 ingest 的其他宿主接上线;Codex 原关闭行为保留。两处既有测试模块扩展实际宿主、原生 File/SQLite 及证明路径;协议与中英 RFC 同步,未新增 UI 或控制面状态。
对主干的风险
本次独立执行 216 个 Python 测试通过;19 个需要显式 native-operation 构建产物的可选 SDK 测试跳过,不把它们算通过。另单独执行 Ark SDK 0.8.0/MCP 1.30.0 的完整 30 项测试通过。实际 SDK HTTP MockTransport 上四种召回/写回组合保留正确输入和返回反思,四个签名篡改用例均在任何 provider 请求前拒绝;未调用线上模型或记忆服务。
同一当前测试输入在不可变基线运行时,16 个原生 DSH/File/SQLite 场景有六个召回/ingest 断言失败,当前版本 16 个全部通过。另四个真实原生 DSH 用例让实际 memory lifecycle 运行,仅替换 provider IO:普通验证在两个后端均零写入,独立精确证明后均写入并读回一个记录;原 journal 精确重放不再次启动宿主、不写状态、不扣额、不重复写 provider。这也避免把一个声称“activated”的 callback mock 当作写入证据。
关闭状态的共享完整提示与结果保持字节一致;八种完整 Codex 提示也都一致。启用分支因恢复完整内容增长约 410–1751 UTF-8 字节,依输入有无 guidance 而异;没有修改预算或宣称模型收益。初次私有验证的测试路径、可选包 PYTHONPATH 及错误重放入口问题分别留痕,修正后重新执行,不归为产品失败。
语义与 CI 对齐
沿用既有 typed participation、结果类型和记忆生命周期,没有新增共享词汇或 prose 分类规则。当前源码 premerge 的六项 direct 与十七项选中检查、Ruff 均通过;此处不查询、轮询或等待 CI。必需的 frontend contract 在独立基线与当前版本均 exit 7,同一条 registered Goal display-name 断言失败,测试文件未变,只有 source root 归一后的 stderr 完全相同。因此该失败归于既有基线,但其 required/CQR 合并限制仍保留,本评审没有豁免。
我的整体评价
当前整个 PR 是 justified_increment:完整修复一个可独立回滚的宿主 IO 切片,父级 M7.4 的剩余验收保留。long_horizon 判断 preserved,原 capture、绑定、验证、结算和精确重放规则保留;user_experience 判断 improved,既有启用操作终于能送达现有宿主,没有新增人工轮次。尚未验证真实模型采用与长期净收益。
实现复用现有 owner,并已用共用原文函数完成同域简化;没有必要为这次修复增加新的 provider 流程或通用 executor。对 815183ee93da6ae436385cdccfded0013179c0e3 未发现阻塞源码问题,结论 APPROVE;这是代码结论,既有前端质量限制、平台批准与合并权限仍独立。没有执行合并、安装或线上记忆写入。
English verdict: APPROVE. Reviewed 815183ee93da6ae436385cdccfded0013179c0e3 against immutable base b9389edc28cf5b787f387ef426d1bafd0c118cfb. The bounded shared-host IO repair preserves opt-in binding, disabled behavior and independently attested post-settlement ingestion. Native File/SQLite, original-journal replay and actual Ark SDK wire checks pass; live-model/provider adoption is unqualified. The unchanged required frontend/CQR hold remains, and this review grants no merge authority.
|
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max [P2] 为新接入的 DSH/generic-cli ingest 同步现有覆盖状态 针对 触发条件:当前 Goal/Agent 的新鲜绑定已核验开启 该 owner 明确表示“actual host lifecycle wiring”,其结果经 experiment、configuration、配置目录、status 和 Markdown renderer 对外读回。操作者因此会看到“未覆盖”,同一源码宿主却已经会在结算后尝试自动写入。这是本次实际接线与既有状态投影的冲突,不是关闭的 Agent 被越权启用,也不要求宣称安装态或真实 provider/模型已获资格。 独立证据:当前225项核心测试、27项 SDK 测试和11项生命周期测试通过;原生 DSH File/SQLite callback 用例以及额外2项原生 generic-cli File/SQLite 用例验证了独立验收、writeback、spend 先于观察者。与此同时,4份新鲜启用的原生绑定包都仍携带两个 最小修复:同步现有 English finding: P2 — synchronize lifecycle coverage with the newly wired non-Codex ingest callbacks. DSH/generic-cli now invoke the existing observer after validated durable settlement, while the production capability/status projection still reports |
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
此评审更正同一 exact head 的先前批准 5590667619。上一份评审遗漏了现有覆盖状态;新线索见 6300004413,本次已独立复现。保留旧记录和验证证据,不继承批准。
动机
已为指定 Agent 开启经验记忆的使用者,在 DSH 或 Ark 宿主继续任务时需要收到获准的参考经验,并把合格反思交回既有验证流程。
此前签名短包已经声明记忆参与,但共享宿主转换丢掉了召回正文和返回的反思,原生 Turn 又只给 Codex 接上结算观察器;本次补齐这三处接线。
原生宿主传输与结算的既有证据仍成立,但当前独立读回发现配置与状态把已接入的 DSH/generic-cli 自动写入继续标为未覆盖;这部分尚未完成。
本次资格限定宿主 IO 与结算接线;真实模型遵循、线上记忆服务、安装采用、完整成本和父级 M7.4 收敛仍未验收。
先同步现有覆盖状态并补真实调用后的读回断言;真实模型、线上 provider、安装采用和 M7.4 完整成本仍另行验收。
改动思路
复用既有 enablement resolver、签名边界、外层 validator、post-settlement observer 和 memory lifecycle;共享宿主只传递候选,不能自行决定写入。 不改动会留下“配置已开启但宿主看不到上下文/反思回不来”的实际落差;只补提示正文也不能接通原生结算后的观察器。当前方案在四个既有 IO 模块内修复整条路径,并把原 Codex 指导原文提为共用函数,没有新增开关、配置或写入 owner。
源码对照的流程为:已签名参与事实与新鲜绑定 → 共享宿主收到获准上下文 → 返回反思候选 → 外层校验、写回与扣额 → 既有可选记忆流程。普通 validator 通过只证明任务验证通过;缺少精确反思摘要和证据证明时,记忆流程仍等待、零写入。provider 失败继续 fail-open,不阻止原任务。已有 Agent 记忆设置即可使用该路径,既有配置和授权足够时没有新增人工准备或确认轮次。
具体改动
独立验收依据为改动前的 docs/reference/protocols/turn-envelope-v0.md,固定 revision b9389edc28cf5b787f387ef426d1bafd0c118cfb 的 Optional memory participation 与原生 capture 条款,并对照同版本 effect-interpreter RFC 的 M7.4。新改写的文档只记录修复,不能自行成为通过依据。
| 验收项 | 当前精确版本的处置 |
|---|---|
| MEM-participation | implemented:签名参与事实和当前 Goal/Agent 绑定共同控制召回与反思传输。24 个绑定组合及实际 CLI/SDK 输入覆盖失配。 |
| MEM-isolation | implemented:关闭、未配置、失效、仅召回、仅写回和 provider 不可用按各自分支处理;完整 Codex 提示保持一致。 |
| MEM-settlement | implemented:真实 DSH/File/SQLite 路径中,普通验证零记忆记录,独立证明后恰有一个精确读回记录;原 journal 重放无新增效果。 |
| M7.4-adoption | deferred:原有 M7.4 安装宿主与真实模型/provider 验收继续开放。 |
| M7.4-cost | deferred:原有完整 token、detail IO、延迟和结果质量验收继续开放;展示字节恢复不能当作效率收益。 |
| MEM-observable-coverage | not_met:既有 owner 声明投影 actual host lifecycle wiring,但两个新增接线宿主仍显示未覆盖。需同步原 owner 和真实调用后的读回断言。 |
[P2] 新回调与既有覆盖状态相互矛盾
新增分支 已对新鲜核验开启 ingest 的其他宿主传入结算后观察器;既有覆盖 owner 仍将 dsh_turn 与 generic_cli_turn 的 automatic_ingest 写成 uncovered。此前未接线时该状态正确;本 PR 接通后,同一信息经 experiment、configuration、配置目录、status 和 Markdown 原样展示,操作者会看到与实际接线相反的边界。
本次重新执行生产 coverage/configuration/experiment/Markdown 函数,先核对四个文件与 exact head 的 Git blob 全部相同;各读回均保留上述 uncovered 值。此前同一 exact head 的原生 DSH/File/SQLite 实际 lifecycle 证据已验证回调可以走到精确证明后的 provider IO;只有 provider IO 为合成实现。二者共同证明矛盾,不能靠组件彼此输出一致或全套传输绿测消除。这里没有新执行线上模型或 provider,也没有声称关闭 Agent 被启用。
最小修复是同步原 reward_memory_host_coverage(),并在现有原生回调用例中断言有效 coverage、configuration、status/Markdown;保留关闭状态、Agent scope 与未接入 Lark 的边界。无需新 capability、重复 writer 或额外 UI。MEM-observable-coverage 是这里对既有 callable 合同的映射标签,非新增 RFC 义务。
关键代码讲解
executor.reward_memory_prompt_instructions提取原 Codex 两段文字,仍调用原reward_memory_automation_enabled,没有复制配置或启用决策。召回指导还要求实际 guidance 存在。八个相同请求的整个 Codex 提示逐字节相等。host_candidate.extract_turn_authority先核对签名,再保留获准的 runtime recall 包及上述指导;仅 ingest 时清掉召回 context,复制映射不修改原请求。DSH 与 Ark 原来就共同经过这个转换,因此不需要各建一套记忆入口。host_candidate.build_result仅在 ingest 开启时把反思原样交还外层。它不截断后冒充有效,也不把非 material 结果变成可写证据;原大小与 material 限制、后续反思 JSON 和独立证明检查保留。execute_turn_run_once中的post_settlement_reward_memory保留既有生命周期,只给已验证 ingest 的其他宿主接上线;Codex 原关闭行为保留。两处既有测试模块扩展实际宿主、原生 File/SQLite 及证明路径;协议与中英 RFC 同步,未新增 UI 或控制面状态。
对主干的风险
下述运行时、SDK、基线对照和 premerge 数字均来自前一轮同一 exact head 的独立记录,本次已核对源版本、fixture 和证据 SHA 后复用,未把它们冒称为重新执行。本轮新增执行是上述生产投影与读回复现。
此前已在相同 exact head 独立执行的 216 个 Python 测试通过;19 个需要显式 native-operation 构建产物的可选 SDK 测试跳过,不把它们算通过。另单独执行 Ark SDK 0.8.0/MCP 1.30.0 的完整 30 项测试通过。实际 SDK HTTP MockTransport 上四种召回/写回组合保留正确输入和返回反思,四个签名篡改用例均在任何 provider 请求前拒绝;未调用线上模型或记忆服务。
同一当前测试输入在不可变基线运行时,16 个原生 DSH/File/SQLite 场景有六个召回/ingest 断言失败,当前版本 16 个全部通过。另四个真实原生 DSH 用例让实际 memory lifecycle 运行,仅替换 provider IO:普通验证在两个后端均零写入,独立精确证明后均写入并读回一个记录;原 journal 精确重放不再次启动宿主、不写状态、不扣额、不重复写 provider。这也避免把一个声称“activated”的 callback mock 当作写入证据。
关闭状态的共享完整提示与结果保持字节一致;八种完整 Codex 提示也都一致。启用分支因恢复完整内容增长约 410–1751 UTF-8 字节,依输入有无 guidance 而异;没有修改预算或宣称模型收益。初次私有验证的测试路径、可选包 PYTHONPATH 及错误重放入口问题分别留痕,修正后重新执行,不归为产品失败。
语义与 CI 对齐
沿用既有 typed participation、结果类型和记忆生命周期,没有新增共享词汇或 prose 分类规则。但现有 host_coverage 对“actual host lifecycle wiring”的义务已被本次新接线破坏,故 semantic_alignment=violated;需修复上述 owner 并重跑读回,不能只接受绿色传输测试。当前源码 premerge 的六项 direct 与十七项选中检查、Ruff 均通过;此处不查询、轮询或等待 CI。必需的 frontend contract 在独立基线与当前版本均 exit 7,同一条 registered Goal display-name 断言失败,测试文件未变,只有 source root 归一后的 stderr 完全相同。因此该失败归于既有基线,但其 required/CQR 合并限制仍保留,本评审没有豁免。
我的整体评价
当前整个 PR 是 justified_increment:完整修复一个可独立回滚的宿主 IO 切片,父级 M7.4 的剩余验收保留。long_horizon 判断 preserved,原 capture、绑定、验证、结算和精确重放规则保留;user_experience 判断 regression:传输恢复仍有价值,但覆盖状态误导了操作者;没有新增人工轮次并不能抵消错误读回。尚未验证真实模型采用与长期净收益。
实现复用现有 owner,并已用共用原文函数完成同域简化;没有必要为这次修复增加新的 provider 流程或通用 executor。对 815183ee93da6ae436385cdccfded0013179c0e3 现有一个已复现的 P2,结论 REQUEST_CHANGES。前一份 APPROVE 未覆盖这一状态投影,我撤回其“无阻塞问题”的代码判断;历史记录保留。既有前端质量限制、平台批准与合并权限仍独立。没有执行合并、安装或线上记忆写入。
English verdict: REQUEST_CHANGES — 815183e. This fresh audit corrects review5590667619 after independently confirming the new non-Codex post-settlement callbacks contradict the existing host_coverage/configuration/status/Markdown projection, which still reports automatic_ingest=uncovered. Synchronize that existing owner and assert caller readback. Prior same-head native/SDK/attestation/replay evidence remains valid and is explicitly reused, with optional19 skips and required frontend/CQR holds preserved. No live model/provider call, merge or install occurred.
| @@ -923,7 +924,8 @@ def on_managed_start_admitted() -> None: | |||
| scheduler=scheduler if args.execute else None, | |||
| post_settlement=( | |||
There was a problem hiding this comment.
[P2] 同步新增非 Codex 回调的既有生命周期读回
本分支为已核验启用 ingest 的 DSH/generic-cli 接入观察器,但 reward_memory_host_coverage() 仍报告 automatic_ingest=uncovered,并经 configuration/status/Markdown 对外展示。已有完整同头原生回调与当前 exact-blob 生产投影验证了这个矛盾;请同步原 coverage owner 并补真实调用后的读回断言,保留关闭/Lark 边界。完整证据、历史批准更正和验收边界见本 review 正文。
Goal And Delivered Outcome
DSH/Ark received signed optional-memory participation, but shared host conversion dropped runtime recall context and reflection candidates. Native Turn settlement also connected its ingest observer only for Codex CLI. This repair carries permitted context/results through the existing shared adapter and connects the existing observer for other hosts with a freshly verified ingest binding. Independent reflection attestation and accountable settlement still precede memory writes.
main.Author Declaration
b9389edc28cf5b787f387ef426d1bafd0c118cfb.host_candidate.py,turn_run_once.pyreward_memory_automation_enabled, validator and observerScope And Continuation
Complete within the host IO proposal: preserve recall and opted-in reflections, reuse guidance, and connect the existing ingest observer. The paired RFC and protocol record the boundary. The original convergence program retains installed adoption, live-model behavior, complete token/detail IO/latency costs and final caller retirement; no replacement program or successor is created.
Matched enabled fixtures restore 655–1751 UTF-8 bytes; disabled shared prompt/results and all eight Codex prompt cases remain byte-identical. This disclosed restoration cost is not an efficiency benefit. Existing per-Agent memory settings remain the entrypoint.
Validation
815183ee93da6ae436385cdccfded0013179c0e3; baseb9389edc28cf5b787f387ef426d1bafd0c118cfb.unit/real_entrypoint/real_backendintegrationreal_entrypoint/real_backendregression_paritystaticintegrationquality_invalid_receiptdue the required failure below.regression_parityThe exact-head change-quality decision is fail. The existing required frontend failure continues to hold merge. Full CI and independent review are separate gates. Live provider/model behavior, installed adoption and complete-cost qualification remain untested here. No authority-store owner changed, so PostgreSQL store qualification is outside this diff.
Frontend / Visual Evidence
UI impact: none. This repairs existing host IO and settlement callbacks; the existing per-Agent memory settings and their verification boundaries remain. No viewport changes.
Type of Change
LoopX Area
Technical Direction
Existing effect-interpreter M7.4 and roadmap S2/S3/S6/S8; Python adapts IO over the existing capability resolver and typed envelope owner.
Shared-authority RFC fixture impact
N/A: no promotion, authority-store or shared Goal Authority migration claim. File/SQLite caller evidence is listed above.
Boundary Checklist
中文:实际修复共享宿主丢失 recall 上下文、丢失反思结果,以及原生 Turn 未给其他已开启 ingest 的宿主接上既有 observer 三处遗漏。关闭与失效时保持隔离,原权限、独立验证及单次结算 owner 保留。源码、隔离 SDK 与打包验证通过;既有前端 required 失败继续阻塞合并,完整收敛和安装采用仍未验收。