Skip to content

[Decision] @objectstack/spec publishes a 10.3 MB CHANGELOG.md in its npm tarball and 83 package CHANGELOGs weigh 72 MB in git, mostly prerelease sections copied again under the stable release #26079

Closed

Description

@objectstack-fleet

Ruled: 6417011624 · letter A′ · 2026-10-26T13:20Z

Filing gate ②: a maintainer-only decision. Maintainer, 2026-10-26, verbatim: 「完整的评估本项目, 还有哪些可以优化的地方。包括 ci 和文档」 then 「使用 pm-dispatch 技能创建 issue,需要决策的立为决策卡。」 and 「低优先级的先不考虑」. Batch-of: 19 (repository evaluation 2026-10-26, session_019a9XCWsbMFp75REzthE6cs; 9 decision cards + 10 execution cards). Reader: the director seat presents this card in a decision batch; after the ruling the lane named under "After the ruling" dispatches. ⛔ Not a claim. Dedupe: REST list (439 issues), grep CHANGELOG → 3 hits: #25638 (closed: 18.1.0 entries attributed to one commit), #25806 (closed: the 18-1 release page caution), #25321 (closed: tree-wide git grep pins read CHANGELOGs). None is about tarball contents or prerelease duplication. New.

维护者速读

packages/spec/CHANGELOG.md 10.3 MB、约 10.5 万行;spec、cli、objectql、runtime 四个包的 files 字段都列了 CHANGELOG.md,所以它随 npm 发出去——每个 npm install @objectstack/spec 多下 10 MB。83 份包级 CHANGELOG 在 git 里共 72 MB。体积来自重复:预发布条目 18.0.0-next.0..5 在 18.0.0 下被整段再抄一遍(service-job/CHANGELOG.md 第 107 行与 622 行逐字相同;spec 有 4,076 条重复长行)。改发布包内容是对外可见动作,请裁:A 从四个包的 files 里去掉 CHANGELOG.md(npm 页面与仓库仍有),并让 scripts/changeset-changelog.mjs 把预发布小节并入稳定版小节而不是复制;存量 CHANGELOG 不横扫;B 只做前半(去掉 files 条目),生成器不动;C 保持现状。选 A / B / C?

Governing text

  • packages/spec/package.json files: [dist, json-schema, liveness, prompts, llms.txt, README.md, src/**/*.zod.ts, CHANGELOG.md, api-surface, spec-changes.json, protocol-upgrade-guide.md]; the same entry in cli, objectql, runtime.
  • scripts/changeset-changelog.mjs — the changelog generator the release lane runs (docs/releases-maintenance.md).
  • RELEASE_NOTES.md:3-8 / CHANGELOG.md:9-22: the canonical narrative is content/docs/releases/ + per-package CHANGELOGs — the per-package files stay; only their duplication and their shipping change.
  • Prime Directive 15: the release act is the maintainer's; this card changes what a future release emits, not any release.
  • docs: narrative cost — 42.5% of source lines are comments, workflows 58.6%, AGENTS.md is 103 KB with three stale claims, ROADMAP.md still says v3.3.2 and 80 Storybook stories #25919 ruling A 「存量不横扫」 — existing CHANGELOG text is not rewritten.

Premises

  • P1 — ls -la packages/spec/CHANGELOG.md → 10,325,107 bytes; du -ch $(git ls-files | grep 'CHANGELOG.md$') | tail -1 → 72M.
  • P2 — node -e 'console.log(require("./packages/spec/package.json").files)' lists CHANGELOG.md; repeat for cli, objectql, runtime.
  • P3 — duplication: sed -n 107p packages/services/service-job/CHANGELOG.md equals sed -n 622p …; sort packages/spec/CHANGELOG.md | uniq -d | awk 'length>80' | wc -l → about 4,076.
  • P4 — npm view @objectstack/spec@18.1.0 dist.unpackedSize (the dev reads the published number; a seat container may be refused).

One-sentence problem

Every consumer of the protocol package downloads ten megabytes of release history it will never open, and the history itself says each prerelease change twice.

Options

Option What Consequence Workload
A Drop CHANGELOG.md from the four files arrays; teach the generator to fold X.Y.Z-next.N sections into X.Y.Z on the stable cut. Smaller tarballs from the next release; future CHANGELOGs grow at half the rate; existing text untouched. The npm "Changelog" tab still renders from the repository link. devx (release tooling) · 1 PR · precedent: #25638's generator fix (closed; read its +/− before sizing)
B files only. Tarballs shrink; the git weight keeps growing. 1 PR, S
C Nothing. 10 MB per install of spec; 72 MB and rising in every clone. 0

