fix(cli,create-plugin): 删掉两包 files 里声明的 templates —— 该目录从未存在过 (#3665) - #3687
Merged
Merged
Conversation
…age has ever had (#3665) `@object-ui/cli` and `@object-ui/create-plugin` both list `templates` in package.json `files`, but neither directory exists on disk and neither has ever existed anywhere in this repo's git history. Both packages inline their templates instead: the cli as an object literal in `src/commands/init.ts`, create-plugin by constructing the generated package.json field by field in code. npm skips a missing `files` entry silently, so the published tarballs were already correct — only the manifests said otherwise. Also removes create-plugin's write-only `templateDir` and the `fileURLToPath`/`__filename`/`__dirname` chain that existed solely to compute it. The `__dirname` that remains at src/index.ts:201 is literal text inside the generated vite.config.ts template string, not a reference to the module's. Clears both `KNOWN_MISSING` entries from the objectui#3663 ratchet, which the deletions turn stale. Deleting a declaration retires a baseline line exactly as creating the file would; the doc comment above the map now records both routes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
yinlianghui
marked this pull request as ready for review
August 7, 2026 21:31
This was referenced Aug 7, 2026
Closed
yinlianghui
pushed a commit
that referenced
this pull request
Aug 7, 2026
PM 分诊裁定把 #3702 并入本 PR。@object-ui/console(apps/console)与 #3696 的 两个包是同一个缺陷:非 private、声明 "license": "MIT"、无许可证文本,而它确是 发布物(publishConfig.access: public、版本 17.3.0 同线、在 changeset fixed 组、 有 prepublishOnly)。之前它超出 #3696 的文件面,故只挂账不修。 改动两处: 1. apps/console/LICENSE —— 仓根 LICENSE 的逐字节副本,blob 同为 cf2ca28。未动 files 字段(npm 恒定收录 LICENSE),npm pack --dry-run 清单 3 → 4 个文件,LICENSE 出现。 2. KNOWN_LICENSE_TEXT_MISSING 清空。删除前先跑了一次套件让棘轮报陈旧, 逐条成因命中第一条(唯一意味着许可证真被补上的那条): apps/console (objectui#3702) — it now ships license text (LICENSE) 删除后 11 passed。 同时: - 基线上方的文档注释从「现在时描述一个条目」改写为历史记录。留着不动就会变成 一份描述并不存在的条目的声明 —— 与本 PR 正在消除的失真同类,只是搬进了注释 (#3687 的同一处理)。棘轮机理段原文未动。 - 点名钉扎从两个包扩到三个,各带自己的 issue 号。这条比通用断言强:它不能靠 往基线里加一行来满足。删掉 apps/console/LICENSE 实测 2 红(通用断言 + 钉扎), 证明修完之后留下的是覆盖,不是沉默。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
akarma-synetal
pushed a commit
to akarma-synetal/objectui
that referenced
this pull request
Aug 10, 2026
…禁封死该类 (objectstack-ai#3696, objectstack-ai#3702) (objectstack-ai#3703) * fix(react-runtime,sdui-parser): 补上两包声明了 MIT 却从未随包发布的许可证文本 (objectstack-ai#3696) 两个包的 package.json 都写着 "license": "MIT",但仓库里没有对应的许可证文本, 所以每一个已发布的 tarball 都不含 MIT 要求随分发附带的许可证与版权声明。 这不是 files 声明问题:npm 有一份无视 files 恒定打包的清单(package.json、 README、LICENSE/LICENCE、COPYING、main 指向的文件),files: ["dist"] 并不会 把 LICENSE 排除在外。缺失的原因是磁盘上根本没有该文件,所以修法是补文件, 不是改 files —— 本 PR 未动任何 package.json。 两份 LICENSE 均为仓根 LICENSE 的逐字节副本,blob 与另外 37 份同为 cf2ca28。 同时给 package-files-exist 门禁加一道独立断言块:凡非 private 且声明了 license 字段的包,必须有许可证文本。判据从工作区扫描派生,不是硬编码包名单, 所以第 40 个包加进来的当天就被覆盖 —— objectstack-ai#3647 与 objectstack-ai#3696 连着两次都是靠人肉逐包 普查才发现的。 该门禁同时点名了 apps/console(@object-ui/console,publishConfig.access: public,同一缺陷),它超出本单文件面,已挂 objectstack-ai#3702 并写进双向 ratchet 基线。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt * docs(scripts): 去掉门禁注释里一个不存在的 issue 交叉引用 (objectstack-ai#3696) 新块的注释里写了 "objectui#4984",但 objectui 的编号目前在 3700 一带, 该号不存在 —— 那是另一个仓的同族教训被误标成了本仓引用。悬空引用比没有引用 更坏:读者会去查一个查不到的单子。改为直接把道理写清楚(谓词的两肢今天在树上 没有标本,无人行经的逻辑可以被后来的改动反转而不转红),不再冒充交叉引用。 纯注释改动,断言与逻辑一字未动;11 passed 不变。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt * test(scripts): license 棘轮的陈旧成因也按 objectstack-ai#3701 的约定分句上报 (objectstack-ai#3696) objectstack-ai#3701(修 objectstack-ai#3674)刚在同一文件里立了个约定:棘轮报陈旧时,成因要**逐条实测 上报**,不能由消息硬编码假定 —— 因为「离开基线」有多条路径,只有其中一条 意味着缺陷真被修好了,把假定写死会把读者引去核对一个并不成立的事实。 本 PR 的 license 棘轮有同样的结构,原消息虽然用的是「或」式并列(没有 objectstack-ai#3674 那个断言错成因的毛病),但仍是让读者自己猜是哪一条。改成与 objectstack-ai#3701 同形的 逐条成因,四条路径各自实测: 1. 现在有许可证文本了(并列出文件名)—— 只有这条意味着许可证真被补上 2. 改成了 private,不再分发,自然不欠 3. 不再声明 license 字段,没有主张要兑现 4. 该路径下已没有包(移走/删除,或这个基线键从来就没匹配上) 四条分支逐一实测,均按预测点名(证据见 PR 正文)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt * fix(console): 补上 @object-ui/console 的许可证文本并把基线清空 (objectstack-ai#3702) PM 分诊裁定把 objectstack-ai#3702 并入本 PR。@object-ui/console(apps/console)与 objectstack-ai#3696 的 两个包是同一个缺陷:非 private、声明 "license": "MIT"、无许可证文本,而它确是 发布物(publishConfig.access: public、版本 17.3.0 同线、在 changeset fixed 组、 有 prepublishOnly)。之前它超出 objectstack-ai#3696 的文件面,故只挂账不修。 改动两处: 1. apps/console/LICENSE —— 仓根 LICENSE 的逐字节副本,blob 同为 cf2ca28。未动 files 字段(npm 恒定收录 LICENSE),npm pack --dry-run 清单 3 → 4 个文件,LICENSE 出现。 2. KNOWN_LICENSE_TEXT_MISSING 清空。删除前先跑了一次套件让棘轮报陈旧, 逐条成因命中第一条(唯一意味着许可证真被补上的那条): apps/console (objectui#3702) — it now ships license text (LICENSE) 删除后 11 passed。 同时: - 基线上方的文档注释从「现在时描述一个条目」改写为历史记录。留着不动就会变成 一份描述并不存在的条目的声明 —— 与本 PR 正在消除的失真同类,只是搬进了注释 (objectstack-ai#3687 的同一处理)。棘轮机理段原文未动。 - 点名钉扎从两个包扩到三个,各带自己的 issue 号。这条比通用断言强:它不能靠 往基线里加一行来满足。删掉 apps/console/LICENSE 实测 2 红(通用断言 + 钉扎), 证明修完之后留下的是覆盖,不是沉默。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt --------- Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #3665
问题
@object-ui/cli与@object-ui/create-plugin的package.json都在files里点名要打包templates,而两个目录都不存在,也从未存在过。npm 对files里缺失的条目静默跳过 —— 不报错、不警告、退出码 0 —— 所以发布出去的 tarball 效果上是对的,失真的只有 manifest 本身:它声明要打包一个不存在、也永远不会存在的目录。这是 #3647(plugin-tree 声明 LICENSE 而文件不存在)的同一机制,方向相反 —— 那次的正确修法是补文件,这次是删声明。前提复核(在 origin/main @ d2fd044 上实测,先证后改)
files确实含templatesdist, templates, README.md, CHANGELOG.md, LICENSEls packages/{cli,create-plugin}/git log --all --diff-filter=A -- 'packages/cli/templates/**' 'packages/create-plugin/templates/**'git check-ignore -v两路径entry+dts,产物只进dist/src/commands/init.ts:17const templates = {对象字面量,由:381取用templateDirsrc/index.ts:115一处,即其赋值本身issue 正文的三条佐证全部复现,前提成立。
改动(4 个文件)
packages/cli/package.json—— 删files里的"templates"一行。packages/create-plugin/package.json—— 同上。packages/create-plugin/src/index.ts—— 删死变量templateDir,以及唯一存在意义就是算它的fileURLToPathimport +__filename+__dirname三行。scripts/__tests__/package-files-exist.test.ts—— 清空KNOWN_MISSING的两条(test(scripts): 补门禁——package.jsonfiles声明的条目必须在磁盘真实存在 (#3663) #3667 为本单挂的账)。关于 index.ts:201 残留的那个
__dirname删完之后文件里仍能 grep 到一个
__dirname:它不是漏网的引用 —— 它落在
const viteConfig =开头的模板字符串内部,是要被逐字写进脚手架产物vite.config.ts的字面文本(该行没有${...}插值,${pascalCaseName}才是插值)。它指的是被生成的那个插件包自己的__dirname,与本模块无关。下面的构建产物 diff 是这一判断的机械佐证。顺序验收:棘轮双向性的现场演示(先写下预测,再跑)
#3667 的逆向验证 C 钉住过一个反直觉方向:修好一个缺陷会让套件转红,直到基线里那一行也被删掉。本单正是被那半边棘轮逼出来的,所以分两步跑,两步输出都在这里。
第 (a) 步 —— 只删两个
package.json的templates行,不动KNOWN_MISSING预测(动手前写下):
1 failed | 4 passed;红的是the objectui#3647 baseline only shrinks,报陈旧并逐条点名;存在性断言保持绿(条目已不在files里,无可校验)。实测 —— 命中:
第 (b) 步 —— 清空
KNOWN_MISSING预测: 5 条全绿。
实测 —— 命中:
一处必须写明的方向差异(否则下一个读者会被消息误导)
#3667 的 C 方向是把路径建出来让它 resolve;本单走的是另一条路径 —— 把声明删掉,于是该条目根本不再进入
declared,自然不在stillMissing里。终态判定相同(stale),但失败消息首行写死的是the path now resolves—— 而此刻packages/cli/templates并没有 resolve,它依然不存在,只是不再被声明。补救指令(「删掉 KNOWN_MISSING 里那一行」)在两条路径下都正确,所以不会把人引向错误动作,但归因句与现场不符。已另行开单 #3674 记录(观察类,finding标签);修它要改该文件的断言消息,超出本单文件面,故本 PR 不动。零行为佐证一:
npm pack --dry-run受控 A/Bdist/,于是「改后」清单凭空多出 7 个 dist 文件 —— 那个差异来自构建,不来自本改动,该对照已作废。下面是重做的版本:同一棵已构建的树上,只把那一行加回去、再删掉,其余一切不动。@object-ui/cli—— 带templates行 / 不带,清单逐字节相同,均 12 个文件:@object-ui/create-plugin—— 带 / 不带,同样相同,均 6 个文件:templates本来就打不进 tarball(npm 静默跳过),删掉声明对发布物的影响精确为零。零行为佐证二:构建产物 diff(证明死变量删除对脚手架产物无影响)
create-plugin没有测试文件,所以改用更硬的证据:把git show HEAD的旧源码与新源码分别 tsup 构建,diff 两份dist/index.js。全部差异恰好是被删的两处,一行不多:产物里没有任何其他行发生变化 —— 包括那段生成
vite.config.ts的模板字符串,它里面的__dirname原样保留,证实了上面「那是字面文本、不是引用」的判断。脚手架生成什么,一个字节都没变。验证
@object-ui/cli的 type-check 第一次是红的,报Cannot find module '@object-ui/types/zod'—— 这是全新 worktree 的陈旧产物陷阱(AGENTS.md §9 的同族),不是本改动。先跑pnpm --workspace-concurrency=2 --filter '@object-ui/cli^...' build把依赖构建出来后即转绿,如上。记在这里是因为它读起来非常像「你的改动弄坏了一个 import」。另:除
check-control-bytes外,对 4 个改动文件另做了一次超出门禁扫描面的自查 ——grep -naP扫\x00-\x08/\x0b/\x0c/\x0e-\x1f无命中,并逐码点统计零宽与不可见字符(U+200B / U+FEFF / U+2028 等)计数均为 0。文件面披露:改了
KNOWN_MISSING上方的一段文档注释派发的文件面是「清空 KNOWN_MISSING 两条,该文件其余断言一行不动」。我没有动任何断言,但改写了
KNOWN_MISSING上方文档注释的最后一段,理由需要摆明:那一段以现在时逐条描述我正要删掉的两个条目(
Both current entries are vestigial declarations, measured on main@dae1ac41e: neither templates directory exists...)。map 清空后这段话会变成一份「描述两个并不存在的条目」的声明 —— 与本 PR 正在消除的失真完全同一类,只是从package.json搬到了注释里。改写只做两件事:把已死的现在时描述换成历史记录,并补记「删声明与建文件同样使基线条目退休」(即上面那处方向差异)。ratchet 机理与修复指引两段原文一字未动,其下所有断言与逻辑一字未动。此项已向 PM 报备并获预先接受;若判定越界,单独回退这一段即可,不影响其余三个文件。
关于 changeset:判定为不加
按 #3662 确立的判断框架:
.changeset/config.json把 39 个包放在同一个fixed组,为一条 manifest 订正会把整组推一个版本。🤖 Generated with Claude Code
https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
Generated by Claude Code