越界发现,记录于 #5081(i18n 指南的 label 规则重写)实施期间。只记录,不在那个 PR 内动手。
⚠️立卡前的查重搜索被 API 限流挡下(search_issues / list_issues 对本身份返回 API rate limit already exceeded,重试两次)。分诊时请用这些关键词去重:check-doc-snippet-types、snippet 扫描面、skills 未编译、DOCS_ROOT。若已有同形卡,直接关掉本卡。
事实(对 origin/main @ 77f846a8b 实测)
scripts/check-doc-snippet-types.mjs 自己的头部注释把扫描面写得很清楚(:166-171):
every .mdx and .md page under content/docs, plus every packages/(name)/README.md.
skills/ 不在其中。所以 skills/objectui/guides/*.md 里的每一个 ts / tsx 代码块,没有任何 typechecker 编译过 —— 本地没有,CI 也没有。
为什么这不是「少覆盖一个目录」
同一份注释解释了这个门禁存在的理由:一个页面从落地那天就被编译,opt-out 是 reviewer 看得见的一次编辑。而 skills/ 的受害面比 content/docs 更重,理由与 #4981 把 doc-version-claims 扫描面扩到 skills/ 时写下的完全一样,那条推理在这份台账的头部(scripts/__tests__/doc-version-claims.test.ts:190-200)逐字写着:
A fossil in content/docs costs one human a failed build; a fossil in a scaffolding guide is COPIED, into a new user repository, every time an agent follows it.
版本字面量已经因为这条推理被扩面看住了;代码样例还没有。一个类型上错误的 skills 样例,会被 agent 原样复制进用户仓,在那边才第一次报错。
同一族的另一半也值得一起判:check-doc-snippet-types.mjs 的 UNGATED_DOCS 是一份「只能缩小」的债务清单(条目每轮重新推导,指向不存在的文件或不含 ts 块的条目会红)。把 skills/ 纳入扫描面,天然会给这份清单添一批条目 —— 那正是这个机制设计好要承接的形状,不是反对理由。
已实测的成本(#5081 那一轮)
那张卡在 skills/objectui/guides/i18n.md 新增了一个 ```typescript 块(inline locale map 形态的 label 样例)。它在合并前不会被任何机器检查;那一轮改为手工对 @objectstack/spec@17.0.0 的 schema 与 objectui 的两个 render 站点逐一核对(`containers.tsx:739` 的 `schema.title`、`elements.tsx:230` 的 `props.label`)。手工核对能做对一次,不能做对每一次。
附带记录:本地跑这个门禁会静默变成 no-op
pnpm check:doc-snippets 在未 build 的 worktree 里打印 The snippet program was NOT run: the packages it resolves against are not built,然后 exit 0。读上去像通过。这一条不必然是缺陷(CI 会先 build),但它意味着任何在本地把这个门禁读成绿的人,拿到的是零信息 —— 值得在分诊时一并判要不要让这种情形非零退出。
处置
未指派。范围与方向(扩面 vs 保持现状)是 PM/维护者的判断,不是本卡作者的。
越界发现,记录于 #5081(i18n 指南的 label 规则重写)实施期间。只记录,不在那个 PR 内动手。
search_issues/list_issues对本身份返回API rate limit already exceeded,重试两次)。分诊时请用这些关键词去重:check-doc-snippet-types、snippet 扫描面、skills 未编译、DOCS_ROOT。若已有同形卡,直接关掉本卡。事实(对
origin/main@77f846a8b实测)scripts/check-doc-snippet-types.mjs自己的头部注释把扫描面写得很清楚(:166-171):skills/不在其中。所以skills/objectui/guides/*.md里的每一个ts /tsx 代码块,没有任何 typechecker 编译过 —— 本地没有,CI 也没有。为什么这不是「少覆盖一个目录」
同一份注释解释了这个门禁存在的理由:一个页面从落地那天就被编译,opt-out 是 reviewer 看得见的一次编辑。而
skills/的受害面比content/docs更重,理由与 #4981 把doc-version-claims扫描面扩到skills/时写下的完全一样,那条推理在这份台账的头部(scripts/__tests__/doc-version-claims.test.ts:190-200)逐字写着:版本字面量已经因为这条推理被扩面看住了;代码样例还没有。一个类型上错误的 skills 样例,会被 agent 原样复制进用户仓,在那边才第一次报错。
同一族的另一半也值得一起判:
check-doc-snippet-types.mjs的UNGATED_DOCS是一份「只能缩小」的债务清单(条目每轮重新推导,指向不存在的文件或不含 ts 块的条目会红)。把skills/纳入扫描面,天然会给这份清单添一批条目 —— 那正是这个机制设计好要承接的形状,不是反对理由。已实测的成本(#5081 那一轮)
那张卡在
skills/objectui/guides/i18n.md新增了一个 ```typescript 块(inline locale map 形态的 label 样例)。它在合并前不会被任何机器检查;那一轮改为手工对@objectstack/spec@17.0.0的 schema 与 objectui 的两个 render 站点逐一核对(`containers.tsx:739` 的 `schema.title`、`elements.tsx:230` 的 `props.label`)。手工核对能做对一次,不能做对每一次。附带记录:本地跑这个门禁会静默变成 no-op
pnpm check:doc-snippets在未 build 的 worktree 里打印The snippet program was NOT run: the packages it resolves against are not built,然后 exit 0。读上去像通过。这一条不必然是缺陷(CI 会先 build),但它意味着任何在本地把这个门禁读成绿的人,拿到的是零信息 —— 值得在分诊时一并判要不要让这种情形非零退出。处置
未指派。范围与方向(扩面 vs 保持现状)是 PM/维护者的判断,不是本卡作者的。