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
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
studio(field type picker): 46 field types in one flat Select with no search, icons or descriptions #11793
Filing gate ② — a product decision only the maintainer can make.
Who acts on it: objectui triage → the Studio / app-shell owner. ⛔ Not a claim. Found in a manual browser QA pass of Studio on 2026-10-07; filed one card per finding on the maintainer's word: 「你发现的问题全部提交 issue」, and on the one-card-per-finding question 「覆盖规则,逐条立卡」.
Maintainer quick-read
The field Type picker is one flat Select of 46 entries ("Text · Text" … "Advanced · Vector") with no search, icons or one-line descriptions. Add typeahead and common types first?
Options
A — searchable command-list with icons, a Common group first and a one-line description per type.
B — typeahead only.
C — status quo.
Environment
objectstack 879bd38c · examples/app-showcase booted with objectstack dev --ui --seed-admin on an isolated port and SQLite file · objectui 179f6fe9 (HEAD; the framework pin .objectui-sha is a58626c8) served by the console's Vite dev server, perf numbers from a vite build of the same commit · Chromium 141 at 1440×900 · signed in as the seeded platform admin admin@objectos.ai unless stated.
Duplicate check
Semantic issue search on objectstack-ai/objectui (open and closed), field type picker search 46 types flat select: 3 hits (0 open, 3 closed).
Path: write metadata — choosing a field type in Studio | 缺项 | P3
Triage: first grade, enhancement · priority:p3 · domain:ui · area:studio · pm:queue. Filed as ②, but routed as a Studio UX improvement: no contract or product question is open
Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-07T16:23Z. ⛔ Not a claim, ⛔ not a dispatch.
Triage: lands in the Studio field-type picker ⇒ domain:ui; rationale: a Studio or console surface in objectui. Filed from the Studio browser QA pass of 2026-10-07 (objectstack 879bd38c, objectui 179f6fe9).
Why not the decision box: a searchable, grouped picker with icons and descriptions changes no field type and no contract. Why p3: the flat list works.
Direction:
a searchable picker grouped by kind, with an icon and a one-line description per type, on the repository's existing combobox primitive
descriptions come from the spec's field-type metadata where it exists
inspectors/ObjectFieldInspector.tsx: the Type control (InspectorSelectField with typeOptions, about :974) and buildTypeOptions (about :486);
at most one new module-private picker module beside it (inspectors/), built on the repository's existing combobox (packages/components/src/custom/combobox.tsx, import only);
previews/field-types.ts: read only (FIELD_TYPE_META's icons, TYPES_BY_CATEGORY);
new designer.field.* / engine.fieldTypeDesc.* rows of i18n.ts (en and zh), only for descriptions the spec does not already carry;
the tests beside them;
.changeset/11793-*.md.
⛔ Not on it: packages/components/src/ui/** (objectui AGENTS.md #7) and packages/components/src/custom/combobox.tsx's own code; packages/i18n/**; what a type change does to the field (changeType's behaviour stays as it is). Any file outside this list: the dev reports it before opening the PR (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: opus (dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate; default tier)
Clause-②: no
Responsibility: objectui app-shell Studio: the field inspector's Type control is one flat Select of 46 entries ("Text · Text" … "Advanced · Vector") with no search, icons or descriptions | the platform path: the Studio catalog already groups the types by category with an icon per type (FIELD_TYPE_META, TYPES_BY_CATEGORY), and a combobox exists in @object-ui/components' custom layer | every author adding or retyping a field in Studio
Thread-read: 6042134418
Serial constraints cleared: this seat's objectui#11782 (b0aa892) and objectui#11786 (04c8f56), which edited ObjectFieldInspector.tsx, have landed. No in-flight claim in the lane names ObjectFieldInspector.tsx, and no open objectui PR touches it (read 2026-10-08T04:47Z).
Why Clause-②: no: a Studio-internal control. A published export, prop, type member or language-pack key is a stop: the dev reports it before opening the PR, and the seat amends this line.
{
"issue": 11793,
"status": "blocked",
"branch": "claude/issue-11793-field-type-picker",
"pr": null,
"session": "session_01CGZy1BGCjdN5cXqL9cnvB8 — subagent mode, the parent seat's id",
"premise_still_valid": true,
"summary": "Implemented and pushed (branch head c43b003, all work committed): the field inspector's Type control is a module-private FieldTypePicker (inspectors/FieldTypePicker.tsx) — a trigger showing the type's icon and name that opens a cmdk list grouped by the catalog's categories, each row the type's icon, name and a one-line description; search matches the shown name, the category, the id and the catalog's English name; a choice still calls changeType, re-choosing the current type writes nothing, read-only disables the trigger, an unlisted stored type stays flagged '(not found)'. Descriptions are 46 new engine.fieldTypeDesc.* rows (en+zh) in i18n.ts because @objectstack/spec 17.7.0 carries none. BLOCKED, PR deliberately not opened: the change makes three tests OUTSIDE the claim's File surface go red (packages/app-shell/src/views/studio-design/DataPillar.authorRefusal-11785.test.tsx, DataPillar.choiceWithoutOptions-11253.test.tsx, DataPillar.heldIncomplete-11786.test.tsx — each picked a type by the retired 'Category · Type' row label, a regex ending '· Picklist' / '· Radio' / '· Lookup'); the claim says 'Any file outside this list: the dev reports it before opening the PR (stop on breach)'. The 7-line mechanical fix (regex now anchored to the type name, e.g. /^Picklist$/) sits in its own commit 5c63334 so the seat can take it or drop it. Needed from the seat: amend the claim's File surface with those three files, then open the draft PR from the branch (or send this dev a patch round to open it and write the PR body). Zone 2 measured: #1 confirmed (InspectorSelectField fed buildTypeOptions' 'Category · Type' strings); #2 custom/combobox.tsx does not fit (one ungrouped list of labels, no icon or second line, and re-choosing its current value commits an empty string) and InspectorComboField has groups but no icon/description, so the picker composes the same Popover + Command parts both are built from, import-only, nothing in packages/components edited; #3 spec 17.7.0 has no per-type description (FieldType is a bare z.enum, json-schema/data/FieldType.json lists bare names; lit control: the same dist carries .describe('Relationship type') on studio's relationship-type enum); #4 and #5 implemented and pinned.",
"tests": "All at HEAD c43b003 unless noted, run from the worktree root through os-verify-lock. (1) vitest packages/app-shell/src/views/metadata-admin/inspectors/ — Test Files 143 passed (143), Tests 1908 passed | 1 skipped. (2) vitest packages/app-shell/src/views/studio-design/ + ObjectFieldInspector.typePicker-11793.test.tsx + ObjectFieldInspector.usePicklist-10202.test.tsx — Test Files 121 passed (121), Tests 771 passed. (3) apps/console preview-samples-designer-options + preview-samples-spec-valid + packages/fields optionWidgets.emptyLabel (the other tests naming the inspector) — 3 passed, 50 tests. (4) Before the studio-design fix and the main merge (tree e073506): metadata-admin/ + studio-design/ = 545 files, 3 failed (exactly the three off-surface DataPillar files, 7 tests) | 542 passed — the measurement that found the breach; after the fix those 3 files: 3 passed, 10 tests. (5) pnpm --filter @object-ui/app-shell type-check (script echoed 'type-check', tsc --noEmit && tsc -p tsconfig.test.json) exit 0 after turbo build of the app-shell^... closure; tsconfig.test.json --listFilesOnly lists FieldTypePicker.tsx and both inspector test files. NOT MEASURED locally: the whole-package run vitest packages/app-shell/ (1123 test files, past the foreground cap on this 4-core shared box) — declared narrowing to metadata-admin + studio-design; proof it excludes nothing affected: a census on main of the old option-label shape (a type name after ' · ' in .ts/.tsx/.mjs/.md) hits exactly 4 test files (the on-surface usePicklist test + the 3 DataPillar tests, all updated), and every test file naming ObjectFieldInspector/FieldTypePicker/engine.fieldType sits in the runs above; CI owns the full package. Ablation (one-shot, nothing kept): node objectstack/scripts/ablation-replace.mjs on FieldTypePicker.tsx, anchor ' if (!query) return true;' -> ' return true; // ABLATION-11793 search is a no-op' (anchor x1 -> x0, blob b6882662 -> e8507438), typePicker file 4 failed | 8 passed, the 'look' pin red with 'expected [ text, textarea, email, …(43) ] to deeply equal [ lookup ]', the three other search pins red, the eight non-search pins green; restore: blob after restore b6882662 == HEAD blob, git diff HEAD empty. No dist in the path (the test reaches the picker by relative import), so no rebuild leg applies. Browser (Zone 3 fallback; no Studio backend booted): console preview gallery ?only=object on a private vite port, Chromium /opt/pw-browsers/chromium, en-US and zh-CN: trigger 'Text' / '单行文本' with icon; open = 9 group headings in catalog order, 46 rows, current row data-current and highlighted; lookup row 'Lookup / A link to a record of another object.' and '查找关系 / 关联到另一个对象的一条记录。'; typing 'look' leaves only lookup, Enter retypes the field (trigger and canvas badge read Lookup / 查找关系); ArrowDown x2 moves the highlight; Escape closes; zero page errors. Server stopped by its own pid/port; drive script deleted.",
"mcp_calls": "0",
"api_writes": "1 — this os-dev-report comment, via scripts/pm/post-stamped.mjs through the fleet relay (repository_dispatch to the board repo; executed as POST /repos//issues/11793/comments). No pr_create, no label-write (no PR exists to assign). git push is not counted. Reads only otherwise: GET the card, its comments, and PR 11891's file list (merged; it does not touch the DataPillar tests).",
"open_questions": [
{
"question": "The Type picker makes three studio-design tests red because they chose a type by the retired 'Category · Type' row label; those files are outside the claim's File surface. How should they land?",
"options": [
"A — amend the claim's File surface with the three DataPillar test files and open the draft PR from the branch as pushed (commit 5c63334 is the 7-line fix, already green)",
"B — drop commit 5c63334 and land the three test edits in a separate PR first (the picker PR then stays red until it lands)",
"C — keep the old row label as the option's accessible name so the tests stay as they are (rejected by this dev: it would bend the UI to a test pin and read 'Selection · Picklist' to a screen reader)"
],
"recommendation": "A, because the edits are the minimal mechanical consequence of the change (only the option name pattern moves), no in-flight claim or open PR touches those files (PR 11891 merged and touched a different DataPillar test), and splitting them only buys a red window."
}
],
"out_of_scope_findings": [
"class: a · reach: named producer — objectstack examples/app-showcase declares Field.user (project.team_members; showcase_field_zoo f_user, f_users, f_owner), Field.secret (showcase_field_zoo f_secret) and type 'record' (showcase_field_zoo f_record) · evidence: the Studio catalog previews/field-types.ts lists 46 types while @objectstack/spec 17.7.0 FieldType has 49 (adds secret, user, record); a one-shot probe through the real ObjectFieldInspector at c43b003 read the Type trigger as 'user (not found)', 'secret (not found)', 'record (not found)' with none of the three offered in the picker, lit control lookup read 'Lookup' and was offered (probe file deleted). The flat select drew the same flag from the same catalog (by construction, not re-measured on main); the canvas Add-field palette reads the same TYPES_BY_CATEGORY. The catalog header's '46 entries as of spec 7.1' is a stale prose count. · dedupe words: field type catalog missing user secret record · Studio Type control not found user field · FIELD_TYPE_META FieldType drift",
"carrier: 承接者:无 · noted, not filed — InspectorComboField (app-shell) and Combobox (components custom layer) render cmdk's search input without passing Command's label, so the input is named through an empty aria-labelledby; measured only on this picker before it passed the label (RTL found no input by its placeholder name), not on those two components"
],
"gates": [
"pnpm check:control-bytes — exit 0 — 'check-control-bytes: OK (scanned 7927 tracked text file(s); skipped 85 binary).'",
"pnpm check:test-path-roots — exit 0 — 'check-test-path-roots: OK (2421 filesystem call(s) in 525 of 4675 test file(s) …'",
"pnpm check:changeset-claims — exit 0 — 'No pending changeset names a file this change touches.'",
"pnpm check:pending-changeset-literals — exit 0 — 'No test source names a pending changeset.'",
"pnpm check:i18n-keys — exit 0 — 'Every in-scope call-site key resolves against the en pack (3300 keys) …'",
"pnpm check:i18n-drift — exit 0 — 'No designer-table en value changed in this range.' (46 keys added, 0 en values changed)",
"pnpm check:i18n-dead-keys — exit 0 (report) — engine.fieldTypeDesc. family listed live, 46 keys, read by FieldTypePicker.tsx",
"pnpm check:i18n-designer-parity — exit 0 — 'Every en row has a zh row, and every shared row carries the same placeholders.'",
"pnpm check:new-line-citations — exit 0 — 'VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0'",
"pnpm check:designer-field-key-parity — exit 0 — 'designer-field-key-parity: OK'",
"pnpm check:icon-record-names — exit 0 — 'OK lucide icon names …'",
"pnpm check:phantom-deps — exit 0 — 'Every in-scope import is declared by the package that publishes it.'",
"pnpm check:unused-deps — exit 0 — 'Every gated declaration has a consumer in the package that declares it.'",
"pnpm check:vi-mock-specifiers / check:vi-mock-inherit / check:vi-mock-override-shape — exit 0 each — 'OK'",
"pnpm check:unreferenced-sources — exit 0 — 'OK Every shipped source file in every covered package is reachable.'",
"pnpm check:esm-specifiers — exit 0 — 'no un-ledgered package emits an extensionless relative specifier.'",
"pnpm check:self-import — exit 0 — 'No package names itself inside its own src/.'",
"pnpm check:metadata-write-doors — exit 0 — 'OK 17 metadata write door(s) derived …'",
"pnpm check:handler-key-reads — exit 0 — 'OK 151 arm(s) …'",
"node scripts/check-changeset-presence.mjs — exit 0 — '8 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/11793-field-type-picker.md.'",
"node scripts/check-changeset-no-major.mjs — exit 0 — 'No changeset declares a major bump.'",
"pnpm exec eslint (the 8 touched source/test files) — exit 0 — '0 errors, 11 warnings', all no-explicit-any on ObjectFieldInspector lines this diff does not touch",
"all of the above re-run at HEAD c43b003 (after the main merge); check:readme-exports not run: no export changed"
],
"deviations": [
"Three files outside the claim's File surface edited (studio-design DataPillar tests, commit 5c63334) and the PR NOT opened, per the claim's stop-on-breach clause.",
"The picker composes Popover + Command from @object-ui/components rather than rendering custom/combobox.tsx, which the claim names as the base: measured that Combobox has no groups, icon or second line and commits an empty string on re-choosing its value; no file in packages/components touched.",
"Search also matches the catalog's English type name, beyond Zone 2's three keys, so a zh author finds a type by 'Picklist' or 'Rollup'.",
"The search placeholder and empty text reuse the existing designer.canvas.searchFieldType / designer.canvas.noMatchingTypes rows instead of new designer.field rows.",
"The whole-package vitest run of packages/app-shell/ was not run locally (declared narrowing, see tests).",
"main merged into the branch (merge commit c43b003, git's default message without the trailer pair; never rebased)."
],
"files_changed": [
".changeset/11793-field-type-picker.md",
"packages/app-shell/src/views/metadata-admin/i18n.ts",
"packages/app-shell/src/views/metadata-admin/inspectors/FieldTypePicker.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.typePicker-11793.test.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.usePicklist-10202.test.tsx",
"packages/app-shell/src/views/studio-design/DataPillar.authorRefusal-11785.test.tsx (off-surface)",
"packages/app-shell/src/views/studio-design/DataPillar.choiceWithoutOptions-11253.test.tsx (off-surface)",
"packages/app-shell/src/views/studio-design/DataPillar.heldIncomplete-11786.test.tsx (off-surface)"
]
}
Claim amendment — domain:ui seat 3, session_01CGZy1BGCjdN5cXqL9cnvB8, 2026-10-08T06:06Z. It amends claim 6052480005 after the dev's report on this card (branch claude/issue-11793-field-type-picker, head c43b003, no PR yet: the dev stopped on a file-surface breach, as the claim requires). The claim stands otherwise.
File surface, added (measured by the dev): three existing pin files in packages/app-shell/src/views/studio-design/. Each chose a field type by the retired option label "Category · Type", matched with a regex ending · Picklist, · Radio or · Lookup:
DataPillar.authorRefusal-11785.test.tsx;
DataPillar.choiceWithoutOptions-11253.test.tsx;
DataPillar.heldIncomplete-11786.test.tsx.
The edit is the 7-line mechanical consequence, in its own commit 5c63334: each regex is anchored to the type's name (for example /^Picklist$/). No assertion's meaning changes. These are this seat's own pins (objectui#11785, objectui#11786). No in-flight claim or open PR touches them (read 2026-10-08T06:06Z).
The dev's open question is answered A: take the three files into this PR, as pushed. B (a separate PR first) only buys a red window. C (keeping "Category · Type" as the option's accessible name) would bend the UI to a test pin, and would read "Selection · Picklist" to a screen reader.
Measured deviations, accepted:
The picker composes the Popover + Command parts from @object-ui/components (import only). custom/combobox.tsx has no groups, no icon and no second line, and re-choosing its current value commits an empty string.
The descriptions are 46 new engine.fieldTypeDesc.* designer rows (en and zh), because @objectstack/spec 17.7.0's FieldType is a bare enum with no per-type description.
Search also matches the catalog's English type name.
Clause-②: no stands: the new rows are in the designer's own string table, not a published pack, and nothing is exported.
The catalog drift the dev measured (user, secret and record are spec field types missing from Studio's catalog) is filed separately; it is not this card's.
{
"issue": 11793,
"status": "done",
"branch": "claude/issue-11793-field-type-picker",
"pr": "#11919",
"session": "session_01CGZy1BGCjdN5cXqL9cnvB8 — subagent mode, the parent seat's id",
"premise_still_valid": true,
"summary": "Patch round after claim amendment 6053534326 (answer A). Draft PR 11919 opened from the branch, head 81c21f4, first line 'Fixes #11793' and 'Clause-②: no' at line start; assigned to os-support-ai. main had moved (09821b1) and touched i18n.ts, so it was merged (merge commit 81c21f4, never rebased); the 92 engine.fieldTypeDesc rows (46 en + 46 zh) survived and the targeted sets were re-run there. The PR body names the picker (Popover + Command from @object-ui/components, import only), the 46 description rows and why (spec 17.7.0 FieldType carries no per-type description), the search keys, the three off-surface pin edits under the amendment (commit 5c63334), the ablation, the browser reading, the declared narrowing, and the Acceptance notes (catalog drift filed as #11909; the cmdk input-label observation). Implementation unchanged since the first report.",
"tests": "At head 81c21f4: vitest studio-design/ + the two inspector pin files — Test Files 124 passed (124), Tests 795 passed; pnpm --filter @object-ui/app-shell type-check exit 0 after a turbo build of the app-shell^... closure (9 cached of 28); eslint on the 8 touched files 0 errors; the 21 check:* gates plus check-changeset-presence and check-changeset-no-major all exit 0 (designer parity: 'Every en row has a zh row, and every shared row carries the same placeholders.'). Carried from c43b003, with no inspectors/ file changed by the merge: vitest metadata-admin/inspectors/ 143 files passed, 1908 tests, 1 skipped; the ablation (search made a no-op: 'look' pin red, 4 failed / 8 passed; restore blob == HEAD); the preview-gallery browser reading in en-US and zh-CN. NOT MEASURED locally: the whole-package vitest packages/app-shell/ (declared narrowing, CI's). CI on PR 11919: not awaited, in_progress at report time.",
"mcp_calls": "0",
"api_writes": "4 in total over both rounds, all through the fleet relay (repository_dispatch to the board repo, executed as objectstack-fleet[bot]): round 1 POST /repos//issues/11793/comments (report 6053502170); round 2 pr_create POST /repos/objectstack-ai/objectui/pulls (PR 11919, 9035 bytes stored identical), label-write assign POST /repos//issues/11919/assignees (read-back MATCHES: assignee os-support-ai; labels tests and package: app-shell are labeler.yml's), and this addendum POST /repos//issues/11793/comments. git push not counted.",
"open_questions": [],
"out_of_scope_findings": [
"class: a · filed by the seat as #11909 (catalog lists 46 types, spec FieldType 49: secret, user, record missing; Type trigger reads 'user (not found)') · named in the PR's Acceptance notes",
"carrier: 承接者:无 · noted, not filed — InspectorComboField and the components-layer Combobox pass no label to cmdk's Command, so the search input is named through an empty aria-labelledby; measured only on this picker before it passed its own label · named in the PR's Acceptance notes"
],
"gates": [
"vitest studio-design/ + typePicker-11793 + usePicklist-10202 — exit 0 — 'Test Files 124 passed (124)' · head 81c21f4",
"pnpm --filter @object-ui/app-shell type-check — exit 0 · head 81c21f4",
"pnpm exec eslint (8 touched files) — exit 0 — '0 errors, 11 warnings' (pre-existing, untouched lines) · head 81c21f4",
"check:control-bytes, check:test-path-roots, check:changeset-claims, check:pending-changeset-literals, check:i18n-keys, check:i18n-drift, check:i18n-dead-keys, check:i18n-designer-parity, check:new-line-citations, check:designer-field-key-parity, check:icon-record-names, check:phantom-deps, check:unused-deps, check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape, check:unreferenced-sources, check:esm-specifiers, check:self-import, check:metadata-write-doors, check:handler-key-reads — exit 0 each · head 81c21f4",
"check-changeset-presence — exit 0 — '8 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/11793-field-type-picker.md.' · check-changeset-no-major — exit 0"
],
"deviations": [
"Second merge of main into the branch (81c21f4, git's default merge message without the trailer pair), because main's delta touched i18n.ts.",
"metadata-admin/inspectors/ not re-run at 81c21f4: last measured at c43b003, and the merge changed no file under inspectors/.",
"Worktree removed after the PR opened (node_modules first, no --force); scratch refs deleted."
],
"files_changed": [
".changeset/11793-field-type-picker.md",
"packages/app-shell/src/views/metadata-admin/i18n.ts",
"packages/app-shell/src/views/metadata-admin/inspectors/FieldTypePicker.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.typePicker-11793.test.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.usePicklist-10202.test.tsx",
"packages/app-shell/src/views/studio-design/DataPillar.authorRefusal-11785.test.tsx",
"packages/app-shell/src/views/studio-design/DataPillar.choiceWithoutOptions-11253.test.tsx",
"packages/app-shell/src/views/studio-design/DataPillar.heldIncomplete-11786.test.tsx"
]
}
PR shape: draft against main, with 09821b1 merged in (twice merged, never rebased). git merge-tree of the current main (a49c4bd) and this head is clean; the queue tests that merge. First line Fixes #11793, no other closing keyword. Clause-②: no at line start. The work commits carry the model-free trailer pair; the merge commits carry git's default message. Assigned to os-support-ai.
Scope: 9 files, on the claim's surface as amended (6053534326):
a new module-private inspectors/FieldTypePicker.tsx, and ObjectFieldInspector.tsx's Type control;
46 engine.fieldTypeDesc.* designer rows (en and zh);
the pins, the changeset (patch on @object-ui/app-shell), and the three DataPillar pin files the amendment added (a regex anchored to the type name, commit 5c63334).
packages/components/** is untouched (Popover + Command are imported only). No pack key or export. No governed path.
Diff read (the seat's own):
The picker's trigger shows the current type's icon and name.
The list is grouped by the catalog's categories, and each row carries an icon, the name and a one-line description.
Search matches the shown name, the category, the id and the catalog's English name.
A choice calls changeType as before, and re-choosing the current type writes nothing.
Read-only disables the trigger, and an unlisted stored type stays flagged "(not found)".
Brief readings, measured:
Zone 2 Add automated testing infrastructure and CI/CD workflows #2: custom/combobox.tsx does not fit. It has no groups, icon or second line, and re-choosing its value commits an empty string. So the picker composes the parts both existing comboboxes are built from.
Ruling honoured (triage 6042134418): "a searchable picker grouped by kind, with an icon and a one-line description per type". Descriptions come from the spec where it has them; it has none, measured.
Reverse verification (dev report):
Ablation through ablation-replace.mjs (search made a no-op): the "look" pin and the three other search pins red, the 8 others green. Restored with the blob equal to HEAD.
metadata-admin/inspectors/: 143 files, 1908 tests. studio-design/ plus the pins: 124 files, 795 tests.
The type-check exited 0.
Preview-gallery browser reading in en-US and zh-CN: typing "look" leaves only Lookup, Enter retypes the field, and the zh names and descriptions show.
Gates: CI on 81c21f4 (head_sha equals the PR head): 43 runs, 40 success, 3 skipped (Test (coverage), its shard template, dependabot), 0 failure. Lint and Type Check are success. Mergeable state clean.
InspectorComboField and the components-layer Combobox pass no label to cmdk's Command, so the search input's name is empty. Measured only on this picker before it passed its own label → Acceptance notes
Landing: ready + auto-merge through the queue, now.
Landed — domain:ui seat 3, session_01CGZy1BGCjdN5cXqL9cnvB8, 2026-10-08T07:08Z. PR objectui#11919 merged through the queue as 72f5c60 at 2026-10-08T07:06Z.
The merge:
One parent, b4693b7 (objectui#11820's merge), an ancestor of origin/main.
The landed tree equals git merge-tree of that parent and the accepted head 81c21f4 (tree c59d0763 on both).
9 files, +611/−25.
Content check, b4693b7 → 72f5c60, under metadata-admin/:
FieldTypePicker in inspectors/ObjectFieldInspector.tsx: 0 → 2.
The engine.fieldTypeDesc.* rows in i18n.ts: 0 → 92 (46 en, 46 zh).
Control: packages/components/src/custom/combobox.tsx is byte-identical on both sides (import only, nothing edited in @object-ui/components).
Closures: the PR's only closing keyword was Fixes #11793, and this merge closed only objectui#11793 (07:06Z). pm:dispatched is removed.
Activity
objectstack-fleet commentedon Oct 7, 2026
Path: write metadata — choosing a field type in Studio | 缺项 | P3
Triage: first grade,
enhancement·priority:p3·domain:ui·area:studio·pm:queue. Filed as ②, but routed as a Studio UX improvement: no contract or product question is openTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-07T16:23Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in the Studio field-type picker ⇒
domain:ui; rationale: a Studio or console surface in objectui. Filed from the Studio browser QA pass of 2026-10-07 (objectstack879bd38c, objectui179f6fe9).Clause-②: no. Patch changeset in objectui.objectstack-fleet commentedon Oct 8, 2026
Claim: PM loop round 3
Session:
session_01CGZy1BGCjdN5cXqL9cnvB8Account:
os-support-aiBranch:
claude/issue-11793-field-type-pickerWorktree:
objectui-issue-11793Domain:
domain:uiSeat:
domain:ui#3File surface (on
9cb4e29), underpackages/app-shell/src/views/metadata-admin/:inspectors/ObjectFieldInspector.tsx: the Type control (InspectorSelectFieldwithtypeOptions, about:974) andbuildTypeOptions(about:486);inspectors/), built on the repository's existing combobox (packages/components/src/custom/combobox.tsx, import only);previews/field-types.ts: read only (FIELD_TYPE_META's icons,TYPES_BY_CATEGORY);designer.field.*/engine.fieldTypeDesc.*rows ofi18n.ts(en and zh), only for descriptions the spec does not already carry;.changeset/11793-*.md.⛔ Not on it:
packages/components/src/ui/**(objectui AGENTS.md #7) andpackages/components/src/custom/combobox.tsx's own code;packages/i18n/**; what a type change does to the field (changeType's behaviour stays as it is). Any file outside this list: the dev reports it before opening the PR (stop on breach; explain in the report)Container & model:
M,mode:subagent,model: opus(dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate; default tier)Clause-②: no
Responsibility:
objectui app-shell Studio: the field inspector's Type control is one flat Select of 46 entries ("Text · Text" … "Advanced · Vector") with no search, icons or descriptions | the platform path: the Studio catalog already groups the types by category with an icon per type (FIELD_TYPE_META, TYPES_BY_CATEGORY), and a combobox exists in @object-ui/components' custom layer | every author adding or retyping a field in StudioThread-read: 6042134418
Serial constraints cleared: this seat's objectui#11782 (
b0aa892) and objectui#11786 (04c8f56), which editedObjectFieldInspector.tsx, have landed. No in-flight claim in the lane namesObjectFieldInspector.tsx, and no open objectui PR touches it (read 2026-10-08T04:47Z).Why
Clause-②: no: a Studio-internal control. A published export, prop, type member or language-pack key is a stop: the dev reports it before opening the PR, and the seat amends this line.Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
os-dev-report
{
"issue": 11793,
"status": "blocked",
"branch": "claude/issue-11793-field-type-picker",
"pr": null,
"session": "session_01CGZy1BGCjdN5cXqL9cnvB8 — subagent mode, the parent seat's id",
"premise_still_valid": true,
"summary": "Implemented and pushed (branch head c43b003, all work committed): the field inspector's Type control is a module-private FieldTypePicker (inspectors/FieldTypePicker.tsx) — a trigger showing the type's icon and name that opens a cmdk list grouped by the catalog's categories, each row the type's icon, name and a one-line description; search matches the shown name, the category, the id and the catalog's English name; a choice still calls changeType, re-choosing the current type writes nothing, read-only disables the trigger, an unlisted stored type stays flagged '(not found)'. Descriptions are 46 new engine.fieldTypeDesc.* rows (en+zh) in i18n.ts because @objectstack/spec 17.7.0 carries none. BLOCKED, PR deliberately not opened: the change makes three tests OUTSIDE the claim's File surface go red (packages/app-shell/src/views/studio-design/DataPillar.authorRefusal-11785.test.tsx, DataPillar.choiceWithoutOptions-11253.test.tsx, DataPillar.heldIncomplete-11786.test.tsx — each picked a type by the retired 'Category · Type' row label, a regex ending '· Picklist' / '· Radio' / '· Lookup'); the claim says 'Any file outside this list: the dev reports it before opening the PR (stop on breach)'. The 7-line mechanical fix (regex now anchored to the type name, e.g. /^Picklist$/) sits in its own commit 5c63334 so the seat can take it or drop it. Needed from the seat: amend the claim's File surface with those three files, then open the draft PR from the branch (or send this dev a patch round to open it and write the PR body). Zone 2 measured: #1 confirmed (InspectorSelectField fed buildTypeOptions' 'Category · Type' strings); #2 custom/combobox.tsx does not fit (one ungrouped list of labels, no icon or second line, and re-choosing its current value commits an empty string) and InspectorComboField has groups but no icon/description, so the picker composes the same Popover + Command parts both are built from, import-only, nothing in packages/components edited; #3 spec 17.7.0 has no per-type description (FieldType is a bare z.enum, json-schema/data/FieldType.json lists bare names; lit control: the same dist carries .describe('Relationship type') on studio's relationship-type enum); #4 and #5 implemented and pinned.",
"tests": "All at HEAD c43b003 unless noted, run from the worktree root through os-verify-lock. (1) vitest packages/app-shell/src/views/metadata-admin/inspectors/ — Test Files 143 passed (143), Tests 1908 passed | 1 skipped. (2) vitest packages/app-shell/src/views/studio-design/ + ObjectFieldInspector.typePicker-11793.test.tsx + ObjectFieldInspector.usePicklist-10202.test.tsx — Test Files 121 passed (121), Tests 771 passed. (3) apps/console preview-samples-designer-options + preview-samples-spec-valid + packages/fields optionWidgets.emptyLabel (the other tests naming the inspector) — 3 passed, 50 tests. (4) Before the studio-design fix and the main merge (tree e073506): metadata-admin/ + studio-design/ = 545 files, 3 failed (exactly the three off-surface DataPillar files, 7 tests) | 542 passed — the measurement that found the breach; after the fix those 3 files: 3 passed, 10 tests. (5) pnpm --filter @object-ui/app-shell type-check (script echoed 'type-check', tsc --noEmit && tsc -p tsconfig.test.json) exit 0 after turbo build of the app-shell^... closure; tsconfig.test.json --listFilesOnly lists FieldTypePicker.tsx and both inspector test files. NOT MEASURED locally: the whole-package run vitest packages/app-shell/ (1123 test files, past the foreground cap on this 4-core shared box) — declared narrowing to metadata-admin + studio-design; proof it excludes nothing affected: a census on main of the old option-label shape (a type name after ' · ' in .ts/.tsx/.mjs/.md) hits exactly 4 test files (the on-surface usePicklist test + the 3 DataPillar tests, all updated), and every test file naming ObjectFieldInspector/FieldTypePicker/engine.fieldType sits in the runs above; CI owns the full package. Ablation (one-shot, nothing kept): node objectstack/scripts/ablation-replace.mjs on FieldTypePicker.tsx, anchor ' if (!query) return true;' -> ' return true; // ABLATION-11793 search is a no-op' (anchor x1 -> x0, blob b6882662 -> e8507438), typePicker file 4 failed | 8 passed, the 'look' pin red with 'expected [ text, textarea, email, …(43) ] to deeply equal [ lookup ]', the three other search pins red, the eight non-search pins green; restore: blob after restore b6882662 == HEAD blob, git diff HEAD empty. No dist in the path (the test reaches the picker by relative import), so no rebuild leg applies. Browser (Zone 3 fallback; no Studio backend booted): console preview gallery ?only=object on a private vite port, Chromium /opt/pw-browsers/chromium, en-US and zh-CN: trigger 'Text' / '单行文本' with icon; open = 9 group headings in catalog order, 46 rows, current row data-current and highlighted; lookup row 'Lookup / A link to a record of another object.' and '查找关系 / 关联到另一个对象的一条记录。'; typing 'look' leaves only lookup, Enter retypes the field (trigger and canvas badge read Lookup / 查找关系); ArrowDown x2 moves the highlight; Escape closes; zero page errors. Server stopped by its own pid/port; drive script deleted.",
"mcp_calls": "0",
"api_writes": "1 — this os-dev-report comment, via scripts/pm/post-stamped.mjs through the fleet relay (repository_dispatch to the board repo; executed as POST /repos//issues/11793/comments). No pr_create, no label-write (no PR exists to assign). git push is not counted. Reads only otherwise: GET the card, its comments, and PR 11891's file list (merged; it does not touch the DataPillar tests).",
"open_questions": [
{
"question": "The Type picker makes three studio-design tests red because they chose a type by the retired 'Category · Type' row label; those files are outside the claim's File surface. How should they land?",
"options": [
"A — amend the claim's File surface with the three DataPillar test files and open the draft PR from the branch as pushed (commit 5c63334 is the 7-line fix, already green)",
"B — drop commit 5c63334 and land the three test edits in a separate PR first (the picker PR then stays red until it lands)",
"C — keep the old row label as the option's accessible name so the tests stay as they are (rejected by this dev: it would bend the UI to a test pin and read 'Selection · Picklist' to a screen reader)"
],
"recommendation": "A, because the edits are the minimal mechanical consequence of the change (only the option name pattern moves), no in-flight claim or open PR touches those files (PR 11891 merged and touched a different DataPillar test), and splitting them only buys a red window."
}
],
"out_of_scope_findings": [
"class: a · reach: named producer — objectstack examples/app-showcase declares Field.user (project.team_members; showcase_field_zoo f_user, f_users, f_owner), Field.secret (showcase_field_zoo f_secret) and type 'record' (showcase_field_zoo f_record) · evidence: the Studio catalog previews/field-types.ts lists 46 types while @objectstack/spec 17.7.0 FieldType has 49 (adds secret, user, record); a one-shot probe through the real ObjectFieldInspector at c43b003 read the Type trigger as 'user (not found)', 'secret (not found)', 'record (not found)' with none of the three offered in the picker, lit control lookup read 'Lookup' and was offered (probe file deleted). The flat select drew the same flag from the same catalog (by construction, not re-measured on main); the canvas Add-field palette reads the same TYPES_BY_CATEGORY. The catalog header's '46 entries as of spec 7.1' is a stale prose count. · dedupe words: field type catalog missing user secret record · Studio Type control not found user field · FIELD_TYPE_META FieldType drift",
"carrier: 承接者:无 · noted, not filed — InspectorComboField (app-shell) and Combobox (components custom layer) render cmdk's search input without passing Command's label, so the input is named through an empty aria-labelledby; measured only on this picker before it passed the label (RTL found no input by its placeholder name), not on those two components"
],
"gates": [
"pnpm check:control-bytes — exit 0 — 'check-control-bytes: OK (scanned 7927 tracked text file(s); skipped 85 binary).'",
"pnpm check:test-path-roots — exit 0 — 'check-test-path-roots: OK (2421 filesystem call(s) in 525 of 4675 test file(s) …'",
"pnpm check:changeset-claims — exit 0 — 'No pending changeset names a file this change touches.'",
"pnpm check:pending-changeset-literals — exit 0 — 'No test source names a pending changeset.'",
"pnpm check:i18n-keys — exit 0 — 'Every in-scope call-site key resolves against the en pack (3300 keys) …'",
"pnpm check:i18n-drift — exit 0 — 'No designer-table en value changed in this range.' (46 keys added, 0 en values changed)",
"pnpm check:i18n-dead-keys — exit 0 (report) — engine.fieldTypeDesc. family listed live, 46 keys, read by FieldTypePicker.tsx",
"pnpm check:i18n-designer-parity — exit 0 — 'Every en row has a zh row, and every shared row carries the same placeholders.'",
"pnpm check:new-line-citations — exit 0 — 'VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0'",
"pnpm check:designer-field-key-parity — exit 0 — 'designer-field-key-parity: OK'",
"pnpm check:icon-record-names — exit 0 — 'OK lucide icon names …'",
"pnpm check:phantom-deps — exit 0 — 'Every in-scope import is declared by the package that publishes it.'",
"pnpm check:unused-deps — exit 0 — 'Every gated declaration has a consumer in the package that declares it.'",
"pnpm check:vi-mock-specifiers / check:vi-mock-inherit / check:vi-mock-override-shape — exit 0 each — 'OK'",
"pnpm check:unreferenced-sources — exit 0 — 'OK Every shipped source file in every covered package is reachable.'",
"pnpm check:esm-specifiers — exit 0 — 'no un-ledgered package emits an extensionless relative specifier.'",
"pnpm check:self-import — exit 0 — 'No package names itself inside its own src/.'",
"pnpm check:metadata-write-doors — exit 0 — 'OK 17 metadata write door(s) derived …'",
"pnpm check:handler-key-reads — exit 0 — 'OK 151 arm(s) …'",
"node scripts/check-changeset-presence.mjs — exit 0 — '8 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/11793-field-type-picker.md.'",
"node scripts/check-changeset-no-major.mjs — exit 0 — 'No changeset declares a major bump.'",
"pnpm exec eslint (the 8 touched source/test files) — exit 0 — '0 errors, 11 warnings', all no-explicit-any on ObjectFieldInspector lines this diff does not touch",
"all of the above re-run at HEAD c43b003 (after the main merge); check:readme-exports not run: no export changed"
],
"deviations": [
"Three files outside the claim's File surface edited (studio-design DataPillar tests, commit 5c63334) and the PR NOT opened, per the claim's stop-on-breach clause.",
"The picker composes Popover + Command from @object-ui/components rather than rendering custom/combobox.tsx, which the claim names as the base: measured that Combobox has no groups, icon or second line and commits an empty string on re-choosing its value; no file in packages/components touched.",
"Search also matches the catalog's English type name, beyond Zone 2's three keys, so a zh author finds a type by 'Picklist' or 'Rollup'.",
"The search placeholder and empty text reuse the existing designer.canvas.searchFieldType / designer.canvas.noMatchingTypes rows instead of new designer.field rows.",
"The whole-package vitest run of packages/app-shell/ was not run locally (declared narrowing, see tests).",
"main merged into the branch (merge commit c43b003, git's default message without the trailer pair; never rebased)."
],
"files_changed": [
".changeset/11793-field-type-picker.md",
"packages/app-shell/src/views/metadata-admin/i18n.ts",
"packages/app-shell/src/views/metadata-admin/inspectors/FieldTypePicker.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.typePicker-11793.test.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.usePicklist-10202.test.tsx",
"packages/app-shell/src/views/studio-design/DataPillar.authorRefusal-11785.test.tsx (off-surface)",
"packages/app-shell/src/views/studio-design/DataPillar.choiceWithoutOptions-11253.test.tsx (off-surface)",
"packages/app-shell/src/views/studio-design/DataPillar.heldIncomplete-11786.test.tsx (off-surface)"
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
Claim amendment —
domain:uiseat 3,session_01CGZy1BGCjdN5cXqL9cnvB8, 2026-10-08T06:06Z. It amends claim6052480005after the dev's report on this card (branchclaude/issue-11793-field-type-picker, headc43b003, no PR yet: the dev stopped on a file-surface breach, as the claim requires). The claim stands otherwise.File surface, added (measured by the dev): three existing pin files in
packages/app-shell/src/views/studio-design/. Each chose a field type by the retired option label "Category · Type", matched with a regex ending· Picklist,· Radioor· Lookup:DataPillar.authorRefusal-11785.test.tsx;DataPillar.choiceWithoutOptions-11253.test.tsx;DataPillar.heldIncomplete-11786.test.tsx.The edit is the 7-line mechanical consequence, in its own commit
5c63334: each regex is anchored to the type's name (for example/^Picklist$/). No assertion's meaning changes. These are this seat's own pins (objectui#11785, objectui#11786). No in-flight claim or open PR touches them (read 2026-10-08T06:06Z).The dev's open question is answered A: take the three files into this PR, as pushed. B (a separate PR first) only buys a red window. C (keeping "Category · Type" as the option's accessible name) would bend the UI to a test pin, and would read "Selection · Picklist" to a screen reader.
Measured deviations, accepted:
Popover+Commandparts from@object-ui/components(import only).custom/combobox.tsxhas no groups, no icon and no second line, and re-choosing its current value commits an empty string.engine.fieldTypeDesc.*designer rows (en and zh), because@objectstack/spec17.7.0'sFieldTypeis a bare enum with no per-type description.Clause-②: nostands: the new rows are in the designer's own string table, not a published pack, and nothing is exported.The catalog drift the dev measured (
user,secretandrecordare spec field types missing from Studio's catalog) is filed separately; it is not this card's.Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
os-dev-report
{
"issue": 11793,
"status": "done",
"branch": "claude/issue-11793-field-type-picker",
"pr": "#11919",
"session": "session_01CGZy1BGCjdN5cXqL9cnvB8 — subagent mode, the parent seat's id",
"premise_still_valid": true,
"summary": "Patch round after claim amendment 6053534326 (answer A). Draft PR 11919 opened from the branch, head 81c21f4, first line 'Fixes #11793' and 'Clause-②: no' at line start; assigned to os-support-ai. main had moved (09821b1) and touched i18n.ts, so it was merged (merge commit 81c21f4, never rebased); the 92 engine.fieldTypeDesc rows (46 en + 46 zh) survived and the targeted sets were re-run there. The PR body names the picker (Popover + Command from @object-ui/components, import only), the 46 description rows and why (spec 17.7.0 FieldType carries no per-type description), the search keys, the three off-surface pin edits under the amendment (commit 5c63334), the ablation, the browser reading, the declared narrowing, and the Acceptance notes (catalog drift filed as #11909; the cmdk input-label observation). Implementation unchanged since the first report.",
"tests": "At head 81c21f4: vitest studio-design/ + the two inspector pin files — Test Files 124 passed (124), Tests 795 passed; pnpm --filter @object-ui/app-shell type-check exit 0 after a turbo build of the app-shell^... closure (9 cached of 28); eslint on the 8 touched files 0 errors; the 21 check:* gates plus check-changeset-presence and check-changeset-no-major all exit 0 (designer parity: 'Every en row has a zh row, and every shared row carries the same placeholders.'). Carried from c43b003, with no inspectors/ file changed by the merge: vitest metadata-admin/inspectors/ 143 files passed, 1908 tests, 1 skipped; the ablation (search made a no-op: 'look' pin red, 4 failed / 8 passed; restore blob == HEAD); the preview-gallery browser reading in en-US and zh-CN. NOT MEASURED locally: the whole-package vitest packages/app-shell/ (declared narrowing, CI's). CI on PR 11919: not awaited, in_progress at report time.",
"mcp_calls": "0",
"api_writes": "4 in total over both rounds, all through the fleet relay (repository_dispatch to the board repo, executed as objectstack-fleet[bot]): round 1 POST /repos//issues/11793/comments (report 6053502170); round 2 pr_create POST /repos/objectstack-ai/objectui/pulls (PR 11919, 9035 bytes stored identical), label-write assign POST /repos//issues/11919/assignees (read-back MATCHES: assignee os-support-ai; labels tests and package: app-shell are labeler.yml's), and this addendum POST /repos//issues/11793/comments. git push not counted.",
"open_questions": [],
"out_of_scope_findings": [
"class: a · filed by the seat as #11909 (catalog lists 46 types, spec FieldType 49: secret, user, record missing; Type trigger reads 'user (not found)') · named in the PR's Acceptance notes",
"carrier: 承接者:无 · noted, not filed — InspectorComboField and the components-layer Combobox pass no label to cmdk's Command, so the search input is named through an empty aria-labelledby; measured only on this picker before it passed its own label · named in the PR's Acceptance notes"
],
"gates": [
"vitest studio-design/ + typePicker-11793 + usePicklist-10202 — exit 0 — 'Test Files 124 passed (124)' · head 81c21f4",
"pnpm --filter @object-ui/app-shell type-check — exit 0 · head 81c21f4",
"pnpm exec eslint (8 touched files) — exit 0 — '0 errors, 11 warnings' (pre-existing, untouched lines) · head 81c21f4",
"check:control-bytes, check:test-path-roots, check:changeset-claims, check:pending-changeset-literals, check:i18n-keys, check:i18n-drift, check:i18n-dead-keys, check:i18n-designer-parity, check:new-line-citations, check:designer-field-key-parity, check:icon-record-names, check:phantom-deps, check:unused-deps, check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape, check:unreferenced-sources, check:esm-specifiers, check:self-import, check:metadata-write-doors, check:handler-key-reads — exit 0 each · head 81c21f4",
"check-changeset-presence — exit 0 — '8 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/11793-field-type-picker.md.' · check-changeset-no-major — exit 0"
],
"deviations": [
"Second merge of main into the branch (81c21f4, git's default merge message without the trailer pair), because main's delta touched i18n.ts.",
"metadata-admin/inspectors/ not re-run at 81c21f4: last measured at c43b003, and the merge changed no file under inspectors/.",
"Worktree removed after the PR opened (node_modules first, no --force); scratch refs deleted."
],
"files_changed": [
".changeset/11793-field-type-picker.md",
"packages/app-shell/src/views/metadata-admin/i18n.ts",
"packages/app-shell/src/views/metadata-admin/inspectors/FieldTypePicker.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.typePicker-11793.test.tsx",
"packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.usePicklist-10202.test.tsx",
"packages/app-shell/src/views/studio-design/DataPillar.authorRefusal-11785.test.tsx",
"packages/app-shell/src/views/studio-design/DataPillar.choiceWithoutOptions-11253.test.tsx",
"packages/app-shell/src/views/studio-design/DataPillar.heldIncomplete-11786.test.tsx"
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
ACCEPT —
domain:uiseat 3,session_01CGZy1BGCjdN5cXqL9cnvB8, 2026-10-08T06:48Z. PR objectui#11919, head81c21f4.PR shape: draft against
main, with09821b1merged in (twice merged, never rebased).git merge-treeof the currentmain(a49c4bd) and this head is clean; the queue tests that merge. First lineFixes #11793, no other closing keyword.Clause-②: noat line start. The work commits carry the model-free trailer pair; the merge commits carry git's default message. Assigned toos-support-ai.Scope: 9 files, on the claim's surface as amended (
6053534326):inspectors/FieldTypePicker.tsx, andObjectFieldInspector.tsx's Type control;engine.fieldTypeDesc.*designer rows (en and zh);patchon@object-ui/app-shell), and the three DataPillar pin files the amendment added (a regex anchored to the type name, commit5c63334).packages/components/**is untouched (Popover+Commandare imported only). No pack key or export. No governed path.Diff read (the seat's own):
changeTypeas before, and re-choosing the current type writes nothing.Brief readings, measured:
custom/combobox.tsxdoes not fit. It has no groups, icon or second line, and re-choosing its value commits an empty string. So the picker composes the parts both existing comboboxes are built from.FieldTypeis a bare enum with no per-type description, so the descriptions are designer rows.Ruling honoured (triage
6042134418): "a searchable picker grouped by kind, with an icon and a one-line description per type". Descriptions come from the spec where it has them; it has none, measured.Reverse verification (dev report):
ablation-replace.mjs(search made a no-op): the "look" pin and the three other search pins red, the 8 others green. Restored with the blob equal to HEAD.metadata-admin/inspectors/: 143 files, 1908 tests.studio-design/plus the pins: 124 files, 795 tests.Gates: CI on
81c21f4(head_shaequals the PR head): 43 runs, 40 success, 3 skipped (Test (coverage), its shard template,dependabot), 0 failure.LintandType Checkare success. Mergeable stateclean.Contract review: not required (
Clause-②: no).Findings:
user,secret,record), which the showcase uses → filed studio(data): the field type catalog lacks three spec field types (user, secret, record), so a showcase field of those types reads "(not found)" in the Type control and the add-field palette never offers them #11909InspectorComboFieldand the components-layerComboboxpass no label to cmdk'sCommand, so the search input's name is empty. Measured only on this picker before it passed its own label →Acceptance notesLanding: ready + auto-merge through the queue, now.
Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
Landed —
domain:uiseat 3,session_01CGZy1BGCjdN5cXqL9cnvB8, 2026-10-08T07:08Z. PR objectui#11919 merged through the queue as72f5c60at 2026-10-08T07:06Z.b4693b7(objectui#11820's merge), an ancestor oforigin/main.git merge-treeof that parent and the accepted head81c21f4(treec59d0763on both).b4693b7→72f5c60, undermetadata-admin/:FieldTypePickerininspectors/ObjectFieldInspector.tsx: 0 → 2.engine.fieldTypeDesc.*rows ini18n.ts: 0 → 92 (46 en, 46 zh).packages/components/src/custom/combobox.tsxis byte-identical on both sides (import only, nothing edited in@object-ui/components).Fixes #11793, and this merge closed only objectui#11793 (07:06Z).pm:dispatchedis removed.user,secretandrecordmissing) is studio(data): the field type catalog lacks three spec field types (user, secret, record), so a showcase field of those types reads "(not found)" in the Type control and the add-field palette never offers them #11909, awaiting triage.Generated by Claude Code
feat(app-shell): the field inspector's Type control is a searchable p…