Skip to content

Commit 0fddd01

Browse files
authored
docs(changelog): backfill protocol releases 10.0.0–11.10.0 in the root protocol changelog (#2590)
The root CHANGELOG.md declares itself the ObjectStack Protocol changelog but its released sections stopped at 4.0.1; the 10.x/11.x protocol era existed only in packages/spec/CHANGELOG.md. Backfills one curated protocol-facing section per spec release 10.0.0 -> 11.10.0 (dates from the npm registry): breaking changes, behavior changes, deprecations/retirements, additions, consumer-visible fixes — every entry traceable to the changesets record, upgrading-to-11.md, or the referenced ADR/PR. Adds a versioning note (from 10.0.0 the protocol version is the published @objectstack/spec version) and makes the deprecation -> retirement windows visible end-to-end — the traceability seed for ADR-0087 D4.
1 parent 069c205 commit 0fddd01

1 file changed

Lines changed: 255 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1569,6 +1569,261 @@ Followup to M10.30a. Walked every Setup menu in a real tenant; produced verdict
15691569
- 176 service-ai tests passing (18 new tests for stream encoder, route
15701570
dual-mode, systemPrompt, flat options, array content)
15711571

1572+
> **Versioning note (protocol releases).** From `10.0.0` onward the protocol version is
1573+
> the published version of **`@objectstack/spec`** (per-package changesets releases; the
1574+
> full raw per-release record lives in `packages/spec/CHANGELOG.md`, which also ships
1575+
> inside the npm artifact as of 11.10.0). The sections below backfill the
1576+
> **protocol-facing** changes of the `10.x``11.x` line — breaking changes,
1577+
> deprecations/retirements, and additions to the authorable surface — so this file again
1578+
> does what its header promises. Releases `4.0.2``9.11.0` remain documented in the
1579+
> per-package changelogs. For every `10.x → 11.x` migration step see
1580+
> [docs/upgrading-to-11.md](./docs/upgrading-to-11.md); the compatibility gates that
1581+
> govern what may break and when are ADR-0059, and the upgrade-communication contract is
1582+
> ADR-0087.
1583+
1584+
## [11.10.0] — 2026-07-03
1585+
1586+
### Removed — deprecation window closed
1587+
- **`compactLayout` alias retired** (deprecated since 11.7.0, ADR-0085; #2536): the
1588+
canonical key is `highlightFields`. `ObjectSchema.create()` now rejects
1589+
`compactLayout` as an unknown key (with tombstone guidance, below); lenient `parse()`
1590+
strips it; the parse-time alias and the back-fill transition mirror are removed —
1591+
served metadata carries the canonical key only.
1592+
1593+
### Added
1594+
- **Tombstone guidance for retired keys** (#2543): `create()` rejecting a retired key
1595+
(`compactLayout`, the `detail` block, object-level `views`, `defaultDetailForm`) names
1596+
the replacement, the version/decision that removed it, and the one-line fix — the
1597+
error *is* the upgrade guide. Tombstones age out ~two majors after removal.
1598+
- **`CHANGELOG.md` ships inside the npm package** and `llms.txt` gains an "Upgrading
1599+
Across Spec Versions" section for agent consumers (#2543).
1600+
1601+
## [11.9.0] — 2026-07-03
1602+
1603+
- Doc-text only: stale `compactLayout` / `defaultDetailForm` teachings scrubbed from
1604+
schema descriptions (#2530). No schema shape or behavior change.
1605+
1606+
## [11.8.0] — 2026-07-03
1607+
1608+
- No protocol-facing changes.
1609+
1610+
## [11.7.0] — 2026-07-02
1611+
1612+
ADR-0085: object presentation intent is declared as cross-surface **semantic roles**,
1613+
never as per-surface hint blocks (#2521).
1614+
1615+
### Added
1616+
- **`stageField: string | false`** — names the object's linear lifecycle field (`false`
1617+
suppresses every consumer's stage heuristics).
1618+
- **`deriveFieldGroupLayout(def)`** in `@objectstack/spec/data` — the single source of
1619+
fieldGroups rendering semantics.
1620+
- `validateSemanticRoles` lint (via `os lint`): flags dangling `Field.group` /
1621+
`stageField` / `highlightFields` pointers that are Zod-valid but silently inert
1622+
(ADR-0078).
1623+
1624+
### Changed / Deprecated
1625+
- **`compactLayout``highlightFields`** (the value is an ordered field list, not a
1626+
layout). `compactLayout` stays accepted as a parse-time alias for one release window
1627+
(closed in 11.10.0).
1628+
- **`fieldGroups[].collapse: 'none' | 'expanded' | 'collapsed'`** replaces
1629+
`defaultExpanded` and the UI-dialect `collapsible`/`collapsed` boolean pair; old keys
1630+
map onto the enum at parse and remain accepted for one minor.
1631+
1632+
### Removed
1633+
- `fieldGroups[].visibleOn` (no consumer anywhere — ADR-0049 enforce-or-remove).
1634+
- The `detail: { … }.passthrough()` UI-hints block (zero authors across framework and
1635+
objectui; documented dead-surface exception, evidence in ADR-0085).
1636+
1637+
## [11.6.0] — 2026-07-02
1638+
1639+
- No protocol-facing changes.
1640+
1641+
## [11.5.0] — 2026-07-02
1642+
1643+
### Added
1644+
- **FormView presentation options completed**: `FormViewSchema` gains the per-`type`
1645+
(tabbed/wizard/split/drawer/modal) presentation config the renderer already accepted —
1646+
`layout`, `columns`, `title`, `description`, `defaultTab`, `tabPosition`, `allowSkip`,
1647+
`showStepIndicator`, `splitDirection`, `splitSize`, `splitResizable`, `drawerSide`,
1648+
`drawerWidth`, `modalSize`. Spec↔frontend conformance for object-form: 14 → 0
1649+
frontend-only props.
1650+
- **`REACT_BLOCKS`** react-tier component contract index (ADR-0081): maps each curated
1651+
public block of `kind:'react'` pages to its spec zod schema; the AI-facing contract is
1652+
generated from it.
1653+
1654+
## [11.4.0] — 2026-06-30
1655+
1656+
### Added
1657+
- **`PageSchema.kind` gains `'html'` and `'react'`** (ADR-0081 honest tiers): `'html'`
1658+
is the constrained parse-never-execute tier (the renamed `'jsx'`); `'react'` is the
1659+
real-React tier, gated server-side by `OS_PAGE_REACT=off`. `source` is required for
1660+
all three kinds; react source is transpile-checked at `os build`.
1661+
- `userActions.editInline` toggle (inline record editing; default `false`).
1662+
1663+
### Deprecated
1664+
- `kind: 'jsx'` — kept as a deprecated alias of `'html'`.
1665+
1666+
## [11.3.0] — 2026-06-29
1667+
1668+
### Changed
1669+
- The optional `ai` peer dependency moves `^6``^7` (all re-exported message/stream
1670+
types verified present in `ai@7`).
1671+
1672+
### Deprecated
1673+
- **`titleFormat`** (ADR-0079): a render-only template the server can neither return nor
1674+
query — use **`nameField`** (canonical; `displayNameField` is the deprecated alias).
1675+
New advisory lints `title-format-retired` / `title-unresolvable` in `os build` /
1676+
`os lint`; the schema still parses existing metadata.
1677+
1678+
## [11.2.0] — 2026-06-29
1679+
1680+
### Added
1681+
- **`ObjectStackProtocol` segmented into per-domain interfaces** (ADR-0076 D9):
1682+
`DataProtocol`, `MetadataProtocol`, `AnalyticsProtocol`, `AutomationProtocol`,
1683+
`PackageProtocol`, `ViewProtocol`, `PermissionProtocol`, `WorkflowProtocol`,
1684+
`RealtimeProtocol`, `NotificationProtocol`, `AiProtocol`, `I18nProtocol`,
1685+
`FeedProtocol` — all newly exported. The composed interface is shape-identical to the
1686+
previous flat one (non-breaking); new code should depend on the narrowest slice.
1687+
- `PageSchema` gains `kind: 'jsx'` + `source` (authoritative JSX text) + `requires`,
1688+
with a completeness `superRefine` (ADR-0080; superseded by the 11.4.0 tier split).
1689+
1690+
## [11.1.0] — 2026-06-28
1691+
1692+
Completes the 11.0 breaking line (see
1693+
[docs/upgrading-to-11.md](./docs/upgrading-to-11.md)).
1694+
1695+
### Removed
1696+
- **`DriverInterface` type alias** (deprecated in 11.0) — use `IDataDriver` (same
1697+
shape). Unrelated to the live `IDataEngine` and to the zod-derived runtime driver
1698+
schema in `/data`, both unchanged.
1699+
- **`PolicySchema` / `definePolicy` and the stack `policies` collection** (#1882,
1700+
ADR-0049): 100% unenforced — no runtime consumer ever read it. No migration needed;
1701+
`SharingRule`, `PermissionSet`, RLS and the `*PolicySchema` siblings are unaffected.
1702+
- **Dead, unauthored properties** (#2377, ADR-0049): field `caseSensitive` / `maxRating`;
1703+
object `partitioning` (+ `PartitioningConfigSchema`) / `defaultDetailForm`.
1704+
1705+
### Added
1706+
- **`ActionSchema.openIn: 'self' | 'new-tab'`** — declarative new-tab control for static
1707+
`type:'url'` actions (previously stripped as an unknown key; now preserved
1708+
end-to-end).
1709+
1710+
## [11.0.0] — 2026-06-27
1711+
1712+
**Major.** Every breaking change of the 11 line, each with a concrete migration, is in
1713+
[docs/upgrading-to-11.md](./docs/upgrading-to-11.md) (also covering the package-level
1714+
breaks outside the spec surface: Hono-only HTTP adapters, `client-react` canonical query
1715+
fields, `OS_*` env renames).
1716+
1717+
### Breaking
1718+
- **Open edition is MCP-only** (ADR-0025 S2): the bundled AI authoring service
1719+
(`@objectstack/service-ai`) is no longer part of the open distribution; AI integrates
1720+
through `@objectstack/mcp` plus the documented opt-in seam (a host app that
1721+
*declares* `@objectstack/service-ai` still loads it).
1722+
- **Flow-node aliases `http_request` / `http_call` / `webhook` removed** (ADR-0018 M3
1723+
cleanup): author `type: 'http'` (identical behavior — durable outbox when
1724+
`config.durable`, inline fetch otherwise). Authoring a removed type now fails fast at
1725+
parse. The trigger `eventType: 'webhook'` and the `webhook` resume event are
1726+
unaffected.
1727+
- **`IUIService` removed** — use `IMetadataService` (views/dashboards are metadata).
1728+
1729+
### Changed — behavior
1730+
- **`flow.runAs` is now enforced** (#1888; the `[EXPERIMENTAL — not enforced]` marker is
1731+
removed): `runAs:'user'` (the default) runs CRUD nodes under the triggering user's
1732+
identity and RLS; `runAs:'system'` runs elevated. **Declare `runAs:'system'` on any
1733+
flow that must read or write beyond the triggering user's access.** A
1734+
schedule-triggered user-mode data run (no trigger user ⇒ unscoped) is now audible: a
1735+
`flow-schedule-runas-unscoped` author-time lint plus a one-per-run runtime warning.
1736+
- **`PageTypeSchema` is the live set** (`record`, `home`, `app`, `utility`, `list`):
1737+
the six renderless roadmap types (`dashboard`, `form`, `record_detail`,
1738+
`record_review`, `overview`, `blank`) are removed from the enum and tracked in
1739+
`PAGE_TYPE_ROADMAP`; the dead `blank`/`record_review` config schemas are hard-removed
1740+
(documented ADR-0059 §4 exception — authoring them already failed at runtime).
1741+
- **AI service is opt-in via a declared dependency** (resolvability is no longer
1742+
enough), and `config.tiers` is now honored by `defineStack`.
1743+
1744+
### Added
1745+
- **Field type `'user'`** (person picker) — a semantic specialization of
1746+
`lookup('sys_user')` with `Field.user()`, `multiple`, and
1747+
`defaultValue: 'current_user'`; storage identical to lookup (zero migration).
1748+
- **Formula typing**: `FieldSchema.returnType` + `inferExpressionType()`.
1749+
- **Datasets**: multi-hop to-one relationship joins (≤3 hops, per-hop read-scope
1750+
enforced; ADR-0071); `aggregate` optional for derived measures; a `defineForm`
1751+
authoring layout for datasets.
1752+
- **Authoritative create seeds**: `getMetadataCreateSeed(type)` + `createSeed` exposed
1753+
via `/meta/types` — designers derive create defaults from the spec instead of
1754+
hardcoding them.
1755+
- `passwordRejectBreached` auth setting (default off; ADR-0069 D1);
1756+
`RecordRelatedListProps.add` (add-existing-via-picker); `element:text_input`;
1757+
`ChartConfig.colors` accepts a palette or a value→color map.
1758+
1759+
### Fixed
1760+
- Dashboard widget `layout` optional (auto-flow); page `regions` / component
1761+
`properties` / slotted `slots` optional — Studio-authored pages and dashboards no
1762+
longer 422 on save.
1763+
1764+
## [10.3.0] — 2026-06-23
1765+
1766+
- No protocol-facing changes recorded.
1767+
1768+
## [10.2.0] — 2026-06-22
1769+
1770+
### Added
1771+
- **`responsiveStyles`** on the UI page-component envelope (ADR-0065): per-breakpoint
1772+
CSS-property maps compiled to id-scoped CSS — the build-independent styling channel
1773+
for metadata-authored pages.
1774+
1775+
## [10.1.0] — 2026-06-22
1776+
1777+
### Added
1778+
- **`datasource.autoConnect`** (ADR-0062 Phase 1): a declared external datasource
1779+
connects to a live driver and its federated objects are queryable with zero app code;
1780+
auto-connect is gated (external, explicitly bound, or `autoConnect: true`) so existing
1781+
apps are byte-for-byte unchanged.
1782+
- Federated analytics correctness: `NativeSQLStrategy` declines federated objects and
1783+
routes them through the driver's physical-table resolution (additive
1784+
`StrategyContext.isExternalObject` hook).
1785+
1786+
## [10.0.0] — 2026-06-22
1787+
1788+
**Major.**
1789+
1790+
### Breaking
1791+
- **`sys_department` renamed to `sys_business_unit`** — object, member table
1792+
(`sys_department_member``sys_business_unit_member`), fields, and i18n, with **no
1793+
compatibility alias**. Any deployment holding `sys_department` rows or metadata
1794+
referencing the object by name (lookups, list views, queries, sharing/approval
1795+
scopes) must migrate. Verified against the ADR-0059 pre-publish hotcrm gate.
1796+
1797+
### Added
1798+
- **ADR-0057 ERP authorization core**: permission-grant access **depth**
1799+
(`own` / `own_and_reports` / `unit` / `unit_and_below` / `org`); the platform-owned
1800+
`sys_user_role` assignment; stack-declared `roles` / `sharingRules` seeded into
1801+
`sys_role` / `sys_sharing_rule` at boot. Hierarchy-relative scopes delegate to a
1802+
pluggable `IHierarchyScopeResolver` (open edition fails closed to owner-only).
1803+
- **`defineX` factories for the remaining 16 writable domains** + 6 missing `XInput`
1804+
aliases (#2035) — one consistent, validated authoring entry per domain; purely
1805+
additive. (The foundation of the ADR-0059 author-time gate.)
1806+
- `ListView.type: 'tree'` (+ `TreeConfigSchema`); `SkillSchema.surface` /
1807+
`AgentSchema.surface` (`ask`/`build`, ADR-0063/0064 — the `agent` type is closed to
1808+
third-party authoring); `DatasetMeasure.currency` and `ExecutionContext.currency`
1809+
(ISO 4217).
1810+
1811+
### Changed
1812+
- **`script` actions must declare an executable binding** (`body` or `target`,
1813+
enforced via `superRefine`) — rejects only configurations that were already
1814+
non-functional at runtime.
1815+
- **RLS predicates are canonical CEL** (`==`, `in`; ADR-0058 D1): all seeded predicates
1816+
migrated; a stored SQL-style predicate still compiles through the **deprecated**
1817+
`sqlPredicateToCel` shim with a warning (no silent deny on legacy data).
1818+
1819+
### Deprecated
1820+
- The `sqlPredicateToCel` transitional bridge (author canonical CEL).
1821+
1822+
### Fixed
1823+
- Federation reads honor `external.remoteName` / `external.remoteSchema` (ADR-0015);
1824+
a nested `where` inside `expand` is honored (AND-merged); `GanttConfigSchema` is
1825+
`.passthrough()` (renderer knobs no longer stripped by the bundled console copy).
1826+
15721827
## [4.0.1] — 2026-03-31
15731828

15741829
### Fixed

0 commit comments

Comments
 (0)