Skip to content

Pin the native first read and deliver the same-Turn selection route - #8100

Merged
huangruiteng merged 13 commits into
mainfrom
codex/native-first-read-plan
Nov 6, 2026
Merged

huangruiteng merged 13 commits into
mainfrom
codex/native-first-read-plan

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Nov 5, 2026 •

Copy link
Copy Markdown
Collaborator

A native benchmark wake can be asked to select a Todo before it may work. Its
first read needs the selection policy, candidate discovery and the command that
binds the choice to the original Turn. Previously the reader could plan
navigation again, omit the binding recipe, and need a second read. Repeating a
preflight could also replace the file named by the first reader.

This change makes one prepared owner the sole native projection path:

  • the prepared read plan is bound to the capture path and SHA-256;
  • fresh and saved decisions reuse that same binding;
  • a repeated preflight writes a distinct immutable view instead of replacing an
    earlier reader's file;
  • explicit opt-out returns the inline decision/settlement plan without creating
    a native transport root;
  • benchmark preflight pins the actual CLI view and compares the complete
    recovered view with the bytes the CLI delivered;
  • the old project_codex_context wrapper is removed, so callers explicitly
    consume prepare_codex_context(...).delivery rather than preserving two
    projection entry points;
  • the staged replan review route is merged with the current Todo selection
    contract, including the case where a successor loses its claim.

Current head 6403996185, based on main 918844a017. File and SQLite
coverage exercises cold and resumed reads, non-first Todo selection, saved
context, repeated preflight, stale/foreign captures, opt-out and successor
re-entry. Runtime authority remains with the existing guard and settlement
owners; the read plan is invocation-local presentation data.

Validation

  • uv run --extra test python -m mypy: 17 source files, no issues.
  • npm run typecheck:control-plane: passed.
  • Changed Python Ruff, py_compile, RFC bilingual and diff hygiene: passed.
  • Affected Python suites: 717 passed, 39 skipped; one inherited
    test_bounded_continuation_rechecks_original_capture_and_utf8_cursor
    failure reproduces unchanged on main 918844a017.
  • loopx canary premerge --from-git-diff --git-diff-base origin/main: all
    selected checks passed; one inherited maintainability advisory and the
    benchmark-sensitive manual review hold remain.

This does not establish natural-model adoption, installed-user behavior,
benchmark scores or total cost. The prior matched loopback and CLI measurements
remain exploratory evidence rather than acceptance.

@loopx-agent loopx-agent changed the title Reuse the capture-bound selection on the first progressive read Pin the native first read and deliver the same-Turn selection route Nov 5, 2026

@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.1-sol | OpenAI | runtime_reported | max

Request changes conclusion (author-owned PR; GitHub blocks formal self-review)

Exact head: 7d8fdee; reviewed base: 1280335.

动机 / Motivation

通过 CLI 或 native Codex 接收任务的 Agent,需要先读当前要求,再从本次给出的候选中选择任务,继续同一个 Turn。当 guard 要求选择任务时,旧首读缺完整选择命令和候选;staged replan 的首读也缺执行复审的入口。新路径从同一 typed owner 取得首读计划,固定本次 view 的路径和摘要,只在对应 typed 状态交付原选择或只读 review/guidance。功能方面,选择与 staged replan reader 已有实际 CLI/receiver 证据;但当前 head 的 replan 分支仍直接匹配裸 effective_action 字符串,独立 required semantic-owner 检查在 base 通过、head 失败,因此不能批准。这次是首读与选择路径的可用修复;不认证整个 C1/C2 迁移、自然模型采用、已安装用户行为或长程效果和完整成本收益。当前必须先修复 canonical action owner 的引用并重跑 required check;自然模型采用、已安装行为与完整成本资格继续保持 unknown。

改动思路 / Approach

首读选择复用既有 TypeScript policy owner,Python 保留文件、锁和恢复 IO;准备结果只是当前调用的派生数据。benchmark 继续使用原准入和结算 owner,只把实际 view、选择入口与完整 read guide 交给原 receiver。当前 PR 交付既有 CLI/Host 首读与同 Turn 选择/replan reader 修复,以及 benchmark receiver 接入;当前 required semantic-owner 失败尚未解除,没有新增执行权限或模型实验。当前完整差异还将 staged replan 的原 review reader 放入起始选读。它只使既有只读第一步可达,guard/选择/结算权限仍由原 owner 决定。原 capture、session lock、SHA-bound recovery 和历史 reader 不变;两个生产调用者共同消费派生 plan,旧 wrapper 仅承担共同部署的内部/测试兼容,没有独立部署承诺。

typed 状态 当前首读行为
要求选择任务 完整选择路由、policy、候选
active staged replan 原 review command 和完整 guidance,无 writeback
settlement-only、unknown schema、其他 action 不额外暴露 replan review
显式 off 或错误 SHA 完整输出与 base 保持一致

具体改动 / Changes

采用既有 required-work-context,spec_revision 12803354ab13a003de8620ab496250617224ff37:first_read_command 的当前事实/入口为 implemented;selection digest 的固定地址、摘要与旧 reader 恢复为 implemented;Disabled native delivery 为 implemented。这些是既有条款名称,没有新增验收编号。C1 整体模型效果、完整成本及安装采用仍在本次范围之外。完整差异为 18 文件,+512/−128。

