You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 7265b33
Browse filesBrowse the repository at this point in the historyBrowse files
docs(releases): 18.1.0 release facts as measured, and the upgrade checklist walked from 18.0.0 (#25616)
<!-- claude-projects-attribution: {"github_login":"marchtian"} -->
_Requested by **田騏** · [project
thread](https://claude.ai/code/project/chan_01VmuUhXU9SSUzqJYyXSmYSi?thread=cmsg_01VmuUhXU9SSUzqJYyXSmYSiRwWtsarkLPmw9fMYiFZ3LY)_
## Summary
18.1.0 is published. This PR does the follow-up work the 18.1 page was
waiting on. It is docs-only.
**Release facts, as measured.** This is a new section, measured with
`npm view` / `npm pack` on 2026-10-24:
- npm tags: `latest` is 18.1.0 on every package read. `next` still
points at the older `18.0.0-next.5`, and `rc` at `17.0.0-rc.6`.
- Publish: npm at 09:06 UTC, followed by 73 per-package GitHub Releases.
- Version commit: `e649c2d91e` (#25606), after the reverted first cut
(#25605).
The section also carries two cautions:
- **260 of the 265 CHANGELOG entries cite `3937697`.** That is the
commit that reverted the first cut, not each entry's own commit. The
published tarballs carry the same attribution: every entry in
`@objectstack/cli@18.1.0`'s 18.1.0 section reads `3937697`.
- **An exact pin still floats.** `@objectstack/cli` declares eight
`@objectstack/*` dependencies as `workspace:^`, which publishes as a
caret range. An app pinned to exactly 18.0.0 therefore installed 17
packages at 18.1.0 today. The checklist gives the pnpm override that
holds them, and that override was measured.
**Counts.** These are read off the published sections: 265 distinct
entries, split 82 / 9 / 50 / 2 / 122 across the five sections. 91
changesets are declared breaking, 48 `minor` and 43 `patch`. The pre-cut
count of 258 was low because entries whose first line is identical were
merged; once every first line began with the same revert commit, the
eight "Shipped in 18.0.0" entries collapsed into one.
**Upgrade checklist, walked.** I walked one `create-objectstack@18.0.0`
blank app on SQLite under `single`. It had an administrator and three
notes, and was moved to 18.1.0. Each line the walk measured is marked:
- the pins and the override
- the `os serve` refusal without a secret, and `os start` minting
`.objectstack/auth-secret` instead
- the 18.0.0 session still being valid when the same secret is used
- `validate` and `build` passing
- `migrate meta --from 17`, which lists 417 manual changes; `--from 18`
replays nothing
- `migrate meta --stored`
- `migrate plan`: 33 nullable tenant columns, schema in sync
- probes of the `confirmText` refusal (422) and the rollback `toVersion`
refusal (400)
The callout lists what was not walked.
**Folded in.** #25591, #25592 (breaking) and #25596, the last changesets
before the cut.
## Checks
These pass locally:
- `check:role-word`
- `check:release-notes`
- `check:release-page-status`
- `check:release-index-currency-sync`
- `check:doc-anchors`
- `check:docs-audit-scope`
- `check:docs-single-h1`
- `check:docs-redirects`
- `check:doc-authoring`
- `check:error-code-casing`
- `check:cli-examples-parity`
- an MDX compile of both changed v18 pages
Clause-②: no
Metadata-protocol: none
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01At7xrR4rgknXtej5ZkMJHd
Co-authored-by: Claude <noreply@anthropic.com>
**The v18 line has exited prerelease mode.** While Changesets was in pre mode with the tag `next`, every release cut from `main` was the next `18.0.0-next.N` on npm's `next` tag, and `scripts/check-changeset-no-major.mjs` stood aside in pre mode, so a pull request could declare a major bump. Changesets has exited pre mode, so the line's GA version is `18.0.0`, which publishes to npm's `latest` tag, and the guard again fails a pull request that declares a `major` bump. See [how a breaking stage lands on the v18 line](/docs/releases/v18#how-a-breaking-stage-lands-on-this-line).
21
21
22
-
**After 18.0.0, a breaking change ships in a MINOR or a PATCH release.** The maintainer's 2026-10-21 ruling ([#25105](https://github.com/objectstack-ai/objectstack/issues/25105)) keeps the no-major guard and grades each change by the metadata protocol: a key, value or metadata type added, narrowed or given a new meaning takes MINOR, and every other change takes PATCH, breaking or not. A non-protocol breaking change (a REST response, a boot refusal, a CLI exit status, a removed runtime export) keeps its `**BREAKING**` banner and ships as a PATCH. 18.1.0, the first release under the rule, is a MINOR that carries 90 changesets declared breaking.
22
+
**After 18.0.0, a breaking change ships in a MINOR or a PATCH release.** The maintainer's 2026-10-21 ruling ([#25105](https://github.com/objectstack-ai/objectstack/issues/25105)) keeps the no-major guard and grades each change by the metadata protocol: a key, value or metadata type added, narrowed or given a new meaning takes MINOR, and every other change takes PATCH, breaking or not. A non-protocol breaking change (a REST response, a boot refusal, a CLI exit status, a removed runtime export) keeps its `**BREAKING**` banner and ships as a PATCH. 18.1.0, the first release under the rule, is a MINOR that carries 91 changesets declared breaking.
23
23
</Callout>
24
24
25
25
ObjectStack follows [Semantic Versioning 2.0.0](https://semver.org/) (`MAJOR.MINOR.PATCH`). The table below describes what each component means; which version a breaking change ships in depends on the line, as the callout above says.
description: "Release notes and upgrade checklist for 18.1.0, the first minor of the v18 line: a minor that carries breaking changes. ADR-0131 finishes (an organization-less row confers nothing), a production os serve with no organization object is refused, nine metadata narrowings with automatic conversions, one federation rule at every datasource door, and an unreadable SQLite file is refused instead of replaced."
4
4
---
5
5
6
-
<Callouttype="warn">
7
-
**How this page was compiled.** From the 18.1.0 changesets on `main` at
8
-
`ba9e0c3749` (2026-10-24), before the 18.1.0 cut: a rehearsed
9
-
`pnpm run version` in a throwaway clone at `b2c0752900` (73 packages move to
10
-
18.1.0, and their `## 18.1.0` sections held 227 distinct entries), and the 31
11
-
changesets merged after it, graded the same way. That makes **258 distinct
12
-
entries**. The five sections below use the grouping the GitHub Release body
13
-
uses, and the counts are that grouping's: **81** need you to act, **9** are
14
-
converted for you, **47** add capabilities, **3** declare a semantic change,
15
-
and **118** are other fixes. Nothing here was
16
-
read off a published 18.1.0 package or walked on an upgrade yet: every refusal
17
-
is described as its changeset describes it. Anything that lands on `main` before
18
-
the cut is in the CHANGELOG and not on this page.
6
+
<Callouttype="info">
7
+
**How this page was compiled.** From the `## 18.1.0` sections of the published
8
+
CHANGELOGs (version commit `e649c2d91e`, #25606): 73 packages carry one, and
9
+
together they hold **265 distinct entries**. The five sections below use the
10
+
grouping the GitHub Release body uses, and the counts are that grouping's:
11
+
**82** need you to act, **9** are converted for you, **50** add capabilities,
12
+
**2** declare a semantic change, and **122** are other fixes. The
13
+
[upgrade checklist](#upgrade-checklist) was walked on 2026-10-24 from 18.0.0;
14
+
each line it measured says so. A refusal it did not reach is described as its
15
+
changeset describes it.
19
16
</Callout>
20
17
21
18
## Highlights — 18.1.0
22
19
23
-
- ⚠️ **A minor that breaks.** 18.1.0 is a minor version, and 90 of its
20
+
- ⚠️ **A minor that breaks.** 18.1.0 is a minor version, and 91 of its
24
21
changesets are declared breaking. Under the level rule the maintainer ruled
25
22
on 2026-10-21 (#25105, "ruling A"), the v18 line takes no further major: a
26
23
change to the metadata protocol takes `minor`, and every other change takes
@@ -72,6 +69,41 @@ the cut is in the CHANGELOG and not on this page.
72
69
73
70
---
74
71
72
+
## Release facts, as measured
73
+
74
+
Read with `npm view` and `npm pack` on 2026-10-24, after the publish:
75
+
76
+
|| Measured |
77
+
| :--- | :--- |
78
+
|`latest`|`18.1.0`, on every `@objectstack/*` package read (`spec`, `cli`, `runtime`, `core`, `objectql`, `skills`, `organizations`, `console`) and on `create-objectstack`|
79
+
|`next`|`18.0.0-next.5`, still **older** than `latest`. ⛔ Never install `@next` for 18 |
80
+
|`rc`|`17.0.0-rc.6` (`@objectstack/skills` and `@objectstack/organizations` carry no `rc` tag) |
81
+
| Published |`@objectstack/cli@18.1.0` at 2026-10-24 09:06 UTC; 73 GitHub Releases, one per package, tagged `<package>@18.1.0`, between 09:12 and 09:13 UTC |
82
+
| Version commit |`e649c2d91e` (#25606). The first 18.1.0 version commit, `74fa3cb6df` (#24876), was reverted before anything published (#25605) |
83
+
84
+
Read the 18.1.0 CHANGELOGs with two cautions:
85
+
86
+
-**The commit beside an entry is mostly not its own.** 260 of the 265 entries
87
+
open with `3937697`, the commit of #25605 that reverted the first cut and
88
+
re-added every pending changeset; only the five changesets merged after it
89
+
carry their own commit. The same is true in the published tarballs: all 34
90
+
entries of `@objectstack/cli@18.1.0`'s `## 18.1.0` section read `3937697`.
91
+
To find the change behind an entry, search its headline in the repository's
92
+
history; this page cites each entry's own commit.
93
+
-**A pinned `@objectstack/cli` still ranges.** The published CLI declares
94
+
eight of its `@objectstack/*` dependencies as caret ranges: `core`,
0 commit comments