Skip to content

chore(packaging): CHANGELOG.md ships in every npm tarball (#4261) - #4297

Merged
os-zhuang merged 1 commit into
mainfrom
claude/missing-changelog-md-7824d9
Jul 31, 2026
Merged

chore(packaging): CHANGELOG.md ships in every npm tarball (#4261)#4297
os-zhuang merged 1 commit into
mainfrom
claude/missing-changelog-md-7824d9

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Closes #4261.

问题

AGENTS.md 的 Post-Task Checklist 要求 breaking changeset 写清 FROM → TO 迁移,理由是这段文字「ships to consumers as CHANGELOG.md inside the npm package and is what an upgrading agent greps after the tombstone error」。但这条送达路径在 69 个可发布包里断了 68 条:npm 无条件打包的只有 package.json / README* / LICENSE*(老版本 npm 曾包含 CHANGELOG,现在不含),而 canonical 白名单 ["dist", "README.md"] 从未列过它。实测(npm 10.9.7)@objectstack/types:tarball 3 个文件,70KB 的 CHANGELOG.md 留在了仓库里。只有 @objectstack/spec 显式列了它。

撞到 tombstone 报错的场景恰恰是「本地只有 node_modules、没有仓库」的场景 —— 迁移说明必须坐在 tarball 里才 grep 得到。按 issue 的方向 1 落地:让约定成真,而不是改写约定。

改了什么

1. 68 个包的 files 补上 "CHANGELOG.md",canonical 白名单变为 ["dist", "README.md", "CHANGELOG.md"]。每个包磁盘上都已有 CHANGELOG.md(changesets 维护),无一例外。

2. check:published-files 新增第五条不变量 COMPLETE:白名单没有覆盖 CHANGELOG.md 的包直接挂在始终必跑的 lint job 上,报错正文带 #4261 的因果和一行修法 —— 下一个新包不可能再静默切断这条路径。

  • CHANGELOG.md 进入 CANONICAL 集合(声明无需理由),同时进入新的 REQUIRED 集合(不声明就报错)。两者分开:CANONICAL 是「可以」,REQUIRED 是「必须」。
  • @objectstack/specEXTRA_ENTRIES 里的 CHANGELOG.md 登记随之溶解进 canonical 集合(双向核对会把留下的死条目当错误,所以必须删)。
  • ALWAYS_PACKED 的注释同步改写:CHANGELOG 不在 npm 无条件打包集里,正是 COMPLETE 存在的原因。

验证

  • --self-test:21 个模式断言 + 11 个分类断言,新增 3 个钉住 COMPLETE 所依赖的匹配形状(字面量命中、dist 不吞它、CHANGELOG.mdx 近似名不误命中)。
  • pnpm check:published-files:69 个可发布包全绿。
  • 反向测试:删掉任一包的该条目,门禁如期报错并给出修法。
  • npm pack --dry-run on @objectstack/types:tarball 现在含 70.8kB CHANGELOG.md(issue 里实测缺失的正是它);@objectstack/spec 不回归。
  • pnpm lint(改动脚本零告警)、check:nul-bytes / check:doc-authoring / check:role-word / check:org-identifier / check:release-notescheck-changeset-no-major(本 changeset 全 patch)、check-changeset-fixed 均通过。
  • changeset 覆盖全部 68 个改动包(patch);changeset status 解析通过。

顺带发现,未塞进本 PR

.changeset/adapter-hono-auth-wildcard-yields.md 仍引用改名前的 @objectstack/adapter-hono(现为 @objectstack/hono),changeset status / changeset version 会在它上面崩 —— 预存在于 main,与本 PR 无关,已另行处理。

🤖 Generated with Claude Code

AGENTS.md's post-task checklist requires breaking changesets to carry their
FROM -> TO migration because "this text ships to consumers as CHANGELOG.md
inside the npm package and is what an upgrading agent greps after the
tombstone error." That delivery path was severed for 68 of the 69 publishable
packages: npm packs package.json / README* / LICENSE* unconditionally but --
unlike older npm versions -- not CHANGELOG.md, and the canonical
["dist", "README.md"] whitelist never named it. Measured on npm 10.9.7:
npm pack --dry-run on @objectstack/types shipped 3 files while its 70KB
CHANGELOG.md stayed behind. Only @objectstack/spec listed it explicitly.

The tombstone scenario is precisely the one where the repo is out of reach --
the upgrading agent has node_modules and nothing else -- so the migration
text has to ride in the tarball (#4261's direction 1: make the convention
true rather than rewrite it).

Every publishable package now declares CHANGELOG.md in `files`, and
check:published-files gains a fifth invariant, COMPLETE: a whitelist that
fails to cover CHANGELOG.md fails the always-required lint job, so the next
package cannot silently sever the path again. CHANGELOG.md joins the
canonical set (["dist", "README.md", "CHANGELOG.md"]), which dissolves
@objectstack/spec's per-package EXTRA_ENTRIES exemption for it.

Verified: --self-test (21 pattern + 11 classification cases, three new
pinning the shapes COMPLETE resolves through); the full check green over 69
packages; removing the entry from one package fails the gate with the #4261
story and the one-line fix; npm pack --dry-run on @objectstack/types now
lists the 70.8KB CHANGELOG.md.

Closes #4261.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 31, 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)
objectstack Ignored Ignored Jul 31, 2026 4:27am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies Pull requests that update a dependency file tooling labels Jul 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 68 package(s): @objectstack/hono, @objectstack/account, @objectstack/setup, @objectstack/studio, @objectstack/cli, @objectstack/client-react, @objectstack/client, @objectstack/cloud-connection, @objectstack/connector-mcp, @objectstack/connector-openapi, @objectstack/connector-rest, @objectstack/connector-slack, @objectstack/console, @objectstack/core, create-objectstack, @objectstack/formula, @objectstack/lint, @objectstack/mcp, @objectstack/metadata-core, @objectstack/metadata-fs, @objectstack/metadata-protocol, @objectstack/metadata, @objectstack/objectql, @objectstack/observability, @objectstack/platform-objects, @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/embedder-openai, @objectstack/knowledge-memory, @objectstack/knowledge-ragflow, @objectstack/plugin-approvals, @objectstack/plugin-audit, @objectstack/plugin-auth, @objectstack/plugin-dev, @objectstack/plugin-email, @objectstack/plugin-hono-server, @objectstack/plugin-pinyin-search, @objectstack/plugin-reports, @objectstack/plugin-security, @objectstack/plugin-sharing, @objectstack/plugin-webhooks, @objectstack/rest, @objectstack/runtime, @objectstack/sdui-parser, @objectstack/service-analytics, @objectstack/service-automation, @objectstack/service-cache, @objectstack/service-cluster-redis, @objectstack/service-cluster, @objectstack/service-datasource, @objectstack/service-i18n, @objectstack/service-job, @objectstack/service-knowledge, @objectstack/service-messaging, @objectstack/service-package, @objectstack/service-queue, @objectstack/service-realtime, @objectstack/service-settings, @objectstack/service-sms, @objectstack/service-storage, @objectstack/trigger-api, @objectstack/trigger-record-change, @objectstack/trigger-schedule, @objectstack/types, @objectstack/verify, objectstack-vscode.

86 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/actions-as-tools.mdx (via @objectstack/core, @objectstack/mcp)
  • content/docs/ai/agents.mdx (via @objectstack/mcp)
  • content/docs/ai/connect-mcp.mdx (via @objectstack/mcp, @objectstack/rest)
  • content/docs/ai/index.mdx (via @objectstack/mcp)
  • content/docs/ai/knowledge-rag.mdx (via @objectstack/core, @objectstack/embedder-openai, @objectstack/knowledge-memory, @objectstack/knowledge-ragflow, @objectstack/service-knowledge)
  • content/docs/ai/natural-language-queries.mdx (via @objectstack/core, @objectstack/mcp)
  • content/docs/ai/skills-reference.mdx (via packages/cli, packages/client-react, packages/client, create-objectstack)
  • content/docs/ai/skills.mdx (via create-objectstack)
  • content/docs/api/client-sdk.mdx (via @objectstack/cli, @objectstack/client-react, @objectstack/client, @objectstack/plugin-reports, packages/runtime)
  • content/docs/api/data-api.mdx (via @objectstack/service-analytics)
  • content/docs/api/data-flow.mdx (via @objectstack/cli, @objectstack/client, @objectstack/service-realtime)
  • content/docs/api/environment-routing.mdx (via @objectstack/cli, @objectstack/client)
  • content/docs/api/error-catalog.mdx (via @objectstack/cli, @objectstack/client)
  • content/docs/api/error-handling-server.mdx (via @objectstack/rest)
  • content/docs/api/index.mdx (via @objectstack/mcp, @objectstack/rest, @objectstack/runtime, @objectstack/service-analytics, @objectstack/service-realtime)
  • content/docs/api/plugin-endpoints.mdx (via @objectstack/service-realtime, @objectstack/service-storage)
  • content/docs/api/wire-format.mdx (via @objectstack/runtime)
  • content/docs/automation/approvals.mdx (via @objectstack/plugin-approvals)
  • content/docs/automation/connectors.mdx (via @objectstack/connector-mcp, @objectstack/connector-openapi, @objectstack/connector-rest)
  • content/docs/automation/flows.mdx (via @objectstack/service-automation)
  • content/docs/automation/hook-bodies.mdx (via packages/cli, @objectstack/lint, @objectstack/runtime)
  • content/docs/automation/webhooks.mdx (via @objectstack/core, packages/plugins/plugin-webhooks, @objectstack/service-messaging, packages/services/service-realtime)
  • content/docs/concepts/metadata-lifecycle.mdx (via @objectstack/metadata-core, @objectstack/metadata-fs, @objectstack/metadata-protocol, @objectstack/metadata, @objectstack/objectql)
  • content/docs/concepts/north-star.mdx (via packages/apps/account, packages/console, packages/core, packages/runtime)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/runtime)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/formula, packages/objectql)
  • content/docs/data-modeling/queries.mdx (via @objectstack/plugin-pinyin-search)
  • content/docs/data-modeling/validation.mdx (via @objectstack/formula)
  • content/docs/deployment/backup-restore.mdx (via @objectstack/cli)
  • content/docs/deployment/cli.mdx (via @objectstack/cli, @objectstack/plugin-audit, @objectstack/plugin-auth, @objectstack/plugin-security)
  • content/docs/deployment/environment-variables.mdx (via @objectstack/mcp, @objectstack/plugin-pinyin-search, @objectstack/service-cluster-redis, @objectstack/service-cluster)
  • content/docs/deployment/index.mdx (via @objectstack/runtime)
  • content/docs/deployment/migration-from-objectql.mdx (via @objectstack/core, @objectstack/objectql)
  • content/docs/deployment/production-readiness.mdx (via @objectstack/plugin-audit, @objectstack/plugin-auth, @objectstack/runtime)
  • content/docs/deployment/self-hosting.mdx (via @objectstack/cli, create-objectstack)
  • content/docs/deployment/single-project-mode.mdx (via packages/console, @objectstack/runtime)
  • content/docs/deployment/vercel.mdx (via @objectstack/hono, @objectstack/console, @objectstack/objectql, @objectstack/driver-memory, @objectstack/runtime)
  • content/docs/getting-started/glossary.mdx (via @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm)
  • content/docs/getting-started/index.mdx (via create-objectstack)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/cli, @objectstack/client, @objectstack/connector-mcp, @objectstack/connector-openapi, @objectstack/connector-rest, create-objectstack, @objectstack/plugin-hono-server, @objectstack/runtime)
  • content/docs/kernel/cluster.mdx (via packages/metadata, @objectstack/service-cluster-redis, @objectstack/service-cluster)
  • content/docs/kernel/contracts/cache-service.mdx (via @objectstack/service-cache)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/core)
  • content/docs/kernel/runtime-services/audit-service.mdx (via packages/services/service-settings)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/cli, packages/client)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/core)
  • content/docs/kernel/runtime-services/index.mdx (via packages/cli, packages/client, packages/services/service-settings)
  • content/docs/kernel/runtime-services/settings-service.mdx (via packages/services/service-settings)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/plugin-security)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/core, @objectstack/metadata, @objectstack/objectql, @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/plugin-auth, @objectstack/service-analytics, @objectstack/service-cache, @objectstack/service-i18n, @objectstack/service-job, @objectstack/service-queue)
  • content/docs/kernel/services.mdx (via @objectstack/core, @objectstack/objectql)
  • content/docs/permissions/access-recipes.mdx (via packages/plugins/plugin-security)
  • content/docs/permissions/authentication.mdx (via @objectstack/cli, @objectstack/client, @objectstack/core, @objectstack/objectql, @objectstack/driver-memory, @objectstack/plugin-auth, @objectstack/plugin-hono-server, @objectstack/rest, @objectstack/runtime, @objectstack/service-sms)
  • content/docs/permissions/authorization.mdx (via packages/core, @objectstack/lint, @objectstack/mcp, @objectstack/plugin-security, packages/plugins/plugin-sharing, packages/runtime)
  • content/docs/permissions/explain.mdx (via @objectstack/plugin-security)
  • content/docs/permissions/permissions-matrix.mdx (via packages/plugins/plugin-security, packages/plugins/plugin-sharing)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/plugin-security, @objectstack/service-analytics)
  • content/docs/permissions/sso.mdx (via @objectstack/plugin-auth)
  • content/docs/plugins/anatomy.mdx (via @objectstack/core, @objectstack/driver-sql)
  • content/docs/plugins/development.mdx (via @objectstack/core)
  • content/docs/plugins/index.mdx (via @objectstack/core, @objectstack/objectql, @objectstack/driver-memory, @objectstack/plugin-auth, @objectstack/plugin-hono-server, @objectstack/plugin-security, @objectstack/rest)
  • content/docs/plugins/packages.mdx (via @objectstack/hono, @objectstack/cli, @objectstack/client-react, @objectstack/client, @objectstack/core, create-objectstack, @objectstack/formula, @objectstack/mcp, @objectstack/metadata, @objectstack/objectql, @objectstack/platform-objects, @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/plugin-approvals, @objectstack/plugin-audit, @objectstack/plugin-auth, @objectstack/plugin-dev, @objectstack/plugin-email, @objectstack/plugin-hono-server, @objectstack/plugin-reports, @objectstack/plugin-security, @objectstack/plugin-sharing, @objectstack/plugin-webhooks, @objectstack/rest, @objectstack/runtime, @objectstack/service-analytics, @objectstack/service-automation, @objectstack/service-cache, @objectstack/service-i18n, @objectstack/service-job, @objectstack/service-messaging, @objectstack/service-package, @objectstack/service-queue, @objectstack/service-realtime, @objectstack/service-settings, @objectstack/service-sms, @objectstack/service-storage, @objectstack/types, objectstack-vscode)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/core)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/plugin-auth, @objectstack/plugin-hono-server, @objectstack/runtime)
  • content/docs/protocol/kernel/i18n-standard.mdx (via packages/rest, @objectstack/service-i18n)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/core, @objectstack/objectql, @objectstack/driver-sql, @objectstack/runtime)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/core, @objectstack/driver-sql, @objectstack/runtime)
  • content/docs/protocol/kernel/metadata-service.mdx (via @objectstack/cloud-connection, @objectstack/metadata)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/cli, @objectstack/core)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/cli, @objectstack/client, @objectstack/service-cluster-redis, @objectstack/service-cluster, @objectstack/service-realtime)
  • content/docs/protocol/knowledge.mdx (via @objectstack/mcp, @objectstack/knowledge-memory, @objectstack/knowledge-ragflow, @objectstack/service-knowledge)
  • content/docs/protocol/objectql/query-syntax.mdx (via packages/objectql, @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm)
  • content/docs/protocol/objectql/security.mdx (via packages/plugins/plugin-sharing)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/objectql)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/formula)
  • content/docs/releases/implementation-status.mdx (via @objectstack/cli, @objectstack/client, @objectstack/cloud-connection, packages/console, @objectstack/core, @objectstack/mcp, @objectstack/objectql, @objectstack/observability, @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/plugin-approvals, @objectstack/plugin-audit, @objectstack/plugin-auth, @objectstack/plugin-hono-server, @objectstack/plugin-security, @objectstack/plugin-sharing, @objectstack/plugin-webhooks, @objectstack/rest, @objectstack/runtime, @objectstack/service-analytics, @objectstack/service-automation, @objectstack/service-cache, @objectstack/service-i18n, @objectstack/service-job, @objectstack/service-knowledge, @objectstack/service-messaging, @objectstack/service-queue, @objectstack/service-realtime, @objectstack/service-settings, @objectstack/service-storage, @objectstack/trigger-api, @objectstack/trigger-record-change, @objectstack/trigger-schedule, @objectstack/verify)
  • content/docs/releases/index.mdx (via @objectstack/console)
  • content/docs/releases/v12.mdx (via @objectstack/console, @objectstack/core, @objectstack/metadata-core, @objectstack/metadata, @objectstack/rest)
  • content/docs/releases/v14.mdx (via @objectstack/service-sms)
  • content/docs/releases/v15.mdx (via @objectstack/core, create-objectstack, @objectstack/formula, @objectstack/plugin-pinyin-search, @objectstack/verify)
  • content/docs/releases/v16.mdx (via @objectstack/cli, @objectstack/client, @objectstack/console, @objectstack/formula, @objectstack/plugin-hono-server, @objectstack/trigger-schedule)
  • content/docs/releases/v17.mdx (via @objectstack/plugin-dev)
  • content/docs/releases/v9.mdx (via @objectstack/console, create-objectstack, @objectstack/objectql, @objectstack/plugin-approvals, @objectstack/plugin-auth, @objectstack/service-analytics, @objectstack/service-automation, @objectstack/service-settings)
  • content/docs/ui/audience-based-interfaces.mdx (via packages/plugins/plugin-security)
  • content/docs/ui/dashboards.mdx (via @objectstack/plugin-security)
  • content/docs/ui/setup-app.mdx (via @objectstack/setup, @objectstack/platform-objects)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang merged commit 2e836de into main Jul 31, 2026
19 checks passed
@os-zhuang
os-zhuang deleted the claude/missing-changelog-md-7824d9 branch July 31, 2026 04:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/m tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

68 个已发布包的 npm tarball 里没有 CHANGELOG.md,但 AGENTS.md 说升级者会去 grep 它

1 participant