关键代码讲解

  • prepareProgressiveContextDelivery / nativeContextReadPlan 从既有 TurnEnvelope 字段 owner 取得同一套决策字段,在原 transaction 内派生首读计划;只在 typed selection_required=true 时纳入完整选择入口,未把导航变成执行权。新增9行 staged-replan 分支还仅在原 typed action/packet/decision 且非 settlement-only 时交付原 review/guidance,不交付 writeback;unknown schema 或其他 action 不进入该分支。
  • prepare_codex_context 保留原 session lock,并先保存当前完整 recovery,再尝试可选规划。返回的是 delivery 加临时 plan;plan 不写进原始 capture,也不建立第二份 journal truth。
  • native_context_capture_view 校验 plan 的 capture path、SHA 和实际文件字节,固定地址/顺序与 selection digest。foreign plan 或相同 JSON 的字节变化均拒绝;metadata 不可写时保留原 recipe 和同 capture 恢复。
  • capture_before_replan 绑定本次实际 CLI stdout view;只有字节相同才复用原文件,否则另存本次不可变 view,重复 preflight 不覆盖旧 reader。显式 off 继续普通 view。
  • preflight_context_instruction 与 worker 调用 仅在准备好的 transport 可用时省去 wake 中重复的 guide;真实 native input 断言完整 guide 留在 developer instructions,独立 fallback 仍有完整原文。

对主干的风险 / Risks

REQUEST_CHANGES:当前 required semantic-owner 检查有一项新增阻塞。 本次新增 staged-replan 分支直接比较裸 "autonomous_replan_required",当前 required semantic-vocabulary-drift-smoke.py 因 effective_action literal 位于 owner 之外而失败;同一检查在实际 base 12803354 通过。最新 head 又修正了显式 off 的真实 CLI 测试;生产代码的这处失败仍在。请从现有 ./effective_action.generated.ts 引入 EffectiveAction,改用 EffectiveAction.AUTONOMOUS_REPLAN_REQUIRED,保留其他 gate 条件,再重跑 semantic scan、typecheck 和 first-read/replan 场景;无需新增 vocabulary owner 或放宽检查。

最新 7d8fdee 的显式 off 真实 CLI 场景也已通过:inline 原 guard、无 native 目录、1 次 guard receipt、0 spend,测试仍沿实际入口验证。功能证据独立保留: 相对已完整实审的 c0ef0a1,本次 net scope 新生产行为只有既有 TS 首读 owner 的9行 replan reader gate;两测试文件的修正和三个已进 main 的上游文件已分别核对。相对原16文件检查的14个 blob 未变;最新18文件 head 与 f8888e2 的全部生产 blob 相同;复用了这些 source/caller 证据,并重跑受影响的实际入口,没有继承旧 approval 轨迹。

在生产代码相同的 f8888e2 上,完整 test_context_first_read.py、test_replan_staged_read.py、test_quota_acceptance_references.py 为 104 passed、0 failed、0 skipped。原先六项 navigation-as-inline 失败现在通过既有 read_cli_policy_payload 读回原 capture,再执行原断言;没有删断言、放宽 limit 或绕过实际 reader。新增 File/SQLite acceptance 场景从实际 first-read 执行 review reader,再读取原 outcome;后续接受新 revision 后,旧 reader 仍返回原捕获版本。

在 f8888e2 的独立实际 CLI 共 20 次调用:12项原选择/off/摘要路径,以及8项 active replan、settlement-only、unknown schema、other-action 对照。只有对应 typed gate 交付原选择或 review/guidance;错误 SHA 的完整 diagnostics、off 输出和共同首读事实逐字段保持一致,仅归一化实际 checkout/interpreter 路径。源字节未变,没有创建 authority registry/runtime。foreign plan、相同 JSON 的字节变化、ENOSPC、opaque continuation 和 unsafe integer 在当前 reader 负例中保留。

在 46541e0 的 HOME/USERPROFILE 隔离 fixture 另重跑 2 项真实 native Codex/local fixture 验证;当前生产与该 native fixture 的 blob 均相同,沿明确适用性复用;其中 progressive case 从实际页面读取 cold 第一项、warm 第二项,使用实际命令选择并 read back 同 Turn 绑定,核对原 receipt 与一次显式 settlement。它们不是自然模型实验。f8888e2 的 110 项 TS owner tests、typecheck、变更 Python Ruff/compile、RFC 双语及 diff hygiene 通过。较早 c0ef0a1 的 501 passed/6 failed/10 skipped 和 TS 6,121 passed/77 skipped 保留原版本;它们不累计成当前通过数,旧失败 receipt 也未改写成绿色。

语义与 CI 对齐

协议沿既有 vocabulary,新增分支只读取 typed 状态与已有 command 的存在,不从 prose、标题或 substring 推断生命周期。首读和 guide 不增加执行权、重准入、quota debit 或 model-retention 证明。完整 guide 的 actor、依赖顺序、必要范围、来源、继续/停止和原 Turn 结算条件保留;只改变已准备 Host 的呈现位置,fallback 仍有完整 guide。CI 按配置未查询、轮询或等待。

本地 standard premerge 在生产代码相同的 f8888e2 实际执行18项:16项通过,semantic vocabulary 一项 required FAIL,maintainability 一项 inherited advisory FAIL。该 advisory 在实际 base/head 的完整报告除 repository_root 外一致;没有调整阈值或 exception。当前 head 的 required semantic scan 再次失败,base 同命令通过。完整 native gate 因本次新增语义 owner 问题为 FAIL;change-quality 记录也保留此 required failure,未将通过的功能测试当作豁免。

我的整体评价 / Verdict

