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
feat(spec,lint): allow dropdown userFilters on object list views (#2679) (#2683)
* feat(spec,lint): allow dropdown userFilters on object list views (#2679)
Airtable-style quick-filter chips (`userFilters`, `element: 'dropdown'`)
were blanket-suppressed on object list views ("views" mode) — omitted
from `ObjectListViewSchema`, errored by the `validate` list-view-mode
rule, and dropped at render. That over-corrected against ADR-0047 TL;DR
#5 (data mode is meant to expose quick filters).
Narrow the rule: an object list view MAY carry a `dropdown` (value-chip)
userFilters; only the `tabs` preset style stays page-only, because the
saved-view ViewTabBar already owns the tab-bar role (need presets on an
object → use `listViews`).
- spec: new `ObjectUserFiltersSchema` (element narrowed to dropdown/
toggle, tabs/showAllRecords omitted); `ObjectListViewSchema` extends
`userFilters` back in with it.
- lint: `validate-list-view-mode` flags `quickFilters` always, but
`userFilters` only when `element: 'tabs'` / carrying `tabs`.
- app-showcase: dropdown userFilters (status + health) on the default
`showcase_project` list view.
- docs: ADR-0047 amendment note + regenerated view reference.
Companion objectui runtime change: objectstack-ai/objectui#2338.
* docs(skills): note object list views allow dropdown userFilters, tabs page-only (#2679)
* chore(spec): regenerate skill-docs + api-surface for ObjectUserFiltersSchema (#2679)
Copy file name to clipboardExpand all lines: content/docs/ai/skills-reference.mdx
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,7 +46,7 @@ ObjectStack ships **9 domain-specific skills**. Each is self-contained — an AI
46
46
| # | Skill | Domain | Path | What it covers |
47
47
| :--- | :--- | :--- | :--- | :--- |
48
48
| 1 |[Platform](#platform)|`platform`|`skills/objectstack-platform/`| Bootstrap, configure, extend, and operate ObjectStack runtimes. Covers project setup (`defineStack`, drivers, adapters, scaffolding), plugin and service development (PluginContext, DI, kernel hooks like `kernel:ready` and `data:*`), and operations (CLI commands, migrations, deployment, test harnesses via LiteKernel). |
49
-
| 2 |[Data](#data)|`data`|`skills/objectstack-data/`| Design ObjectStack data schemas — objects, fields, field conditional rules, relationships, validations, indexes, lifecycle hooks, permissions, row-level security — and the seed definitions (`defineSeed()`) that load fixtures and reference data alongside them. |
49
+
| 2 |[Data](#data)|`data`|`skills/objectstack-data/`| Design ObjectStack data schemas — objects, fields, field conditional rules, relationships, validations, indexes, lifecycle hooks, permissions, row-level security — and the seed datasets (`defineDataset()`) that load fixtures and reference data alongside them. |
Design ObjectStack data schemas — objects, fields, field conditional rules, relationships, validations, indexes, lifecycle hooks, permissions, row-level security — and the seed definitions (`defineSeed()`) that load fixtures and reference data alongside them.
78
+
Design ObjectStack data schemas — objects, fields, field conditional rules, relationships, validations, indexes, lifecycle hooks, permissions, row-level security — and the seed datasets (`defineDataset()`) that load fixtures and reference data alongside them.
79
79
80
80
Use when the user is creating or modifying `*.object.ts` / `*.seed.ts` files, picking field types, modelling relationships, writing `beforeInsert`/`afterUpdate` hooks, configuring per-object access control, or authoring bootstrap / demo data. Use for `visibleWhen` / `readonlyWhen` / `requiredWhen` rules that belong on fields.
81
81
@@ -147,7 +147,7 @@ Do not use for general LLM prompting questions unrelated to ObjectStack metadata
147
147
148
148
Design the server-side API surface that an ObjectStack runtime exposes — REST/GraphQL endpoints, auth providers, realtime channels, error envelopes, batch/versioning contracts.
149
149
150
-
Use when the user is adding `ApiEndpoint` entries to the `apis:` array in `defineStack()`, configuring auth providers, defining custom routes, or extending the REST/GraphQL generator.
150
+
Use when the user is adding `*.endpoint.ts`, configuring auth providers, defining custom routes, or extending the REST/GraphQL generator.
151
151
152
152
Do not use for: consuming an ObjectStack API from a client (that is just standard HTTP — no skill needed); the auto-generated CRUD endpoints (those follow from objectstack-data); request-side query syntax (see objectstack-query). CEL expressions in route guards or auth predicates: load objectstack-formula alongside.
@@ -255,6 +255,18 @@ List chart view configuration
255
255
*`none`
256
256
257
257
258
+
---
259
+
260
+
## ObjectUserFilters
261
+
262
+
### Properties
263
+
264
+
| Property | Type | Required | Description |
265
+
| :--- | :--- | :--- | :--- |
266
+
|**element**|`Enum<'dropdown' \| 'toggle'>`| ✅ | Filter control style on object views: "dropdown" (per-field value chips). "toggle" is deprecated. "tabs" is page-only — use `listViews` for named presets. |
Copy file name to clipboardExpand all lines: docs/adr/0047-object-ui-run-modes.md
+14Lines changed: 14 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,6 +10,20 @@
10
10
> and the page editor edits them in place. `sourceView` is deprecated and kept
11
11
> only as a runtime back-compat fallback. TL;DR #2 below no longer holds; the
12
12
> rest of the ADR (two run modes, userFilters, visualization whitelist) stands.
13
+
>
14
+
> **Amendment (2026-07-07) — `dropdown` user filters are allowed on object list
15
+
> views again (framework #2679 / objectui #2338).** The phase-4 rollout had
16
+
> blanket-suppressed *all*`userFilters` on object list views ("views" mode):
17
+
> `ObjectListViewSchema` omitted the field, the `validate` list-view-mode rule
18
+
> errored on it, and objectui's `ObjectView` forced `userFilters: undefined` at
19
+
> render. That over-corrected against TL;DR #5 (data mode is *supposed* to expose
20
+
> quick filters). The narrowed rule: an object list view MAY carry a `dropdown`
21
+
> (per-field value-chip) `userFilters`; only the `tabs` preset style stays
22
+
> page-only, because an object view's saved-view `ViewTabBar` already owns the
23
+
> tab-bar role and a `tabs` user-filter would render a second, conflicting bar
24
+
> (need named presets on an object → use `listViews`). Enforced by a new
25
+
> `ObjectUserFiltersSchema` (element narrowed to `dropdown`/`toggle`, `tabs`/
26
+
> `showAllRecords` omitted), which `ObjectListViewSchema` now `.extend`s back in.
13
27
**Deciders**: ObjectStack Protocol Architects
14
28
**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**)
0 commit comments