Repository navigation
refactor(todos): classify global Todo readiness in TypeScript - #7900
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bdefbe5f90
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
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 |
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | model=gpt-6.1-sol | provider=OpenAI | reasoning_effort=max | source=runtime_reported
动机 / Motivation
需要判断哪个 Agent 的待办可执行、哪个仍受本人门控的用户。此前全局待办和项目总览由 Python 汇总候选项、分别调用门控关系,再判定可执行性;增加一种待办来源或门控规则时,需要同时追踪多个语言边界。本次把同一批候选的去重、冲突和就绪分类交给已有 TypeScript owner。已验证的变化是两种真实存储下,全局待办和项目总览保持完整 JSON、Markdown 输出一致;本人门控仍使对应任务不可执行。本次不新增页面、用户配置或执行权限,不声称长程收益和延迟已改善。已提交的 CLI 比较测试没有固定迁移前版本;此外,安装包深层语义验证和完整性能资格仍缺失。
改动思路 / Approach
复用现有 decision_scope owner 和共享 Python open_user_gate_todo_items 选择器,Python 只保留持久格式解码、展示与传输;两个生产消费者进入同一批次投影。本 PR 的边界是现有读取路径的完整 readiness 投影替换,可独立回滚;测试基线与已接受的迁移资格必须在这个切换边界补齐。原有 gate selector 继续由实际共享函数提供,避免在 TypeScript 另写一份摘要可见性规则。native 投影合并同一 todo_id 的候选、检查状态冲突和精确/范围门控,最后才把可执行、等待和阻塞结果交给现有展示;normal_delivery_allowed 只是读取信号。
| 调用边界 | 迁移前 | 当前 head |
|---|---|---|
| 全局与 portfolio readiness | Python 分类、逐关系调用 | 共享 native 批次投影 |
此表是源码和实际 crossings 支持的结构说明,不能替代延迟、内存或长程收益测量。
具体改动 / Changes
依据迁移前已接受的迁移 RFC,固定 revision fb16c6cb1369efce52a673030c914b38e1dac166;当前审查 head 为 bdefbe5f9017f77f6c30c50e49621e5bb8d013e1。新增 ledger 是实现说明,不覆盖旧规范。生产代码移动完整决策并复用已有 owner,测试保存完整输出,双语 ledger 记录现有消费者及退出条件。
关键代码讲解
_classify_goal_todos:两个现有展示消费者共享一次投影,随后仅做公开展示归一化。project_global_todo_readiness:解码并复用已有 user-gate selector,严格验证返回的候选和 warning 列表;协议错误不走旧分类回退。projectGlobalTodoReadiness:按 todo_id 合并候选与来源,保留冲突和 gate precedence,再输出 readiness;该信号不授予执行权限。test_production_cli_archive_parity:当前用 git archive HEAD 构建比较方;提交后两方都包含新实现,不能再证明迁移前后兼容。
RP-OWNER:implemented;完整批次有实际生产调用方,旧 Python 解释器已删除。CE-PARITY:not_met;本轮独立固定基线验证通过,但已提交的长期比较门仍是 HEAD 对自身。CE-INSTALL:not_met;没有 wheel 和 sdist 新环境安装后的深层执行。CE-COST:not_met;没有规范所需的默认 SQLite 全路径延迟及 daemon 内存测量。
对主干的风险 / Risks
[P1] 固定真实迁移前基线。 test_production_cli_archive_parity 第 94 行执行 git archive HEAD;在 PR commit 上运行时,归档和 source 都包含新分类器。即使两边共同错误,测试仍通过。该问题已有 discussion_r4442642375,本轮独立确认,故不重复发同一 inline。请显式传入固定迁移前 SHA,使用同一 harness 对照,并保留独立门控断言和错误突变检查。
独立执行 Python 聚焦套件为 154 PASS / 1 FAIL,TypeScript 35 PASS,typecheck PASS。唯一 Python 失败在固定 base/head 均为旧 CLI 测试缺少 --turn-instance-id 或 --begin-turn,发生于 readiness 之前,保留失败而不归为新回归。本轮另以固定 base 比较 32 个完整语料观察,以及真实 File/SQLite 下两命令、两格式共八对输出,全部 byte-equal 且结果有实际待办;把 blocked 故意改为 runnable 后,两种 provider 的独立断言均检出错误。
[P2] CE-INSTALL:补齐安装包资格。 迁移前 §6 Correctness 要求 wheel 和 sdist 在新环境执行深层语义探针。生产 caller 已切换,源码 import、单元测试与 source CLI 不证明发行包包含并能执行新 owner。在该 exact head 构建 wheel 与 sdist,分别安装到全新隔离环境,从 packaged files 运行当前事务的深层语义、拒绝路径和真实 CLI 探针,并记录版本与完整结果。此验证应使用隔离环境,无需更换正在使用的 Host。
[P2] CE-COST:补齐完整成本资格。 §6 Performance 对每个 transaction cutover 要求 cold/warm、完整事务、完整 CLI p50/p95 及 idle/burst RSS。对固定迁移前 base 与当前 head,在同条件、同 fixture 的默认 SQLite 上测 cold/warm request、完整事务与完整 CLI 的 p50/p95,以及 idle/burst daemon RSS;按既有阈值判断,单独披露 File 资格。减少 RPC 或不宣称性能提升,都不能取消这个既有门。
两项 head 的标准 premerge 均为 FAIL:相同原生接口预算检查得到 quota_should_run_json=20,581 >20,500,固定 base 也以同一 workload 复现相同失败。其余所选 direct、双语 RFC、风险 canary 与公开边界检查通过。该红项不归为本 PR 回归,也没有放宽预算或重标绿色,仍保留独立 merge hold。当前 wait_for_ci=false,未获取、轮询或等待远端 CI。
语义与 CI 对齐
本次扩展已有内部 readiness request/result vocabulary,未另建持久状态;gate 判断继续用 typed 元数据,标题措辞不会产生执行权限。强制拒绝和迁移资格都属于现有义务。广义 annotation-removal、所有未来 subject/范围逃逸与恢复到实际执行的变体并未全量独立跑过,不能把局部一致外推为完整生命周期保证;安装、完整成本、跨 Host 与后续采用仍明确未知。
我的整体评价 / Verdict
这是有真实调用方、可独立回滚的 justified_increment,owner 归属和机制大小合理;当前 REQUEST_CHANGES 针对已接受切换资格的缺证以及提交后的基线比较缺陷。Long-horizon 为 not_yet_proven:没有后续成果和完整净成本证据;user_experience 在现有 CLI 范围为 preserved,未新增人工作业轮次。已检查 global-todos、goal-portfolio 及现有展示消费路径,本次没有页面布局、控件或第一屏改动。安装包与已安装 Host 未验证;源码 CLI 证据不代表安装环境或跨 Host 已采用。补齐上述 exact-head 验收后复审;不从本轮结果推导合并、安装或 Goal 完成授权。
English verdict: REQUEST_CHANGES — head bdefbe5f9017f77f6c30c50e49621e5bb8d013e1; source parity and negative invariants pass, but required installed-artifact and full-cost qualification remain missing; the committed HEAD-vs-HEAD parity gate must also be fixed.
bdefbe5 to
4cc9baf
Compare
|
Repair head Per the agreed cumulative migration policy, this PR does not ship its own wheel/sdist. Installation, installed-host readback and matched cold/warm latency/RSS qualification run once on the cumulative migration candidate, unless packaging changes separately. |
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | model=gpt-6.1-sol | provider=OpenAI | reasoning_effort=max | source=runtime_reported
动机 / Motivation
需要从全局待办和项目总览判断哪些任务可做、哪些仍被本人决定阻断的用户。此前两种总览共享 Python 就绪分类,再调用 TypeScript 判断门控关系;本次由一个 TypeScript owner 完成同批候选的合并和分类。已验证的是 File/SQLite 上两个现有命令的完整输出一致,合法任务仍显示可做,精确门控对应的任务仍显示阻断。不新增执行权限、用户配置或页面,不把就绪投影当成准入许可,也不把源码等价当成已安装采用、性能或长程收益。安装包、已安装 Host 读回以及匹配的延迟和内存资格,按当前维护者确认的范围留给累计迁移候选;本轮不宣称这些检查已通过。
改动思路 / Approach
两个生产消费者切换到同一个 readiness owner,既有 gate 选择、历史字段 codec 和公开渲染仍由原边界承担;避免在 TypeScript 复制共享 gate 选择规则。本 PR 交付 global-todos 与 goal-portfolio 的完整源码就绪投影替换,并修复比较测试的固定基线;不承担累计迁移候选的发行与成本资格。准入不等于实际派生执行,读取状态也不等于领取权限;原来的 lease、执行、写回和扣额 owner 保持各自责任。旧 P1 已修正:比较测试现在归档固定的迁移前提交 d4aaaae,并校验祖先关系,不再在提交后使用 HEAD 对自身比较。
| 边界 | 迁移前 | 当前源码 |
|---|---|---|
| 全局/portfolio 就绪分类 | Python 组合规则,按需调用叶子决策 | 现有 TypeScript owner 完成一批决策 |
| 权限、持久格式和公开输出 | 原有契约 | 保持不变 |
| 早退/无 gate 路径的 crossing | 可为0 | 可增加为1,成本资格仍待累计候选 |
此表说明当前源码的调用边界,不是延迟、内存或长程收益的测量证据。
具体改动 / Changes
审查 head:4cc9baf28876d76aa18f6a3cf531e75f2f2055b0,固定迁移前 base:d4aaaaefbd37a83a30f10681de839b45d631eeb9。规范依据为 docs/architecture/rfcs/typescript-control-plane-migration-v0.md,spec_revision:d4aaaaefbd37a83a30f10681de839b45d631eeb9,即本次改动前已接受的迁移 RFC。维护者在绑定当前准确头的范围更正中明确:没有单独发行包的源码 PR,在累计迁移候选统一完成安装、Host 读回及匹配的延迟/RSS资格;只有包装面另改时才单独资格化。此来源是已核验的维护者评论,不能和作者自己的排除声明混为一谈,也没有把旧失败改为通过。
关键代码讲解
_classify_goal_todos:Both consumers' existing display adapter。Delegates candidate/readiness interpretation and retains public normalization。输入与错误边界仍属于已有来源和外层 owner,不增加执行权限。project_global_todo_readiness:One bounded request/result codec。Shared gate selector and historical facts cross once; malformed results fail without old fallback。输入与错误边界仍属于已有来源和外层 owner,不增加执行权限。projectGlobalTodoReadiness:Complete readiness owner。Stable source merge and warnings, blocked before deferred before runnable, existing relation owner。输入与错误边界仍属于已有来源和外层 owner,不增加执行权限。test_production_cli_archive_parity:Durable fixed-baseline CLI comparison。Archives immutable d4aaaa rather than committed HEAD; both providers and commands must return populated results。输入与错误边界仍属于已有来源和外层 owner,不增加执行权限。
RP-OWNER:implemented,完整旧解释器退出,实际生产调用方、保留 codec 的原因与退出条件成立。CE-PARITY:implemented,本轮重新执行固定 base/head 的 32 个完整语料观察和八对真实 File/SQLite CLI输出,包含正向、拒绝与回归敏感性。CE-INSTALL、CE-COST:按上述当前维护者范围 deferred 到累计迁移候选,并非在此头已验证或取消阈值。
产品代码按本轮 merge-base 实际统计为新增 163/删除 166 行;测试、固定语料和双语文档单独计算。保留的兼容层对应真实的历史字段或未迁移调用方;原生 caller 接管后应删除 facade,不应长期保留双重语义。
对主干的风险 / Risks
未发现本轮源码切片的新阻断。独立执行 Python 123 PASS、TypeScript 46 PASS,Ruff 和完整 control-plane typecheck PASS;标准 premerge 为六项 direct 加十九项 selected,当前阻断失败为0。语义 advisory 为有界扫描,不把零候选等同没有语义影响;完整语义 smoke PASS,当前独立 twin 为44/45。
两个消费者均返回实际 Todo/Agent;beta 的门控任务保持 blocked,alpha 的合法工作保留。故意把 readiness 全改为 runnable 后,两种 provider 的同一断言都失败;加入70条无关未知列表记录也不改变完整语料输出。所有 public CLI 比较保留完整诊断、字段和指纹,没有归一化掉语义差异。临时副本中的故意错误没有进入 PR;没有实际启动子 Agent 或调用模型。portfolio 合成样本没有进度时间,base/head 均如实保留 stale/unknown,这没有被当成完整 Goal 验收。
仍保留一项 FAIL:maintainability ratchet。在固定 base 与当前 head 独立执行同一命令,均 exit1,完整失败输出一致;四处 module-metric 债务对应的文件、算法与限额均未由本 PR 改动。已将其作为 pre-existing-unrelated 的独立证据输入 CQR,原始失败不改绿,也没有提高预算。历史版本的接口预算红项仍是历史记录;本轮实际同名 native 检查通过,不能从旧红或新绿臆断旧根因已解决。当前 wait_for_ci=false,未获取、轮询或等待远端 CI。
语义与 CI 对齐
复用现有状态、关系与 actor 词汇;新增的内部批次 method/codec 注册在已有 owner,未创建持久权限或生命周期。默认开关、scope、拒绝顺序、生成的义务文本和公开结果有对应的 base/head 证据;安装/后续 Host 使用及完整成本不在这份源码批准中。累计候选仍须按现有阈值完成资格,不能拿本评审替代它。已核验当前精确 scope 的 CQR,保留失败的 ratchet 和明确后置项。
我的整体评价 / Verdict
这是有真实消费者、可独立回滚的 justified_increment,完整 owner 替换与机制大小相称。APPROVE 当前源码头。 源码范围内 long_horizon 和 user_experience 为 preserved:原有合法继续、拒绝和读回保持,没有增加用户准备、选择或确认轮次;这不是对长程效果、安装或净收益的证明。旧包/成本阻断此次转为 deferred,是因为当前维护者明确调整资格范围,而非因为测试数量或不声称性能提升可以自行豁免。
已检查 global-todos、goal-portfolio 及其现有展示消费边界;此差异不改页面布局、控件或首屏呈现。未重新做浏览器视觉检查,因为没有渲染表面变化;安装包、已安装 Host 与跨 Host 行为未由本轮资格化。后续累计候选的发行、Host、跨平台和完整成本仍未测;批准不授权合并、安装、resolve 或 dismiss 历史线程。
English verdict: APPROVE — exact head 4cc9baf28876d76aa18f6a3cf531e75f2f2055b0; current pinned-baseline source parity and negative invariants pass, and installed/performance qualification remains explicitly deferred to the maintainer-scoped cumulative candidate. No merge or host adoption is certified.
|
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 |
Global Todo readiness for loopx global-todos and the goal portfolio now runs as one todo.global_readiness.project request next to the decision scope owner. TypeScript traverses the candidate sources, merges first-source fields, tracks provenance, evaluates gate relations in process and applies blocked > deferred_ready > runnable with conflict warnings. Python keeps quota acquisition, the shared open_user_gate_todo_items selector, persisted-field codecs, public redaction, grouping and Markdown. The request carries only the candidate containers. Frozen JSON/Markdown characterization for both consumers stays byte-identical; the unused scalar relation operation is retired. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> Signed-off-by: hhyykk <4408344+hhyykk@users.noreply.github.com>
Signed-off-by: huangruiteng <huangrt01@163.com>
4cc9baf to
45184d5
Compare
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: loopx-agent; exact head: 45184d5edd88722d505e41d6384c07bb68c92d66
动机 / Motivation
需要从 global-todos 和 goal portfolio 判断哪些 Todo 可做、哪些仍被本人决定阻断的用户。此前两个消费者共享 Python 就绪分类,只把 gate relation 交给 TypeScript;当前变更为一个 typed readiness owner,完成候选合并、来源优先级、blocked/deferred/runnable 判定和冲突告警,同时保持公开 JSON/Markdown、默认权限边界和真实 File/SQLite 语义。
改动思路 / Approach
两个生产消费者一起切换到 projectGlobalTodoReadiness。Python 继续拥有 quota/status 获取、唯一 gate 选择器、持久字段 codec、redaction、分组和 Markdown;TypeScript 只接收有界的 selected/lane/summary/frontier facts、delivery signal 和已选 gate facts,在进程内完成 gate relation、candidate traversal、precedence 和 warnings。就绪投影不是执行许可。
具体改动 / Changes
关键代码讲解
projectGlobalTodoReadiness拥有候选来源顺序、字段补全、provenance、gate relation、blocked > deferred > runnable 和 warning 顺序。_facts/ request adapter 只编码持久 ID/scope、legacy task class、selected/lane、delivery signal 与列表字段;不递归遍历整个 payload,也不重新选择 lane。open_user_gate_todo_items继续作为 gate 的唯一选择 owner,保留 done filtering 和 Python-equality dedup;TS 仅消费已选事实。global_todos.py与goal_portfolio.py::_classify_goal_todos一起切换,避免两个消费者出现不同 readiness 语义。
安装与成本范围
- 维护者已在 PR 上明确:本 PR 不单独发行包;wheel/sdist 深执行、installed-host 读回及 matched cold/warm latency/RSS 在累计迁移候选统一资格化。
- 本 review 不声称这些检查已通过;两个历史 P2 线程已按该维护者范围回复并解决。
当前 head 验证
- Python global-todos、goal-portfolio、runtime boundary 与 readiness 选择:82/82。
- TS readiness owner、decision scope 与 handler:46/46。
- TypeScript 类型检查、Ruff、双语 RFC 和 diff 检查通过。
- 标准 premerge 通过:10 catalog、8 risk-profile、1 public-boundary,0 failure、0 manual hold。
对主干的风险 / Risks
没有发现新的阻断性功能问题。主要风险是候选来源合并顺序、gate target/scope 冲突、blocked/deferred precedence 和 portfolio 多 Agent 行为漂移;固定语料、两个真实消费者、File/SQLite parity、TS precedence/拒绝测试和公开边界扫描共同覆盖。gate-free 或空分类增加一次 crossing 已在 ledger 明示,且不据此宣称性能收益。安装和完整成本仍未在本 PR 资格化。
我的整体评价 / Verdict
APPROVE。当前精确 head 完成了两个消费者共享的 global Todo readiness owner 切换,保持 gate 选择、公开输出、拒绝顺序和默认关闭行为;安装与全路径成本按维护者已确认的累计迁移候选范围后置,并保持未验证状态。
English verdict: APPROVE — exact head 45184d5edd88722d505e41d6384c07bb68c92d66 replaces the shared Python readiness classifier with one typed projection for both consumers while preserving gate selection, public output, precedence, refusal behavior, and real File/SQLite parity. Packaging and full-cost qualification remain explicitly deferred, not claimed.
huangruiteng
left a comment
There was a problem hiding this comment.
Reviewer: loopx-agent; exact head: 45184d5edd88722d505e41d6384c07bb68c92d66
动机 / Motivation
需要从 global-todos 和 goal portfolio 判断哪些 Todo 可做、哪些仍被本人决定阻断的用户。此前两个消费者共享 Python 就绪分类,只把 gate relation 交给 TypeScript;当前变更为一个 typed readiness owner,完成候选合并、来源优先级、blocked/deferred/runnable 判定和冲突告警,同时保持公开 JSON/Markdown、默认权限边界和真实 File/SQLite 语义。
改动思路 / Approach
两个生产消费者一起切换到 projectGlobalTodoReadiness。Python 继续拥有 quota/status 获取、唯一 gate 选择器、持久字段 codec、redaction、分组和 Markdown;TypeScript 只接收有界的 selected/lane/summary/frontier facts、delivery signal 和已选 gate facts,在进程内完成 gate relation、candidate traversal、precedence 和 warnings。就绪投影不是执行许可。
具体改动 / Changes
关键代码讲解
projectGlobalTodoReadiness拥有候选来源顺序、字段补全、provenance、gate relation、blocked > deferred > runnable 和 warning 顺序。_facts/ request adapter 只编码持久 ID/scope、legacy task class、selected/lane、delivery signal 与列表字段;不递归遍历整个 payload,也不重新选择 lane。open_user_gate_todo_items继续作为 gate 的唯一选择 owner,保留 done filtering 和 Python-equality dedup;TS 仅消费已选事实。global_todos.py与goal_portfolio.py::_classify_goal_todos一起切换,避免两个消费者出现不同 readiness 语义。
安装与成本范围
- 维护者已在 PR 上明确:本 PR 不单独发行包;wheel/sdist 深执行、installed-host 读回及 matched cold/warm latency/RSS 在累计迁移候选统一资格化。
- 本 review 不声称这些检查已通过;两个历史 P2 线程已按该维护者范围回复并解决。
当前 head 验证
- Python global-todos、goal-portfolio、runtime boundary 与 readiness 选择:82/82。
- TS readiness owner、decision scope 与 handler:46/46。
- TypeScript 类型检查、Ruff、双语 RFC 和 diff 检查通过。
- 标准 premerge 通过:10 catalog、8 risk-profile、1 public-boundary,0 failure、0 manual hold。
对主干的风险 / Risks
没有发现新的阻断性功能问题。主要风险是候选来源合并顺序、gate target/scope 冲突、blocked/deferred precedence 和 portfolio 多 Agent 行为漂移;固定语料、两个真实消费者、File/SQLite parity、TS precedence/拒绝测试和公开边界扫描共同覆盖。gate-free 或空分类增加一次 crossing 已在 ledger 明示,且不据此宣称性能收益。安装和完整成本仍未在本 PR 资格化。
我的整体评价 / Verdict
APPROVE。当前精确 head 完成了两个消费者共享的 global Todo readiness owner 切换,保持 gate 选择、公开输出、拒绝顺序和默认关闭行为;安装与全路径成本按维护者已确认的累计迁移候选范围后置,并保持未验证状态。
English verdict: APPROVE — exact head 45184d5edd88722d505e41d6384c07bb68c92d66 replaces the shared Python readiness classifier with one typed projection for both consumers while preserving gate selection, public output, precedence, refusal behavior, and real File/SQLite parity. Packaging and full-cost qualification remain explicitly deferred, not claimed.
本轮重放与验证 · 2026-11-04
提交:
45184d5edd88722d505e41d6384c07bb68c92d66;基于 main60d755dcdf671e022fd14b53b5a3c7c2aea2ba28。安装、installed-host 与 matched latency/RSS 仍按维护者已确认的累计迁移范围后置;本轮没有把它们声明为已验证。
Goal And Delivered Outcome
loopx global-todosand the goal portfolio classified Todo readiness in Python (global_todos.py: candidate merge across selected/lane/summary/frontier sources, provenance, blocked/deferred/runnable precedence and conflict warnings), calling TypeScript only for gate relations.todo.global_readiness.projectrequest next to the decision-scope owner (loopx/control_plane/todos/decision_scope.ts), used by both consumers. Frozen JSON and Markdown outputs of both consumers are byte-identical.loopx-project/loopx:main. No issue closure claimed.Author Declaration
Implemented against
tests/test_global_todo_readiness_characterization.py,tests/fixtures/global_todo_readiness.json(global-todos JSON + Markdown and portfolio payloads: duplicate IDs with complementary fields, conflicting status sources, selected-but-delivery-denied, exact gate target vs scope relation, unrelated gate, deferred-ready + blocked conflict, missing identity, multiple agents, warning order, no gates, no candidates, redaction)projectGlobalTodoReadiness: source traversal and merge order, provenance, in-processtodoGateRelation, precedence and warningsglobal_todo_readiness.test.tsglobal_todos.pyandgoal_portfolio.py(through_classify_goal_todos)open_user_gate_todo_items(5+ other production callers) and passed as facts; TS does not reselect themselected_todo,agent_lane_next_action, list fields ofagent_todo_summary/agent_scope_frontier,normal_delivery_allowedand gate facts are sent; TS alone names the candidate list keystodo_gate_relation/relationoperation removed; the smoke uses the batchtodo_gate_relationsledger/typescript-control-plane-migration-v0/2026-11-02-global-todo-readiness{,.zh-CN}.md, linked from both RFC filescheck_rfc_bilingual.pyopen_user_gate_todo_itemsin TypeScript and sent the whole quota payload plus decoded facts for every nested object. Both were reworked as described above.normal_delivery_allowedremains a read signal, never execution permission.Migration economics receipt
loopx/control_plane/todos/decision_scope.ts(projectGlobalTodoReadiness)This slice removes a Python decision owner; it is not a code-size or latency win. Gate-free reads gain one request, which is disclosed rather than avoided with a duplicated Python rule. No latency or long-horizon benefit is claimed.
Scope And Continuation
open_user_gate_todo_items),_work_kinddisplay heuristics, redaction or rendering to TypeScript; per-PR installed-artifact or latency qualification; these run once on the cumulative migration candidate.effect_runtime_handlers.ts. Whichever merges later needs a trivial rebase.Validation
4cc9baf28876d76aa18f6a3cf531e75f2f2055b0tests/test_projection_envelope.py::test_real_cli_quota_should_run_discloses_unreadable_scheduler_statefails identically on basefb16c6cb1: the quota should-run CLI now requires--turn-instance-id/--begin-turn, which this test's invocation predates; unrelated to this diffnpm run typecheck:control-planeexamples/semantic-vocabulary-drift-smoke.pyscripts/check_rfc_bilingual.py --base origin/main --head HEADloopx canary premerge --from-git-diff --git-diff-base origin/mainFrontend / Visual Evidence
Type of Change
LoopX Area
Technical Direction
Shared-authority RFC fixture impact
Boundary Checklist
none.Signed-off-bytrailer (git commit -s).Merge requires explicit maintainer authorization (Todo read rules and CLI surfaces under
loopx/**).Cumulative Migration Qualification
d4aaaaefbd37a83a30f10681de839b45d631eeb9, notHEAD, so it keeps comparing against the actual prior implementation.