功能交付仍是 justified_increment:生产调用者复用原 owner,receiver 已能选择并读回任务,acceptance reader 也保留原捕获版本。long_horizon 为 preserved、user_experience 为 improved,但这些通过项不能抵销当前 required semantic alignment 的 violated。18文件范围已连同最新 fixture 隔离与显式 off 真实 CLI 测试核对;需要先采用已有 canonical action binding 并重跑同一检查,再 review 新 exact head。自然模型、已安装采用与完整成本仍 unknown。此 author-owned COMMENTED / REQUEST_CHANGES 不执行 merge、dismissal 或 thread resolution。

English verdict: REQUEST_CHANGES — 7d8fdee retains an introduced required semantic-owner failure in the staged-replan branch; passing functional coverage does not waive that check.

@mergify

mergify Bot commented Nov 5, 2026

Copy link
Copy Markdown

This pull request has merge conflicts with main and cannot be merged
until they are resolved. Please rebase or merge the base branch, @loopx-agent.

Choose the remote for the base repository, not an out-of-date fork.
For a fork clone, first inspect git remote -v; upstream must point
to https://github.com/loopx-project/loopx.git. If it is absent, add it
with git remote add upstream https://github.com/loopx-project/loopx.git.
Then run:

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 HEAD

For a same-repository clone whose origin points to
https://github.com/loopx-project/loopx.git, use origin instead of
upstream for fetch/rebase. If you prefer merging the base, use
git merge <base-remote>/main and push normally.

Keep the DCO Signed-off-by trailer on every commit when you rebase.
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork

@mergify mergify Bot added the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Nov 5, 2026

@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.1-sol; OpenAI; runtime_reported; reasoning_effort=max

Request changes conclusion (author-owned PR; GitHub blocks formal self-review)

[P2] 修复新增布尔值的字典类型(turn_envelope.py:202)。 source 从既有参数推断出的值类型不包含 bool,本次新增赋值使配置内 uv run --extra test python -m mypy 从 base 的17文件通过变为 head 的1处错误。请为 source 声明完整的异构字典类型,再运行原配置;运行测试通过不能替代这个必检。

Exact reviewed head: 2666a9053469dd6d073197aca678886317bb69c3. Base: 3c7e0935fd6697291c5c432e5267816b4a667cfa.

动机 / Motivation

使用原生 Codex 接续任务、选择待办的操作者。原生首读可能落在后来改写的路径,非首项 Todo 的选择命令未随当前视图交付。

同一 Turn 的冷/暖首读与选择现在由固定 capture 路径和摘要绑定,并交付可执行的选择路由;新增类型错误仍需修复。

首读及同一 Turn 选择的运行路径通过,但新增布尔字段导致必需 mypy 检查失败。

本次不验证付费模型效果、真实模型采用、安装到用户 Host、完整运行费用或父级验收,也不授予合并权限。

改动思路 / Approach

旧路径可能把首读指向后来变化的预读文件;当前由共享 TypeScript 选择 owner 推导初读指针,Python 同一锁内先保存恢复 capture,再返回不可变的本地 read plan。展示地址与摘要严格匹配,重复 preflight 使用新的独占文件;失败保留完整原路径。准备好的 benchmark worker 已在 developer input 收到完整 guide,才省去另一份重复提示,独立和失败入口仍保留。

当前边界复用一个策略 owner:类型化决策提供选择计划,Python 只处理当前 capture 的 IO;没有新增准入或记账 owner。

当前 PR 只覆盖原生首读和同一 Turn 选择;类型错误仍是当前修复项。

具体改动 / Changes

本轮重新检查完整19文件差异,没有沿用旧 head 的结论。之前 action 字面量问题已换为 canonical EffectiveAction,完整语义扫描通过;这不能消除新的 Python 类型错误。选择非首个 Todo、staged replan、旧读地址、重复 preflight、外来 digest 和元数据写失败均有真实调用覆盖。

规格依据:docs/reference/required-work-context.md,不可变 revision 3c7e0935fd6697291c5c432e5267816b4a667cfa。映射 first_read_selection、same_turn_binding、immutable_capture、legacy_recovery:这些既有条款的运行边界已覆盖;没有用本 PR 新增说明反向定义验收。

关键代码讲解

共享策略、宿主 IO、持久回复和局部滚动分别保留在原 owner。完整作者正文、证据来源、失败、未知及后续条件仍可恢复;没有按文件数、测试数或回执数量推断产品采用。

对主干的风险 / Risks

当前 mypy 是本 PR 引入的必检回归,其他468测试和9条原生路径通过也不能豁免。标准 premerge 的执行检查通过,仍保留 benchmark-sensitive 人工门。

原始 maintainability ratchet 在两份不可变 base/head 上均 exit1,完整诊断逐字节一致:sha256:ed110292cf97c035245ec237facfc489fa617bb00e560ad3ffbb28563c80e282,唯一未评审债务为未修改的 interaction_contract._admitted_interaction_next_cli_actions。未放宽预算或必检状态;CQR 中 required failure 和独立合并门仍保留。标准 premerge 的继承 advisory 不等同于 CQR 通过。

本轮验证:468 passed, 14 skipped in 550.63s (0:09:10);原生 Codex loopback 9通过,45组激活配置与 base 一致;strict TypeScript、Ruff、语义扫描和原运行路径通过。远程 CI 按策略未查询或等待。临时夹具、合成 provider 和本地回环不证明真实模型效果或线上采用。

我的整体评价 / Verdict

当前请求变更:运行路径实现了有用的首读/选择修复,但必要的静态校验回归尚未闭合。长程原身份和重试保持,CLI任务少了重建选择的步骤;不涉及渲染页面,视觉审查不适用。最小修复是为异构 source 明确类型并重新通过原配置,保留其他负例。

