Skip to content

fix(ci): restore main checks for digest owner, scheduler hint and frontstage bundle - #7866

Merged
huangruiteng merged 1 commit into
mainfrom
codex/main-ci-repair-20261102
Nov 2, 2026
Merged

huangruiteng merged 1 commit into
mainfrom
codex/main-ci-repair-20261102

Conversation

@hhyykk

@hhyykk hhyykk commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

  • Outcome basis / optional anchor: no written specification; demonstrated failures on current main are the basis.
  • Goal/source and gap: Three checks fail on main and on unrelated PRs: the TypeScript content-digest single-owner test, the Codex App profile scheduler-hint test in tests/test_loopx_turn_driver.py, and the Frontstage Pages share-bundle smoke.
  • Observable before → after, with the validation row that proves it: content_digest_single_owner.test.ts reported a second whole-value digest matcher at conversation_binding.ts; two scheduler_hint tests failed with KeyError; the bundle smoke required site/blog/context-delivery/example.py/index.html → all three pass with no lowered gate, budget or recorded exception. Proven by the Validation rows below.
  • Issue/task and intended base: Self-contained request; base loopx-project/loopx:main. No issue closure claimed.
Failure Introduced by Root cause Fix
Digest single owner #7856 (111519af7) Native recovery proof checks added a local /^[a-f0-9]{64}$/ regex Reuse BARE_SHA256_PATTERN from content_digest.ts; register the file as a canonical consumer in the test inventory
scheduler_hint KeyError ac0feb198 (default-on Codex context delivery) With native delivery on by default, a turn-less quota should-run returns QUOTA_VALIDATION_FAILED (decision capture requires --turn-instance-id or --begin-turn), so the payload has no hint The test inspects the raw scheduler contract, so it passes --context-delivery off; every scheduler assertion is unchanged, and the exit code is asserted before reading the hint
Frontstage bundle smoke #7829 (07b555494) The context-delivery post links a shipped example.py; the smoke classified .py as a page route Classify .py as a static asset; the smoke still requires the file itself to exist

Author Declaration

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

Implemented against

  • Specification and revision: no written specification; behavior references are the branch diff against origin/main.
  • Criteria:
Criterion (spec clause) Disposition Symbol / path Test or command
Validate recovery proof digests through the shared digest owner implemented loopx/control_plane/collaboration/conversation_binding.ts tests/control_plane_ts/content_digest_single_owner.test.ts; tests/control_plane_ts/conversation_binding.test.ts
Keep the scheduler-hint profile test on the raw contract after default-on delivery implemented tests/test_loopx_turn_driver.py pytest tests/test_loopx_turn_driver.py
Resolve shipped .py references as assets in the share bundle implemented examples/frontstage-share-bundle-smoke.mjs npm --prefix apps/presentation/dashboard run smoke:frontstage-share-bundle
  • Self-check before submission: Reproduced each failure on main before the fix, read the full diff and ran the checks listed under Validation. Verified DCO trailers.

Scope And Continuation

  • Completed scope and remaining work: Complete within this scope.
  • Slice boundary / successor: N/A. The turn-less should-run validation failure under default-on delivery is documented behavior, not a regression. docs/reference/required-work-context.md requires machine consumers that parse should_run to request raw output with --context-delivery off. The heartbeat checklist always passes --turn-instance-id, and ordinary CLI calls without a native Codex declaration keep full delivery. The failure is explicit (QUOTA_VALIDATION_FAILED) with a fix-arguments recovery action.

Validation

Public-safe summaries only, including in HTML comments. Do not paste raw logs,
private data or prompts, private screenshots, credentials, internal URLs, connection
strings, or local paths. Use repository-relative commands without sensitive
arguments, aggregate results, and already-public CI links. If evidence is
private, report its category and limitations only; do not upload it to prove a claim.

  • Tested revision: 84c6922
  • Run state: finished
  • Input classes: synthetic
Check kind Result Public-safe evidence / limitation
unit passed content_digest_single_owner.test.ts + conversation_binding.test.ts: 62 passed, 0 failed. Before the fix the digest test failed with the reported matcher.
unit passed tests/test_loopx_turn_driver.py + tests/test_chat_conversation_bindings.py: 236 passed, 0 failed. Before the fix the two profile tests failed with KeyError: 'scheduler_hint'.
integration passed smoke:frontstage-share-bundle and examples/blog-bilingual-index-smoke.mjs passed with LOOPX_SITE_RESOLVE_DESKTOP_RELEASE=0; the same offline mode reproduced the missing-file failure before the fix.
static passed loopx canary premerge --from-git-diff --git-diff-base origin/main: merge gate passed.
  • Coverage and gaps: The release-resolving mode used by the workflow and the later Pages steps (docs builds, analytics, browser checks, deploy) were not run locally; CI on this PR covers them. Open PR docs(blog): clarify progressive context and post-release evidence #7852 also edits the context-delivery post but does not change the smoke and does not fix this failure.

See validation disclosure guidance.

Frontend / Visual Evidence

  • UI impact: none.
  • Before: N/A; no UI surface change.
  • After: N/A; no UI surface change.
  • First viewport and preview: N/A; no UI impact.
  • States and viewports shown: N/A; no UI impact.
  • Source data: none.
  • Attention review: N/A; no layout change.
  • Craft review: N/A; no visual 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, when applicable: N/A; restores existing checks on main.

Shared-authority RFC fixture impact

  • Production-scale fixture schema: N/A; no migration or shared-authority qualification claimed.
  • Semantic dimensions changed, or reviewed no-impact rationale: N/A; no authority routing or promotion change.
  • Provider conformance arms run: N/A; no conformance claim.
  • Read-only legacy/file/PostgreSQL three-arm rehearsal (required for promotion, runtime-routing, or compatibility-projection changes): N/A; none of these changes is proposed.

Boundary Checklist

  • Reviewed diff and body for private state, credentials, raw traces, internal links and local machine paths; none included in this body. Test fixtures are synthetic.
  • No maintainer-owned benchmark work duplicated.
  • Change remains scoped to the request described above.
  • No paired RFC changed.
  • UI impact marked none.
  • Every branch commit includes a DCO Signed-off-by trailer (git commit -s).

…ntstage bundle

- conversation_binding.ts validates recovery proof digests through the
  shared BARE_SHA256_PATTERN owner instead of a local regex, and joins
  the canonical consumer inventory of the single-owner digest test.
- The Codex App profile scheduler-hint test requests --context-delivery
  off: default-on native delivery requires a turn capture for should-run,
  and the test inspects the raw scheduler contract.
- The frontstage share-bundle smoke classifies .py references as shipped
  static assets, so the context-delivery post's example.py link resolves
  to the file instead of an expected page directory.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Signed-off-by: hhyykk <4408344+hhyykk@users.noreply.github.com>
@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-02T01:45:23.968532Z 84c6922 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.

@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 | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max

动机 / Motivation

维护者和评审者执行主干验证,以及依赖源码恢复和静态文章链接的使用者。原有摘要单一 owner 检查、Codex App 原始调度契约测试和静态文章链接检查失败;修复后这三项在相同基线上有可区分的通过证据,原生恢复权限和缺失文件检查保留。

摘要 owner guard、两种 profile 拼写的原始契约测试和完整离线导出 smoke 的目标失败均已修复;原命令的旧 fake SDK 失败另行保留,不宣称全部主干或远端 CI 已绿。本次不改变机器设置或默认差分开关,不验收发布/部署、真实模型或安装版;不将作者测试、相关 PR 或 CI 状态当作本人的独立验收。

有价值的结果是恢复验证信号,让真实缺陷与既有夹具故障能被区分;不能靠删除断言、抬预算或改产品默认让检查看起来通过。原请求已经足够限定这批修复,无需新增用户配置或确认轮次。

