Skip to content

docs(ci): 删除未钉住的 .github/WORKFLOWS.md 副本清单,真内容并入 pinned 的 ci-cd-pipeline.md (#3724) - #3745

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-3724-workflows-md-dedup
Aug 8, 2026
Merged

yinlianghui merged 1 commit into
mainfrom
claude/issue-3724-workflows-md-dedup

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes #3724

前提复核(在 origin/main @ 8ad6070fb 重新测量)

正文的 5/9 两份清单逐项成立,无偏移。按 **File**: ...yml 条目机械比对 .github/workflows/(现存 16 个 workflow):

  • 文档里有、仓里没有(5):changeset-check.yml、codeql.yml、deploy-docs.yml、pr-checks.yml、size-check.yml
  • 仓里有、文档里连提都没提(9):changeset-guard.yml、check-links.yml、control-bytes.yml、cross-repo-issue-closer.yml、docs-links.yml、live-e2e.yml、lint.yml、performance-budget.yml、shadcn-check.yml

skip-changeset label 也复核了:不存在(labels API 返回 not found);全仓 git grep skip-changeset 只命中被删的那一页自身两行。两名当中只有 dependencies 真实存在,由 auto-labeler 打,没有任何门禁读它。

裁决执行:路由 1(删除)

按 #3261 仓规,一份没有钉住的手工副本清单按构造就是漂移生成器 —— content/docs/guide/ci-cd-pipeline.md 已经把 .github/workflows/ 双向钉死,副本继承不到其中任何一条,却读起来一样权威。所以是删,不是再加一道棘轮。

入链引用:零。 git grep -i 'WORKFLOWS\.md' 全仓(含 docs/、apps/site、skills/、脚本、workflow YAML)无命中;check-doc-links.mjs 的 SCAN_ROOTS 也不含 .github/,所以这一页既没人链、它自己的外链也从来没被检查过。删除对 check-doc-links 零影响(已实测,7 个 scan root 全绿)。

从被删页搬走了什么(真且 guide 页缺)

内容 为什么搬
Lockfile 合并驱动(新增 ## Lockfile Merge Driver) .gitattributes 那一半、以及「新 workflow 怎么加这一步」那一半,全仓别处都没有。而且这条声明在两份副本里都是错的:guide 页写 changeset-release.yml + dependabot-auto-merge.yml,被删页写 changeset-release.yml + changelog.yml —— 实测三个都带这一步,各漏一个,且两边都没有任何检查。
stale.yml 豁免 label guide 页原来写成一份合并列表(pinned, security, critical, in-progress),对 issue 和 PR 两边都错。实测两份列表分开设置且互不包含:issue 是 pinned, security, critical, bug, enhancement;PR 是 pinned, security, in-progress, blocked。被删页的 issue 那一份是对的。
console bundle 预算的「失败怎么办」 被删页唯一一条真实可用的失败指引。改写到真门禁上(350 KB 入口 chunk,而不是那三档只做参考的 tier),补齐 guide 页 performance-budget 段缺的 **If it fails:**(control-bytes 与 docs-links 两段都有)。
虚构 changeset 门禁的显式否认 「有一道要求 PR 必带 changeset 的门禁,可以用 label 跳过」这个信念正是被删页教出来的,得留下证伪。照 size-check 的既有先例写,并说明两个名字相近的真东西各做什么。

丢掉了什么(假的或纯重复)

  • 5 个不存在 workflow 的整节:CodeQL、PR Checks、Deploy Documentation(还说是 VitePress → GitHub Pages,本仓是 fumadocs)、Bundle Size Check(size-check.yml)、Changeset Check。
  • 「Issue & PR Templates」整节 —— 这是 issue 正文没数进去的第 6 类虚构:.github/ 下既没有 ISSUE_TEMPLATE/ 也没有 pull_request_template.md,那节描述的 bug report / feature request / config 三个模板和 PR checklist 一个都不存在。(这不是缺陷,只是文档凭空描述;随页面一起消失,未另开 issue。)
  • CodeQL badge、labeler 的 label 枚举(是 .github/labeler.yml 的会漂移的转述,且已经漏了 designer / data-adapter / breaking-change / plugin)、dependabot.yml 配置转述、泛化的 Best Practices / Troubleshooting / Maintenance、没有归属的 Future Enhancements 愿望清单、Resources 链接堆。
  • Changeset 开发者流程与「何时不用写 changeset」:不是搬,而是本来就在 CONTRIBUTING.md 的 “When to Create a Changeset”(含 DON'T 列表),那才是真指引 —— 被删页的错在把它包装成一道可以用 label 跳过的门禁。

钉子:只为搬过来的内容加,双向

把一份已经漂移过的手工列表搬进无钉散文,等于换个地方重建漂移生成器,与本次裁决自身的理由相矛盾。所以新增两条(scripts/__tests__/ci-cd-pipeline-doc.test.ts):

  1. lockfile merge driver —— 表格 ↔ 真正配置了 merge.pnpm-merge 的 workflow 集合,双向;外加 .gitattributes 那一半仍然为真(否则页面在描述一个没人调用的驱动)。
  2. keeps this page as the only workflow inventory —— 断言 .github/WORKFLOWS.md 不复活。范围已在注释里写明其边界:它只钉住那一个曾存在的路径,换个名字的新清单绕得过去;真正的持久保护是「加 workflow 本来就必须改 guide 页」,所以第二份页面挣不到任何东西。

反向验证(5 项,方向均先判后跑)

变异 预判 实测
恢复 .github/WORKFLOWS.md RED(single-home 钉) RED keeps this page as the only workflow inventory
从驱动表删 changelog.yml 行 RED(missing 方向) RED ...have no row: - changelog.yml
给驱动表加一行 ci.yml RED(phantom 方向) RED ...do NOT configure merge.pnpm-merge: - ci.yml
从 .gitattributes 删 merge=pnpm-merge RED(机制钉) RED no longer routes pnpm-lock.yaml through the pnpm-merge driver
植入 ### Changeset Check (changeset-check.yml) 标题 RED(既有钉) RED documents changeset-check.yml, which is not in .github/workflows/

每次都是 1 failed | 17 passed,还原后 18 passed。

门禁实测

node scripts/check-control-bytes.mjs   ->  OK (3690 tracked text files; 85 binary skipped)
node scripts/check-doc-links.mjs       ->  Links are valid across 7 scan roots.
vitest run scripts/__tests__/          ->  Test Files 20 passed (20) | Tests 364 passed (364)
pnpm type-check:scripts                ->  tsc -p tsconfig.scripts.json (clean)
npx eslint scripts/__tests__/ci-cd-pipeline-doc.test.ts  ->  exit 0
grep -naP '[控制字符区间]' 两个改动文件  ->  clean

未跑 prettier(AGENTS.md §195:本仓无格式化门禁,全局 prettier 默认配置会对逐字节等于 main 的文件报红)。

Changeset

不带。 纯文档 + 钉测试改动,不碰任何 packages/ 源码。查了 origin/main 最近 40 个提交里的 16 个 docs(...) 提交,16/16 都没有 changeset,先例一致。


Generated by Claude Code

…y, move what was true into the pinned guide page (#3724)

`.github/WORKFLOWS.md` was a second, hand-maintained workflow inventory that
nothing pinned and nothing linked to. Measured at origin/main it documented 5
workflows that do not exist (changeset-check, codeql, deploy-docs, pr-checks,
size-check) and omitted 9 that do, `lint.yml` — a real PR gate — among them.
That is objectui#3212 verbatim, on a page no test could see.

Deleted rather than re-pinned: an unpinned duplicate inventory is a drift
generator by construction, and content/docs/guide/ci-cd-pipeline.md already
tracks .github/workflows/ in both directions.

Audited the deleted page and moved only what is true and was absent from the
guide page:

- Lockfile merge driver: the .gitattributes half and the add-it-to-a-new-workflow
  half existed nowhere else. Its workflow list had drifted in BOTH copies —
  the guide named changeset-release + dependabot-auto-merge, the deleted page
  named changeset-release + changelog; all three carry the step. Pinned in both
  directions so the moved list cannot drift a third time.
- stale.yml exempt labels: the guide stated one merged list that was wrong for
  both resources. Issues and PRs have separate, non-overlapping lists.
- An "If it fails" note for the console bundle budget, the one true piece of
  failure guidance the deleted page carried.
- An explicit denial of the fictional changeset gate and its `skip-changeset`
  label (verified: no such workflow has ever existed, and the repository has no
  such label), mirroring the size-check precedent.

Dropped as false or duplicative: the codeql / pr-checks / deploy-docs /
size-check / changeset-check sections, an "Issue & PR Templates" section
describing templates .github/ does not contain, a CodeQL badge, the labeler
label enumeration (drift-prone restatement of .github/labeler.yml), generic
best-practices/troubleshooting/maintenance prose, and an unowned
"Future Enhancements" wishlist.

Fixes #3724
@vercel

vercel Bot commented Aug 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored Aug 8, 2026 11:19am

Request Review

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

Projects

None yet

2 participants