English verdict: REQUEST_CHANGES — the new boolean assignment breaks the configured mypy gate; repair its payload typing before approval.

@huangruiteng
huangruiteng force-pushed the codex/native-first-read-plan branch from 2666a90 to 8ea37ad Compare November 6, 2026 04:37

@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.1-sol; OpenAI; runtime_reported; reasoning_effort=max.

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

APPROVE:当前 exact head 未发现阻塞性代码问题。 两处旧 finding 已分别核实:staged-replan 分支使用 canonical EffectiveAction;异构 source 明确为 dict[str, Any],原配置 mypy 在 base/head 均通过。以下是当前19文件的完整判断,不沿用旧 head 的批准。严格 CQR 与人工合并门仍未通过,代码批准不表示可合并。

评审提交:8ea37ad6e9c6776b0ebcc628c156102c326ce57b。不可变 diff/执行基线:f91e26d91d3e4e1b28b69f5881a059ea78891082;开始评审时 PR target 为 7bdae359e66c007eddbf7672578016298c8ac8e4,实际 merge base 是前者。未把移动中的 main 当作因果基线。

动机 / Motivation

通过原生 Codex 接续任务的 Agent,需要从本次候选中选择 Todo,并沿原 Turn 继续工作。

当 guard 要求选择非首项任务时,旧首读可能缺少选择命令;当前首读交付原选择路由,后续冷、温唤醒仍使用各自原始身份。

当前首读、同 Turn 选择、旧读地址恢复和失败回退已有实际入口证据;旧类型与 vocabulary 问题已解除,继承的质量及人工合并门仍单列。

本次不认证整个 C1、自然模型采用、已安装 Host、整题成绩或完整费用,不执行合并或修改活动配置。

自然模型采用、已安装行为与完整可比成本仍未验证;本 PR 只交付当前首读和选择路径。

改动思路 / Approach

选择策略、完整来源与私有 IO 沿原 owner 分工;本次 plan 是调用内派生值,不能成为新 authority。

当前 PR 交付原生首读、同 Turn 选择与预检恢复;完整 C1、自然模型收益和活动安装仍由既有 owner 另行验收。

不改动会继续留下额外补读和旧预检地址可能被改写的问题。仅扩展选择字段不足以固定本次实际 CLI view;再建缓存或 journal 又会复制现有 authority。当前组合复用 TS 选择与 codec、Python 原 session lock 和文件发布,再让两个生产入口及 benchmark receiver 消费;临时 plan 不进入原始 capture 或成为长期状态。旧 project_codex_context 仅委派到共同实现,历史 reader 保留原支持窗口。

当前状态 首读及恢复
要求选择 Todo 原 policy、候选与同 Turn 选择命令可直接读取
active staged replan 原 review command/guidance 可达,不交付 writeback
settlement-only、未知 schema、其他 action 不额外交付 replan route
显式 off、错误 digest、metadata 失败 分别保持原全文、拒绝错误来源、回到同 capture 原 recipe

表格来自当前源码与实际调用,不代表自然模型已经采用。完整 guide 的读取范围、原来源、Stop、继续条件和一次结算义务保留;准备好的 worker 只省去 wake 中重复的一份,原生测试逐请求检查 developer input 仍有完整 guide,独立及失败路径继续携带完整文本。

具体改动 / Changes

依据改动前 docs/reference/required-work-context.md,spec_revision f91e26d91d3e4e1b28b69f5881a059ea78891082:first_read_command 的当前事实/入口为 implemented;selection digest 的地址、摘要与旧 reader 恢复为 implemented;Disabled native delivery 的完整 off 路径为 implemented。没有用作者新增的说明反向定义验收,也没有要求独立切片先完成整个 C1/C6/C8。

关键代码讲解

  • initialContextReadPointers:278 从既有 typed 状态取地址,新增的选择/replan 信息仍由原 owner 决定。正常、未知或 settlement-only 的对照不多出执行路由。
  • prepare_codex_context:622 在原锁内先发布当前完整 recovery,再派生 delivery 和本次 plan;NativeContextPreparation 是调用内结果,不是另一个 session journal。
  • native_context_capture_view:471 检查原始字节 SHA 与 plan 的 capture binding;固定 selection 地址及完整 digest,外来 plan、仅改变空白的 capture 也被拒绝。可选 cursor 写入失败时保留原 recipe。
  • capture_before_replan:197 只有实际 CLI view 与原始 source 字节相同时才复用该文件,否则在本次独占目录保存 view;重复预检不覆盖旧 native reader。benchmark 的评分和外层 wake/结算仍由原 owner 掌握。

完整差异为19路径、+530/−135,8个生产路径与11个测试路径,已读完整生产和测试 diff。测试修改让 CLI view 通过其真实 reader 解码,而非把 navigation 当旧 inline payload;显式 off 真实调用取代进程外失效的 spy,native fixture 同时隔离 OS HOME 与 Codex home。原先两个 review 的问题是当前复核项,修复后的静态通过没有替代这轮实际入口检查。

对主干的风险 / Risks

当前功能 cohort 479 passed、29 skipped、9 deselected;跳过/未选不计通过。另显式启用已安装 Codex 二进制、隔离 File/SQLite 与本地 scripted Responses server,3 passed,覆盖 benchmark 冷/温选择、温态非首项绑定和大 capture 选择恢复。它们运行真实客户端/CLI,但没有调用收费模型,也不证明自然模型理解或活动安装采用。

