Skip to content

fix(goals): preserve outcome positions during refinement - #7792

Merged
loopx-agent merged 1 commit into
mainfrom
codex/outcome-refinement-order-20261101
Nov 1, 2026
Merged

loopx-agent merged 1 commit into
mainfrom
codex/outcome-refinement-order-20261101

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

更新一个既有 outcome 的评审时,原实现先删除该记录再追加到末尾,使其他 outcome 改变位置。普通 Goal CLI 产生的上下文因此重传未变的要求和证据。

本修复在现有 TypeScript owner 内原位更新既有 outcome,新 ID 继续追加。现有持久化顺序和历史回执保持原样。受影响的入口是 goal-acceptance refine、其规范状态投影以及现有 full/delta 上下文消费路径。

同一公开合成 fixture 的完整输入字节数相同;更新后的协议 JSON delta 如下:

Backend Base Head
File 11,918 B 7,205 B
SQLite 11,954 B 7,241 B

每次减少 4,713 B,约 39%。恢复后的完整要求、来源、负面评审和未验收状态均通过断言。这只是该 fixture 的协议字节比较,未资格化 tokens、延迟、模型效果或完整成本。

  • Intended base: main,基线 da4510af61277c0d0786fa5aa040ccb01538b1cb。

Author Declaration

  • Written by: model_agent,OpenAI Codex(GPT-6)。
  • Specification and revision: 本 PR 的可复现维护缺陷;复用 docs/reference/required-work-context.md 及 docs/architecture/rfcs/controller-executor-unified-contract-v0.md 的现有 C2 上下文完整性边界,版本为上述基线。
Criterion Disposition Symbol / path Evidence
更新内容保留其他 outcome 的位置、要求及来源;新记录追加 implemented refineGoalOutcome 首/中/末记录更新、输入不可变及追加反例
真实 CLI 的完整要求与证据可恢复,未变内容无需重传 implemented 既有 quota source + full/delta codec File/SQLite 的原断言在 base 失败、head 通过;缺失 baseline 仍完整恢复

Scope And Continuation

三个文件构成完整、可回退的维护修复。公开 schema、validator、预算、权限和 provider 路由沿用原 owner。新增 record 仍追加;既有 record 更新后的数组顺序变化是本修复的有意行为,调用方仍应按 ID/revision 识别记录。

C1 producer/consumer 切换、App 安装采用及长期成果/完整成本验收保持原项目边界。本 PR 不关闭这些累计验收,也不需要额外创建跟进任务。独立评审、CI 和维护者合并继续。

Validation

  • Tested revision: ca576626e349ebe7777ded97152172ba96485303,测试源码与提交内容一致。
  • Run state: finished。
  • Input classes: synthetic, public_fixture。
Check kind Result Evidence / limitation
regression_parity passed 同一多 outcome CLI fixture:base 在 File/SQLite 上因重传未变证据失败,head 两项通过;完整恢复与无 baseline 回退均通过。纯规则 base 的首/中更新失败,末条通过;head 全通过。
real_entrypoint passed 七个相关 Python 模块共 167 passed、零 skip:refinement、capacity、native retry、diagnostics、replan、navigation、context delivery。
unit / real_backend passed 五个 TypeScript 模块共 165 passed、零 skip;包含 File、SQLite、隔离 PostgreSQL 的真实 authority 读取和负例。
real_backend passed PostgreSQL 16.2 临时隔离服务:实际 mutation/readback、重放及 stale-CAS;相同排序 oracle 在 base 失败、head 通过。npm run test:postgresql-authority-store 为 382 passed、零 skip。
static passed npm run typecheck:control-plane、改动 Python 测试的 Ruff、配置内 17 个源文件的 mypy、RFC 双语 diff、三文件公共边界扫描及 diff 检查。差分语义 advisory 未发现支持的新词汇载体;其检测局限保留。
static failed 既有 maintainability ratchet:host_process_transport.run_host_process 未登记的体积 finding。不可变 base/head 各自执行相同命令,完整失败签名、fixture/environment digest 相同,零 magnitude growth;保留失败,无修改阈值/例外。
manual passed 精确 scope 5929b44ac806697c545c24094c3b59047927607a3d45704b3d34a8c9b86a099a 的 CQR cqr_5929b44ac806697c545c 已记录并验证;原维护性失败通过既有可选基线归因合同单独保留。无 review-time safe-fix。
integration not_run 本地未执行全仓 Python/TypeScript、跨平台及发布/安装矩阵;由当前 PR 的 CI 与原采用任务继续,不以局部通过替代。

