Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .changeset/objectstack-17-0-0-rc-5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
'hotcrm': patch
---

Upgrade the platform to ObjectStack 17.0.0-rc.5, and declare the matching
`^17.0.0-rc.5` protocol range in the app config and manifest.

**Nothing in this app had to change to absorb it.** That is the finding, not an
omission — rc.5 ships three breaking changes and all three land outside what
HotCRM authors:

- **CSV `import` is no longer a `system-data` bucket default** (spec, #4671).
Objects in that bucket now opt into the import wizard one at a time, so the
three RBAC join tables that decide who can do what — user↔position,
user↔permission set, position↔permission set — lose their bulk-grant entry
unless a platform object asks for it back. HotCRM declares no `system-data`
object of its own and no page of its admin documentation points an
administrator at CSV for those bindings, so no HotCRM surface moves. The
authorization boundary was never the thing being changed: import was only ever
an affordance, and every row a CSV wrote already went through the same
delegated-admin, RLS and permission-set adjudication as a row typed by hand.
- **Transaction handles no longer leak across data sources** (objectql, #5351).
A business write that crosses data sources inside one `transaction()` is now
refused outright, and append-only system ledgers are carved out to commit on
their own connection. This only bites deployments that register a second data
source; HotCRM registers none — `Tenancy: single`, one
`SqlDriver(better-sqlite3)` — so the path is unreachable here. Verified on a
fresh boot: 242 `sys_audit_log` rows landed alongside the seed.
- **`subscribeMetadata` narrowed its `type` parameter** (client, #4627). HotCRM
does not depend on `@objectstack/client` or `@objectstack/client-react`.

Also new and also inapplicable: `os migrate summary-nulls` backfills roll-up
`count` / `sum` columns left `NULL` by pre-fix inserts. HotCRM has no platform
roll-ups to backfill — its line items and campaign members reach their parents
through `lookup`, not `master_detail`, and the aggregates it displays are plain
number fields written by its own hooks. `docs/MAINTENANCE.md` §3.2 now records
why, and what would change that answer.

Verified on rc.5 rather than assumed: the full gate is green (validate,
typecheck, lint, hygiene, build, and 1886 tests including the
`parent-derived-reach` pins rc.4 established), and a reset-and-reseed boots the
server clean and seeds all 17 objects with 342 rows.
4 changes: 2 additions & 2 deletions content/docs/whats-new.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@ http://localhost:4001 and create the first admin account.

## v2.2.2 — Latest release

**HotCRM 2.2.2**, running on **ObjectStack 17.0.0-rc.4** across every
**HotCRM 2.2.2**, running on **ObjectStack 17.0.0-rc.5** across every
`@objectstack/*` package. The app manifest declares the matching
`^17.0.0-rc.4` protocol range, so a runtime on a different protocol major
`^17.0.0-rc.5` protocol range, so a runtime on a different protocol major
refuses the load up front with a structured diagnostic instead of failing deep
in a schema parse.

Expand Down
4 changes: 2 additions & 2 deletions content/docs/whats-new.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ HOTCRM_TOKEN=... ./scripts/wow1-live-schema.sh

## v2.2.2 —— 最新发布

**HotCRM 2.2.2**,全线 `@objectstack/*` 包运行在 **ObjectStack 17.0.0-rc.4** 上。
应用清单声明了与之匹配的 `^17.0.0-rc.4` 协议区间,因此协议大版本不同的运行时会在
**HotCRM 2.2.2**,全线 `@objectstack/*` 包运行在 **ObjectStack 17.0.0-rc.5** 上。
应用清单声明了与之匹配的 `^17.0.0-rc.5` 协议区间,因此协议大版本不同的运行时会在
装载之初就带着结构化诊断拒绝加载,而不是在某次 schema 解析的深处才失败。

> **这一页不维护第二张发布表。** 逐版本的发布历史在仓库的 `CHANGELOG.md` 里,由每个
Expand Down
4 changes: 2 additions & 2 deletions content/docs/whats-new.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ HOTCRM_TOKEN=... ./scripts/wow1-live-schema.sh

## v2.2.2 —— 最新發行

**HotCRM 2.2.2**,全線 `@objectstack/*` 套件執行在 **ObjectStack 17.0.0-rc.4** 上。
應用清單宣告了與之相符的 `^17.0.0-rc.4` 協定區間,因此協定大版本不同的執行時會在
**HotCRM 2.2.2**,全線 `@objectstack/*` 套件執行在 **ObjectStack 17.0.0-rc.5** 上。
應用清單宣告了與之相符的 `^17.0.0-rc.5` 協定區間,因此協定大版本不同的執行時會在
載入之初就帶著結構化診斷拒絕載入,而不是在某次 schema 解析的深處才失敗。

> **這一頁不維護第二張發行表。** 逐版本的發行歷史在儲存庫的 `CHANGELOG.md` 裡,由每個
Expand Down
14 changes: 14 additions & 0 deletions docs/MAINTENANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,20 @@ fields this app declares (`crm_product.image`, `crm_product.datasheet`,
install — no seed data populates a media field — but an in-place upgrade needs
both before strict validation is safe to enable.

`17.0.0-rc.5` adds a third, `os migrate summary-nulls`, which recomputes
roll-up `count` / `sum` columns left `NULL` by rows inserted before the
create-time fix. **It does not apply to HotCRM**, and the reason is worth
writing down rather than re-deriving on the next upgrade: the migration walks
*platform* roll-up columns, which only exist on `master_detail` relationships,
and this app declares none — every line-item and member object reaches its
parent through a `lookup`. The four aggregates HotCRM does show
(`crm_opportunity.amount`, `crm_quote` totals, the campaign metrics, the case
activity stamp) are ordinary number fields written by the hooks in
`src/objects/*.hook.ts`, so no platform code has ever seeded or recomputed
them. Re-check this if a future change converts a line-item lookup to
`master_detail` — the lint rule `relationship/line-item-should-be-master-detail`
suggests exactly that on four fields today.

If a scan reports rows it cannot convert, the escape hatches downgrade the new
enforcement to warnings while you fix the data. They are temporary, not a
destination:
Expand Down
2 changes: 1 addition & 1 deletion docs/STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ pnpm verify
| --- | --- |
| Node.js | `>=22` |
| pnpm | `>=10.0.0` |
| ObjectStack packages | `17.0.0-rc.4` |
| ObjectStack packages | `17.0.0-rc.5` |
| Local dev port | `4001` |

Each row above is asserted against `package.json` (`engines`, the `@objectstack/*`
Expand Down
2 changes: 1 addition & 1 deletion objectstack.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export default defineStack({
// pairing against `objectstack.manifest.json` instead of trusting this
// comment, because two platform upgrades in a row (rc.2, then rc.3) moved
// the manifest and left this line behind (#728).
engines: { protocol: '^17.0.0-rc.4' },
engines: { protocol: '^17.0.0-rc.5' },
},

// ─── Platform capabilities this app needs ─────────────────────────
Expand Down
4 changes: 2 additions & 2 deletions objectstack.manifest.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"$schema": "https://schemas.objectstack.dev/template-manifest.json",
"name": "hotcrm",
"specVersion": "^17.0.0-rc.4",
"specVersion": "^17.0.0-rc.5",
"engines": {
"protocol": "^17.0.0-rc.4"
"protocol": "^17.0.0-rc.5"
},
"manifestId": "app.objectstack.hotcrm",
"displayName": "HotCRM",
Expand Down
Loading
Loading