Skip to content

chore(release): v6.0.0 - #2252

Merged
hotlong merged 1 commit into
mainfrom
claude/project-thread-7xghug
Oct 23, 2026
Merged

hotlong merged 1 commit into
mainfrom
claude/project-thread-7xghug

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Description

The HotCRM 6.0.0 version PR. Director decision batch #1, item 4A, said that after #2233, #2235, #2236 and #2237 landed, the seat opens the version-cut PR (changeset:version and manifest sync), and the maintainer merges, tags and triggers the production publish. The PR was first cut as 5.2.0. The maintainer then ruled it a major (ruling 6363876622 on this PR, batch #4 item 3, letter B). That ruling changes the version number in 4A; 4A's instruction to cut now still stands.

The re-cut. Three changesets that this PR consumes now declare major, because their own text crosses the Major line in docs/RELEASE_STRATEGY.md §Compatibility Policy ("permission changes that break users, migration-required behavior"):

Changeset Was What makes it major
2202-objectstack-18-0-0.md patch Every HotCRM 5.x database must run os migrate organization-ownership, or ObjectStack 18.0.0 refuses to start
2200-position-permission-sets.md (#2229) minor The Service Manager profile is retired. A direct assignment of that profile grants nothing after the release
2167-enrollment-enforces-profile.md minor The campaign actions change API shape: params.crm_campaign becomes params.campaignId, the old key is refused with 400, and the answer bodies are new

Only the frontmatter bump changed in those three files. I ran pnpm changeset:version again on main 1e71d5e. It consumed all 38 pending changesets (3 major, 14 minor, 17 patch, and 4 empty-frontmatter ones that are tests or tooling only) and wrote 6.0.0. This PR consumes changesets and adds none, so it carries skip-changeset, as #2164, #2170 and #2172 did.

What 6.0.0 changes for customers

These change behaviour on environments that already have HotCRM installed. They are listed first.

  • Platform: ObjectStack 18.0.0-next.3 → 18.0.0 (via next.5). A database that an 18.0 prerelease created (every 5.x deployment) must go through os migrate organization-ownership before 18.0.0 will serve it. A front-end on another origin needs OS_CORS_ORIGIN, and a production os serve needs OS_AUTH_SECRET.
  • The Service Manager profile is retired (fix(positions): each position names the permission set it hands out, so Setup shows who holds what #2229). Each position now names the profile it hands out, and the Service Manager position hands out Service Agent. Anyone who was given the Service Manager profile directly gets nothing from it after this release.
  • Campaign enrollment runs as the caller (fix(marketing): every enrollment door writes as the caller, so a profile without create on campaign members cannot enroll #2186). Sales Rep and Sales Manager lose Enroll Members, Add to Campaign and Mark Responded. The API shape of all three actions changes.
  • New default permission set: CRM User (crm_user) (feat(profiles): crm_user is the package's one anchor-safe default permission set (#2231) #2232). The Marketplace package page suggests granting it to every signed-in member (the Everyone position) with one Grant. Permission sets add up, so once CRM User is granted, a Marketing User or Service Agent can also create and edit their own accounts and opportunities. On a self-hosted objectstack serve, every member holds it from the start.
  • Escalate Case and Close Case are shown only to people who may edit the case. Close Case runs as the caller.
  • New refusals:
    • A contract status change outside its route is refused. Expired and Terminated are final.
    • Line items cannot be written while an approval locks the deal.
    • Only Convert Lead can set a lead to Converted, and leads stuck at Converted can be edited again.
    • The public support form requires an email address.

Other changes: a Reports sidebar group with all ten reports, Convert Lead naming the account the lead will join, Pipeline by Stage shown as a bar chart, New forms that no longer ask for values the app fills in, closing a case completing its escalation task, and private deals kept out of task titles. The rest are wording, docs and seed fixes. Each has its own entry in CHANGELOG.md.

Type of Change

  • Breaking change (fix or feature that would cause existing functionality to not work as expected): ruled major, see above
  • Documentation update

Related Issues

Related to #2232, #2233, #2235, #2236, #2237, and every PR whose changeset this release consumes.

Changes Made

  • changeset version output. It wrote package.json (5.1.2 → 6.0.0) and CHANGELOG.md. In the new ## 6.0.0 section, ### Major Changes comes first (8daa492 enrollment, c8a7a70 positions, 16c2866 ObjectStack 18.0.0), then Minor, then Patch.
  • The rest of CHANGELOG.md is untouched. Everything from ## 5.1.2 down is byte-identical to the file before the cut (same sha256 c65c5353…). I read the new section in full: it contains the 34 consumed changesets and nothing else.
  • Version fields updated by hand, the same set as chore(release): 5.1.2 #2172:
    • the README badge
    • docs/ARCHITECTURE.md
    • docs/RELEASE_STRATEGY.md (Current version)
    • docs/STATUS.md (two places)
    • src/sales/index.ts
    • src/service/index.ts (version, and the ^6.0.0 dependency on the app)
  • whats-new in en, zh-Hans and zh-Hant:
    • The latest-release heading is v6.0.0, and the intro states ObjectStack 18.0.0.
    • A new "What 6.0.0 changes" section opens by saying why this is a major.
    • It ends with a "check before and after upgrading" list. The list names the os migrate organization-ownership requirement, the Service Manager profile retirement, the change to the campaign action API (params.campaignId, the old key refused with 400, new answers), what granting CRM User adds to each profile, and the OS_CORS_ORIGIN / OS_AUTH_SECRET requirements.

Testing

Run locally on this branch (head f7044fd):

Command Result
pnpm verify exit 0 — validate: HotCRM v6.0.0, 18 Objects, 362 Fields, 7 Permissions, 12 Positions · build: dist/objectstack.json 2,429.1 KB · test: 213 files, 4186 passed, 1 skipped
pnpm publish:marketplace:dry-run exit 0 — app.objectstack.hotcrm @ 6.0.0, bundle flattened from 2 packages, permissions 7, objects 18, ✓ published version 6.0.0 (dry-run, no HTTP); release notes 8,073 chars

The marketplace excerpt. Because the release now has a Major block, scripts/publish-marketplace.mjs sends that block and nothing else, capped at 8,000 characters. The block is 8,841 characters long, so the end of it is cut.

Note Position in the block Inside the excerpt?
campaign API change (params.campaignId) 1,987 yes
Service Manager profile retirement 4,091 yes
os migrate organization-ownership, with both commands 7,577 yes
OS_CORS_ORIGIN note — cut mid-sentence
OS_AUTH_SECRET, mail-body permission, flow-resume 400, "No app data changes" — no; they are in CHANGELOG.md and the whats-new checks

Checklist

  • Changeset: none added, because this PR consumes them (skip-changeset, the repo's convention for release PRs)
  • Self-review: I read the CHANGELOG section in full and checked that the old entries are byte-identical
  • Docs updated: the version fields, and whats-new in en, zh-Hans and zh-Hant
  • Existing tests pass locally

Additional Notes

Some entries say "the previous release" about a change that ships in this same release: 01808c3 refers to f22dfa5, and d723f6f refers to c16c0bb. The 18.0.0-next.5 entry says that next.5 is a prerelease, which the 18.0.0 entry beside it supersedes. I left these as written, because changeset version owns the file.

Maintainer steps

  1. Review this PR, mark it ready and merge it. It is a draft, and the seat will not mark it ready or turn on auto-merge.
  2. Push the tag v6.0.0 on the merge commit. That runs release.yml and publish-staging.yml.
  3. After staging is verified, dispatch publish-production.yml.

This PR pushes no tag and runs no workflow.

🤖 Generated with Claude Code

https://claude.ai/code/session_014xanhPEmGTMTfVH4UokwJT

@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR ships nothing to users (pure CI/docs chore) — changeset gate waived label Oct 23, 2026
@vercel

vercel Bot commented Oct 23, 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 23, 2026 11:46am UTC

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies Dependency bumps and lockfile changes labels Oct 23, 2026

Copy link
Copy Markdown
Collaborator

Ruling: batch #4 item 3 · letter B · maintainer 「同意」 2026-10-23T11:29:31Z

Recorded by the director ruling thread 「待决策汇总」 (Claude Code project "Objectstack", account os-elon-musk). Batch doc: https://claude.ai/artifact/Ld4xLWTrTSuhQ7eu2uAbHd. This amends the literal number in batch #1 item 4A (「v5.2.0」); 4A's intent — cut now, do not wait — stands.

Ruled: re-cut as 6.0.0 (B). docs/RELEASE_STRATEGY.md §Compatibility Policy L118 makes 「permission changes that break users, migration-required behavior」 a Major, and three consumed changesets cross that line by their own text: .changeset/2202-objectstack-18-0-0.md (declared patch) — every HotCRM 5.x database must run os migrate organization-ownership or 18.0.0 refuses to start; .changeset/2200-position-permission-sets.md (declared minor, #2229) — the Service Manager profile is retired and a direct profile assignment grants nothing after the release; .changeset/2167-enrollment-enforces-profile.md (declared minor) — the campaign actions change API shape (params.crm_campaign → params.campaignId, old key refused with 400, new answer bodies). 5.0.0 was cut as a major for the same class (ObjectStack 18 host + os migrate organization-ownership). Under a 6.0.0 the ### Major Changes block sorts first in the CHANGELOG section, so the migration and permission notes fall inside the 8,000-char marketplace cap (scripts/publish-marketplace.mjs L175), and a customer's ^5 range upgrade does not pick the release up on its own.

Workload (seat, ≈1–2 h): flip the bump in those three changesets to major; re-run pnpm changeset:version on current main; redo the hand-kept version surfaces this PR lists (README badge, docs/ARCHITECTURE.md, docs/RELEASE_STRATEGY.md Current version, docs/STATUS.md ×2, src/sales/index.ts, src/service/index.ts incl. the ^6.0.0 dependency, whats-new in en / zh-Hans / zh-Hant with the "check before and after upgrading" list under 6.0.0); retitle this PR chore(release): v6.0.0 (or close it and open the re-cut); re-run pnpm verify and pnpm publish:marketplace:dry-run and record both. The seat does not mark ready, arm auto-merge or push a tag.

Maintainer steps after the re-cut: review, mark ready and merge; push tag v6.0.0 on the merge commit (runs release.yml + publish-staging.yml); after staging is verified, dispatch publish-production.yml.


Generated by Claude Code

Re-cut of the 5.2.0 version PR as a major, per the maintainer ruling
recorded in hotcrm#2252 comment 6363876622 (batch #4 item 3, letter B),
which amends the number in director batch #1 item 4A.

Three consumed changesets now declare `major`, as their own text
crosses RELEASE_STRATEGY's Compatibility Policy line: 2202 (ObjectStack
18.0.0, `os migrate organization-ownership` required), 2200 (Service
Manager profile retired) and 2167 (campaign action API shape). Only
their frontmatter bump changed.

`changeset version` consumes the 38 pending changesets (3 major, 14
minor, 17 patch, 4 empty-frontmatter) and cuts 6.0.0: package.json and
CHANGELOG.md, with `### Major Changes` first. The tail from `## 5.1.2`
down is byte-for-byte unchanged. The hand surfaces follow: the README
badge, docs/ARCHITECTURE.md, docs/RELEASE_STRATEGY.md, docs/STATUS.md,
both package manifests (the service module's `^6.0.0` range on the app
included), and whats-new in all three locales, whose latest-release
section is now v6.0.0 on ObjectStack 18.0.0 with "What 6.0.0 changes"
and its checks before and after upgrading.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014xanhPEmGTMTfVH4UokwJT
@os-elon-musk
os-elon-musk force-pushed the claude/project-thread-7xghug branch from 521457b to f7044fd Compare October 23, 2026 11:45
@objectstack-fleet objectstack-fleet Bot changed the title chore(release): v5.2.0 chore(release): v6.0.0 Oct 23, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Re-cut as 6.0.0 is done, per ruling 6363876622 above. Recorded 2026-10-23T11:46Z.

  • Head: f7044fd4b6b05de2b75c3e9c0efd3ebd1219631f. This was a force-push with lease over 521457b, on main 1e71d5e.
  • Changesets: 2202, 2200 and 2167 now declare major, and only their frontmatter changed. pnpm changeset:version wrote 6.0.0, with ### Major Changes first. Everything from ## 5.1.2 down is byte-identical.
  • Version fields: all of them are on 6.0.0, including the ^6.0.0 dependency in src/service/index.ts.
  • whats-new (en, zh-Hans, zh-Hant): each has a "check before and after upgrading" list. It names os migrate organization-ownership, the Service Manager profile retirement and the campaign action API change.
  • pnpm verify: exit 0. HotCRM v6.0.0, 18 objects, 7 permission sets; build 2,429.1 KB; 213 test files, 4186 passed, 1 skipped.
  • pnpm publish:marketplace:dry-run: exit 0, @ 6.0.0. The release notes are the Major block, capped at 8,000 chars. The migration steps, the profile retirement and the API change are all inside the cap. The OS_CORS_ORIGIN / OS_AUTH_SECRET notes at the end of the 18.0.0 entry fall past it.

The title and body are updated. The PR is still a draft, with no tag pushed, no workflow run and no auto-merge. The maintainer steps are in the body.

@hotlong
hotlong marked this pull request as ready for review October 23, 2026 13:15
@hotlong
hotlong added this pull request to the merge queue Oct 23, 2026
Merged via the queue into main with commit 22dbad2 Oct 23, 2026
11 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.

3 participants