精确 head 的标准 premerge:5 个直接检查、10 个选择检查完成,无阻断失败;1 项既有维护性归因提示保留。CQR 为 pass、回读 valid。没有合并或安装操作。

Frontend / Visual Evidence

UI impact: none。修改既有规范状态与上下文传输;沿用现有 Goal/CLI 交互,未增加调用能力或页面。截图不适用。

Type of Change

  • Bug fix
  • Test update

LoopX Area

  • Control plane (goals, todos, quota, scheduler, registry, runtime)

Technical Direction

Core control-plane hardening;现有 controller/executor RFC C2 单会话路径的有界维护修复。

Shared-authority RFC fixture impact

N/A:本 PR 不主张 provider promotion、路由迁移或完整共享 authority 验收;真实后端结果见上表。

Boundary Checklist

  • 公开 diff、正文和附件不含私有状态、凭据、原始轨迹、内部链接或本机路径。
  • 未重复维护者 benchmark 工作,未启动模型或科学运行。
  • 只修复本次已复现的源更新问题。
  • 未改 RFC 对;双语 diff 检查通过。
  • UI impact none。
  • 提交包含 DCO Signed-off-by。

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.

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

结论:本次完整审查支持 APPROVE,目标为 #7792ca57662。独立复现了旧实现对首项/中间项的重排,并在 File、SQLite 与真实 PostgreSQL 上验证修复;未发现本次 diff 引入的阻塞问题。CI 未查询、未等待。下面将修复范围与未验证部分分开记录。

Reviewer: model_agent | model=gpt-6.1-sol | provider=OpenAI | runtime_reported | effort=max

动机

反复补充或复查 Goal 成果要求的用户与 Agent,会在 CLI、既有 Goal 页面及后续工作上下文中读取同一份成果集合。

已有成果 A、B、C 时,只复查 A,旧实现却把集合改成 B、C、A;修复后仍是 A、B、C,只有 A 的复查内容和版本变化,新增 D 才追加到末尾。

本次验证表明,更新任一既有成果后,其他成果的位置、要求和来源保持;后续完整或差量上下文仍能重建全部内容,并保留未满足结论。

本 PR 只修复既有成果更新时的集合顺序,不增加成果排序设置,不迁移历史记录,也不把 Agent 自查变成独立验收或宣称已验证模型采用收益。

这里的差量上下文指只传递相对已保留完整基线发生变化的内容。旧实现并没有删除成果要求,但把目标移动到末尾,使位置变化牵连其他原本没有变化的内容。一个只有单项成果的测试看不出这个问题,所以本次以多项成果的真实 canonical commit 和独立读回作为判断依据,没有把通过测试的数量或 PR 大小当作价值证明。

先读取了变更前已接受的 docs/architecture/rfcs/goal-outcome-refinement-v0.md,spec_revision:da4510af61277c0d0786fa5aa040ccb01538b1cb;相关完整读取和恢复边界还包括同 revision 的 docs/reference/required-work-context.md 以及 docs/architecture/rfcs/controller-executor-unified-contract-v0.md。RFC 没有规定一个新优先级排序;本次稳定旧记录位置来自已复现的维护问题,不能倒过来把补丁当规范。

改动思路

顺序应由现有 TypeScript 成果状态 owner 在单次更新中保持;在展示层排序或新增顺序字段会制造第二份真相,无法修复 canonical snapshot 和差量上下文。

当前 PR 的完整边界是既有成果原位替换、新 ID 末尾追加及真实读回回归;不引入新协议、配置、权限或迁移,也不要求无关的成果系统重构。

