Skip to content

Commit 185a647

Browse files
os-zhuangclaude
andcommitted
chore(deps): upgrade ObjectStack 9.4 → 9.11 + metadata migrations (1.2.0)
Bumps all @objectstack/* to ^9.11.0 (manifest specVersion ^9.11.0, app 1.2.0). 9.5→9.11 is mostly additive; four breaking changes required metadata fixes, plus one runtime behavior change. Full pipeline green (validate + typecheck + build + 17 tests) and browser-verified end-to-end. Breaking-change migrations: - Permissions: cross-ref validator no longer auto-prefixes object refs with the namespace — all 6 profiles now use crm_-prefixed object/field keys (44 errors). - Fields: removed display props dropped from the schema (addressFormat, displayMap, allowGeocoding, colorFormat, presetColors, allowHalf, writeRequiresMasterRead) from account/lead/contact/quote/contract. - CEL: monthsBetween() removed — crm_contract.valid_contract_term rewritten as addMonths(start_date, contract_term_months) != end_date. - Seed: object validations now run on defineSeed() inserts (9.4 bypassed them); closed cases now carry resolution, escalated cases escalation_reason. Runtime behavior: - 9.x re-stamps owner_id/timestamps post-seed via beforeUpdate; the opportunity/quote "freeze closed record" hooks now exempt framework-managed columns so system writes pass while business-field edits stay blocked (verified: amount write on closed-won → 400, next_step → 200). 53 advisory liveness-dead-property warnings (enable.* flags, lookup referenceFilters) left in place — no typed working replacement; documented in CHANGELOG. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 47c169a commit 185a647

19 files changed

Lines changed: 1033 additions & 592 deletions

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@
22

33
All notable changes to HotCRM are documented in this file. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); HotCRM follows [Semantic Versioning](https://semver.org/).
44

5+
## [1.2.0] — 2026-06-20
6+
7+
Platform upgrade to ObjectStack 9.11. Built, validated, type-checked, unit-tested (17/17) and browser-verified against `@objectstack/* ^9.11.0`; the manifest `specVersion` now declares `^9.11.0` (was `^9.4.0`). The 9.5→9.11 deltas surfaced four breaking changes that required metadata fixes:
8+
9+
### Changed
10+
11+
- **ObjectStack platform 9.4 → 9.11** across all `@objectstack/*` packages. Additive on the runtime surface except for the breaks below.
12+
13+
### Fixed (breaking-change migrations)
14+
15+
- **Permission object references must be fully-qualified.** The cross-reference validator no longer auto-prefixes a permission's `objects`/`fields` keys with the stack namespace. All six profiles now reference `crm_lead`/`crm_account`/… (and field overrides like `crm_account.annual_revenue`) instead of the bare `lead`/`account` names — matching views, sharing rules, and actions. Previously `objectstack validate` failed with 44 "object not defined in objects" errors.
16+
- **Removed dropped field-display config props.** `Field` no longer types `addressFormat`, `displayMap`, `allowGeocoding`, `colorFormat`, `presetColors` (address/location/color fields), `allowHalf` (rating), or `writeRequiresMasterRead` (master-detail). These display-only hints were stripped from the field schema; they have no typed replacement and were removed from `account`/`lead`/`contact`/`quote`/`contract` objects.
17+
- **`monthsBetween()` CEL builtin removed.** `crm_contract`'s `valid_contract_term` validation now expresses the same invariant with the surviving `addMonths()` builtin: `addMonths(start_date, contract_term_months) != end_date`.
18+
- **Object validations now run on seed inserts.** 9.x enforces object validation rules during `defineSeed()` loading (9.4 bypassed them). The case seed data shipped `closed` cases with no `resolution` and `escalated` cases with no `escalation_reason`, which violate the object's own rules — ~14 records silently failed to insert. The generator and the two explicit closed cases now supply both fields, so all 38 cases load.
19+
- **Lifecycle "freeze closed record" hooks no longer block framework writes.** `opportunity_lifecycle` and the quote freeze hook now exempt framework-managed columns (`owner_id`, `updated_at`, `created_by`, …) from their field-freeze guard. 9.x re-stamps ownership on records post-seed via `beforeUpdate`; the old guard rejected those system writes (`Attempted: owner_id, updated_at`). User edits to business fields on closed records are still blocked (verified: `amount` write on a closed-won opp → 400, narrative `next_step` write → 200).
20+
21+
### Notes
22+
23+
- 53 advisory `liveness-dead-property` build warnings remain (object `enable.{trackHistory,files,feeds,activities}` flags; lookup `referenceFilters`). These are non-fatal nudges with no typed working replacement — the console now reads `lookup_filters` (not exposed by the spec builder) and per-field `Field.trackHistory` supersedes the object flag. Left in place pending a framework-supported migration path.
24+
525
## [1.1.0] — 2026-06-14
626

727
Platform upgrade to ObjectStack 9.4 and in-product documentation. Built and validated against `@objectstack/* ^9.4.0`; the manifest `specVersion` now declares `^9.4.0` (was `^7.7.0`).

objectstack.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default defineStack({
3131
manifest: {
3232
id: 'app.objectstack.hotcrm',
3333
namespace: 'crm',
34-
version: '1.1.0',
34+
version: '1.2.0',
3535
type: 'app',
3636
name: 'HotCRM',
3737
description: 'AI-Native CRM for the ObjectStack marketplace — Accounts, Contacts, Leads, Opportunities, Cases, Knowledge, Forecasts, Campaigns, Contracts.',

objectstack.manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://schemas.objectstack.dev/template-manifest.json",
33
"name": "hotcrm",
4-
"specVersion": "^9.4.0",
4+
"specVersion": "^9.11.0",
55
"manifestId": "app.objectstack.hotcrm",
66
"displayName": "HotCRM",
77
"description": "AI-Native CRM for the ObjectStack marketplace — Accounts, Contacts, Leads, Opportunities, Cases, Knowledge, Forecasts, Campaigns, and Contracts in one production-grade workspace.",

package.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hotcrm",
3-
"version": "1.1.0",
3+
"version": "1.2.0",
44
"description": "HotCRM - Production CRM built on ObjectStack",
55
"private": true,
66
"main": "./objectstack.config.ts",
@@ -26,17 +26,17 @@
2626
},
2727
"packageManager": "pnpm@10.33.0",
2828
"dependencies": {
29-
"@objectstack/account": "^9.4.0",
30-
"@objectstack/cli": "^9.4.0",
31-
"@objectstack/driver-memory": "^9.4.0",
32-
"@objectstack/driver-sql": "^9.4.0",
33-
"@objectstack/driver-sqlite-wasm": "^9.4.0",
34-
"@objectstack/metadata": "^9.4.0",
35-
"@objectstack/objectql": "^9.4.0",
36-
"@objectstack/runtime": "^9.4.0",
37-
"@objectstack/service-analytics": "^9.4.0",
38-
"@objectstack/service-automation": "^9.4.0",
39-
"@objectstack/spec": "^9.4.0"
29+
"@objectstack/account": "^9.11.0",
30+
"@objectstack/cli": "^9.11.0",
31+
"@objectstack/driver-memory": "^9.11.0",
32+
"@objectstack/driver-sql": "^9.11.0",
33+
"@objectstack/driver-sqlite-wasm": "^9.11.0",
34+
"@objectstack/metadata": "^9.11.0",
35+
"@objectstack/objectql": "^9.11.0",
36+
"@objectstack/runtime": "^9.11.0",
37+
"@objectstack/service-analytics": "^9.11.0",
38+
"@objectstack/service-automation": "^9.11.0",
39+
"@objectstack/spec": "^9.11.0"
4040
},
4141
"optionalDependencies": {
4242
"better-sqlite3": "^12.10.0"

0 commit comments

Comments
 (0)