Skip to content

Commit 3871049

Browse files
docs(releases): v17.mdx 补齐 rc.1 之后各窗口段落,并把 console pin 链按发布归位 (#6115) (#6625)
页面此前的窗口段落停在 `## Landed since 17.0.0-rc.1`,而 console pin 自 `785b8a5d432c` 起实际移动了四次(不是两次):`f5bc4c78be76`(rc.2)、 `f995a452d2ca`(rc.4)、`7dfbeb704e1e`(rc.5)、`0cf8f0f70d10`(未发布)。 PR #6109 把 rc.0 段的 console 区间推到 `→ f995a452d2ca` 是当时唯一诚实的 权宜之计 —— 后续窗口没有段落可以承载这段增量。本 PR 建出那些段落,该权宜 之计随之退场。 - 新增 `## Landed since 17.0.0-rc.2`(并入 rc.4;说明 rc.3 那一轮为何没有 自己的段落)、`## Landed since 17.0.0-rc.4`(并入 rc.5)、 `## Landed since 17.0.0-rc.5`(窗口仍开放),每段各带自己的 `### New in Console` pin 区间。 - rc.0 段的 console 标题收回本窗口真实区间 `4a4829d0ef39 → 7d9734d5e321`, 与该段开头早已写着的同一区间恢复一致;并写明页面记录 pin 的规则,使其 被实际兑现而非半兑现。 - rc.1 段开头改写为本窗口自己的两次 pin 移动;两处 author-facing 破坏性 迁移(objectui#3233、objectui#3172)按实据归位到 `f995a452d2ca`。 来源:packages/console/CHANGELOG.md(pin → 发布版本的权威映射)、 各包 CHANGELOG 的 `17.0.0-rc.*` 段、`.changeset/console-*.md`、git tag。 Claude-Session: https://claude.ai/code/session_01F8q5J1MQyocgtNspb15fSn Co-authored-by: Claude <noreply@anthropic.com>
1 parent 932d7e2 commit 3871049

1 file changed

Lines changed: 208 additions & 11 deletions

File tree

content/docs/releases/v17.mdx

Lines changed: 208 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2046,16 +2046,24 @@ rc.1, and administrators should know what changed:
20462046
the generated upgrade guide and the `spec_changes` MCP tool actually
20472047
report the 16 → 17 chain (they still said 16.0.0).
20482048

2049-
### New in Console — bundled objectui advanced `4a4829d0ef39 → f995a452d2ca`
2049+
### New in Console — bundled objectui advanced `4a4829d0ef39 → 7d9734d5e321`
20502050

20512051
143 objectui commits across five pin moves, released as **objectui 17.1.0**.
20522052
(The pin changesets enumerate 79 of them; one range under-enumerated its own
20532053
window and is recorded by `console-bebaebd39ace-backfill` — the fixes it
20542054
covers are folded into the list below rather than left to the changelog.)
2055-
Two later pin moves carried the bundle on to `f995a452d2ca` — 129 further
2056-
commits, enumerated in `console-f5bc4c78be76` and `console-f995a452d2ca`. The
2057-
two author-facing breaking migrations in that range are documented under
2058-
*Breaking changes & migration* above.
2055+
2056+
**How the Console pin is recorded on this page.** `scripts/bump-objectui.sh`
2057+
advances `.objectui-sha` whenever the bundled Console moves, and every move
2058+
writes a `.changeset/console-<sha>.md` that enumerates its own range. Each
2059+
move is reported under the *Landed since* window that shipped it — never
2060+
folded into an earlier window's range — so the chain reads end to end:
2061+
`4a4829d0ef39 → 7d9734d5e321` here (released as `rc.1`), `→ f5bc4c78be76`
2062+
under *rc.1* (`rc.2`), `→ f995a452d2ca` under *rc.2* (`rc.4`),
2063+
`→ 7dfbeb704e1e` under *rc.4* (`rc.5`), and `→ 0cf8f0f70d10` under *rc.5*,
2064+
which is still open. The two author-facing breaking migrations the bundle
2065+
carries (objectui#3233, objectui#3172) arrived with `f995a452d2ca` and are
2066+
documented under *Breaking changes & migration* above.
20592067

20602068
- **The lockstep half of ADR-0110 — release-critical.** The rc.0 pin predates
20612069
the client fix, so the Console it built still posted `action.target` to
@@ -2140,13 +2148,16 @@ two author-facing breaking migrations in that range are documented under
21402148
## Landed since 17.0.0-rc.1
21412149

21422150
These changes are on `main` after the `rc.1` cut and **roll into 17.0.0-rc.2**.
2143-
At the time of writing the window has left 209 changesets pending — 46
2151+
At the time of writing the window had left 209 changesets pending — 46
21442152
`major`-class, 74 `minor`, 55 `patch`, and 34 that release nothing (CI, tooling
2145-
and docs). The Console pin was `785b8a5d432c` when this window was written and
2146-
has since advanced to `f995a452d2ca` in two moves; that delta is carried by the
2147-
range on *New in Console* above and enumerated in the two pin changesets. Its
2148-
two author-facing breaking migrations are documented with the other breaking
2149-
changes above.
2153+
and docs); the cut itself released **166 changesets — 45 `major`-class, 69
2154+
`minor`, 52 `patch`**, counted across the `17.0.0-rc.2` sections of the package
2155+
changelogs. The Console pin stood at `7d9734d5e321` when the window opened and
2156+
advanced twice inside it — to `785b8a5d432c`, already the value when the
2157+
paragraphs below were written, and then to `f5bc4c78be76`. The two moves are
2158+
enumerated in `console-785b8a5d432c` and `console-f5bc4c78be76`; neither
2159+
carries an author-facing breaking migration, and the two that exist arrive in
2160+
the next window.
21502161

21512162
Two campaigns dominate the window, and both are *finishing* rather than
21522163
starting: the #4535 dual-source convergence and #4001's close of the authorable
@@ -2612,6 +2623,192 @@ it compared a declaration to an implementation (#4472).
26122623
- **A `RETURNING` write persists on `driver-sqlite-wasm` (#4518)**, unblocking
26132624
cold-boot e2e.
26142625

2626+
## Landed since 17.0.0-rc.2
2627+
2628+
These changes are on `main` after the `rc.2` cut and **roll into 17.0.0-rc.4**.
2629+
Counted across the `17.0.0-rc.4` sections of the package changelogs, the cut
2630+
released **360 changesets — 44 `major`-class, 94 `minor`, 222 `patch`**, which
2631+
makes it the largest of the train's RC cuts (`rc.0` released 258, `rc.1` 262,
2632+
`rc.2` 166, `rc.5` 10).
2633+
2634+
**Why there is no `rc.3` window section.** `17.0.0-rc.3` was tagged for every
2635+
package on 2026-08-03 by a `chore: version packages (rc)` run, but the round
2636+
consumed exactly one changeset — `BulkActionParamSchema`'s `options[]` entry
2637+
gaining passthrough (#4001) — and left every other package with nothing but an
2638+
*Updated dependencies* bump. Those `## 17.0.0-rc.3` changelog sections no
2639+
longer survive on `main`, and the Console pin did not move in that round. So
2640+
this one window section spans the `rc.2` cut through the `rc.4` cut rather than
2641+
splitting at a tag that records nothing.
2642+
2643+
As in the windows above, landings that belong to a section higher up the page
2644+
are documented **there** rather than repeated here.
2645+
2646+
- **Declarative `apis:` goes from silent no-op to live, in two steps.** The
2647+
surface was zero-execution end to end and said nothing about it: metadata
2648+
loading accepted `apis:` and `GET /api/v1/meta/api` returned every endpoint
2649+
with every key intact, while no route was ever mounted — so a declared path
2650+
died at Hono's `notFound` rather than at the dispatcher. It first learned to
2651+
**refuse loudly**, retiring the `ApiRegistry` family (#4936, #4939); the
2652+
blanket refusal then narrowed to per-endpoint publish gates and declared
2653+
endpoints **went live** (#5111, #5040 E7).
2654+
- **#4001 closes the authorable surface, batches 9–20.** Unknown keys are now
2655+
rejected on the flow-node config contracts (batch 9), `control-flow` and
2656+
`state-machine` (batch 10), nine automation shapes (batch 11), the ETL
2657+
authoring contracts (batch 12), the responsive/SDUI styling shapes (batch
2658+
13), action-param options, public sharing, report sorting, the dataset
2659+
semantic layer and dashboard widgets (batch 14), all 14 `ui/theme` sites and
2660+
5 of 7 `ui/chart` sites (batch 15), and `AriaProps` (batch 16). View
2661+
sub-blocks (batch 18) and object inner blocks (batch 20) stop dropping
2662+
unknown keys instead of reporting them. `ui/component.zod.ts`'s 29 sites were
2663+
judged **no gate** and deliberately left open (batch 17) — a recorded
2664+
verdict, not an omission. `ViewItemSchema` splits into an authoring schema
2665+
and a wire variant.
2666+
- **ADR-0049 enforce-or-remove reaches its widest sweep.** Retired in this
2667+
window: the dashboard widget action trio plus `aria`, and the build gate that
2668+
enforced a button nobody renders (#5010); `indexes[].type` and
2669+
`indexes[].partial`, two authorable index keys no driver ever read (#5248,
2670+
#4943); `connector.rateLimitConfig` and the whole outbound rate-limit shape,
2671+
whose engine never existed (#4911); `dashboard.widgets[].responsive` (#4876);
2672+
`HookContext.session`'s deprecated position key, declared and read by two
2673+
dead branches but never produced (#5050); `HttpServerConfigSchema` (#4938);
2674+
`NotificationActionSchema` and `EmbedConfigSchema` (#5015); nine theme token
2675+
groups emitted and read by nobody (#5021); the five `ui/` interaction config
2676+
modules (#4988); `IStorageService.list(prefix)` (#5540); the field-mapping
2677+
`transform` key and `FieldMappingTransform` (#5552); and the exported
2678+
`HttpServer` delegating wrapper.
2679+
- **The caller's positions converge on one spelling.** Action-body
2680+
`ctx.session` starts emitting the canonical `positions` alongside the
2681+
deprecated predecessor key it replaces (#5613); that predecessor is then
2682+
removed outright, leaving `ctx.user.positions` as the only spelling on
2683+
action bodies and AI route handlers (#6011).
2684+
- **A misconfigured provider fails the boot instead of degrading silently.**
2685+
`OS_EMAIL_PROVIDER=resend/postmark` without an API key no longer becomes the
2686+
log transport (#5132), and a misspelled `OS_SMS_PROVIDER` no longer does
2687+
either (#5713).
2688+
- **Wire shapes stop having two answers.** `GET /meta/:type/:name` answers
2689+
exactly one body shape; a sort node spelling its direction `direction` is a
2690+
400 rather than a silently reversed page (#4721); `DeleteDataResult` declares
2691+
the schema it names — `success`, not `deleted` (#5638); and
2692+
`@objectstack/spec/openapi.json` stops describing routes it does not own,
2693+
shrinking to the contract half it does (#5744, #5588).
2694+
- **The driver contract stops writing the object name twice.** `IDataDriver`'s
2695+
query parameter becomes `DriverQuery` (#5181) — the first step of the
2696+
narrowing that finishes in the open window below.
2697+
- **Tenancy and durability corrections.** `organization/create` is judged
2698+
against the **effective** tenancy posture, so a deployment with no
2699+
organization wall can no longer create organizations (#5261);
2700+
`HierarchyScopeContext.organizationId` becomes the authoritative tenancy
2701+
field and is required (#5858); and a `sys_file` / `sys_upload_session` write
2702+
that never landed stops reporting success (#5216).
2703+
- **Two dialect convergences.** The retry policy's last two spellings meet
2704+
(#4964 `flow.errorHandling`, #4962), and `dashboard.widgets[].compareTo`
2705+
converges on the analytics executor's contract (#5011).
2706+
2707+
### New in Console — bundled objectui advanced `f5bc4c78be76 → f995a452d2ca`
2708+
2709+
One pin move, released as **@objectstack/console 17.0.0-rc.4**: 98 non-merge
2710+
objectui commits, of which 64 of 65 changesets release; the enumeration is
2711+
`console-f995a452d2ca`. This is the move that carries the bundle's two
2712+
author-facing breaking migrations — **field widgets receive their metadata on
2713+
one key, `field`** (objectui#3233) and **flow node geometry is the spec's
2714+
`FlowNode.position`** (objectui#3172) — both documented under *Breaking changes
2715+
& migration* above.
2716+
2717+
## Landed since 17.0.0-rc.4
2718+
2719+
These changes are on `main` after the `rc.4` cut and **roll into 17.0.0-rc.5**.
2720+
A short window: **10 changesets — 2 `major`-class, 4 `minor`, 4 `patch`**,
2721+
counted across the `17.0.0-rc.5` sections of the package changelogs. Nine are
2722+
listed below; the tenth is the Console pin move.
2723+
2724+
- **`system-data` no longer grants CSV import by default** (#4671).
2725+
`managedBy: 'system-data'` narrows from `create/import/edit/delete/exportCsv`
2726+
to the same set with `import: false`, leaving `platform` as the only bucket
2727+
that grants `import` by default. Eight in-repo objects lose the import
2728+
wizard, three of them the RBAC join tables that decide who can do what.
2729+
Restore any one of them with `userActions: { import: true }` on the object —
2730+
only that verb, the rest still follow the bucket default. The authorization
2731+
boundary is unchanged: `import` is an affordance that decides whether a UI
2732+
entry renders, and every imported row still passes `DelegatedAdminGate`, RLS
2733+
and permission-set adjudication. What changes is leverage — one bad CSV is a
2734+
bulk grant. Recorded as the #4671 addendum to ADR-0103.
2735+
- **`subscribeMetadata`'s `type` narrows to `MetadataEventSubject`** (#4627) —
2736+
subscribing to an event the contract can never deliver is now a compile
2737+
error.
2738+
- **`engine.transaction` tightens, batch 1** (#5696) — `opts.require` is
2739+
fail-closed, and the handle carries an `owned` signal.
2740+
- **Transaction handles stop leaking across datasources** (#5351, #5696) — a
2741+
business write refuses loudly, and the system ledger moves out of the
2742+
transaction so it lands on its own.
2743+
- **A connector action can declare what it did upstream** (#4395), which is
2744+
what makes `connector_action` countable.
2745+
- **`XParsed` naming reaches every schema that has a parsed state** (ADR-0122,
2746+
#5551).
2747+
- **`os migrate summary-nulls`** (#6063) backfills roll-up count and sum
2748+
columns left `NULL` by pre-seed inserts.
2749+
- **`runAs: 'system'` `create_record` stamps all three ADR-0118 columns**
2750+
(#5494) — organization, owner and creator are non-`NULL`.
2751+
- **The strictness ledger gains a ninth verdict, `covered`** (#5249) — an
2752+
honest cell for a shape fragment with no gate and no parse whose every
2753+
consumer already guards.
2754+
2755+
### New in Console — bundled objectui advanced `f995a452d2ca → 7dfbeb704e1e`
2756+
2757+
One pin move, released as **@objectstack/console 17.0.0-rc.5**: 28 non-merge
2758+
objectui commits, 9 of 9 changesets releasing, all `patch`; the enumeration is
2759+
`console-7dfbeb704e1e`. No author-facing breaking migration.
2760+
2761+
## Landed since 17.0.0-rc.5
2762+
2763+
This window is **open** — these changes are on `main` after the `rc.5` cut and
2764+
roll into the next cut. Measured from the changesets added since the `rc.5`
2765+
version commit: **135 pending — 17 `major`-class, 26 `minor`, 92 `patch`**, and
2766+
none that release nothing. These numbers move until the cut; once it lands the
2767+
package changelogs are authoritative.
2768+
2769+
- **ADR-0122 phase 2 — the bare type name becomes the AUTHOR state.** 1384
2770+
aliases flip and 102 `XInput` synonyms retire, completing the convention
2771+
whose `XParsed` half landed in the previous window (#5551).
2772+
- **The driver query contract finishes narrowing.** `DriverQuery` reaches
2773+
`aggregate` and `distinct` on memory and mongodb (#6212 batch C) and five
2774+
further drivers (#6075); `SqlDriver.distinct`'s third parameter becomes a
2775+
bare `FilterCondition`, so a spelling that silently returned the whole set no
2776+
longer compiles (#6320); `analyzeQuery` and `findWithWindowFunctions` stop
2777+
taking `any`, and the window door carries its own flat-shape types (#6212
2778+
batches A and E); and the two undeclared `aggregate` / `func` aliases retire
2779+
(#6212 batch B, #6321).
2780+
- **ADR-0049 enforce-or-remove continues.** The L2 ETL layer retires —
2781+
`automation/etl.zod.ts` had no executor while the sync architecture document
2782+
was still recommending it. So do `system/http-server.zod.ts`'s runtime
2783+
vocabulary; the widget-registration vocabulary and five doorless i18n shapes,
2784+
with `FieldWidgetProps` deliberately **kept**; `ViewProtocol`'s five
2785+
viewId-addressed methods and their ten schemas (#6239); and `array_agg` /
2786+
`string_agg` from `AggregationFunction`, with `count_distinct` deliberately
2787+
kept (#6188). The SDUI component props are reconciled against the renderers
2788+
that serve them — 4 keys retired, 9 declared (#5775).
2789+
- **`composeStacks` stops last-wins on `i18n`** (#5051) — the same value
2790+
passes, a genuine conflict errors with a prescription.
2791+
- **`HierarchyScopeContext` carries the tenancy posture** (#6139), so a
2792+
single-posture `DEPTH` scope is legal rather than rejected.
2793+
- **`HookContext.api` narrows from `z.unknown()` to `IScopedContext`** (#5945)
2794+
— the first hook the documentation teaches finally compiles.
2795+
- **A `view` body must be a view before the union judges it** (#5599), and an
2796+
action param's `options[]` can speak a per-option `visibleWhen` (#5016).
2797+
2798+
### New in Console — bundled objectui advanced `7dfbeb704e1e → 0cf8f0f70d10`
2799+
2800+
One pin move, not yet released: 66 non-merge objectui commits, 24 of 24
2801+
changesets releasing; the enumeration is `console-0cf8f0f70d10`. Two entries
2802+
carry the author's own breaking annotation, but both are TypeScript
2803+
export-surface changes inside objectui's own npm packages — the `GestureType` /
2804+
`GestureConfig` rename (objectui#3363), and objectui tracking the
2805+
`@objectstack` family at `17.0.0-rc.5` (objectui#3560). `@objectstack/console`
2806+
ships a frozen SPA build at the pin SHA and does not forward those type
2807+
entrypoints, so **no new metadata migration is registered for this move** — the
2808+
changeset records that verdict against ADR-0087. The same changeset also lists,
2809+
by subject rather than by count, the 42 commits in the range that carried no
2810+
changeset of their own.
2811+
26152812
## Upgrade checklist
26162813

26172814
### 17.0.0

0 commit comments

Comments
 (0)