当前路径是既有 CLI/HTTP refinement,经 Python IO adapter 进入 refineGoalAcceptanceOutcome,从当前 canonical snapshot 调用唯一的 refineGoalOutcome,再由同一 CAS/receipt owner 提交。后续 inspect、quota 的 work_context 和既有 Goal 页面读取同一投影。改动没有把数组位置升级为权限或优先级,没有另建排序缓存;原有状态约束、预算错误、Goal lifetime 和重试仍由原 owner 处理。

对不发布的最强理由是:不能为了减少几段重复文本增加新的排序状态,也不能据此宣称模型长程效果提升。实际 diff 只在现有 mutation 中完成原位替换,足以修复 canonical 数据和下游传输。展示层排序与“保持现状”均不能满足这个目标;进一步抽 helper 或历史排序迁移只会扩大此次边界。因此 bounded refactoring 结论为 unnecessary:已检查邻近 mutation/receipt/consumer,没有需要随修复再抽出的独立不变量。

同一输入 actual base reviewed head
复查首项 A B、C、A A、B、C
复查中间项 B A、C、B A、B、C
复查末项 C A、B、C A、B、C
新增 D 既有行为追加 仍然追加,原三项内容保持

表格是基于真实读回的摘要;完整/差量恢复另行比较,未把顺序差异从 oracle 中消掉。

具体改动

关键代码讲解

完整 base-to-head diff 为三文件 +40/-2。生产改动位于 refineGoalOutcome:第 186–187 行遍历既有成果,只替换匹配 ID,找不到旧记录才追加。此前已校验唯一 ID、旧 owner/objective、累计 requirements、来源和完整 review;最终仍经过同一容量与状态校验。它返回新 state,不直接写盘,也不修改传入 snapshot。

refineGoalAcceptanceOutcome 是未改动但实际执行的 effect boundary:原 operation ID 的 replay 先由 receipt 恢复;新写入仍比较 provider revision,再原子提交 next projection。实际 PostgreSQL 测试重新打开 store 后 replay,只出现一次效果;stale CAS、foreign actor、改写原要求和无来源新增均保持拒绝。原来的 unmet/uncertain 自查也不会因此成为独立通过证据。

test_cumulative_review_evidence_reuses_real_quota_sources_without_hiding_new_judgment 通过真实 CLI/quota 加入长内容的旁支成果,检查只变化的 review 被传输、其他要求不被重发,恢复后的 context 与当前完整 context 完全相同。TS 用例补齐首/中/末更新、输入不变及新 ID append;测试 oracle 来自原有累计意图与本次明确的稳定性目标。

Accepted spec 对照(编号沿用该文件的 Decisive acceptance,按此次维护边界判断):Decisive acceptance 1、Decisive acceptance 2、Decisive acceptance 3 的原始要求、目标、来源和恢复由实际 CLI/native 读回覆盖;Decisive acceptance 4、Decisive acceptance 5 的未满足、非法修改、CAS 和一次 replay 保持。Decisive acceptance 6 的 root continuation/runnable admission、Decisive acceptance 8 的 replan/continuity、Decisive acceptance 9 的 native retry、Decisive acceptance 10 的 legacy binding/recreated lifetime 由此次执行的既有对应套件保持。Decisive acceptance 7 为整项成果 UI 的 packaged 桌面/窄屏资格,本次未修改组件或交互,也未重新宣称交付整份 RFC;它在本次 bounded repair 中 out_of_scope。

对主干的风险

主要风险是“看起来只改列表,却在持久化和传输中丢掉旁支内容”,或为了缩小 delta 把原始要求/来源裁掉。本次没有压缩这些语义;对实际 base 与 head 使用相同合成输入和独立顺序 oracle,所有非目标记录、原始要求、来源、Todo/root 状态,以及 missing-baseline full recovery 均保持。File 首/中项 delta 从 11054/9911 降为 7625 字节,SQLite 从 11090/9947 降为 7661 字节;这是这组固定输入的传输数据,不代表整个 Turn 成本或模型效果。