TypeScript owner 测试 102 passed;root typecheck、变更17个 Python 路径 Ruff、配置内17源 mypy 均通过。独立同输入 base/head 公共 reader 共16次观察保留所有原已选事实,只在要求选择/active replan时增加原 route;错误 digest 拒绝。显式 off 的完整结果仅归一化两个实际 CLI 路径后相同,reader 逐字恢复原始 bytes,未创建 authority、native 或缓存路径。

标准 premerge 仍 exit1 / manual_review_required:六项 direct 结果、17项非 advisory selected 检查通过;一个继承 maintainability advisory 与 benchmark-sensitive 人工门保留。独立 raw ratchet 在实际 base/head 都 exit1,完整报告逐字节一致,摘要 ed110292cf97c035245ec237facfc489fa617bb00e560ad3ffbb28563c80e282;唯一未评审债务仍是未改动的 _admitted_interaction_next_cli_actions,magnitude regression 为0。没有放宽阈值或清除原失败。严格 CQR cqr_404a793e847c921fe546 记录 fail,没有把 aggregate gate 改记通过。

语义与 CI 对齐

决定字段仍在原 turn_envelope.ts owner,include_initial_read_plan 只是默认不提供的 typed 内部参数;没有新增公共开关或启用默认。prompt/guide 的位置变化保留完整原义,错误与恢复仍指回原 capture,不新准入、不因 reader 扣额。当前完整 semantic smoke 通过。远程 CI 按 wait_for_ci=false 未查询、轮询或等待;本地 merge hold 与代码结论分别报告。

我的整体评价 / Verdict

交付判断为 justified_increment:真实调用者已经使用共享 owner,首读与后续选择形成可运行的一段旅程;long_horizon preserved、user_experience improved。相同输入反例、off 路径和原生 receiver 支持这个有限结论;作者历史的字节降幅、旧测试总数没有被重标为当前测得的 token、费用或成绩收益。

本 PR 没有改变渲染页面;实际检查的是 CLI、原生工具输入及恢复路径,视觉审查不适用。

没有新的渲染页面需要审阅;自然模型理解、活动安装和整题收益保持未验证。保留现有 reader/wrapper 的当前兼容成本是有界选择;后续可以随调用者清理薄 wrapper,当前无需增加一层框架或新的任务账本。旧 finding 已核实解除,但未执行 dismiss、resolve 或 merge;CQR、人工门及原生 readiness 仍需各自合格。

English verdict: APPROVE for 8ea37ad. Current first-read, same-Turn selection, immutable recovery and explicit-off behavior are independently covered; the old typing/vocabulary blockers are resolved. Strict quality and manual merge holds remain separate.

@huangruiteng
huangruiteng force-pushed the codex/native-first-read-plan branch from 8ea37ad to 7c9ee4c Compare November 6, 2026 05:37
loopx-agent and others added 13 commits November 6, 2026 13:38
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…route

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
(cherry picked from commit 47db78b33792e584036b2f099bed4aa0904f7e2b)
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>
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>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
… claim

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: huangruiteng <huangrt01@163.com>
…path

Signed-off-by: huangruiteng <huangrt01@163.com>
@huangruiteng
huangruiteng force-pushed the codex/native-first-read-plan branch from 7c9ee4c to 6403996 Compare November 6, 2026 05:38
@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Nov 6, 2026

@huangruiteng huangruiteng left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewer: model_agent | GPT-5 Codex | OpenAI | self_reported

APPROVE. Exact head 6403996185a477f3cc9474ae6ad7beea9b7850d0 closes the prior mypy regression and binds the native first read to the same immutable capture that the selection route names. The 717 passing affected tests cover the replaced defect; the single failing reader test reproduces unchanged on main 918844a017.

动机 / Motivation

原生 benchmark wake 在允许执行工作前可能要求 Agent 先选择一个 Todo。旧的首读可能只给候选或只给通用 recovery,再由 Agent 发起第二次读取来寻找 selection command;同一 Turn 的重复 preflight 还可能重写首读已经引用的文件。对长任务而言,这会增加一次没有新决策价值的 round,且让后一次导航结果替代先前展示的绑定。

这个 PR 让 prepared native delivery 同时返回完整 view 与 invocation-local read plan:首读直接绑定 capture 路径和 SHA-256,显式选择状态才包含 selection policy、候选和 same-Turn command;重复 preflight 改为写独立不可变文件。边界是交付可靠的首读和同 Turn 路由,不证明自然模型采用、已安装用户行为、benchmark 分数或完整费用收益。

规格依据是 Required work context,固定 revision 918844a01746184de38865b0927604c530ad1b32。其中 required-work-context-first-read、required-work-context-pinned-selection 和 required-work-context-disabled-parity 分别要求当前 capture 的首读、固定地址/摘要的选择引用,以及 disabled native delivery 的既有行为不变。

Agents and maintainers using native Codex benchmark wakes or saved quota context where the guard requires Todo selection before work. Same selection-required capture: before, the first page can omit policy/candidates/binding and the reader replans; after, the first page receives the typed addresses and same-Turn command from the immutable capture, while repeated preflight writes a separate file. The real CLI tests read a non-first Todo selection command from the first page, retain the original capture after navigation changes, distinguish raw from displayed bytes, and return the original review obligation after a successor loses its claim. Natural-model adoption and scored benchmark economics remain separate qualification work. This slice does not prove natural-model adoption, installed-user behavior, benchmark score improvement, total cost reduction, PostgreSQL migration work or a new authority model.

改动思路 / Approach

