Repository navigation
Let Goal stride strategy inherit the live review cadence - #6370
huangruiteng wants to merge 5 commits into
Conversation
Signed-off-by: huangruiteng <huangrt01@163.com>
Signed-off-by: huangruiteng <huangrt01@163.com>
|
This pull request has merge conflicts with Choose the remote for the base repository, not an out-of-date fork. git fetch upstream
git rebase upstream/main
# Resolve each conflict, git add the resolved files, then git rebase --continue.
git push --force-with-lease origin HEADFor a same-repository clone whose Keep the DCO |
songoow
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; GPT-6; OpenAI; self_reported (runtime execution attribution unavailable)
评审提交:6c8f55558771fb503cca71d56752198372c88e99。结论:REQUEST_CHANGES。发现一个可复现的配置错误:仅编辑策略的 JSON,返回表单保存后,会把继承周期意外固定成产品默认值。
动机
使用 Goal 设置的用户只想开启步幅策略,却必须同时写入复盘周期,之后设备周期变化就无法继续生效。本 PR 让用户仅保存策略,并沿用当前设备周期。
例如设备周期为 3,用户只开启策略,正确结果应保持周期 3;设备后来改成 4,该 Goal 应继续沿用 4。独立 CLI 对照证明这条新增路径已经工作,旧的显式周期配置也保持原含义。但 JSON 返回表单的路径仍会悄悄保存周期 6,违背这次改动的核心结果。
本 PR 的范围是配置与读回,不包括自动执行策略、模型采用率、长期收益或生产配置迁移。
改动思路
沿用现有 execution profile、机器默认解析器、Goal 配置 HTTP owner 和能力中心编辑器是合适的。策略是用户选择,实际周期是现有配置的派生值;无需第二计时器或策略数据库。
当前批次应完成策略单独保存、周期继承、显式覆盖和清除的 CLI/前端旅程。后端已保留稀疏配置,前端还需要在两种编辑模式之间保留同一意图。最小修复是切回表单时从当前有效配置补齐显示值,同时保留“周期未被显式覆盖”的写入语义;增加一个对应浏览器回归即可。
具体改动
全量 base-to-head 为 14 个文件、+192/-40:生产改动覆盖 profile 校验与清除、机器默认合成、Goal catalog/HTTP 配置、前端传输与草稿处理;验证扩展现有配置单测、smoke 和浏览器场景;三份文档披露新的继承规则。没有新建能力或执行入口。
compact_execution_profile和apply_goal_execution_profile_change允许只有策略的 Goal profile,清除周期时保留策略。apply_todo_replan_cadence_machine_default在补齐设备周期时保留 Goal 自己选择的策略,避免默认值覆盖明确的off。configuration_summary、_attach_effective_configuration、_goal_capability_options保持 persistedcurrent稀疏,同时返回完整有效值和来源。goalReplanCadenceEditorValue/goalReplanCadenceWriteValue及goalWriteDraft将显示值和写入值分开。正常表单路径通过,但 JSON→表单转换缺少对应归一化。chat.ts的effective_value_policy新值是配置读模型来源;没有赋予执行、配额或验收权限。现有测试和双语说明应保留。
独立判定文本使用 docs/reference/protocols/goal-vision-replan-contract-v0.md,spec_revision:4e994b11f83103b99342a3b0e589a93d6b526f5d。本 PR 对原“完整 Goal 覆盖”的规则作有意扩展,不能用修改后的文字自证兼容。
- Default review cadence:旧的显式周期保持单位和数量,默认周期仍为六次有效结算 Turn;独立 CLI 与配置测试通过。
- Configure and roll back the stride strategy:preview 不写入、旧 cadence-only 配置仍关闭策略、清除恢复设备配置均有验证。新增策略单独保存是已披露的行为变化;JSON→表单路径尚未满足一致的配置意图。
- Structured stride control:策略仍是
off | evidence_conditioned_v1;启用与发现能力不授予执行或验收权限。本 PR 不要求完成父 RFC 的模型效果实验。
对主干的风险
[P1] JSON→表单后重新补入产品周期,悄悄破坏实时继承。
位置:goal-capability-settings.tsx:39–44,并涉及同文件 changeJson / changeMode。
复现过程:设备设置 effective_turns=3;打开 Goal 复盘与步幅;进入 JSON,输入 {"stride_strategy":"evidence_conditioned_v1"};点击“返回表单”,不改周期,预览并应用。
实际:表单计数依据和数量变为空白。保存时 goalWriteDraft 用 selected.default 补成 effective_turns=6,随后与当前有效周期 3 比较不相等,因此持久化为 {count_unit:"effective_turns",count:6,stride_strategy:"evidence_conditioned_v1"}。独立 HTTP 读回确认周期 6、来源为 Goal override;之后设备周期变化也不会生效。
预期:仍只保存策略、周期继续沿用设备值 3。应在 JSON→表单转换中正确补齐当前有效显示值,并保留稀疏写入意图。回归测试需要经过实际打包页面、真实配置 handler、应用及独立读回,随后改变设备周期再确认继承。现有浏览器测试只走正常表单修改,因此即使它通过,这个问题仍可发生。
验证与限制:
- 80 项配置、HTTP、cadence、effective-Turn 与 Host-context Python 测试通过。
- Control-plane typecheck、Dashboard 类型检查/构建、capability configuration smoke 和原 packaged
replan-cadence场景通过。原场景使用真实配置 handler 和临时状态,周边 workspace discovery 是合成数据。 - 新增独立浏览器反例经同一 packaged UI 和真实 handler 复现上述持久化错误;不是 mock 返回的预期值。
- 同一真实 CLI 脚本在 immutable base/head 运行:base 拒绝策略单独配置;head 保存策略并随设备周期 3→4 更新;两边旧显式周期、策略关闭及非法输入拒绝的行为一致。源码、fixture 与观察指纹保留在本地证据中。
- 开发期语义 advisory 后执行完整 drift smoke;quick canary、DCO 和 diff 检查通过。新增来源字面量归现有配置投影;未引入 actor 生命周期或 prose 分类规则。
- CI 的
typescript-core (1/3)失败涉及 digest 单 owner 检查。本机相同命令在4e994b11f83103b99342a3b0e589a93d6b526f5d和评审 head 都报告同一stride_policy.ts:137matcher;该代码不在本 PR diff 中。CI 合成合并还包含主干 Goal amendment matcher。这个已归因的主干失败单独保持合并 hold,不作为本次配置缺陷的替代证据。其他远端 pending 项也不作为拒绝理由。
我的整体评价
REQUEST_CHANGES。配置解耦有明确价值,规模与问题相称,现有 owner 和历史配置兼容路径值得保留;需要先修复上述完整用户旅程。它同时影响长期配置一致性与用户读回,不能仅凭正常路径通过就批准。
相关的 future-facing pass 已消除 profile 对周期的强耦合。下一步只需完善模式转换和真实回归,不需要扩展框架。持续模型采用、成本收益、已安装行为和合并权限仍分别判断;本评审未合并或改变任何活动 Goal。
English verdict: REQUEST_CHANGES - 6c8f555. A strategy-only JSON draft silently pins the product-default cadence of 6 after switching back to the guided form, instead of inheriting the machine cadence of 3. Reproduced through the packaged UI, real configuration handlers and independent persisted readback. Focused Python/static/browser checks otherwise pass; the unrelated baseline digest-check failure remains a separate merge hold.
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=gpt-6.1-sol; provider=OpenAI; runtime_reported; reasoning_effort=xhigh
Exact head: 6de6c0ff5a40322a5b70482db53de8662cdcc210; baseline: 3dd3c550afecfa0c525a34e8744a3cf06774ac94. Runtime observation: 9c41fc088995d68d76f9d2fcb871872cc15b3b3e8eb993b11649d6ee74f73e5f.
动机
在能力中心或 CLI 为单个 Goal 设置复盘周期和步幅策略的用户。
以前只开启策略也必须固定复盘周期;旧 JSON 返回表单还会把设备周期 3 误写为 6,之后设备更新不再生效。现在只保存策略可继续继承,而用户显式设置的周期即使等于设备值也保持固定。
当前打包页面、真实 HTTP handler 和独立回读验证了策略单独保存、设备 3→4 更新、同值固定为 4、设备变为 3 后仍固定、只清除周期恢复继承,以及过期 Goal 预览拒绝后恢复。
本切片只交付配置与回读;不认证模型采用、研究收益、持续实验或已安装原生 App/Lark,不授予执行、配额、合并或发布权限。
本次重新判断整个 PR;原 6c8f555 的 P1 已逐项映射到当前代码及真实回读,没有继承原结论,也没有用作者的 107 项通过声明代替独立执行。
改动思路
显示值由现有配置解析器提供,写入意图由现有 Goal 编辑器保存;CLI 与 HTTP 继续使用同一 configure-goal owner,TS 步幅决策 owner 不变。稀疏完整值与 CLI 单字段 patch 的区别必须保留,不能用数值相等推断用户意图。
本 PR 完成可独立验证、可逆的配置旅程;不增加计时器、权限 owner、配置开关或策略数据库。
用户仍从既有设置入口选择明确的 Goal,任选表单或 JSON,预览一次再应用。目标选择提供修改范围,预览绑定待改 Goal 配置,应用确认实际写入;模式切换不增加重复填报。新增来源说明能让用户看懂“周期来自设备、策略来自 Goal”。桌面与 390px 页面已检查,键盘从数量字段进入策略字段,无横向溢出;没有改工作区入口或主要导航。
应用 repository experience 的范围是实际用户任务、失败恢复与持久回读;历史设计评审案例是建议,不能证明本次模型收益或要求完成父 RFC 的实验。
具体改动
全量 14 文件、+292/-45:5 个 Python 配置适配/运行模块、4 个 TS 编辑器/传输模块、3 份文档、现有浏览器场景与一个 Python 测试模块。所有 changed paths 已读取。
compact_execution_profile允许仅保存策略;apply_goal_execution_profile_change清除周期时保留策略,清除整个配置仍走原 owner。apply_todo_replan_cadence_machine_default补齐实时周期时不覆盖明确的 Goal 策略,包括明确的off;configuration_summary保持 persistedcurrent稀疏,catalog 只派生完整有效值。_goal_capability_options将完整的 strategy-only HTTP 配置映射为清除两种周期覆盖并保存策略。CLI 的单字段策略选项仍是 patch,保留已存周期。两者区别已用真实入口验证并在中英文文档披露。hasReplanCadenceOverride根据字段是否存在判断意图;goalReplanCadenceEditorValue提供显示值,goalReplanCadenceWriteValue保持稀疏写入。goalWriteDraft、changeJson、changeDraft、changeMode共同保留 JSON/表单转换的同一意图,编辑会清除旧预览。effective_value_policy的新 Zod 枚举值是配置来源读模型;不扩张 actor 生命周期、执行或验收权限。匹配采用精确字段与既有策略 codec,没有 substring denylist 或 prose 分类规则。
独立规范基准:docs/reference/protocols/goal-vision-replan-contract-v0.md,spec_revision:3dd3c550afecfa0c525a34e8744a3cf06774ac94。修改后的规范没有被当作自己的验证 oracle:
- Default review cadence:默认仍为六个有效结算 Turn;旧明确 Turn/Todo 周期不改单位和数量。immutable base/head 的真实 CLI 旧 profile 输出逐字典完全相同。
- Configure and roll back the stride strategy:既有 preview/apply/readback、旧 cadence-only
off、关闭保留周期和完整清除恢复默认均保留。原“完整 Goal 覆盖”的限制是本次已请求、已披露的扩展;仅策略继承、同值显式固定和仅清周期已通过实际页面与 handler。 - Structured stride control:既有策略激活、来源绑定和启用后的周期复盘决定义务不变。普通完整工作大小没有变成固定时间窗,策略启用不授权实验、扣额、复制 checkpoint 或放宽验收。
对主干的风险
最强反例是显示值掩盖写入意图:只测试当前数字正确,会漏掉未来设备更新失效,或者等值覆盖被误删。本轮独立走过完整 JSON→表单→预览→应用→GET,再改变设备值验证,两个反例均被当前实现阻止;只清周期也保留了策略。
验证:
- 七个完整 Python 模块 107 passed,覆盖机器/Goal 配置、cadence、有效 Turn、Host context、两类 Chat 配置 API。
- 同一真实 CLI 探针在 immutable base/head 执行:base 拒绝仅策略;head 接受并继承。旧明确周期、关闭、完整清除及非法输入拒绝的 profile 相同。head 的单字段策略 patch 保留 pin,显式清周期保留策略;preview 和非法输入不修改 registry。
- 当前 head 正常 Chat bundle 构建并验证,现有 packaged
replan-cadence场景通过真实 revision-checked handler;其周边 workspace discovery 是合成 fixture。 - 独立 Ego Lite 使用正常打包 Chat、真实 discovery/API 与隔离合成 registry,验证继承、同值 pin、清除、非法 JSON 使预览失效、并发 Goal 配置改变后旧预览拒绝,以及重新读取/预览恢复。周期报告的关闭状态和时区也经过 JSON→表单→实际应用回读,防止共享编辑器回归。
- 设备默认更新与 Goal 写入是独立来源:只改设备值可保留仅策略 Goal 预览的合法性;原 Goal 配置变更则使旧预览失效。没有把前者错误地当作 Goal revision 冲突。
- Dashboard typecheck、capability-configuration smoke、语义 advisory 后完整 drift check、当前风险 canary 5 direct +19 selected 通过,公开/私有扫描干净,零 manual hold。
wait_for_ci=false,未查询或等待 CI。
失败/跳过边界:早期 scratch 命令及 Ego selector 使用错误已修正后完成语义探针;没有从产品红项中选取一个绿重跑来准出。未跑整仓 Python/TS、已安装 App、Lark 或付费模型。以上证明配置旅程,不证明研究效用、自然采用或发布资格。
我的整体评价
APPROVE,仅对 6de6c0ff5a40322a5b70482db53de8662cdcc210。原配置错误已修复;完整改动与用户结果相称,既有权威 owner、真实配置调用及历史含义保持清楚。
future-facing pass 已应用到最近的编辑器边界:用明确意图代替数值相等推断,并将显示/写入投影集中在现有 helper。没有发现需要扩成通用框架或第二策略 owner 的理由。旧 formal blocking review 的整理和受保护合并仍是独立事项;本评审不 dismiss 其他人的 review,也不合并。
English verdict: APPROVE — 6de6c0f. Strategy-only JSON/form saves inherit later device cadence changes; explicit equal-value pins and interval-only clearing preserve intent. Independently verified with 107 full-module tests, matched base/head CLI profiles, packaged real-handler browser coverage, Ego real-server readback/recovery, and 5 direct +19 risk checks. Installed/model qualification and prior blocking-review reconciliation remain separate; no merge.
|
Merge follow-through for The prior JSON-to-form P1 is fixed. Strategy-only writes remain sparse and inherit later device changes; explicit equal-value cadence pins and interval-only clearing preserve intent. The independent current-head review is valid and approved. Review 5502902424 has been dismissed with finding-resolution evidence; its discussion remains available and there are no unresolved review threads. Author validation on this unchanged head covers seven complete configuration/cadence/API Python modules (107 passed), real source CLI, packaged real-handler configuration and stale/retry/invalid recovery, frontend/core types and bundle, semantic checks, an exact-scope change-quality pass, and 5 direct +19 risk checks. The independent reviewer also ran its own real browser/CLI checks. This is sufficient for the bounded configuration proposal; installed App/Lark and model qualification remain untested. The related refactor preserves display versus write intent in the existing editor without another configuration owner. Merge held: the native exact-head gate remains |
Problem and outcome
A Goal should be able to enable
evidence_conditioned_v1while its review interval continues to follow device policy. Previously, storing the strategy also required pinning an interval. The reviewed JSON → form path could substitute the product default; comparing numbers alone also lost an explicit interval that happened to equal the device value.This proposal preserves the strategy and interval as independent choices. Strategy-only settings inherit later device changes. An explicit interval stays pinned, including an equal-value override. Removing only the interval keeps the strategy and restores inheritance. Existing cadence-only overrides retain default-off strategy semantics and are not migrated.
User journey and ownership
The existing Capability Center editor keeps derived display separate from write intent across form/JSON, preview, apply and readback. A source note explains when the device/product supplies the interval and the Goal supplies the strategy. Other capability JSON drafts keep their existing behavior.
Goal capability JSON is a complete sparse value: a strategy-only object clears an existing interval override through the existing configuration owner. The CLI's single-field strategy option remains a patch and preserves a stored interval; explicit cadence-clear options restore inheritance. The CLI, Chat API and packaged frontend use the same owner. No second timer, authority or capability switch is introduced.
Before: changing editor mode could silently pin 6 or discard a deliberate same-value pin; omitting interval fields could leave an old pin behind. After: choose the strategy or interval, preview and apply; persisted configuration and effective source preserve that choice through later device changes.
The final proposal retains the original work and mainline JSON display normalization, including the existing enabled-review decision obligations. Ordinary complete-work stride semantics remain unchanged. The new
effective_value_policyvalue extends configuration read-model provenance, not execution or acceptance authority.Validation
Final head:
6de6c0ff5a40322a5b70482db53de8662cdcc210; integrated base:3dd3c550afecfa0c525a34e8744a3cf06774ac94. The base-to-head proposal is 14 files, +292/-45.replan-cadencepassed through real revision-checked HTTP handlers and disposable file configuration: JSON/form inheritance across device 3 → 4, explicit equal-value pin, later device change retaining the pin, interval-only clear, invalid preview, namespace removal, 390px keyboard access and English/Chinese labels. Workspace discovery is synthetic; active Goals were untouched. The two pre-repair packaged failures were retained before their respective fixes.Desktop and mobile views were inspected. The change clarifies configuration provenance without changing the workspace entry, first viewport navigation or primary action. The related refactor localizes write intent in the existing editor and removes value-equality inference; it adds no speculative framework.
Remaining qualification
This is a completed author proposal, kept as a normal PR. The new head needs independent review; the previous review of
6c8f555does not qualify it. Full hosted CI, protected merge readiness and merge execution remain separate gates. Full Python/TS suites and installed native App/Lark/model use were not requalified locally. No release, deployment, upgrade or active configuration migration was performed.