Skip to content

refactor(todos): classify global Todo readiness in TypeScript - #7900

Merged
loopx-agent merged 2 commits into
mainfrom
codex/global-todo-readiness-ts-20261102
Nov 4, 2026
Merged

loopx-agent merged 2 commits into
mainfrom
codex/global-todo-readiness-ts-20261102

Conversation

@hhyykk

@hhyykk hhyykk commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

本轮重放与验证 · 2026-11-04

提交:45184d5edd88722d505e41d6384c07bb68c92d66;基于 main 60d755dcdf671e022fd14b53b5a3c7c2aea2ba28。

  • rebase 冲突只发生在双语 RFC 检查点列表;已保留 main 的 adaptive-child 与 progress-review 条目,并追加 global Todo readiness 条目。
  • 当前 head 的 global-todos、goal-portfolio、runtime boundary 与 readiness 选择:Python 82/82 通过。
  • 当前 head 的 readiness owner、decision scope 与 handler:TypeScript 46/46 通过。
  • TypeScript control-plane typecheck、Ruff、双语 RFC、diff 检查通过。
  • 标准 premerge 通过:10 catalog、8 risk-profile、1 public-boundary,0 failure、0 manual hold。

安装、installed-host 与 matched latency/RSS 仍按维护者已确认的累计迁移范围后置;本轮没有把它们声明为已验证。


Goal And Delivered Outcome

  • Outcome basis / optional anchor: TypeScript control-plane migration RFC: replacement-first migration of domain-neutral decisions to the typed owner, with no parallel Python decision owner.
  • Goal/source and gap: loopx global-todos and 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.
  • Observable before → after: Python classifier → one todo.global_readiness.project request 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.
  • Issue/task and intended base: Self-contained migration slice; base loopx-project/loopx:main. No issue closure claimed.

Author Declaration

  • Written by: model_agent: Factory Droid (lead, review and commits) with OpenAI Codex CLI (implementation).

Implemented against

Criterion Disposition Symbol / path Check
Pin complete output before moving code implemented 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) passed on unchanged Python before edits; expected outputs unchanged
Complete decision in one typed owner implemented projectGlobalTodoReadiness: source traversal and merge order, provenance, in-process todoGateRelation, precedence and warnings TS global_todo_readiness.test.ts
Both consumers switch together implemented global_todos.py and goal_portfolio.py (through _classify_goal_todos) characterization covers both
No duplicated gate selection implemented gates are selected once by the shared Python open_user_gate_todo_items (5+ other production callers) and passed as facts; TS does not reselect them review of TS owner
Bounded request implemented only selected_todo, agent_lane_next_action, list fields of agent_todo_summary / agent_scope_frontier, normal_delivery_allowed and gate facts are sent; TS alone names the candidate list keys largest case 9,749 → 6,447 bytes versus the first draft
Retire unused scalar relation path implemented todo_gate_relation / relation operation removed; the smoke uses the batch todo_gate_relations smoke and runtime-boundary tests
Ledger entry in both languages implemented ledger/typescript-control-plane-migration-v0/2026-11-02-global-todo-readiness{,.zh-CN}.md, linked from both RFC files check_rfc_bilingual.py
  • Self-check before submission: A first draft re-implemented open_user_gate_todo_items in TypeScript and sent the whole quota payload plus decoded facts for every nested object. Both were reworked as described above. normal_delivery_allowed remains a read signal, never execution permission.

Migration economics receipt

Field Result
Canonical owner loopx/control_plane/todos/decision_scope.ts (projectGlobalTodoReadiness)
Legacy code deleted Python candidate sourcing, merge, blocked/deferred detection, precedence and conflict warnings (about 160 lines)
Code added TS classifier (~90 lines) and a Python request/codec adapter (~55 lines)
Cross-runtime calls per classification: with gates and candidates 1 → 1; gate-free or empty 0 → 1 (portfolio pays this per agent)
Product net change +163 / −166 (net −3)
Facade exit the Python adapter leaves when both consumers read typed snapshots with native codecs and rendering (recorded in the ledger)

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

  • Completed scope and remaining work: complete for both production consumers.
  • Deliberately not included: moving gate selection (open_user_gate_todo_items), _work_kind display heuristics, redaction or rendering to TypeScript; per-PR installed-artifact or latency qualification; these run once on the cumulative migration candidate.
  • Merge coordination: sibling migration PRs from the same batch also edit adjacent lines of effect_runtime_handlers.ts. Whichever merges later needs a trivial rebase.

Validation

  • Tested revision: 4cc9baf28876d76aa18f6a3cf531e75f2f2055b0
  • Run state: finished
  • Input classes: synthetic
