发现于 #5115 的实施(PR #5128)反向验证的探针目录里。半径外,未夹带进 PR。Filed unassigned, not claiming.
现象
packages/cli/src/commands/check.ts 把 cwd 下所有 JSON 文件(除 node_modules / dist / .git)glob 出来,凡是根对象有 type 字符串的,就拿去和组件键集合比:
const files = globSync('**/*.{json,yaml,yml}', { cwd, ignore: [...] });
...
if (content && typeof content === 'object' && content.type) {
if (typeof content.type === 'string' && !isKnownSchemaType(content.type)) {
console.log(chalk.yellow(`⚠️ Unknown schema type "${content.type}" in ${file}`));
}
}
type 在 JSON 里远不止「SDUI 组件键」一种词汇表 —— 最常见的就是 package.json 的 "type": "module"。实测(探针目录里放一个最小 package.json):
$ node packages/cli/dist/cli.js check
Object UI Schema Check
Analyzing 8 files...
⚠️ Unknown schema type "module" in package.json # 不是 schema,是包清单
⚠️ Unknown schema type "totally-made-up-xyz" in g-bogus.json
...
✓ All checks passed
任何用户在自己的工程根目录跑 objectui check,第一行警告就是自己的 package.json。同族的还有 tsconfig.json 派生文件、.eslintrc.json、各类 *.schema.json(JSON-Schema 的 "type": "object")—— 凡根上带 type 的都会中招。
#5115 修的是判定用的键集合(手写副本 vs 注册表推导),PR #5128 已把集合换成推导并双向钉住。这条是另一件事:集合再准,拿它去判一个根本不属于该词汇表的 type 也还是误报。两者独立 —— PR #5128 既不引入也不修复本条(修复前后 package.json 都报),只是让它在探针里显形。
scripts/check-doc-component-types.mjs 的头注释已经把「type 至少承载七种不同词汇表」这件事写透,并明确拒绝了按父键路径分类的判别器(measured 后否决:TS 注解形和 items 的双关让它在两个方向上都会静默错判)。文档面它的选择是「一律当组件键 + 逐 (文件,值) 声明豁免」;CLI 面没有豁免机制,所以同一个策略在这里只剩误报。
可能的方向(不预断,交分诊)
三条对「让 AI 写的元数据难以出错」这条轴的取向差别很大(B 是消费端容忍,C 是生产端声明),不自裁。
复核方式
以 REPO 代表仓库根目录:
mkdir -p /tmp/oc && cd /tmp/oc
printf '{"type":"module","name":"x"}' > package.json
node "$REPO/packages/cli/dist/cli.js" check # 报 Unknown schema type "module"
sed -n '18,45p' "$REPO/packages/cli/src/commands/check.ts"
注:警告不影响退出码(只有 JSON 解析失败才 errors++),所以这是噪音级缺陷而非阻断级 —— 但它是用户跑这条命令看到的第一行输出。
发现于 #5115 的实施(PR #5128)反向验证的探针目录里。半径外,未夹带进 PR。Filed unassigned, not claiming.
现象
packages/cli/src/commands/check.ts把 cwd 下所有 JSON 文件(除node_modules/dist/.git)glob 出来,凡是根对象有type字符串的,就拿去和组件键集合比:type在 JSON 里远不止「SDUI 组件键」一种词汇表 —— 最常见的就是package.json的"type": "module"。实测(探针目录里放一个最小 package.json):任何用户在自己的工程根目录跑
objectui check,第一行警告就是自己的package.json。同族的还有tsconfig.json派生文件、.eslintrc.json、各类*.schema.json(JSON-Schema 的"type": "object")—— 凡根上带type的都会中招。与 #5115 的边界
#5115 修的是判定用的键集合(手写副本 vs 注册表推导),PR #5128 已把集合换成推导并双向钉住。这条是另一件事:集合再准,拿它去判一个根本不属于该词汇表的
type也还是误报。两者独立 —— PR #5128 既不引入也不修复本条(修复前后package.json都报),只是让它在探针里显形。scripts/check-doc-component-types.mjs的头注释已经把「type至少承载七种不同词汇表」这件事写透,并明确拒绝了按父键路径分类的判别器(measured 后否决:TS 注解形和items的双关让它在两个方向上都会静默错判)。文档面它的选择是「一律当组件键 + 逐 (文件,值) 声明豁免」;CLI 面没有豁免机制,所以同一个策略在这里只剩误报。可能的方向(不预断,交分诊)
schemas/**)或 CLI 配置里的 glob,而不是整棵树。契约最清楚,但要定「什么算 schema 文件」这个新契约。package.json/tsconfig*.json/.eslintrc.json/*.schema.json…)。成本最低,但排除表是第二份要维护的手写清单 —— 与objectui check的 knownTypes 是手写的注册表副本,已与真实注册表漂移:crud通过校验但无任何渲染器,运行时落 unknown-component 占位符 #5115 刚消灭的那种副本同形,长期取向上可疑。$schema指向 ObjectUI,或存在children/body等结构键)。可防错性最好(声明即判定),但会让现存没有标记的 schema 文件退出判定面。三条对「让 AI 写的元数据难以出错」这条轴的取向差别很大(B 是消费端容忍,C 是生产端声明),不自裁。
复核方式
以
REPO代表仓库根目录:注:警告不影响退出码(只有 JSON 解析失败才
errors++),所以这是噪音级缺陷而非阻断级 —— 但它是用户跑这条命令看到的第一行输出。