Symptom
The showcase's personal work queue is not personal. Open /_console/apps/showcase_app/page/showcase_my_work with the network recorder on, having first created a task owned by another user.
- Expected
$filter=[["owner_id","=","<current user>"]] on the grid's query. - Actual the wire carries no
$filter at all, and the grid lists every row including the foreign-owned probe.
Reproduced twice with fresh logins. Contrast on the same run: active-projects' interfaceConfig.filterBydoes reach the wire, so the page-level plumbing is fine.
Scope, stated precisely
Carried verbatim from the run so nobody over-escalates it:
Scope, stated precisely: this is not an authorization bypass. The unfiltered read is still RLS-constrained, so the caller sees only rows they may see (admin sees all because admin may see all). The defect is that a declared personal-scope filter silently never applies — and that a typo'd key is accepted without complaint. The second half is the more general problem.
The general half is filed separately as #7751.
Root cause — a key-name mismatch
examples/app-showcase/src/ui/pages/my-work.page.ts:52 authors the plural key:
{
type: 'object-grid',
properties: {
objectName: 'showcase_task',
columns: ['title', 'project', 'status', 'priority', 'due_date'],
filters: [['owner_id', '=', '{current_user_id}']],
},
},
objectui's ObjectGrid reads only schema.filter (packages/plugin-grid/src/ObjectGrid.tsx:472, lowered through toFilterNode) and the legacy schema.defaultFilters (line 657). schema.filters has zero read points in that file. filters appears exactly once in the whole showcase — this line; every other page uses filter.
Stale-premise check. Re-verified on objectstackorigin/main (00e9196): line 52 still reads filters:. Re-verified on objectuiorigin/main (33c32bf): the renderer still reads only filter / defaultFilters, and schema.filters still has no reader — so this is not a stale-bundle artefact.
New since the run, and it changes the fix. objectui#4041 (commit 9154d9e, 2026-08-10) retired the plural spelling from the block's published vocabulary: packages/plugin-grid/src/index.tsx:117 now declares { name: 'filter', type: 'array', label: 'Filter' }, with gridFilterInputSpelling.test.tsx pinning that the declared name reaches $filter. At the time this page was authored, filters was what object-grid published, so the author was following the manifest — that excuse is now gone, and the one-word fix (filters: → filter:) lands on the declared, pinned, lowered path.
⚠️Pin dependency for verification.9154d9e landed after the console pin this run served (09987b680, 2026-08-09) and is present in the repo-root pin 6314e87f2. On a console built at the old pin, filter was not yet a reachable declared input, so the fix cannot be verified end-to-end until the vendored packages/console/dist is rebuilt — see #7752.
Reproduction
- Boot the showcase; sign in as user A and create a
showcase_task owned by user B. - Sign in as user A and open
/_console/apps/showcase_app/page/showcase_my_work with the network recorder on. - Inspect the grid's data request — there is no
$filter parameter. - Observe the foreign-owned task listed in the personal queue.
Source
Extracted from the QA run #7695 (framework 92f26f7, console 09987b680).
Symptom
The showcase's personal work queue is not personal. Open
/_console/apps/showcase_app/page/showcase_my_workwith the network recorder on, having first created a task owned by another user.$filter=[["owner_id","=","<current user>"]]on the grid's query.$filterat all, and the grid lists every row including the foreign-owned probe.Reproduced twice with fresh logins. Contrast on the same run:
active-projects'interfaceConfig.filterBydoes reach the wire, so the page-level plumbing is fine.Scope, stated precisely
Carried verbatim from the run so nobody over-escalates it:
The general half is filed separately as #7751.
Root cause — a key-name mismatch
examples/app-showcase/src/ui/pages/my-work.page.ts:52authors the plural key:objectui's
ObjectGridreads onlyschema.filter(packages/plugin-grid/src/ObjectGrid.tsx:472, lowered throughtoFilterNode) and the legacyschema.defaultFilters(line 657).schema.filtershas zero read points in that file.filtersappears exactly once in the whole showcase — this line; every other page usesfilter.Stale-premise check. Re-verified on
objectstackorigin/main(00e9196): line 52 still readsfilters:. Re-verified onobjectuiorigin/main(33c32bf): the renderer still reads onlyfilter/defaultFilters, andschema.filtersstill has no reader — so this is not a stale-bundle artefact.New since the run, and it changes the fix. objectui#4041 (commit
9154d9e, 2026-08-10) retired the plural spelling from the block's published vocabulary:packages/plugin-grid/src/index.tsx:117now declares{ name: 'filter', type: 'array', label: 'Filter' }, withgridFilterInputSpelling.test.tsxpinning that the declared name reaches$filter. At the time this page was authored,filterswas whatobject-gridpublished, so the author was following the manifest — that excuse is now gone, and the one-word fix (filters:→filter:) lands on the declared, pinned, lowered path.9154d9elanded after the console pin this run served (09987b680, 2026-08-09) and is present in the repo-root pin6314e87f2. On a console built at the old pin,filterwas not yet a reachable declared input, so the fix cannot be verified end-to-end until the vendoredpackages/console/distis rebuilt — see #7752.Reproduction
showcase_taskowned by user B./_console/apps/showcase_app/page/showcase_my_workwith the network recorder on.$filterparameter.Source
Extracted from the QA run #7695 (framework 92f26f7, console 09987b680).