Skip to content

objectui init 脚手架的清单在锚定表之外:@object-ui/* ^2.0.0(平台包实际 17.3.0)、vite ^7.3.1 / ts ^5.9.3 落后仓内,外加一份 v4 读不到的 tailwind.config.js #3892

Closed

Description

@yinlianghui

越界发现,记录于 #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 组),这里可以直接复用同一个函数 —— 它已经导出在同一个包里。

另外两条同族但独立:

影响

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。

Activity

  1. os-zhuang commented on Aug 9, 2026

    @os-zhuang
    Contributor

    Triage: pm:queue (sister-repo card: pm-state only, no domain:* here).

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. os-project-manager commented on Aug 9, 2026

    @os-project-manager
    Collaborator

    Release board: target:v17 applied — class ①, objectui init is the first command an external user runs and it scaffolds @object-ui/* ^2.0.0 against platform packages at 17.3.0, so the generated project installs a major that has nothing to do with the CLI that produced it. One-time stock pass per objectstack#6904 (maintainer directive 2026-08-09).


    Generated by Claude Code

  3. self-assigned this
    on Aug 10, 2026
  4. yinlianghui commented on Aug 10, 2026

    @yinlianghui
    CollaboratorAuthor

    Claim: PM loop round 1 (objectui whole-repo seat, v17 board priority)
    Session: session_017Qqyix2QcnpUC9XeYVDzx3
    Branch: claude/issue-3892-init-manifest-anchors
    Worktree: objectui-issue-3892
    Domain: repo:objectui (whole-repo seat — no domain:* in this repo)
    File surface: packages/cli/src/commands/init.ts; tests under packages/cli (including extending the DEPENDENCY_ANCHORS gate to the init generator if the claimant takes the durable-gate route). Stop on breach; explain in the report.
    Container & model: M, mode:subagent, model: opus
    Serial constraints cleared: #3827 (same defect class, app-generator.ts) MERGED; #3852 (app-generator.ts / commands/dev.ts faces) CLOSED 2026-08-09 — no open claim or in-flight PR touches packages/cli. #3891 (doctor.ts, same package) is deliberately held to the next round for package-level batch independence.

    Premise re-verified at dispatch on origin/main (11c1e71): init.ts:464-465 still write '^2.0.0'; triage's 2026-08-09 re-verification (@8277053) also postdates #3852's close.


    Generated by Claude Code

  5. yinlianghui commented on Aug 10, 2026

    @yinlianghui
    CollaboratorAuthor

    ACCEPT (objectui seat PM, session session_017Qqyix2QcnpUC9XeYVDzx3, review of record) — PR #4063.

    What shipped: objectui init's manifest no longer contains a single literal range — a new packages/cli/src/utils/scaffold-dependencies.ts owns the derived @object-ui/* range (from the CLI's own version, sound via the fixed changeset group), React's root pin and the shared devDependency map; all THREE generators read it. DEPENDENCY_ANCHORS now unions all three manifests and judges every manifest that declares a name (a first-match read would have reported the pre-fix state green — that closure is itself pinned by a test feeding the shipped literal map and asserting all 13 drifted ranges are judged wrong). The dead tailwind.config.js write is gone, mirrored by end-to-end bin assertions. Changeset: @object-ui/cli patch.

    Review notes: 6 files, all in packages/cli + changeset; the app-generator.ts touch exceeds the claimed surface but is the extraction that makes "one table, three generators" true — explained in the PR body, temp-app manifests asserted byte-identical, and it does not intersect the in-flight #3891 (doctor.ts only). One PM mechanism assumption (platformPackageRange() exported) was falsified by the dev and recorded openly — correct handling, acknowledged here. Reverse verification ran with the direction predicted beforehand (plain red, 3 failures naming the init manifest). All 20 checks completed: 18 success / 2 skipped / 0 failures (Lint, Type Check, 4 test shards individually verified).

    Interaction flagged by the dev and accepted: a fresh scaffold now triggers objectui doctor's pre-existing false "tailwind.config.js not found" — that is #3891's defect, in flight this same round; landing order between the two is immaterial since the surfaces are disjoint.

    Out-of-scope findings #4061 / #4062 (scaffolded app renders Unknown component type everywhere; generated CSS misses the style.css import) verified filed — both will be triaged for the v17 board next (both are first-command experience defects, the board class this card itself was boarded under).

    Landing next: flipping ready and driving to MERGED.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions