Repository navigation
chore(release): 4.0.0 - #2052
Merged
Merged
Conversation
…first paragraphs The 3.2.0 section opens each entry with its first paragraph, and two upgrade-relevant notes kept their operative instruction further down: - contact-mailing-address-one-field: the one-time conversion was in the third paragraph, and its command was the 17.6.0 route. 3.2.0 runs on 17.7.0, where no REST read returns the orphaned columns, so the command now exports them with `objectstack migrate unmapped-columns` first and passes `--unmapped` (the route the script header and the 17.7.0 entry already give). - 1907-sales-app-service-module: the menu-order change (My Cases moves to the end of My Work) was in the third paragraph. Text only; neither bump level changes. Part of #2049 Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3 Co-authored-by: Claude <noreply@anthropic.com>
`pnpm changeset:version` consumed the 77 pending changesets (13 minor, 36 patch, 28 empty) and computed 3.1.0 -> 3.2.0: it wrote `package.json` and spliced the 3.2.0 section into `CHANGELOG.md` (+1136 lines; every byte from `## 3.1.0` down unchanged). 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 in src/service/index.ts. Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3 Co-authored-by: Claude <noreply@anthropic.com>
`test/docs-declared-versions.test.ts` binds these to the app package's manifest version, and was red on the version cut alone (4 failures, measured): the version rows in docs/RELEASE_STRATEGY.md and docs/ARCHITECTURE.md, the README badge, the version sentence and the `pnpm validate` transcript in docs/STATUS.md (re-run: `HotCRM v3.2.0`, same figures), and the latest-release heading of content/docs/whats-new in all three locales. The 3.1.0 version PR (#1903) moved the same set. whats-new's latest-release section becomes 3.2.0 on ObjectStack 17.7.0, drops the "ships with the next HotCRM release" paragraph that 3.2.0 makes false, and gains "What 3.2.0 adds" with the checks to run before upgrading (the contact address conversion, the My Cases menu order, 404 for a write to an unseen record, strict import dates). Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3 Co-authored-by: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
The maintainer ruled this release 4.0.0 (contact-mailing-address-one-field is a major change under docs/RELEASE_STRATEGY.md section Compatibility Policy). The 3.2.0 cut is undone so `changeset version` can run again: the 77 consumed changesets, `package.json`, `CHANGELOG.md`, both package manifests and the version-bound docs return to their pre-cut state. The tree now equals b26ecb1: main plus the first-paragraph edits to the contact mailing-address and #1907 changesets, which are kept. Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3 Co-authored-by: Claude <noreply@anthropic.com>
The five `mailing_*` fields are removed and existing deployments run a one-time conversion, which docs/RELEASE_STRATEGY.md section Compatibility Policy files under Major (renamed or removed fields, migration-required behavior). Maintainer ruling A on the release level. Frontmatter only; the text is unchanged. `changeset status` now reads hotcrm -> 4.0.0. Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3 Co-authored-by: Claude <noreply@anthropic.com>
`pnpm changeset:version` consumed the 77 pending changesets (1 major, 12 minor, 36 patch, 28 empty) and computed 3.1.0 -> 4.0.0: it wrote `package.json` and spliced the 4.0.0 section into `CHANGELOG.md` (+1139 lines; every byte from `## 3.1.0` down unchanged). The contact mailing-address entry is the one Major Change, so it opens the section. 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 in src/service/index.ts. Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3 Co-authored-by: Claude <noreply@anthropic.com>
The set `test/docs-declared-versions.test.ts` binds to the app package's manifest, re-aligned after the re-cut: the version rows in docs/RELEASE_STRATEGY.md and docs/ARCHITECTURE.md, the README badge, the version sentence and `pnpm validate` transcript in docs/STATUS.md, and the latest-release section of content/docs/whats-new in all three locales. whats-new reads "What 4.0.0 adds" and opens by saying why it is a major: a contact's mailing address becomes one field, the five separate fields are removed, and an existing deployment converts the addresses once. The checks to run before upgrading are unchanged. Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3 Co-authored-by: Claude <noreply@anthropic.com>
…changeset `changeset version` stamps each entry with the latest commit that ADDED its changeset file (`git log --diff-filter=AC --follow --max-count=1`). On this branch the 77 files were deleted by the 3.2.0 cut and restored by 5e50863, so the re-cut stamped all 49 entries `5e50863`: a branch commit a squash merge leaves off main's history, in place of the 49 original commits. The section is regenerated by the same `node scripts/changeset-version.mjs`, run in a throwaway local clone whose history is main -> b26ecb1 -> a commit holding c8470ff's exact tree, where the files were never deleted. Its output differs from 35dbd3c's only in those stamps: with the 7-hex stamps masked the two CHANGELOG.md files are byte-identical, `package.json` is identical, and the 49 stamps are the same 49 commits the reviewed 3.2.0 cut carried, every one an ancestor of origin/main. This file is that output, copied unchanged; nothing in it is hand-written. Claude-Session: https://claude.ai/code/session_012zh91QzFgePbkmuHnugLN3 Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
|
维护者速读(终稿) · PR #2052 · 改了什么把 HotCRM 定为 4.0.0 版:
代码逻辑没有改动,只改了版本号、发布记录和文档。 为什么改
风险与代价(含回滚)
席位意见建议合并。席位自己在 git 上核过:
体量超过 3,000 行(主要是 77 个变更说明文件删除,以及它们汇入 CHANGELOG),按规定须由您批准合并。席位不会自行转 ready、入队或开自动合并。 你要做的(一个动作)审阅并合并本 PR。合并后,席位在合并提交上打 Generated by Claude Code |
os-zhuang
approved these changes
Oct 10, 2026
os-zhuang
marked this pull request as ready for review
October 10, 2026 12:42
This was referenced Oct 10, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #2049
Clause-②: no
Cuts HotCRM 4.0.0: the version PR only. The seat pushes the
v4.0.0tag and verifies staging after the merge. Landing tier: H. The diff is 3,077 changed lines (+1266 / −1811) across 88 files, over the 3,000-line human-merge line; no governed path is touched. The branch name still says3-2-0from the first cut.Patch round 1: 3.2.0 → 4.0.0 (the maintainer's ruling A on #2049)
docs/RELEASE_STRATEGY.md§ Compatibility Policy puts "renamed or removed objects/fields … migration-required behavior" under Major. The contact change removes five fields and needs a one-time conversion, so the maintainer ruled 4.0.0 (#2049). The re-cut:package.json/CHANGELOG.mdfrommain.contact-mailing-address-one-field.mdto'hotcrm': major, keeping the round-0 first-paragraph edits.pnpm changeset:versionagain.pnpm exec changeset status --verbose→hotcrm -> 4.0.0: 1 major, 12 minor, 36 patch, 28 empty.The first re-cut credited each entry to the restore commit. The CHANGELOG was then regenerated from a clean clone (
185909ce). It is byte-identical to the first re-cut except the 49 stamp lines, which now name the commit that added each changeset (all ancestors ofmain).Bump reading (head
185909ce)CHANGELOG.md: a new## 4.0.0section (Major, then Minor, then Patch). Everything from## 3.1.0down is byte-identical tomain..changeset/: all 77 pending changesets consumed;README.mdandconfig.jsonremain.scripts/publish-marketplace.mjs) send the### Major Changessubsection when a release has one, so 4.0.0's listing carries exactly the contact-address entry. The conversion step sits at char 797 of 2,531, inside the 8,000-char cap. The full list is inCHANGELOG.mdand on the What's new page.Upgrade notes in the 4.0.0 section
Every pending changeset's first paragraph was read as the 4.0.0 section renders it (49 entries; the 28 empty changesets render none). Two were edited; only the text changed, and the one level change is the ruling's:
contact-mailing-address-one-field.md(now major): the one-time conversion sat in its third paragraph. The first paragraph now ends: "An existing deployment runsscripts/backfill-contact-mailing-address.tsonce after upgrading, beforeos migrate apply --allow-destructive". The third paragraph gave the 17.6.0 route. 4.0.0 runs on 17.7.0, where no REST read returns the orphaned columns, so its command now exports them first withobjectstack migrate unmapped-columns --object crm_contact --jsonand passes--unmapped. That is the route the script's header and the 17.7.0 entry already give.1907-sales-app-service-module.md(patch): the first paragraph now says HotCRM still installs as one app and that the one visible change is the menu order. My Cases is the last item of My Work.Read and left alone:
line-item-line-number-writer.mdalso carries an "existing deployments" back-fill. It is optional, because the hook numbers a line on its next edit.Manifest alignment
src/sales/index.ts: the app package'sversion3.1.0 → 4.0.0.src/service/index.ts: the module'sversion3.1.0 → 4.0.0, anddependencies['app.objectstack.hotcrm']^3.1.0→^4.0.0.manifest=app.objectstack.hotcrm4.0.0 /^17.7.0; bothpackages[]entries at 4.0.0, and the module depends on^4.0.0.releaseNoteskey ofobjectstack.manifest.json. The phrase andscripts/publish-marketplace.mjs(release_notes: mp.releaseNotes, feat: marketplace publish path (manifest + script + staging/prod workflows) #369) both landed on 2026-06-04, and no release ever declared the key. Since 3.0.0 (chore(release): 3.0.0 #1242) the script derives the notes fromCHANGELOG.mdwhen the key is absent, so there is nothing to align by hand.Files beyond the claim's file surface, and why
test/docs-declared-versions.test.tsbinds every page that states the current version to the app package's manifest. After the version cut alone it measured 4 failed / 16 passed. Seven files now follow 4.0.0, the same set the 3.1.0 version PR (#1903) moved:| Current version |rows ofdocs/RELEASE_STRATEGY.mdanddocs/ARCHITECTURE.md;docs/STATUS.md: the version sentence, and thepnpm validatetranscript re-read from a real run (HotCRM v4.0.0, every figure unchanged);content/docs/whats-newin all three locales. It now says 4.0.0 on ObjectStack 17.7.0 and drops the "ships with the next HotCRM release" paragraph, which this release makes false. It gains "What 4.0.0 adds", which says why this is a major and lists the checks to run before upgrading:os migrate apply --allow-destructive;mailing_address;docs-declared-versions(20/20 green) is part ofpnpm verify.The self-hosting caveat: measured, not reproduced as filed (dropped, no changeset)
The planned changeset would have said that booting the bare artifact on
@objectstack/*17.7.0 starts without sign-in because of objectstack-ai/objectstack#22288. Five bounded boots on port 4937 (timeout 70) say otherwise. Each boot had a freshOS_HOMEand the same throwawayOS_SECRET_KEY:OS_AUTH_SECRETGET /api/v1/auth/get-sessiondist/objectstack.json, no configobjectstack serveServer is ready — DEGRADED: missing core services: authENDPOINT_NOT_FOUNDobjectstack serve✓ Server is readySign in firstobjectstack.config.tsobjectstack serveServer is ready — DEGRADED: missing core services: authobjectstack.config.tsobjectstack startstartcreates one✓ Server is readyobjectstack startstartcreates one✓ Server is readyAuth,Security,Audit,@objectstack/account,@objectstack/setupon top).@objectstack/cli17.7.0, productionserveregistersAuthPluginonly when it has a secret.startreads or creates one in its home.requires, so both read the same empty list.docs/DEPLOYMENT.md) ispnpm start, which is boot D. There is no release-specific self-hosting caveat to record.Gates
On
185909ce:OS_VERIFY_LOCK_SLOT=hotcrm-2049 bash …/os-verify-lock.sh -c 'pnpm verify'→VERDICT command-exit 0;Tests 3622 passed | 1 skipped (3623).pnpm publish:marketplace:dry-run→── HotCRM (app.objectstack.hotcrm) @ 4.0.0,release notes: 2531 chars. The contact entry is at char 21 and its conversion sentence at char 797.185909ce: every check succeeded.Check Changesetis skipped underskip-changeset, the label the 3.1.0 version PR (chore(release): 3.1.0 #1903) also carried, because a version PR consumes the changesets rather than adding one.维护者速读(草稿)
The seat's final 维护者速读 is posted as a comment on this PR; the round-0 draft described 3.2.0 and is superseded.
Generated by Claude Code