原实现有两个入口:prepare_codex_context 已持有 transaction 结果,project_codex_context 仍是只返回 delivery 的兼容 wrapper。当前 head 删除 wrapper,让 CLI 的两个生产调用点显式消费 NativeContextPreparation.delivery 和 initial_read_plan。这样 TypeScript 仍是选择策略与地址顺序的 owner,Python 只负责文件发布、锁、摘要校验和 reader command。

flowchart LR
  G[Quota decision] --> T[TypeScript selection plan]
  T --> C[Immutable capture path + SHA]
  C --> P[prepare_codex_context]
  P --> V[Native delivery]
  P --> R[Initial read reference]
  V --> A[Agent first read]
  R --> A
Loading

上图是 exact-head source 的示意,不是运行 receipt。initialContextReadPointers 从 typed decision fields 与 staged-replan/selection gates 派生首读地址;prepare_codex_context 在发布 recovery 后把同一个 plan 绑定到该 recovery;native_context_capture_view 在任何发布前重新校验 capture bytes 与 plan 的 path/SHA。旧 wrapper 的删除减少了第二个入口和默认值漂移,而不是保留一条永久 compatibility surface。

Each mechanism stays in its existing owner and the change removes an extra compatibility surface. Bind and deliver the first read now; defer natural-model and scored-cost qualification.

具体改动 / Changes

完整 diff 为 23 files、+570/−165。生产实现 9 files、+161/−43;测试与 fixture 14 files、+409/−122。生产改动集中在既有 turn driver、native projection 和 benchmark preflight;没有新增持久状态、数据库 schema、CLI 顶层命令或权限 owner。

关键代码讲解

  • initialContextReadPointers:从 typed decision、当前 settlement_only/replan packet 和 selection_required 派生首读字段;只在显式选择状态加入 selection policy、候选与 binding command,普通 delivery 的字段集合保持。
  • prepare_codex_context:保留原有 session lock 和 recovery 事务,返回 delivery 加可选 initial_read_plan;plan 只属于本次 invocation,并附加实际 recovery 的 path/SHA,不写回原始决策。
  • native_context_capture_view:校验 recovery bytes、plan capture identity,把已解析地址写成 selection reference;metadata 不可写时退回现有 reader,不让可选 cursor 抹掉完整 recovery。
  • capture_before_replan:绑定本次 command 实际产生的 CLI view;只有 bytes 与原 decision 相同时复用文件,否则写新的独占 view,避免重复 preflight 覆盖旧 reader。
  • preflight_context_instruction:仅在已准备好的 native host instruction 中省略重复 guide;独立 fallback 与失败路径仍保留完整导航义务。

required-work-context-first-read 由 prepared plan、first_read_command 与 current capture 校验实现;required-work-context-pinned-selection 由 selection reference 的地址/SHA 与导航变化测试实现;required-work-context-disabled-parity 由显式 off 的真实 CLI 用例和普通 saved projection 实现。Long-horizon 的后续采用与 scorer 不在本切片内。

对主干的风险 / Risks

最强的回归场景是 plan 来自另一个 capture,或同一路径字节被替换后仍被 reader 接受。当前路径在发布前比较 initial_read_plan.capture 与 recovery 的 (path, sha256),同时重新计算 current capture digest;File 与 SQLite 的 foreign-plan、changed-file、重复 preflight 和非首个 Todo 用例均通过。失败由现有 QuotaDecisionTransportError 或原 recovery owner 接管,不重新执行 admission。

另一个风险是兼容面收缩:删除 project_codex_context 会破坏仓库外若直接导入该内部函数的代码。仓库内的两个生产调用点与全部测试已迁移到 prepare_codex_context(...).delivery;该模块没有文档化的独立部署契约或持久化格式,属于 co-deployed internal API。因此本 PR 直接消除第二个入口,而不是留下无生产调用的 wrapper。

验证结果:uv run --extra test python -m mypy 通过 17 files;npm run typecheck:control-plane、changed-file Ruff、py_compile、RFC bilingual 和 diff hygiene 通过。受影响套件为 717 passed, 39 skipped, 1 failed;唯一失败 test_bounded_continuation_rechecks_original_capture_and_utf8_cursor 在同一命令下于不可变 main 918844a017 仍以相同签名失败,因此记为 pre_existing_unrelated,不作为本 PR 的 green claim。标准 premerge 执行 18 项,阻塞自动失败为 0,保留一个未修改文件的 maintainability advisory 和 benchmark-sensitive manual review hold。

语义与 CI 对齐

首读 guidance 仍是现行 Required work context 合同的投影,不是新的 permission 或 retention receipt。selection_required、effective_action 和 settlement_only 都来自 typed owner;unsafe JSON、未知 schema、错误 SHA 和显式 off 继续走原有 fallback。remote CI 在本次 review 时尚未完成,但 changed-invariant 证据来自当前 exact-head 的真实 CLI、File/SQLite fixture、TypeScript typecheck 与 premerge;merge readiness 会在发布 review 后单独检查。

我的整体评价 / Verdict

long_horizon 为 preserved:selection、claim/reentry 和 settlement identity 仍由原 guard/结算 owner 持有,第二次无价值读取在已验证路径上被消除,失败仍能从同一 immutable capture 恢复。user_experience 为 improved:调用者第一次拿到的就能执行,不再需要先发现地址再重新导航;显式 off 和错误 capture 的诊断没有隐藏。这里没有 rendered UI 变更,因此 visual review 为 not_applicable,检查面是 CLI/JSON 与 native instruction。

