Repository navigation
fix(ci): restore main checks for digest owner, scheduler hint and frontstage bundle - #7866
Conversation
…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>
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. |
loopx-agent
left a comment
There was a problem hiding this comment.
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.
Goal And Delivered Outcome
mainare the basis.mainand on unrelated PRs: the TypeScript content-digest single-owner test, the Codex App profile scheduler-hint test intests/test_loopx_turn_driver.py, and the Frontstage Pages share-bundle smoke.content_digest_single_owner.test.tsreported a second whole-value digest matcher atconversation_binding.ts; twoscheduler_hinttests failed withKeyError; the bundle smoke requiredsite/blog/context-delivery/example.py/index.html→ all three pass with no lowered gate, budget or recorded exception. Proven by the Validation rows below.loopx-project/loopx:main. No issue closure claimed.111519af7)/^[a-f0-9]{64}$/regexBARE_SHA256_PATTERNfromcontent_digest.ts; register the file as a canonical consumer in the test inventoryscheduler_hintKeyErrorac0feb198(default-on Codex context delivery)quota should-runreturnsQUOTA_VALIDATION_FAILED(decision capture requires--turn-instance-idor--begin-turn), so the payload has no hint--context-delivery off; every scheduler assertion is unchanged, and the exit code is asserted before reading the hint07b555494)example.py; the smoke classified.pyas a page route.pyas a static asset; the smoke still requires the file itself to existAuthor Declaration
Implemented against
origin/main.loopx/control_plane/collaboration/conversation_binding.tstests/control_plane_ts/content_digest_single_owner.test.ts;tests/control_plane_ts/conversation_binding.test.tstests/test_loopx_turn_driver.pypytest tests/test_loopx_turn_driver.py.pyreferences as assets in the share bundleexamples/frontstage-share-bundle-smoke.mjsnpm --prefix apps/presentation/dashboard run smoke:frontstage-share-bundlemainbefore the fix, read the full diff and ran the checks listed under Validation. Verified DCO trailers.Scope And Continuation
should-runvalidation failure under default-on delivery is documented behavior, not a regression.docs/reference/required-work-context.mdrequires machine consumers that parseshould_runto 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
unitpassedcontent_digest_single_owner.test.ts+conversation_binding.test.ts: 62 passed, 0 failed. Before the fix the digest test failed with the reported matcher.unitpassedtests/test_loopx_turn_driver.py+tests/test_chat_conversation_bindings.py: 236 passed, 0 failed. Before the fix the two profile tests failed withKeyError: 'scheduler_hint'.integrationpassedsmoke:frontstage-share-bundleandexamples/blog-bilingual-index-smoke.mjspassed withLOOPX_SITE_RESOLVE_DESKTOP_RELEASE=0; the same offline mode reproduced the missing-file failure before the fix.staticpassedloopx canary premerge --from-git-diff --git-diff-base origin/main: merge gate passed.See validation disclosure guidance.
Frontend / Visual Evidence
Type of Change
LoopX Area
Technical Direction
main.Shared-authority RFC fixture impact
Boundary Checklist
none.Signed-off-bytrailer (git commit -s).