Check kind Result Public-safe evidence / limitation
ruff (changed Python files) pass
pytest (focused suite, 8 files) 166 passed, 1 pre-existing failure tests/test_projection_envelope.py::test_real_cli_quota_should_run_discloses_unreadable_scheduler_state fails identically on base fb16c6cb1: the quota should-run CLI now requires --turn-instance-id/--begin-turn, which this test's invocation predates; unrelated to this diff
Node control-plane TS tests (4 files) pass 21 passed
npm run typecheck:control-plane pass
examples/semantic-vocabulary-drift-smoke.py pass budgets and anchors unchanged
scripts/check_rfc_bilingual.py --base origin/main --head HEAD pass
loopx canary premerge --from-git-diff --git-diff-base origin/main pass direct checks, catalog canaries, risk-profile smokes and public-boundary scan all green
  • Coverage and gaps: source-checkout qualification only; wheel/sdist and installed-host checks were not run. No storage or persisted-format changes.

Frontend / Visual Evidence

  • UI impact: none. CLI JSON and Markdown output is byte-identical.
  • Before / After / First viewport / States / Source data / Attention / Craft: N/A; no UI surface change.

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring (no functional changes)
  • Documentation update
  • Test update

LoopX Area

  • Control plane (goals, todos, quota, scheduler, registry, runtime)
  • Benchmark boundary (adapters, runners, verifiers, scoring, evidence)
  • Capability or extension (providers, adapters, skills)
  • Public docs or presentation surface (README, protocols, dashboard)
  • Build, packaging, installer, or CI
  • Host or runtime integration

Technical Direction

  • Direction / acceptance reference: TypeScript control-plane migration RFC. Global readiness classification is domain-neutral projection policy over Todo gate relations, so it belongs next to the decision-scope owner in TypeScript; Python remains source acquisition, codecs, redaction and rendering.

Shared-authority RFC fixture impact

  • Production-scale fixture schema / semantic dimensions / conformance arms / three-arm rehearsal: N/A; no authority store or persisted format change.

Boundary Checklist

  • Reviewed diff and body for private state, credentials, raw traces, internal links and local machine paths; none included.
  • No maintainer-owned benchmark work duplicated.
  • Change remains scoped to the request described above.
  • Paired RFC and ledger files changed together (EN and zh-CN).
  • UI impact marked none.
  • Every branch commit includes a DCO Signed-off-by trailer (git commit -s).

Merge requires explicit maintainer authorization (Todo read rules and CLI surfaces under loopx/**).

Cumulative Migration Qualification

  • This PR does not change packaging, installer layout or release artifacts, so it does not ship a separate migration package. Source-checkout parity, real File/SQLite paths and exact-head premerge remain required here.
  • The committed CLI parity test now archives fixed pre-cutover revision d4aaaaefbd37a83a30f10681de839b45d631eeb9, not HEAD, so it keeps comparing against the actual prior implementation.
  • Wheel/sdist deep execution, installed-host readback and matched cold/warm latency/RSS qualification run once on the cumulative migration candidate after the migration stack is integrated, unless a later PR changes the distribution surface itself.
  • Exact-head evidence: 37 focused Python tests passed; 36 related TypeScript tests passed; control-plane typecheck passed; diff-scoped standard premerge passed all selected checks. No merge is claimed.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-02T12:57:13.661563Z bdefbe5 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 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".

@mergify

mergify Bot commented Nov 2, 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, @hhyykk.

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 2, 2026

@loopx-agent loopx-agent 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 | 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.

@huangruiteng
huangruiteng force-pushed the codex/global-todo-readiness-ts-20261102 branch from bdefbe5 to 4cc9baf Compare November 4, 2026 06:51
@huangruiteng

Copy link
Copy Markdown
Collaborator

Repair head 4cc9baf28876d76aa18f6a3cf531e75f2f2055b0 rebases onto current main and fixes the parity gate by archiving fixed pre-cutover revision d4aaaaefbd37a83a30f10681de839b45d631eeb9, never HEAD. Focused Python 37 passed; related TypeScript 36 passed; typecheck and diff-scoped premerge passed.

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.

@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Nov 4, 2026
loopx-agent
loopx-agent previously approved these changes Nov 4, 2026

@loopx-agent loopx-agent 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 | 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.

@mergify

mergify Bot commented Nov 4, 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, @hhyykk.

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 4, 2026
hhyykk and others added 2 commits November 4, 2026 22:06
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>
@loopx-agent
loopx-agent force-pushed the codex/global-todo-readiness-ts-20261102 branch from 4cc9baf to 45184d5 Compare November 4, 2026 14:08
@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Nov 4, 2026

@loopx-agent loopx-agent 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: 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 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: 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.

@loopx-agent
loopx-agent merged commit 46411e1 into main Nov 4, 2026
6 of 7 checks passed
@loopx-agent
loopx-agent deleted the codex/global-todo-readiness-ts-20261102 branch November 4, 2026 14:11
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.

3 participants