代码体积为 necessary:大部分增量是覆盖重复 preflight、saved context、File/SQLite 和 successor re-entry 的回归测试;生产部分复用现有 typed selector 与 IO owner,并借本次改动删除了旧 projection wrapper。兼容性评估因此为 not_applicable 的内部 co-deployed API 收缩,并用完整调用点迁移和受影响套件验证。

English verdict: APPROVE — exact head 6403996185a477f3cc9474ae6ad7beea9b7850d0 fixes the native first-read binding and same-Turn selection route, removes the redundant projection entry point, and passes the changed-invariant suites; the sole reader failure is identical on the immutable base.

@huangruiteng
huangruiteng merged commit dd7a1c1 into main Nov 6, 2026
28 of 52 checks passed
@huangruiteng
huangruiteng deleted the codex/native-first-read-plan branch November 6, 2026 05:50
huangruiteng added a commit that referenced this pull request Nov 6, 2026
* Recognize direct exec results in the trajectory tool inventory

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
(cherry picked from commit 8e9946d)
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

* fix(chat): reject non-string queued input actions

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

* feat(research): compare real captured LoopX request usage

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

* Honor cross-turn delta independently of progressive context

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

* test: isolate machine CLI smokes from model context transport

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

* Honor scoped Todo resume conditions across external and managed schedulers

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

* Audit active solver coverage across every selected benchmark arm

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

* fix(runtime): preserve raw quota JSON for native goal admission

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

* feat(collaboration): share reader guidance and version return formatting

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

* fix(chat): open long returned answers at their beginning

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

* test(lark): verify full versioned returns through body workers

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

* feat(research): compare real captured LoopX request usage

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

* fix(runtime): preserve raw quota JSON for native goal admission

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

* fix(research): show native command cache and output deltas

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

* fix(chat): preserve queue edits when dismissing actions

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

* docs(readme): remove redundant budget disclosure sentence

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

* fix(collaboration): count budgets using persisted return format

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

* fix(research): compare uncached command request shares

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

* fix(context): preserve async reader handles in code-mode guidance

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

* refactor(control-plane): isolate prompt upgrade CLI rendering

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

* test(control-plane): qualify complete continuation decisions

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

* fix(chat): answer exhausted requests through one restricted review

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

* fix(runtime): wait for launchd job removal during service handoff

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

* test(project): make the no-git registry fixture actually degrade the probe

Signed-off-by: Weimr2627 <134630546+Weimr2627@users.noreply.github.com>

* fix(research): distinguish declared retention from verified adoption

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

* fix(doctor): hold every Git read to one budget

`doctor` inspects a checkout the operator may not control, and none of its
six Git reads had a budget: `rev-parse` twice, the metadata runner behind
`git_metadata_for_root`, `merge-base --is-ancestor`, `remote`,
`remote get-url` and `rev-parse --verify`. A repository blocked on a stale
index lock, a network mount or a very large history therefore held the
diagnostic open with no output at all.

Reproduced with a fake `git` on PATH that only sleeps:
`_is_git_worktree_root` was still running after 5s.

All six reads now go through `_run_git`, bounded by
`GIT_PROBE_TIMEOUT_SECONDS`. The helper answers `None` when the budget runs
out, which is the answer every caller already treats as "unknown": root
detection fails closed, metadata fields stay `None`, revision relation stays
`UNKNOWN`, and the trusted release ref is refused. No new failure mode, and
the diagnostic still returns instead of raising.

The same class in `loopx/contract.py` was bounded in #8152.

Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>

* fix(doctor): retire the probe's own group and keep a stale manifest out

Two gaps the review found in the ten-second budget.

`subprocess.run(timeout=...)` retires the Git leader only. Git starts its
helpers -- fsmonitor hooks, pagers, credential helpers -- inside the group it
runs in, so a blocked `status` left the hook and its child behind and repeated
diagnostics accumulated them. The query now launches in a session of its own,
and an exhausted budget retires that group through the existing
`terminate_process_tree` before dropping the pipes instead of draining them: an
inherited pipe outlives the leader, so a drain would wait on work this call no
longer owns. Reproduced with a `core.fsmonitor` hook that never answers and
keeps a child writing heartbeats -- leader-only kill left it growing, the group
retirement stops it.

`_is_git_worktree_root` answered False both for "there is no Git here" and for
"there is Git here and it did not answer". `release_manifest._source_metadata`
stood an older `release.json` in for the second case, so a checkout at commit B
that carried a manifest claiming A wrote A back as its own source. The two
cases are separate states now, and only a checkout with no `.git` of its own
falls back to the recorded manifest; an unanswered read stays unknown.

Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>

* fix(doctor): retire the probe's session when the diagnostic is cancelled

The budget covered an exhausted wait, not an interrupted one. Git runs in a
session of its own so the budget can retire its helpers, which also means a
terminal Ctrl-C -- a SIGINT to the process group of the running `doctor` --
never reaches Git. `communicate` raised `KeyboardInterrupt` out of the only
place that owns that session, the diagnostic exited, and the fsmonitor hook
and its child kept running. Repeated cancellations accumulate the same
background work the timeout fix removed.

The wait now retires the owned session on any interrupted exit and re-raises
the original interruption, so an exhausted budget keeps answering "unknown"
while Ctrl-C stays Ctrl-C. Reproduced with the manifest writer CLI, real Git
and a real `core.fsmonitor` hook that keeps a child writing heartbeats:
interrupting the writer's group left the heartbeat growing on the previous
head and stops it now.

Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>

* fix(chat): retain context-limit failures in pending work

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

* test(collaboration): recover complete per-turn delegation context

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