改动思路 / Approach

用已有摘要 owner 取代重复表达式、让内部测试按已有 raw 契约取值,并继续检查真实静态文件,是比新增例外或改变产品默认更小的修复。本 PR 仅修三个可复现检查;原始假 SDK 失败和严格 CQR/合并门单独保留,相关 #7865 的重叠需要集成协调。

production 改动只把 native recovery 已有的裸 SHA-256 判断交回 content_digest.ts。[a-f0-9] 与 [0-9a-f] 字符集合相同,锚点和 flags 相同,source/thread/time/stop/recovery 条件均未移动。另两项是维护真实检查的输入和目标类型:内部机器消费者明确请求 raw 输出;.py 引用要检查静态文件,不应要求它是含 index.html 的页面。

没有新的持久状态、provider、权限、调度、机器设置或抽象层。直接复用原 owner 比添加 regex 例外、关掉完整检查或新增模式更小;做不到真实 file check 和原生负例,便不能仅凭本地统计批准。

具体改动 / Changes

完整范围 8a9e116283df2796926ea153241f48c9c8fc3dbb → 84c692296a8886817303cebf05c533eb03bc4dc5:4 文件,+8/-3,全部 diff 已读。没有覆盖这三项修复的独立综合书面规范,依据是本 PR 自包含请求和不可变基线的实际失败;另已读取基线 docs/reference/required-work-context.md 的 Machine default,其中明确要求解析 should_run 等字段的内部机器消费者使用 --context-delivery off。当前 PR body 在 review 期间补充了这一既有文档边界,head 未变;未把作者声明当作规范或验收。

关键代码讲解

  • planContextRecovery 的两个 proof digest 使用现有 BARE_SHA256_PATTERN;content_digest_single_owner.test.ts 增加真实 consumer inventory,没有新增例外、缩扫描范围或改预算。
  • test_quota_cli_codex_app_profile_is_explicit_and_applicable 加显式 raw presentation 参数,并把 exit-code 断言移到读取 hint 前。全部 scheduler 断言保留,机器默认与交互 Agent 的差分开关不变;带 native declaration 而缺 Turn 的拒绝仍是显式 QUOTA_VALIDATION_FAILED。
  • assertRelativeReferenceExists 仅把 .py 放入既有 asset 分支。该分支仍检查文件真实存在,普通 page 分支仍要求 index.html。

相关 #7865 当前 4509737dc18b5756b467209cbe13ab0bf916399a 有完全相同的 digest owner/consumer 两处修改;我只读取关联契约和重叠,不额外审第三个 PR。其余 scheduler/bundle 修复在本 PR;集成时应协调这份重叠,不能据另一个 PR 的评审或测试替本 head 验收。

对主干的风险 / Risks

未发现当前 head 的阻断性代码问题。独立 native owner 比较包含两个 digest 字段的 20 个正反例、4 个权限/source/stop 拒绝和 5 个普通分支,base/head 输出完全相同,正向只允许 adopt_native_result,没有借此获得 dispatch/新 Turn 权限。

本地验证 结果和边界
当前 digest owner + conversation binding PASS,62 项;不可变 base 的 single-owner guard 失败
原始 profile 两项 base FAIL:缺 scheduler_hint;当前 PASS,原断言保留
实际源码 CLI PASS,6 次;两种 raw profile 拼写及 native 缺 Turn 拒绝,两端完整 hint/diagnostic 语义对照
完整离线 bundle smoke base FAIL:错误要求 example.py/index.html;当前 PASS
实际 asset/page 检查 PASS,11 个观察:缺失/删除 .py 仍拒绝;两端导出的 example 内容相同
typecheck、Ruff、diff-selected premerge PASS,5 direct +13 selected checks

