越界发现,记录于 #3852 (生成的临时 app 迁 Tailwind 4)实施期间。#3852 与 #3827 的文件面都是 utils/app-generator.ts 的两个生成器;commands/init.ts 是第三个 生成器,写的是用户项目脚手架,不在那两单的面里,也不在 app-generator.test.ts 的 DEPENDENCY_ANCHORS 覆盖范围内。
事实(核于 origin/main = 56ff0916e)
packages/cli/src/commands/init.ts:463-479 写给新项目的清单:
键
init.ts 写的
仓内实际
差
@object-ui/components
^2.0.0
17.3.0
15 个 major
@object-ui/react
^2.0.0
17.3.0
15 个 major
@vitejs/plugin-react
^5.1.3
^6.0.5
1
vite
^7.3.1
^8.2.0
1
typescript
^5.9.3
^6.0.3
1
react / react-dom
^19.2.0
19.2.8(仓根精确钉)
范围形状不同
tailwindcss / @tailwindcss/postcss
^4.1.18
^4.3.3
同 major,minor 落后
autoprefixer
^10.4.23
^10.5.4
minor
postcss
^8.5.6
^8.5.26
patch
@object-ui/* ^2.0.0 是 #3827 修掉的那一类的同形缺陷(那边是 ^0.1.0 对 17.x):objectui init 生成的项目 npm install 会去解析一个与当前 CLI 完全脱节的 major。#3827 给 app-generator.ts 的解法是从 CLI 自身版本推导 (platformPackageRange(),因为 .changeset/config.json 把 CLI 与平台包放在同一个 fixed 组),这里可以直接复用同一个函数 —— 它已经导出在同一个包里。
另外两条同族但独立:
init.ts:500-508 仍写一份 tailwind.config.js (只有 content: ['./index.html', './src/**/*.{ts,tsx}'])。脚手架其余部分已经是 v4(postcss.config.js 写 '@tailwindcss/postcss': {},src/index.css 写 @import 'tailwindcss'),而 v4 在没有 @config 指向时不读这个文件 —— 它是一份看起来权威、实际无人消费的配置。packages/cli 生成的临时 app 是 Tailwind 3 全套(CSS 指令/postcss 插件键/config 文件),而仓内是 v4 且 components peer 写 ^4.2.1 —— 仓内 objectui dev 的 CSS 管线今天就是死的 #3852 的 PR 因此在生成的临时 app 里不再写它。
这些字面量都在 .ts 源码里,落在 test(scripts): 给文档散文里的版本宣称落一道棘轮门禁(带历史叙述结构性豁免) #3711 的版本声明门禁扫描面之外,而 app-generator.test.ts 的锚定表只判两个 app 生成器 —— 也就是说 init.ts 的清单今天没有任何门禁 ,与 create-plugin 生成产物的 build 侧 devDependencies 内部不一致且落后仓库工具链 1–2 个 major:@vitejs/plugin-react ^4.2.1 的 peer 结构性无法被 vite ^7.3.1 满足 #3742 / fix(create-plugin): 把脚手架 build 侧 devDependencies 锚到仓内工具链,并把整张清单钉进 parity 测试 #3754 / packages/cli 的 createTempAppWithRouting 生成的 app import 了未声明的 lucide-react,且其工具链区间落后仓内一到三个 major #3827 一路建立的"一个依赖一个区间、引用而非发明"纪律脱钩。
影响
objectui init 是外部用户的第一条命令。^2.0.0 这一格是具体缺陷(装出来的项目与 CLI 不同代);其余区间落后是化石;tailwind.config.js 那份属于 dormant 的死文件。严重度不预设,留给 triage 定级。
不预判修法
要判的一格:init 的清单是逐条锚回仓内 (复用 DEPENDENCY_ANCHORS 的判据,把 init.ts 也纳入那张表)还是只把 @object-ui/* 改成派生、其余按需 bump 。前者一次修掉整类且有门禁,代价是要把锚定表从 app 生成器泛化到第三个生成器;后者小,但化石会再长回来。
已搜重
本仓开放 issue 搜过 objectui init doctor scaffold、tailwind、标题含 cli 三组:init.ts 无任何命中。#3827 (已合)与 #3852 (在实施)的文件面都只有 app-generator.ts 与 commands/dev.ts。
越界发现,记录于 #3852(生成的临时 app 迁 Tailwind 4)实施期间。#3852 与 #3827 的文件面都是
utils/app-generator.ts的两个生成器;commands/init.ts是第三个生成器,写的是用户项目脚手架,不在那两单的面里,也不在app-generator.test.ts的DEPENDENCY_ANCHORS覆盖范围内。事实(核于
origin/main=56ff0916e)packages/cli/src/commands/init.ts:463-479写给新项目的清单:@object-ui/components^2.0.0@object-ui/react^2.0.0@vitejs/plugin-react^5.1.3^6.0.5^7.3.1^8.2.0^5.9.3^6.0.3^19.2.019.2.8(仓根精确钉)@tailwindcss/postcss^4.1.18^4.3.3^10.4.23^10.5.4^8.5.6^8.5.26@object-ui/* ^2.0.0是 #3827 修掉的那一类的同形缺陷(那边是^0.1.0对 17.x):objectui init生成的项目npm install会去解析一个与当前 CLI 完全脱节的 major。#3827 给app-generator.ts的解法是从 CLI 自身版本推导(platformPackageRange(),因为.changeset/config.json把 CLI 与平台包放在同一个fixed组),这里可以直接复用同一个函数 —— 它已经导出在同一个包里。另外两条同族但独立:
init.ts:500-508仍写一份tailwind.config.js(只有content: ['./index.html', './src/**/*.{ts,tsx}'])。脚手架其余部分已经是 v4(postcss.config.js写'@tailwindcss/postcss': {},src/index.css写@import 'tailwindcss'),而 v4 在没有@config指向时不读这个文件 —— 它是一份看起来权威、实际无人消费的配置。packages/cli 生成的临时 app 是 Tailwind 3 全套(CSS 指令/postcss 插件键/config 文件),而仓内是 v4 且 components peer 写 ^4.2.1 —— 仓内 objectui dev 的 CSS 管线今天就是死的 #3852 的 PR 因此在生成的临时 app 里不再写它。.ts源码里,落在 test(scripts): 给文档散文里的版本宣称落一道棘轮门禁(带历史叙述结构性豁免) #3711 的版本声明门禁扫描面之外,而app-generator.test.ts的锚定表只判两个 app 生成器 —— 也就是说init.ts的清单今天没有任何门禁,与 create-plugin 生成产物的 build 侧 devDependencies 内部不一致且落后仓库工具链 1–2 个 major:@vitejs/plugin-react ^4.2.1的 peer 结构性无法被vite ^7.3.1满足 #3742 / fix(create-plugin): 把脚手架 build 侧 devDependencies 锚到仓内工具链,并把整张清单钉进 parity 测试 #3754 / packages/cli 的 createTempAppWithRouting 生成的 app import 了未声明的 lucide-react,且其工具链区间落后仓内一到三个 major #3827 一路建立的"一个依赖一个区间、引用而非发明"纪律脱钩。影响
objectui init是外部用户的第一条命令。^2.0.0这一格是具体缺陷(装出来的项目与 CLI 不同代);其余区间落后是化石;tailwind.config.js那份属于 dormant 的死文件。严重度不预设,留给 triage 定级。不预判修法
要判的一格:init 的清单是逐条锚回仓内(复用
DEPENDENCY_ANCHORS的判据,把init.ts也纳入那张表)还是只把@object-ui/*改成派生、其余按需 bump。前者一次修掉整类且有门禁,代价是要把锚定表从 app 生成器泛化到第三个生成器;后者小,但化石会再长回来。已搜重
本仓开放 issue 搜过
objectui init doctor scaffold、tailwind、标题含cli三组:init.ts无任何命中。#3827(已合)与 #3852(在实施)的文件面都只有app-generator.ts与commands/dev.ts。