* fix(lark): hold the collector's Git reads to one budget

Admitting a collector config path asks Git three questions -- whether the
project is a worktree, whether the file is tracked, and whether it is
ignored -- and none of them carried a budget. A Git blocked on a stale index
lock, a network mount or an oversized index therefore held the command open
with no answer at all; reproduced here with a fake `git` on PATH that only
sleeps, where `_project_config_path` was still running after 5s.

The budget alone was not enough: a `TimeoutExpired` would have escaped the
admission check as a traceback, so the refusal paths had to say what "Git did
not answer" means. Acceptance needs proof that the config is ignored and
untracked, so an unanswered probe refuses the path. The three reads share
`GIT_PROBE_TIMEOUT_SECONDS` through `_run_git_probe`, and a Git that exits
non-zero still takes the existing boundary and non-Git fallbacks unchanged.

The queries are local reads that never fan out into helpers, so the
leader-only kill that `subprocess.run` performs covers them.

Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>

* fix(lark): stop the collector's Git questions together with its budget

Two gaps in the config admission.

The budget ended only the Git leader. Git starts helpers of its own -- an
fsmonitor hook is the common one on `ls-files` -- inside the group it runs in,
so a blocked admission returned its refusal while the hook and its child kept
running, and repeated runs accumulated them. The probe now runs in a session of
its own, and an exhausted budget retires that group through
`terminate_process_tree` before dropping the pipes instead of draining them.

The three questions each carried a fresh budget. Once the tracked query had
timed out the admission could no longer be satisfied, yet `check-ignore` was
still started and spent another full budget on the same hang. The questions now
share one deadline, an unanswered tracked query refuses at once, and a question
asked after the deadline has passed is not started at all.

Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>

* fix(lark): retire the probe's session when collector-plan is cancelled

The budget covered an exhausted wait, not an interrupted one. The probe runs
in a session of its own so an exhausted budget can retire the helpers Git
started, which also means a terminal Ctrl-C -- a SIGINT to the process group of
the running `collector-plan` -- never reaches Git. `communicate` raised
`KeyboardInterrupt` out of the only place that owns that session, the command
exited, and the blocked Git and its helper kept running. Repeated cancellations
accumulate the same background work the budget fix removed.

The wait now retires the owned session on any interrupted exit and re-raises
the original interruption: an exhausted budget keeps refusing the config,
while Ctrl-C stays Ctrl-C. Reproduced with the `collector-plan` planning entry
in a real child process, real Git and a `git` that blocks the ownership read
with a helper writing heartbeats: interrupting the process group left the
heartbeat growing on the previous head and stops it now.

Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>

* docs: define router-coordinated controller worker units

Signed-off-by: huangruiteng <huangrt01@163.com>

* fix(chat): compact bounded history before new native turns

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

* docs: prioritize controller attention with safe preemption

Signed-off-by: huangruiteng <huangrt01@163.com>

* fix(runtime): pin qualified service executables behind CLI aliases

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

* docs: make controller worker execution the primary loop

Signed-off-by: huangruiteng <huangrt01@163.com>

* Pin the native first read and deliver the same-Turn selection route (#8100)

* Reuse capture-bound navigation for the first progressive read

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

* Distinguish the pinned reader from an explicit navigation replan

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

* Pin the benchmark preflight view and deliver its same-Turn selection route

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
(cherry picked from commit 47db78b33792e584036b2f099bed4aa0904f7e2b)
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

* Reuse prepared Codex read guidance in benchmark checkpoint prompts

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

* Prove progressive benchmark choices from receiver-visible pages

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

* Deliver the captured review command on the first replan read

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

* Validate progressive replan against its published reader contract

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

* Isolate the user skill directory for native context comparisons

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

* Verify explicit guard opt-out on the real CLI

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

* test(quota): exercise the original review after a successor loses its claim

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

* refactor(context): reuse the quota action vocabulary for staged review

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

* fix(types): widen context delivery source values

Signed-off-by: huangruiteng <huangrt01@163.com>

* refactor(context): make prepared native delivery the sole projection path

Signed-off-by: huangruiteng <huangrt01@163.com>

---------

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: huangruiteng <huangrt01@163.com>
Co-authored-by: huangruiteng <huangrt01@163.com>

* Read saved quota fields in the first native tool call (#8111)

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

* Avoid reparsing unchanged private delivery journals during discovery

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

* Verify captured vision audits and share them in one display request (#8113)

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

* Keep delivery discovery hints in their bounded provider module

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

* Reuse unchanged observed acceptance and preference bodies in native first reads (#8124)

* Reuse observed preference and acceptance fields in native first reads

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

* Plan field reuse inside the existing delivery transaction and qualify invalidation

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

* Type the mixed native delivery request for the kernel contract check

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

* Keep private field observation descriptors typed on both native routes

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

* fix: observe reusable fields inside complete parent reads

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

* test: distinguish progressive defaults from delta opt-out

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: huangruiteng <huangrt01@163.com>
Co-authored-by: huangruiteng <huangrt01@163.com>

* fix(canary): retain current main maintainability baseline

Signed-off-by: huangruiteng <huangrt01@163.com>

---------

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: Weimr2627 <134630546+Weimr2627@users.noreply.github.com>
Signed-off-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>
Signed-off-by: huangruiteng <huangrt01@163.com>
Co-authored-by: Weimr2627 <134630546+Weimr2627@users.noreply.github.com>
Co-authored-by: ChengLong GU <88359731+gcl-coder@users.noreply.github.com>
Co-authored-by: huangruiteng <huangrt01@163.com>
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