源码 CLI 原输出保留了 44 个差异,来自独立 fixture 路径和压缩 host-facts 中的当前观察时间。对原 zlib/base64 chunks 解码,只归一化 fixture root 与相差两秒的 host_facts.generated_at 后,完整 hint、错误与恢复命令一致;没有丢掉字段、正文、flags、额度或 stale tolerance。原始差异和失败的未归一化 equality 断言仍保留。

原始完整 Python 命令没有通过,不能隐去。 相同命令在 base 为 167 PASS /37 FAIL /32 setup errors,当前为 169 PASS /35 FAIL /32 setup errors。当前剩余 67 个失败项的 case ID、错误类型和消息在 base 中完全相同;base 独有的两项恰是本次修好的 scheduler profile。普通/管家 fake Codex SDK 缺少真实要求的 modelProvider 确认,导致后续 receipt/HTTP 断言级联失败;有关测试、假 SDK 与产品 provider 路径五个文件在两端逐字相同。未把 69 与67 的完整失败集合冒称相等。

只在私有测试 hook 中让 synthetic SDK 回声实际请求的 provider,产品代码、权限、case 输入和断言均不改,当前同一 236 项全部通过。该运行覆盖实际 Python→Core/Node 和隔离 journal,但不把“兼容夹具通过”改写成“原命令全绿”。本地前端依赖最初缺失的两次 setup failure 也保留;准备同锁文件依赖后才取得上述 bundle base-red/head-green,未删弱断言。完整导出仅更换隔离输出路径、同一 source root 和绝对 import,避免固定临时目录互相覆盖;没有生产源码修改。

语义与 CI 对齐

现有 vocabulary、matcher owner、raw 消费契约和失败恢复义务被复用,没有引入通用 Goal 领域规则或把 enforced checks 称为 guidance。code review 可以依据当前不变量和已归因的旧失败通过;严格 change-quality 仍记录原 required 命令为 FAIL,并保留独立合并限制,没有使用 baseline waiver 或 admin bypass。远端 CI 未读取、轮询或等待。额外 native 交付夹具的 guard 已保存原 decision 后发生 transport failure,保留原记录且未重跑准入;不据此声称当前 Host 交付或采用资格。

我的整体评价 / Verdict

APPROVE,准确 head 84c692296a8886817303cebf05c533eb03bc4dc5,同时保留严格验证门的 hold。本次三处具体修复已由不可变 base 的实际失败、当前正向与负例验证;没有请求该 PR 修复无因果关系的 SDK 夹具问题,也没有把仍红的 required 原命令豁免为通过。合并前仍须由原验证 owner 按其契约处理该门并重新取得准确 head 的资格。

long_horizon 和 user_experience 的有界判断均为 preserved:原始恢复/停止/来源边界不变,正确的下载链接仍可用,用户没有新增设置或确认轮次。独立判断采用了“检查第一个实际有用结果和真实调用路径”的经验建议;没有继承历史 RFC 结论、奖励标签或模型效用结论。

用已有摘要 owner 取代重复表达式、让内部测试按已有 raw 契约取值,并继续检查真实静态文件,是比新增例外或改变产品默认更小的修复。本 PR 仅修三个可复现检查;原始假 SDK 失败和严格 CQR/合并门单独保留,相关 #7865 的重叠需要集成协调。没有页面布局变化,视觉检查不适用;release-resolving export、后续 Pages/deploy/browser 步骤、真实 native Host/model 采用仍未验证。已知兼容/ownership 需求得到保留,未新增兼容框架或强制无关迁移。没有合并。

English verdict: APPROVE at 84c692296a8886817303cebf05c533eb03bc4dc5 for the three bounded fixes. Native 62 tests, actual source/proof parity and full offline bundle checks pass. The unadapted Python command retains 67 independently attributed pre-existing fixture failures; strict change-quality and merge qualification remain on hold.

@huangruiteng
huangruiteng merged commit afdc24d into main Nov 2, 2026
36 of 42 checks passed
@huangruiteng
huangruiteng deleted the codex/main-ci-repair-20261102 branch November 2, 2026 03:31
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