Skip to content

Commit 0874ab7

Browse files
committed
chore(spec): regenerate protocol-upgrade-guide.md (ADR-0087 manifest sync)
Companion to the spec-changes.json sync — the upgrade guide derives from the same ADR-0087 registries and carried the same pre-existing v16 drift (protocol 15→16, dashboard-widget-strict-unknown-keys section). The Check Generated Artifacts job runs check:spec-changes and check:upgrade-guide back to back; this brings the second into sync too. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TjHfkKmEvgk8v7N8nTe5sH
1 parent 2240adb commit 0874ab7

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

docs/protocol-upgrade-guide.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
# Metadata protocol upgrade guide
55

6-
Current protocol: **15.0.0** · chain support floor: **protocol 10** · generated from the ADR-0087 registries (`@objectstack/spec` `conversions/` + `migrations/`).
6+
Current protocol: **16.0.0** · chain support floor: **protocol 10** · generated from the ADR-0087 registries (`@objectstack/spec` `conversions/` + `migrations/`).
77

88
## How to upgrade — from any past major
99

@@ -104,6 +104,16 @@ Protocol 15 unified the conditional-visibility predicate under `visibleWhen` (AD
104104
- Why not automatic: The `.strict()` flip (ADR-0089 D3a) turns a previously silently-stripped unknown key into a parse error. There is no mapping target for an arbitrary unknown key — auto-deleting it would be exactly the silent data loss ADR-0078 bans — so each occurrence needs the author to decide: fix the typo, move it to the right layer, or delete dead metadata.
105105
- Done when: `objectstack validate` passes with no unknown-key parse errors on form fields, form sections, or page components.
106106

107+
## Protocol 15 → 16
108+
109+
Protocol 16 flipped `DashboardWidgetSchema` to `.strict()` (framework#3251, ADR-0021 endpoint): an undeclared top-level widget key is now a loud parse error instead of a silent strip (ADR-0049 enforce-or-remove, ADR-0078 no-silently-inert). The inline analytics shape it most often catches (`object`+`categoryField`+`valueField`+`aggregate`, pivot `rowField`/`columnField`) was already removed at protocol 9, so no mechanical rewrite applies; the residue is the strictness itself, delegated to the author because an arbitrary unknown key has no lossless canonical target.
110+
111+
### Semantic (delegated to you, with acceptance criteria)
112+
113+
- **`dashboard-widget-strict-unknown-keys`**`dashboard widgets (undeclared top-level keys — legacy inline analytics, objectui-internal `component`/`data`, or typos)` → declared keys only (`dataset` + `dimensions` + `values` for analytics; `options` for renderer-specific extras)
114+
- Why not automatic: The `.strict()` flip turns a previously silently-stripped unknown key into a parse error. There is no mapping target for an arbitrary unknown key — auto-deleting it would be exactly the silent data loss ADR-0078 bans — so each occurrence needs the author to decide: bind a `dataset` and select `dimensions`/`values`, move a renderer setting under `options`, or delete the dead key.
115+
- Done when: `objectstack validate` passes with no unknown-key parse errors on dashboard widgets.
116+
107117
---
108118

109119
*Machine-readable equivalents: `spec-changes.json` (shipped in `@objectstack/spec` and attached to each GitHub Release) and the structured output of `objectstack migrate meta --json`.*

0 commit comments

Comments
 (0)