Skip to content

Commit 27c0a73

Browse files
committed
docs(releases): 18.0.0 step 3 tags name what each probe measured; the docs-audit roster lists the new page
Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
1 parent 36cbe22 commit 27c0a73

2 files changed

Lines changed: 26 additions & 13 deletions

File tree

‎content/docs/releases/v18/18-0.mdx‎

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,9 @@ are refused at author time, so `os validate` finds them before a deploy: a
268268
schema refusal throws `STACK_SCHEMA_INVALID` (422) from `defineStack`, a
269269
cross-reference one `STACK_CROSS_REFERENCE_INVALID` (422), and an author-time
270270
rule fails `os validate` with exit `1`. The metadata save door (Studio,
271-
`/api/v1/meta`, MCP) refuses the same shapes on a save.
271+
`/api/v1/meta`, MCP) refuses the same shapes on a save: in the walk,
272+
`PUT /api/v1/meta/page/NAME` answered `422 INVALID_METADATA` for an undeclared
273+
`page:header` prop and for `kind: 'jsx'`.
272274

273275
##### Flows: one expression dialect per slot
274276

@@ -294,33 +296,37 @@ rule fails `os validate` with exit `1`. The metadata save door (Studio,
294296
(`'{current_user_id}'`, `'{today}'`) stays as it is. The refusal names the CEL
295297
spelling of each token (`0e9e7b7`, `6a06e3b`, `d85615d`, `615c696`,
296298
`111ffff`, `9fdb127`, `f66fdc7`, `12b9daf`, `968acc8`). *Probed on 18.0.0
297-
(`os validate`).*
299+
(`os validate`) at each of those positions but `sourceId`, `templateData`,
300+
`defaults` and `recordId`.*
298301
- **Text slots take `{{ }}` holes.** A `notify` node's `title`, `message` and
299302
`actionUrl`, a `screen` node's `title` and `description`, a refusing `end`
300303
node's `message`, an `http` node's `url` and `headers` values, and the
301304
translated screen heading `flows.FLOW.screens.NODE.title`: `{x}` → `{{ x }}`.
302305
Compute anything else into a variable first, and a run-user value too —
303306
`{{ $User.Id }}` is refused (`2b61f2d`, `3073b72`, `968acc8`, `d973c34`).
304-
*Probed on 18.0.0 (`os validate`).*
307+
*Probed on 18.0.0 (`os validate`) on `notify` `title`, `message` and
308+
`actionUrl`, `screen` `title` and `http` `url`.*
305309
- **CEL reads only the roots the flow binds.** `user.id`, `ctx.user.id`,
306310
`os.user.id` → `current_user.id`. `record` is bound only on a flow an
307311
entrance hands a record (a record trigger, a `type: 'flow'` action, an inbound
308312
hook, …): elsewhere read the variable by its name or as `vars.NAME`. A
309-
condition is CEL: `'{amount} > 100'` → `'amount > 100'` (`5fb1746`,
310-
`0f77ff5`, `243dd3c`, `7958bdf`). *Probed on 18.0.0 (`os validate`).*
313+
condition is CEL: `'{amount} > 100'` → `'amount > 100'` — the old spelling is
314+
refused as `invalid CEL predicate` (`5fb1746`, `0f77ff5`, `243dd3c`,
315+
`7958bdf`). *Probed on 18.0.0 (`os validate`).*
311316
- **No `$` names of your own.** An `outputVariable`, an `errorVariable` other
312317
than the default `$error`, an `iteratorVariable` / `indexVariable`, an
313318
`idVariable`, a screen field's `name` and a declared variable's `name` drop
314319
the `$`, and every read of them follows (`3e72f93`, `9f5eca5`). *Probed on
315-
18.0.0 (`defineStack`).*
320+
18.0.0 (`defineStack`) for `outputVariable`, `errorVariable` and
321+
`iteratorVariable`.*
316322
- **Node config is held to its executor's contract.** An undeclared key, or a
317323
value of the wrong type, is refused at its location: `fieldValues` → `fields`;
318324
`bulk` / `all` / `multiple` → `multi: true`; a screen field's `visibleIf` →
319325
`visibleWhen`; a loop's `itemVariable` → `iteratorVariable`; delete an `http`
320326
node's `outputVariable`; a `subflow` `config.timeoutMs` moves onto the node;
321327
`limit: '10'` → `limit: 10`; a `{token}` in a literal key (`limit: '{x}'`) →
322328
the literal (`2f70c22`, `78f841b`, `ac9f8bd`, `ca0bdbc`). *Probed on 18.0.0
323-
(`defineStack`).*
329+
(`defineStack`), each.*
324330
- **The retired aliases are refused with their rename.** A CRUD node's
325331
`config.object` → `objectName` and `config.filters` → `filter`; a `notify`
326332
node's `to` / `subject` / `body` / `url` → `recipients` / `title` / `message`
@@ -331,7 +337,8 @@ rule fails `os validate` with exit `1`. The metadata save door (Studio,
331337
(`duration` → `timerDuration`, `signal` → `signalName`, `timeoutMs` →
332338
`timerDuration` as a string) and a `connector_action` node's →
333339
`connectorConfig`. `os migrate meta --from 16 --write` writes the ones it can
334-
prove (`5fd2c76`, `f901746`, `d176b0a`). *Probed on 18.0.0 (`defineStack`).*
340+
prove (`5fd2c76`, `f901746`, `d176b0a`). *Probed on 18.0.0 (`defineStack`),
341+
each but the nested `source` pair.*
335342
- **An edge names two nodes of its graph, once.** An edge whose `source` or
336343
`target` is no node, or that repeats an earlier edge, is refused: delete it or
337344
re-point it (`db4c45b`). *Probed on 18.0.0 (`defineStack`).*
@@ -411,8 +418,8 @@ rule fails `os validate` with exit `1`. The metadata save door (Studio,
411418
on 18.0.0 (`os validate`).*
412419
- **A select option's `visibleWhen` reads what the server binds:** `record`,
413420
`previous` and the acting user (`current_user`, and its aliases `user`, `ctx`,
414-
`os`). `parent`, `ctx.locale`, `os.env`, `current_user.roles` (now
415-
`positions`) and `current_user.email` are refused, and a gate the server
421+
`os`). `parent`, `ctx.locale`, `os.env` and `current_user.email` are
422+
refused, and a gate the server
416423
cannot evaluate refuses the write instead of admitting the value (`bb4f5cc`,
417424
`b1f7a7a`, `46692c1`, `440bed6`). *Probed on 18.0.0 (`os validate`).*
418425
- **A relationship does not target a stored-metadata table** (`sys_metadata` and
@@ -421,7 +428,8 @@ rule fails `os validate` with exit `1`. The metadata save door (Studio,
421428
- **One name, one entry.** Two entries with one name in one of 27 stack
422429
collections, and two `functions` with one `name`, are refused, naming both
423430
(`1959aac`, `147a0d1`). `defineSeed()` refuses a record key that is no column
424-
of the object (`9ad3d24`). *Probed on 18.0.0.*
431+
of the object (`9ad3d24`). *Probed on 18.0.0 for `objects`, `functions` and
432+
`defineSeed`.*
425433

426434
##### Positions, permission sets and sharing rules
427435

@@ -453,7 +461,10 @@ rule fails `os validate` with exit `1`. The metadata save door (Studio,
453461
##### Datasources, email templates, webhooks and inbound hooks
454462

455463
- **`driver: 'mongo'` → `'mongodb'`,** and `OS_DATABASE_DRIVER=mongo` no longer
456-
selects a driver (`bc0538a`). *Probed on 18.0.0 (`defineStack`).*
464+
selects a driver: `os serve` exits `1` with
465+
`✗ Unsupported driver "mongo" (OS_DATABASE_DRIVER / --database-driver).`
466+
(`bc0538a`). *Probed on 18.0.0 (`defineStack`, and `os serve` in the walk's
467+
app).*
457468
- **Email templates.** Delete `category` and `isSystem` (`ec7f7f8`). Templates
458469
resolve from the registry: declare them in code — an organization can no
459470
longer create or edit a `sys_email_template` row, and the built-in seed is
@@ -602,7 +613,8 @@ code is in the 18.0.0 packages while their entries will first appear in
602613
(`deploymentWide`, `@objectstack/plugin-sharing`).*
603614

604615
The other six are fixes with no edit for an upgrader, among them
605-
`invite-member`'s refusal of an unknown role with `code: 'ROLE_NOT_FOUND'`
616+
`invite-member`'s refusal of a membership grade outside its vocabulary with
617+
`code: 'ROLE_NOT_FOUND'`
606618
(#24846, in the 18.0.0 `@objectstack/plugin-auth`).
607619

608620
**Not in 18.0.0.** Twelve changesets belong to commits after the version

‎scripts/docs-audit/handwritten-docs.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@
205205
"content/docs/releases/v17/17-6.mdx",
206206
"content/docs/releases/v17/17-7.mdx",
207207
"content/docs/releases/v17/index.mdx",
208+
"content/docs/releases/v18/18-0.mdx",
208209
"content/docs/releases/v18/index.mdx",
209210
"content/docs/releases/v9.mdx",
210211
"content/docs/ui/actions.mdx",

0 commit comments

Comments
 (0)