Business meaning

  • A: ship the protocol, not its diary; write the diary once.
  • B: stop shipping the diary.
  • C: keep paying bandwidth on every install.

四维分析

  • 实际业务需求:每个 npm create objectstack 都装 spec;10 MB 是北极星「一条命令起一个项目」路上的真实延迟,且 CI 里 tree-wide git grep 已经因为读 CHANGELOG 撞过 60 秒预算(tree-wide git grep pins read every byte under packages/ (CHANGELOGs included) against a 60 s budget: the runtime twin hit 86 s on a loaded shard (#25298); five siblings still do #25321)。
  • 项目长远合理性:发布叙事的唯一真源是 content/docs/releases/;包级 CHANGELOG 是 changeset 的副产物,保留但不发行、不重复,是与那条规则一致的形态。
  • 防 AI 犯错:生成器改动的风险是把稳定版小节也折叠掉;派发令要求在 scripts/changeset-changelog.mjs 的 --self-test 里加「预发布折叠、稳定版保留」两条用例。错误形态是一次发布的 CHANGELOG 缺条目,发布前 check:release-notes 能看到。
  • 创业阶段不扩散:减体积、不加门禁;存量不横扫。

Recommendation

A. 只看①选 A;②③④ 是否翻转:否。

Confidence gaps: whether any downstream tooling (hotcrm, cloud) reads the CHANGELOG from the installed package rather than the repository; the dev greps those repositories' scripts for node_modules/@objectstack/*/CHANGELOG.

After the ruling

  • A / B: devx execution seat, one os-dev; file surface packages/{spec,cli,objectql,runtime}/package.json, scripts/changeset-changelog.mjs and its self-test; no governed path. Clause-②: no (no metadata contract change). Metadata-protocol: none.
  • C: close not planned.

os-decision-facets
① 项目长远合理性:包级 CHANGELOG 留作副产物,不发行、不重复,与「唯一真源在 content/docs/releases」一致。
② 实际业务拉动:每次安装 spec 多 10 MB;CI 的 git grep 已因读它撞过预算(#25321)。
③ 防 AI 犯错:生成器折叠逻辑进 --self-test,缺条目会在发布前的 release-notes 检查里响亮。
④ 创业阶段不扩散:减体积零新门禁,存量不横扫。
Prior rulings read: changelog,files field,tarball,prerelease → 2 hits (#25638, #25806); none; thread: none; repo: objectstack-ai/objectstack

Related

#25638 (closed), #25806 (closed), #25321 (closed), #25919 (open, ruled A).

Activity

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — tooling · priority:p2 · domain:devx · area:devpath · needs-user-decision · pm:awaiting-maintainer · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-26T12:04Z

    ⛔ Not a claim, ⛔ not a dispatch. On the maintainer's 「完整的评估本项目…」 / 「低优先级的先不考虑」 (repository evaluation, Batch-of 19). Low priorities were excluded at filing, so the execution cards grade p2.

    • A decision card: the options and the filer's recommendation are in the body, and the letter is the maintainer's. It touches what every published package ships (CHANGELOGs in the tarball), so it is a release-surface choice.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Brief-claimed-by: session_01KrKXQVvgYk2AJ4VkqMobyb · batch #397 · 2026-10-26T12:47Z

    Director seat, summon #51 continuation (ledger objectstack#12708). Presented to the maintainer in batch #397 (the CI / tooling family of the 2026-10-26 repository review) as item 3 of 4. Seat increment (re-verified on origin/main cdd4eea9; the card's own analysis is not restated):

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #397 item 3 · letter A′ · maintainer 「同意」 2026-10-26T13:19Z

    Recorded by the director seat (summon #51 continuation, session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708, brief 6416358883). Letter A′, the seat's variant the maintainer accepted: scripts/changeset-changelog.mjs folds every X.Y.Z-next.N section into the X.Y.Z section on the stable cut instead of copying it, with two --self-test cases (a prerelease section folds; a stable section is kept whole); existing CHANGELOG text is not rewritten (#25919 A 「存量不横扫」); CHANGELOG.md keeps shipping in the four packages' files — AGENTS.md:711 (Documentation Guardrails) makes the tarball copy the text an upgrading agent greps after install, and that rule stands. Not A/B (dropping the file from files contradicts AGENTS.md:711 without an AGENTS.md change) and not C. Open for a later word, not ruled: trimming the shipped copy to the current major at prepack — a rule change the maintainer would name.

    Workload of the chosen letter: devx · 1 PR (scripts/changeset-changelog.mjs + its self-test), no governed path, no files change; precedent #25638's generator fix (read its +/− before sizing).

    Execution: needs-user-decision → pm:queue in this act (domain:devx, p2); pm:awaiting-maintainer removed in the same stroke. Ruling-ref: names this comment; Clause-②: no, Metadata-protocol: none; the dev checks (confidence gap from the card) that no downstream script reads node_modules/@objectstack/*/CHANGELOG.md for a section the fold would rename.

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · 2026-10-26T13:25Z
    Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread session_01PbYqgMPfuTjR2CMEqrjHVL
    Account: os-steve
    Branch: claude/project-thread-3p0fdh (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)
    Worktree: objectstack-issue-26079
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface: scripts/changeset-changelog.mjs (the fold) and scripts/release-pending-publish.mjs (its --self-test gains the two cases, because that is the self-test CI runs; widened by the seat on spawn, since changeset-changelog.mjs has no CI-run self-test) only; ⛔ no files change in any package.json, ⛔ no rewrite of existing CHANGELOG text, ⛔ no workflow change (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6417011624
    Premise: holds (ruled A′ in 6417011624; scripts/changeset-changelog.mjs exists, last touched by #25669; not governed)
    Serial constraints cleared: no other Claim: names this file; the ruling keeps CHANGELOG.md in the four packages' files (AGENTS.md:711)
    Ruling-ref: 6417011624 (batch #397 item 3, letter A′, maintainer 「同意」)


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26079,
      "status": "done",
      "branch": "claude/project-thread-3p0fdh",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26156",
      "head": "2f44043a",
      "session": "session_01PbYqgMPfuTjR2CMEqrjHVL",
      "premise_still_valid": true,
      "ruling_ref": "6417011624",
      "files_changed": ["scripts/changeset-changelog.mjs (+184 -3)", "scripts/release-pending-publish.mjs (+69 -1)"],
      "line_budget": "257 changed lines (+253 / -4, 2 files) vs the 3000 human-merge threshold: under; precedent #25669 was +331 / -8",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 2f44043a: 33 derived, 33 run, every exit 0 captured before any pipe; --ran: 33 derived, 33 run, 0 NOT-MEASURED, 0 UNRUN. release-pending-publish --self-test: 136 cases across 34 batteries pass (3 new batteries, floor 31 -> 34). check:pm-dispatch-gates fast tier 1917 cases pass. CI families outside the derivation: read from PR #26156 check-runs, in_progress at report time.",
      "tests": "self-test above; end to end through @changesets/cli 3.0.3 in a throwaway repo (pre enter -> 1.2.0-next.0 -> 1.2.0-next.1 -> pre exit -> 1.2.0): 4 prerelease sections folded in 2 CHANGELOGs, older 1.1.0 / 1.1.0-next.0 byte-identical; control leg with the origin/main 95294be3 generator: 5 sections kept, 37 + 36 lines vs 23 + 22",
      "confidence_gap": "this repo: CHANGELOG readers count GA or major headings only; hotcrm at 9464673: no script reads node_modules/@objectstack/*/CHANGELOG.md; cloud: NOT MEASURED, not readable from this session",
      "deviations": [
        "file surface widened by the seat on the claim (6417130710) to scripts/release-pending-publish.mjs: changeset-changelog.mjs has no CI-run self-test, so the two cases (plus one wiring battery) live in the self-test lint.yml runs",
        "the fold runs from a process exit handler of changeset version, because the generator API has no post-write hook; declared in the PR body's Timing section",
        "no test file names either edited script (git grep over *.test.* / *.spec.* exit 1), so the self-test is the scripts' only suite"
      ],
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "0 GitHub MCP calls (claude-code-remote list_repos and add_repo read-only, for hotcrm)",
      "api_writes": "3 of 3 — git push of the branch; relay pr_create #26156 (draft, assignee os-steve, label skip-changeset, body read back identical); this os-dev-report comment",
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    devx seat 2 · review: ACCEPT → PR #26156 comment 6418072425 (ruling A′, 6417011624). Landing: ready + merge queue (all checks on the reviewed head green or skipped).


    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

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxpriority:p2Medium: important, M3tooling

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions