|
24 | 24 | > (need named presets on an object → use `listViews`). Enforced by a new |
25 | 25 | > `ObjectUserFiltersSchema` (element narrowed to `dropdown`/`toggle`, `tabs`/ |
26 | 26 | > `showAllRecords` omitted), which `ObjectListViewSchema` now `.extend`s back in. |
| 27 | +> |
| 28 | +> **Amendment (2026-10-20) — `filterableFields` is retired in 18.0, with no |
| 29 | +> replacement key and no rewrite (#24640: the maintainer ruled 「C」, record |
| 30 | +> 6278975049, and pulled it into 18.0 with 「提前」, record 6279033298; |
| 31 | +> executed by PR #24721, `4bc3becd5`).** §3.3 item 1 below said |
| 32 | +> `filterableFields` "stays as the legacy shorthand; loaders auto-upgrade it to |
| 33 | +> `userFilters.fields` entries". That loader was never built: on the tree the |
| 34 | +> retirement replaced, the key was declared, offered as a Studio form input and |
| 35 | +> checked for field references, and nothing rewrote it into |
| 36 | +> `userFilters.fields`; its one renderer, objectui's `ListView`, read it as the |
| 37 | +> Filter panel's field whitelist instead. The ruling retires the key with no |
| 38 | +> replacement key: the list-view shapes (`ListViewSchema`, |
| 39 | +> `ObjectListViewSchema`) refuse it at parse with a `retiredKey()` tombstone |
| 40 | +> that names the fix, and the conversion `view-list-filterable-fields-removed` |
| 41 | +> drops it from stored views. No conversion rewrites it to |
| 42 | +> `userFilters.fields`: that rewrite keeps nothing an author saw — the |
| 43 | +> whitelist would vanish and quick-filter chips would appear (record |
| 44 | +> 6278907207). A curated end-user filter bar is authored as `userFilters`. |
| 45 | +> §3.3 item 1's sentence is struck in place, not deleted; §4 already called |
| 46 | +> the alias a one-release courtesy, not a commitment. |
27 | 47 | **Deciders**: ObjectStack Protocol Architects |
28 | 48 | **Builds on**: [ADR-0005](./0005-metadata-customization-overlay.md) (one Zod source per type, org overlay), [ADR-0017](./0017-object-has-many-view.md) (independent view entities, `viewKind`), [ADR-0019](./0019-app-as-consumer-unit.md) (App is the consumer-facing unit — navigation decides what users see), [ADR-0027](./0027-metadata-authoring-lifecycle.md) (draft · publish lifecycle), [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (**AI is the long-term author of metadata — the design center this ADR inherits**) |
29 | 49 | **Consumers**: `@objectstack/spec` (view + page Zod schemas), `@objectstack/objectql` (registry validation/diagnostics), `../objectui` (console `ObjectView` / `PageView`, `plugin-list`), framework templates (`hotcrm`, `app-showcase`), the `objectstack-ui` authoring skill |
@@ -151,8 +171,10 @@ have; we do not rely on lint to forbid what the type can simply not express. |
151 | 171 |
|
152 | 172 | Attached as `ListViewSchema.userFilters` (view-level convenience) and |
153 | 173 | `InterfacePageConfigSchema.userFilters` (the primary home). |
154 | | - `filterableFields` stays as the legacy shorthand; loaders auto-upgrade it |
155 | | - to `userFilters.fields` entries. |
| 174 | + ~~`filterableFields` stays as the legacy shorthand; loaders auto-upgrade it |
| 175 | + to `userFilters.fields` entries.~~ *(Struck by the 2026-10-20 amendment — |
| 176 | + `filterableFields` retired in 18.0 by ruling C on #24640, with no |
| 177 | + replacement key and no rewrite; see the status block above.)* |
156 | 178 |
|
157 | 179 | 2. **Runtime visualization whitelist.** |
158 | 180 | `UserActionsConfigSchema.visualizations?: z.union([z.boolean(), z.array(ViewTypeEnum)])` |
|
0 commit comments