feat(lc doctor): warn when local Codex version differs from Dockerfile pin - #9
Conversation
…e pin Closes #2 Compare `codex --version` with ARG CODEX_VERSION in docker/Dockerfile so protocol skew between host and container is visible early.
按 #2 的 review 意见修两处: 1. 前缀匹配会漏报。原判据里的 `pinned.startswith(local)`,在 `codex --version` 只吐出 `0.14` 时会让 `"0.145.0".startswith("0.14")` 成立,把不一致判成一致——正是这项检查要防的静默通过。改成补零到三段 后按整数元组比:`0.145` == `0.145.0`,但 `0.14` != `0.145.0`。 2. `_local_codex_version` 解析失败时会返回一段非版本号的文本,然后被 打进「本机 Codex xxx 与 ... 不一致」的 warning 里。改成返回 None, 走已有的降级分支;并区分「没装」与「装了但版本读不出来」,前者上面 的 tool 检查已经报过,不再重复刷一条。 另外给这项检查补了运行时门禁。scripts/test-doctor-probe.sh 已经在 CI 里 跑 `lc doctor`,但它的临时工作目录没有 docker/Dockerfile,版本比对分支 一行都执行不到。新增第 8 节:用假 Dockerfile 钉 pin、假 codex 钉本机版本, 断言一致 / 不一致 / 两段式不被前缀吞掉 / 解析失败降级 / 未安装不重复刷。 这样这个功能有了真实门禁,不需要改 .github/。
Review 结论:可以合了,两处 review 意见我直接推到本分支修掉了(
|
仓库的 fork-pr-contributor-approval 策略是 first_time_contributors, github-actions[bot] 被归到这一类,于是它开的每个 PR,pull_request 触发的 CI 都挂在 action_required 等批准;而 GITHUB_TOKEN 批不了自己触发的 run, agent 只能干等到 45 分钟超时。实测一轮 64 turns / 15 分钟,大半耗在这里。 换成 secrets.AGENT_PAT(细粒度,只对本仓库,且不授予 Workflows 权限—— 保持 agent 改不了 ci.yml 这条护栏)。未配置时回退到 GITHUB_TOKEN, 工作流不会因此挂掉,只是会继续卡审批。 同时收紧合并规则。PR #9 暴露了原规则的漏洞:agent 看到「CI 全绿」就合了, 但版本比对逻辑在 ci.yml 里零断言覆盖 —— 绿灯只证明没破坏既有断言, 不等于新代码被验证过。现在要求它显式自问「有断言会因这个行为出错而变红吗」。
重开 #6。原 PR 由 @AshSgDe29071999 提交,commit 署名已保留(作者仍是原作者,我只是 cherry-pick 到新 main 上)。
为什么要重开
仓库属主对
main做了一次历史重写并 force push。#6 是 fork PR,重写后所有旧 SHA 失效、merge base 消失,GitHub 自动关闭了它,且无法 reopen。这是我们这边的操作导致的,不是贡献者的问题。 代码原样搬过来,避免让 @AshSgDe29071999 重做一遍。
内容
lc doctor读docker/Dockerfile的ARG CODEX_VERSION,与codex --version比对,不一致时给 warning 并附对齐命令。零第三方依赖。Closes #2
_local_codex_version解析失败时的降级、以及cmd_doctor尚无 CI 覆盖)。