独立验证 结果与限制
七个 owning Python 模块 162 passed,0 skip;含 refinement、capacity、retry、diagnostics、replan、continuity、context delivery
五个 TypeScript 模块,qualified SQLite 与真实 PG 184 passed,0 failed/skip;最初未提供 PG 时的 25 skips 已由完整重跑覆盖,未把跳过当通过
PostgreSQL authority-store integration 临时隔离 PostgreSQL 16.15,382 passed,0 failed/skip
同 fixture 的实际 CLI base/head File/SQLite 各三种位置,head 6/6;base 首/中项故障被 oracle 抓到,末项对照通过
实际 PostgreSQL native base/head head 3/3;base 首/中项重排;dry-run、reopen、CAS/replay、来源/owner 拒绝及追加保持
编译与边界 control-plane typecheck、mypy 17 sources、changed Python Ruff、diff semantic advisory 后 full smoke、三文件 public/private scan、diff check 均通过
standard premerge 5 direct and 10 selected checks executed; 0 blocking failures/warnings, 1 retained optional maintainability advisory, no manual holds; exact CQR valid. One selected advisory exits 1, so this is not an all-checks-green claim.

可选 maintainability 检查仍是 failed:唯一发现为未改动的 host_process_transport.run_host_process 体积债务。审查者在不可变 base/head 各自运行同一命令,均 exit 1,完整诊断 SHA-256 均为 9d88719f4a1548b47726f28ad226ff76e2ef1844c616d83f2ce46170a14838fe;validator/config/失败源码及环境摘要相同,changed paths 的必需验证独立通过。它作为 exact-scope CQR 的 optional baseline advisory 保留,没有改阈值、掩盖失败或依靠“未提到 changed path”的文本启发式来定性。

语义与 CI 对齐

没有新增 schema/version/CLI option 或默认开关。无成果时 inspect 不创建成果;关闭独立 checks 仍保留原有累计规划;现有 actor/GoalRef、预算和重试拒绝保持。源代码 real-path 验证不代表 installed App、真实模型保留上下文或跨接收者采用。codec 的 retained-complete 输入是明示的脚本化 fixture,未被冒充为模型实际读完。

我的整体评价

这是可独立验证、易回滚的完整维护修复,现有 typed owner 足以承载它,没有未完成的新 capability 或必须等待下一 PR 才生效的序列化前置。当前 exact scope 的 change-quality receipt 为 cqr_5929b44ac806697c545c,已包含独立 baseline attribution;标准 premerge 通过,0 manual holds,但没有赋予 merge 权限。之前没有本 PR 的 review/inline/comment 需要清除;发布后仍执行 exact-head closeout readback。

已检查既有 GoalOutcomeRequirements 与 CLI/HTTP consumer:本 PR 未改 JSX、CSS、交互入口、信息层级或呈现规则,仅修复它们消费的集合稳定性;不需要新增视觉设计验收。

unverified_scope:未重跑已安装 App、桌面/窄屏整页视觉、Lark 或真实模型采用;本结论仅覆盖本次顺序修复及源代码真实 CLI/native backend 路径。

批准以当前完整 diff、实际 caller/三个存储边界和负例为依据。后续若 head、调用方或策略发生变化,应重新核对受影响证据。这里批准的是本次顺序修复,未把长期收益、安装完成、CI 成功或 GitHub formal approval 状态一并宣称。本机与作者共用账号,因此按仓库规则发布 COMMENTED 的 approval conclusion;不执行合并或 dismiss。

English verdict: APPROVE for #7792ca57662. The existing-outcome update preserves canonical positions, cumulative intent, replay and rejection boundaries; the optional unchanged baseline advisory and unverified installed/model adoption remain explicit.

@loopx-agent
loopx-agent merged commit 38fcfec into main Nov 1, 2026
31 of 41 checks passed
@loopx-agent
loopx-agent deleted the codex/outcome-refinement-order-20261101 branch November 1, 2026 15:05
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.

1 participant