Skip to content

chore(release): 4.0.1 - #2056

Merged
objectstack-fleet[bot] merged 4 commits into
mainfrom
claude/issue-2053-release-4-0-1
Oct 10, 2026
Merged

objectstack-fleet[bot] merged 4 commits into
mainfrom
claude/issue-2053-release-4-0-1

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #2053
Clause-②: no

The 4.0.1 version PR, round 2 of #2053. It releases the publish flatten and its guard (#2054, d7decd43) and the inlined app icon (#2055, 45478585) through the normal flow of docs/RELEASE_STRATEGY.md § Version Sources and § Release Checklist. There is no code change. The tag v4.0.1 is the maintainer's push after the merge, and staging publishes from it.

The bump

pnpm exec changeset status --verbose on 45478585, before any edit, and again after the text edit below:

Packages to be bumped:
- patch
  - hotcrm -> 4.0.1
    - .changeset/2051-inline-logo.md
    - .changeset/2053-publish-flat-bundle.md

pnpm changeset:version (exit 0) consumed both and wrote two files:

  • package.json: 4.0.0 → 4.0.1;
  • the ## 4.0.1 section of CHANGELOG.md: +16 lines, 0 removed, so every byte from ## 4.0.0 down is unchanged.

Each entry is stamped with the main commit that added its changeset: 4547858 (#2055) and d7decd4 (#2054). Both are ancestors of origin/main (merge-base --is-ancestor, exit 0).

The changeset text edit, and why

4.0.0's staging listing was withdrawn and production never had it, so 4.0.1 is the first 4.x an installer upgrades to from 3.1.0. scripts/publish-marketplace.mjs sends a release's ### Major Changes subsection when it has one, and otherwise the head of the section, capped at 8,000 chars. 4.0.1 has no major, so its listing shows its two patch entries. 4.0.0's notes, which carry the one-time contact address conversion, are not on that listing.

So the first paragraph of .changeset/2053-publish-flat-bundle.md now says, in plain words:

  • 4.0.1 is the first 4.x release that installs whole;
  • 4.0.0's marketplace publish carried an empty app and was withdrawn;
  • the upgrade from 3.x still carries 4.0.0's one-time step: convert the contact mailing addresses with scripts/backfill-contact-mailing-address.ts before os migrate apply --allow-destructive;
  • the 4.0.0 entry of CHANGELOG.md holds the commands.

The previous text is now the second paragraph. The edit is text only: the bump stays patch.

Where the conversion sentence lands. Changesets orders the one-line 2051 entry first. In the 893-char notes:

  • the 2053 entry starts at char 109;
  • its conversion sentence starts at char 297, with the script name at 393 and os migrate apply --allow-destructive at 446.

All of it is far inside the 8,000-char cap. The offsets come from the script's own releaseNotesFor text, evaluated against this CHANGELOG.md; its length, 893, equals the dry run's release notes: 893 chars.

Manifests and docs, aligned by hand as #2052 did

  • Manifests. src/sales/index.ts version → 4.0.1. src/service/index.ts version → 4.0.1, and dependencies['app.objectstack.hotcrm'] → ^4.0.1.
  • Maintainer pages that test/docs-declared-versions.test.ts binds:
    • the README badge;
    • the version rows of docs/ARCHITECTURE.md and docs/RELEASE_STRATEGY.md;
    • docs/STATUS.md's version sentence, and its pnpm validate transcript re-read from a real run: HotCRM v4.0.1, every figure unchanged (18 Objects 358 Fields · 1 Apps 14 Views 8 Pages 5 Dashboards 10 Reports 31 Actions · 32 Flows · 12 Positions 7 Permissions).
  • content/docs/whats-new, all three locales.
    • The latest-release heading and opening sentence state 4.0.1. The "versions between v1.0 and …" note follows them, as in chore(release): 4.0.0 #2052.
    • One short paragraph above "What 4.0.0 adds": 4.0.1 is the first 4.x that installs from the marketplace (4.0.0's publish there was empty and was withdrawn), so a 3.x deployment upgrades straight to it; the sidebar logo and favicon now show on hosted installs.
    • "What 4.0.0 adds" and its checks before upgrading are kept: they apply to anyone coming from 3.x.

Gates and the dry run, head 979d0ef5

pnpm verify under the shared lock: os-verify-lock: VERDICT command-exit 0 · held the lock 497s.

  • validate: ✓ Validation passed, HotCRM v4.0.1;
  • typecheck clean; lint 18 suggestion(s), no errors;
  • ✓ i18n lint gate: 0 i18n/missing-* issues;
  • ✓ source hygiene clean; ✓ source token ratchet clean;
  • ✓ Build complete, Artifact: dist/objectstack.json (2343.6 KB);
  • Test Files 177 passed (177), Tests 3635 passed | 1 skipped (3636).

pnpm build (Data: 18 Objects 358 Fields), then DRY_RUN=1 pnpm publish:marketplace, exit 0:

── HotCRM (app.objectstack.hotcrm) @ 4.0.1
DRY_RUN=1 — no HTTP calls will be made.
  bundle (flattened from 2 packages): manifest {9 keys} · i18n {3 keys} · docs 4 · permissions 7 · objects 18 · data 20 · translations 1 · apps 1 · views 14 · pages 8 · dashboards 5 · reports 10 · datasets 9 · actions 31 · flows 32 · emailTemplates 76 · positions 12 · sharingRules 10 · skills 6 · hooks 44 · mappings 3 · requires 8
  release notes: 893 chars
  ✓ published version 4.0.1

The bundle line is identical to round 1's on 6c78cfa1.

Size: 13 files, +47 / −35. No governed path, so Tier S.

Acceptance notes

  • Left to the maintainer's acceptance on staging after the tag (not measured here): the stored row and its object count, a fresh install, the 3.1.0 → 4.0.1 upgrade, and the listing's notes as cloud renders them.
  • Check Changeset: this PR consumes the two changesets and adds none. It needs the skip-changeset label, as chore(release): 3.1.0 #1903 and chore(release): 4.0.0 #2052 carried it; the seat applies it.
  • A dormant quirk in releaseNotesFor (observation, not filed). The major-section lookahead ends in a backslash-Z escape. A JavaScript regex has no end-of-input anchor by that name, so it matches a literal capital Z. A Major Changes body that contains a capital Z would be cut at that letter. It changes nothing today:
    • 4.0.1 has no major;
    • neither 4.0.0's nor 3.0.0's major body contains a capital Z, so both come out whole (2,531 and 3,938 chars).

Generated by Claude Code

…ls whole

4.0.0's marketplace listing was withdrawn and production never had it, so
4.0.1 is the first 4.x an installer upgrades to from 3.1.0. The listing
notes for a release without a major are the head of its CHANGELOG
section, so this entry's first paragraph now says so in plain words and
carries 4.0.0's one-time contact mailing-address conversion (the backfill
script before `os migrate apply --allow-destructive`), pointing at the
4.0.0 entry for the commands.

Text only; the bump level stays patch.

Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3
Co-authored-by: Claude <noreply@anthropic.com>
`pnpm changeset:version` consumed the 2 pending changesets (2 patch:
2051-inline-logo, 2053-publish-flat-bundle) and computed 4.0.0 -> 4.0.1:
it wrote `package.json` and spliced the 4.0.1 section into `CHANGELOG.md`
(+16 lines; every byte from `## 4.0.0` down unchanged). Each entry is
stamped with the main commit that added its changeset: 4547858 (#2055)
and d7decd4 (#2054).

Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3
Co-authored-by: Claude <noreply@anthropic.com>
Matched by hand, per docs/RELEASE_STRATEGY.md section Version Sources:
the app package's `version` in src/sales/index.ts, and the service
module's `version` and its `dependencies` range on the app (`^4.0.1`) in
src/service/index.ts.

The maintainer pages `test/docs-declared-versions.test.ts` binds move with
them: the README badge, the version rows in docs/ARCHITECTURE.md and
docs/RELEASE_STRATEGY.md, and docs/STATUS.md's version sentence and its
`pnpm validate` transcript (re-run: `HotCRM v4.0.1`, every figure
unchanged: 18 Objects 358 Fields, 1 Apps 14 Views 8 Pages 5 Dashboards
10 Reports 31 Actions, 32 Flows, 12 Positions 7 Permissions).

Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3
Co-authored-by: Claude <noreply@anthropic.com>
…alls

The latest-release heading and opening sentence state 4.0.1 in all three
locales, as `test/docs-declared-versions.test.ts` binds them. One short
paragraph above "What 4.0.0 adds" says that 4.0.1 is the first 4.x that
installs from the marketplace (4.0.0's publish there was empty and was
withdrawn), so a 3.x deployment upgrades straight to it, and that the
sidebar logo and favicon now show on hosted installs. "What 4.0.0 adds"
and its checks before upgrading stay: they apply to anyone coming from 3.x.

Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3
Co-authored-by: Claude <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 10, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated
hotcrm Ignored Ignored Oct 10, 2026 3:37pm UTC

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies Dependency bumps and lockfile changes labels Oct 10, 2026
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR ships nothing to users (pure CI/docs chore) — changeset gate waived label Oct 10, 2026
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 10, 2026 16:28
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 10, 2026
Merged via the queue into main with commit 1d7148b Oct 10, 2026
11 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency bumps and lockfile changes documentation Improvements or additions to documentation skip-changeset PR ships nothing to users (pure CI/docs chore) — changeset gate waived

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants