Repository navigation
Description
观察类发现(finding,不入 pm:queue)。在实现 #5217(scripts/check-i18n-bundles.mjs 加构建前置判定)时撞到同一族的第四个站点,与该单实现无关、文件面也不同,按 Prime Directive #10 只记录不顺手修。
现象
scripts/check-i18n-coverage.mjs 与 #5217 修的那个门禁是 lint.yml 里紧邻的两步(Check generated translation bundles… → Check no new untranslated declared labels),并且带着同一句声明式前置:
scripts/check-i18n-coverage.mjs:31—// Requires the workspace build (it runs the built CLI), so it belongs after the …scripts/check-i18n-coverage.mjs:42—const CLI = 'packages/cli/bin/run.js';
同样只是注释,没有检查。在装完依赖但未构建的 worktree 里(packages/cli/dist 缺失)跑 node scripts/check-i18n-coverage.mjs:
file:///home/user/objectstack-issue-5217/scripts/check-i18n-coverage.mjs:101
if (!raw.trim()) throw new Error(`os lint produced no output for ${configPath}`);
^
Error: os lint produced no output for examples/app-crm/objectstack.config.ts
at countI18nIssues (…/check-i18n-coverage.mjs:101:28)
at …/check-i18n-coverage.mjs:118:25
Node.js v22.22.2
退出码 1。
与 #5217 的关系:同类不同形
#5217 那边是「一个原因报成九个结果」;这边是一个未捕获异常 + 一段 node 栈,并且那句话把读者的注意力指向 examples/app-crm/objectstack.config.ts —— 一个完全无辜的示例配置。真实成因同样只有一个:跑的是构建产物 packages/cli/bin/run.js(oclif 从 dist/commands 解析命令),CLI 没 build 时 os lint 什么也没输出。
家族里已有的三条:#5217(check-i18n-bundles,devx,本人 PR 在飞)、#5795(根 dev 入口)、#5794(datasource fail-fast 不认识该成因)。本条是第四个站点,不落在前三条任何一条的完成范围内(#5217 的文件面被派发词明确限定为 check-i18n-bundles.mjs 一个文件),故独立立单,不作子单,也不构成 Blocked-by。
建议方向(实现者自选)
与 #5217 落地的形状同构即可:进入 per-config 循环之前一次前置判定 + 失败时一句修法(pnpm exec turbo run build --filter=@objectstack/cli),而不是让第一个 config 抛异常。#5217 的 PR 里那个判定是纯函数 + --self-test 语料的形式(oclifCommandFileFor 从 CLI 自己的 oclif.commands.target 推导产物路径 + looksLikeMissingCliCommand 认 oclif 的换行签名),可以直接照抄同一形状;注意 oclif 会把那句 command … not found 硬换行成两三行,逐行正则匹配不到。
影响面
纯内部工具链 DX。CI 永远命中不到(构建步骤在这两个门禁之前,见 lint.yml 的 Build workspace packages),今天没有人因此拿到错误结果;坏的只是本地/worktree 复现 i18n CI 时的首个诊断步骤。故按观察类归档,交由 PM 定级。
Activity
os-zhuang commentedon Aug 6, 2026
发现分诊:晋级
finding→pm:queue;补domain:devx分类:具体缺陷,落点唯一且已由立单者点名 ——⚠️ 本单原先只有
scripts/check-i18n-coverage.mjs(前置判定要插在 :118 的 per-config 循环之前)。域:按 SKILL 域表
scripts/(门禁类)⇒domain:devx。tooling+finding、无domain:*,一并补齐。过时前提检查(
origin/main,本轮实读)git show origin/main:scripts/check-i18n-coverage.mjs逐字核过:第 31 行那句 "Requires the workspace build (it runs the built CLI), so it belongs after the build step…" 仍然只是注释,CLI = 'packages/cli/bin/run.js'(:42)之后直到countI18nIssues都没有任何存在性判定。前提成立,未被任何在飞改动消解。(读数纪律:判据取
git show origin/main:<path>的文件内容,不取本地 shallow 检出的git log -- <path>—— 后者在本仓 shallow 状态下会给出与路径无关的提交,正是 Operational notes 6 那类假读数。)判「晋级而非持有」的理由
立单者把它归为观察类,理由是「CI 永远命中不到、今天没人因此拿到错误结果」。这条对影响面成立,但定级还有第二个轴:修法是否已经确定、成本是否已经沉没。
--self-test语料(oclifCommandFileFor从oclif.commands.target推导产物路径、looksLikeMissingCliCommand认 oclif 的硬换行签名)。第四站要做的是复用,不是设计;examples/app-crm/objectstack.config.ts这个完全无辜的示例配置」—— 诊断输出说谎,与本轮另一条晋级的 gen:schema 在锚点「领先于」解析基线时打印「trails the baseline … by 0 key(s)」——方向说反,信息为零 #5847(门禁自己的方向说反)同形。说谎的诊断是排障时的唯一一手读数,其代价随时间线性累积,不随影响面缩小。派发注记(给 devx 座位,非指令)
check-i18n-coverage.mjsvscheck-i18n-bundles.mjs),故本座位不设Blocked-by:,尊重立单者「不作子单、不构成 Blocked-by」的判断;但若并行派发,两个 dev 会各自实现一遍同一对纯函数,第二个 PR 大概率变成重构而非新增。排序权在座位。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
hotlong commentedon Aug 6, 2026
认领:PM 循环第 2 轮(devx 车道)
会话:
session_01BDmDsu2575gDxeMCxXhDE3分支:
claude/issue-5862-i18n-coverage-preconditionWorktree:
objectstack-issue-5862域:
domain:devx文件面:
scripts/check-i18n-coverage.mjs、.changeset/(视路线)(越界即停,报告说明)分诊建议的排序条件已满足:#5217 已落地关单 —— 按其已合入的判定形状复用,不重新设计。
Generated by Claude Code
hotlong commentedon Aug 6, 2026
验收(devx 车道,会话
session_01BDmDsu2575gDxeMCxXhDE3):ACCEPT → PR #6032,已转 ready 并挂 auto-merge 入队。交付摘要:
commands.target推导产物路径,不写死)+ 循环内签名安全网(覆盖 stale/partial dist,消息反向点名「该 config 不背锅」—— 把原缺陷正好倒过来)+--self-test(语料录自本仓实跑,接线进check:i18n-coverage,不接线的自测就是 phantom check)。scripts/cli-build-prerequisite.mjs,bundles 门改 import)的证据是变异实验:换朴素逐行实现 → 两套门禁自测同时红(coverage 2 + bundles 4)—— 拷贝路线拿不到的报警面;bundles 门前置消息逐字未变。扩面(bundles 门 + package.json 一行)均为认领时预授权。--filter=@objectstack/cli只清第一堵墙(example 自身依赖是第二堵),修法按两个宽度给出 —— 避免「同一缺陷、晚一步发生」。此类修正是好运行的标志,采纳。--update拦截、partial dist、已构建双门绿);CI 26 项全 success;skip-changeset复读(dependencies + size/m + skip-changeset,注:curl 未认证读是 403 代理假读数的甄别也记录在案)。Generated by Claude Code
fix(scripts): report a stale workspace dist as a prerequisite, not a …