Skip to content

fix(steward): retain periodic state across executor changes - #7869

Merged
loopx-agent merged 1 commit into
mainfrom
codex/steward-retained-report-status-20261102
Nov 2, 2026
Merged

loopx-agent merged 1 commit into
mainfrom
codex/steward-retained-report-status-20261102

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Changing a prepared steward to an unsupported scheduled-work executor previously hid its original periodic configuration. Keep that state readable, show an execution-unavailable notice, and disable changes until a supported executor returns. Native admission, the original actor, windows and delivery receipts retain their existing authority.

The existing connection view and report controls share one availability value; older Codex responses retain their shape. The disposable browser fixture adds an active retained-executor readback journey rather than another execution owner.

Validation: File/SQLite regression fails on baseline at the missing state and passes on this head (2 cases). The owning test run has 59 passes and one pre-existing service-close fixture failure, independently reproduced on clean baseline. Python compilation/Ruff, packaged Chat build, and desktop/narrow readback pass. Configuration recovery retains the same report state with zero new model calls or provider writes. Exact-head premerge and TypeScript checks are recorded in the review; CI is not queried under the managed policy.

These screenshots use synthetic data only. They qualify packaged readback, not live report generation or delivery.

Before After
Original configuration hidden Retained configuration and unavailable execution

Retained configuration at 390 pixels

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: model_agent · GPT-6 · OpenAI · self_reported

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

动机 / Motivation

已准备原生周期任务后切换执行器的个人管家用户。旧界面隐藏整块周期设置,用户无法判断计划是否丢失;新界面保留原计划与窗口,并明确当前无法执行。打包界面在桌面和窄屏均可读回原状态,恢复支持的执行器后同一配置重新可用。本 PR 不接入新周期执行器,不重放旧窗口,不生成或发送业务报告。当前未支持执行器的原生周期执行与真实自然送达仍未完成,保留在既有周期任务工作中。

改动思路 / Approach

读取沿用现有健康投影,执行仍由原 TypeScript owner 判断;无需新增调度或持久状态。当前切片只交付原配置可见性、禁用修改和同身份恢复。只改 UI 不足以修复:旧 API 不返回已保留健康状态,旧 Zod 与执行器渲染门也会继续隐藏它。此次复用原健康 owner、日历编辑器和 settings 入口,并将配置可用性统一为 canConfigure。没有新增持久字段、调度队列或后台消费者。用户不必重新输入已知计划,也没有增加确认轮次。

原状态 本次结果 执行边界
已准备但当前 executor 不支持 保留原配置并显示无法运行 原 native owner 仍拒绝修改
恢复支持的 executor 同一 actor/config/window 重新可配置 不创建替代身份或重放窗口

此表解释 exact head 8a1f25c 的源码路径;不是执行证据,执行证据来自下述 HTTP 和打包界面验收。

具体改动 / Changes

依据改动前的 docs/product/periodic-reports.md,spec_revision=8a9e116283df2796926ea153241f48c9c8fc3dbb。SR1 对应准备身份不启用任务:读取及恢复验收没有新增模型或发送。SR2 对应原生生命周期 owner:prepare、monitor、report enable/pause/cancel 在两种存储后端均保持拒绝。SR3 对应不得重跑或退役旧窗口:journal、registry、binding 和原历史独立读回保持不变。新增文档说明没有被当作反向定义测试预期的依据。

关键代码讲解

  • _private_conversations 保留原 prepared actor 的健康投影;不支持的 executor 补充 false 可用性与明确错误标记。普通项目、群、未准备对象继续沿原过滤路径。
  • privateConversationSchema 在两个 available 分支保留可选字段,使真实打包界面不会丢掉标记;Codex 原响应字典无需新增字段。
  • StewardManagedMode 使用一个 canConfigure 约束既有编辑入口,保留只读帮助;状态文案区分计划保留和执行启用。
  • StewardReport 保留原日历、窗口与投递状态,无法执行时禁用修改,并移除误导性的“监控照常运行”声明。

测试新增 File/SQLite 同输入失败与恢复路径,既有合成 fixture 的 retained-executor 开关实际用于本次打包 QA;未另起生产模块。11 个文件 +136/-17 包括三张合成截图,没有提交生成 bundle。

对主干的风险 / Risks

主要风险是把可见状态当作执行许可,或只测后端而遗漏 schema/渲染门。File/SQLite 的五类 POST 拒绝、持久状态不变,以及相同打包界面的旧/新对照共同排除此风险。基线两例在缺失 managed_steward 处失败,head 两例通过;支持 executor 恢复后健康字典精确还原。桌面和窄屏的十个修改控件均禁用,帮助仍能阅读;恢复测试没有新增模型 Turn 或 provider 写入。

PASS:Python compilation/Ruff、Chat build、TypeScript 类型、6 项 direct 与 16 项 premerge 检查。premerge 总退出码 1 的原因是三张二进制图需要人工 review;已逐张检查实际像素、合成来源、提交字节及 PNG metadata,三项 visual hold 在此 exact-head review 内得到解决,未把原退出码改称全绿。文本隐私扫描为零命中;图片无用户数据或文本/EXIF metadata。

FAIL(非本 PR 回归):扩大 owning suite 为 59 passed / 1 failed。失败为 test_chat_server_closes_lark_goal_topic_runtime 的未初始化 background_services,已用相同单测在干净 8a9e116 重现相同 AttributeError;PR 未改这条关闭服务路径,保留原失败,相关关闭服务维护由其既有 owner 处理。CI 未查询;该 Goal 的 wait_for_ci=false。CQR 当前关闭,未制造资格回执。支持 host 的旧响应继续兼容,不涉及持久格式迁移;反向恢复已通过同一原配置验收。

语义与 CI 对齐

两个新字段是已有私聊响应的瞬时派生投影,扩展显示词汇而不新增 actor 或 admission authority;原 TypeScript host gate 未变。语义 drift smoke 通过,报告激活、错误窗口、送达资格没有变成 UI 文案判断。

我的整体评价 / Verdict

long_horizon=preserved:失败窗口、旧回执与原 actor 的恢复仍由原生命周期负责。user_experience=improved:无需重填配置即可区分原计划存在和当前无法运行。已检查桌面与窄屏的原生周期展开区域及下部报告控件:保留计划、窗口和不可用状态可读,技术明细仍在原设置内。未核验范围:真实报告生成、自然送达和未支持执行器上的周期执行。

本切片具备独立可用的状态读回价值,机制与故障范围相称。已有 owner 已复用,局部收敛了配置可用性,无需继续拆分或新增抽象。可合并此显示修复;安装采用和真实报告交付仍需各自证据,不从截图或 metadata 推断。exact head 8a1f25c,无阻塞发现。

English verdict: APPROVE — retained periodic state is readable without expanding execution authority; live report delivery remains outside this change.

@loopx-agent
loopx-agent merged commit 081f3aa into main Nov 2, 2026
10 of 12 checks passed
@loopx-agent
loopx-agent deleted the codex/steward-retained-report-status-20261102 branch November 2, 2026 03:12
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