Repository navigation
Description
Filing gate ① — a product defect with a reproduction and a named site, filed on the maintainer's word: 「把流程设计器那几个问题也立卡」.
Who acts on it: an objectui app-shell executor. The fix lands in objectstack-ai/objectui (packages/app-shell/src/views/metadata-admin/previews/useObjectFields.ts). This card sits on the objectstack board because the session that found it could not read or search objectstack-ai/objectui issues. Triage moves it if it belongs there.
What happens
The usual no-code order is: create an object, then automate it, then publish once. In that order the flow's trigger object exists only as a draft while the flow is being built.
The Start node's Entry condition builder then offers no field of that object. Its subject list holds previous alone, so the author has to switch to Expression and type CEL (record.status == 'done' && previous.status != 'done').
Every other part of the same screen already sees the draft:
- the trigger Object picker lists the draft object;
- the object's validation rules list
record.status,record.due_dateand so on.
Reach — measured on the public door
Measured on a fresh showcase boot: objectstack 8fc50b7647d30db2a0837877cf251c1163a3239e, console at the .objectui-sha pin a58626c88dc85954bd0af24f16ebb69454c03eee.
- Studio → new package → New object Repair Ticket with a
statusselect and adue_datedate. Do not publish; the object is a draft (GET /api/v1/meta/object/repair_ticket?state=draft&package=PKG→ 200 with the fields). - Automations → New → Start node → Trigger Record updated, Object
repair_ticket. - Entry condition → Add condition → the subject dropdown lists only
previous. - In the network log, each time the designer asks for the object,
GET /api/v1/meta/object/repair_ticketanswers 404RESOURCE_NOT_FOUNDwhile the draft exists.
Once the package is published, the published read answers 200, and the same designer lists the fields.
Mechanism — the same on objectui main b6f8fc8718e4 (2026-10-08)
useObjectFields(objectName) fetches with the plain published read:
client.get('object', objectName) // useObjectFields.ts, the effect (type parameter omitted here)It passes no state: 'draft' and no preview option. On a 404 it answers fields: [] with notFound: true. useFlowScope.ts (useObjectFields(scope.trigger?.objectName)) expands the trigger's fields from that answer, so the scope holds only what needs no fetch: previous and the whole-record record ref (objectui#11789, merged after the pin).
objectui#11783 (57dbe34, merged after the pin) made the object picker read GET /api/v1/meta/object?preview=draft and mark draft entries. On main the author can now choose the draft object and still gets no fields for it.
The same hook serves eleven other consumers on main, among them:
ConditionBuilder.tsx,FlowReferenceField.tsxandFlowNodeConfigField.tsx(the flow's record-node field pickers)ObjectFieldInspector.tsx,AppNavInspector.tsx,ViewColumnInspector.tsx,ViewVariantInspector.tsxandObjectListViewInspector.tsxPageBlockInspector.tsxandActionDefaultInspector.tsx
Each of those is presumably field-blind for a draft-only object too. That was measured only for the flow Start node.
Expected
Inside a package's Studio surface, a field list for an object of that package reflects the pending draft when one exists. That means the draft read the validations panel already uses, or preview=draft as the object picker uses. The condition builder then offers record.status, record.due_date and the rest before the first publish.
Seam: renderer:objectui useObjectFields (published-only read) → useFlowScope trigger fields → ConditionBuilder subject list
Related, not duplicates
- objectui#11783 (closed) — the object picker reads drafts; this hook does not.
- objectui#11789 (closed) — puts
recordin scope on a record-triggered Start node; it does not fetch the object's fields. - [repo:objectui] Studio condition builder: "is empty / false" compiles to
!field, so a validation rule on a date or text field can never be evaluated and refuses every write that reaches it #22187 — the condition builder's!xemission, found in the same run. - qa: a repeatable Studio task benchmark — "build a repair-ticket app with no code", timed, counting red errors — as the Studio UX baseline #22137 — the Studio task benchmark: code-shaped entry 8 in
docs/qa/studio-benchmark/baselines/2026-10-08-8fc50b76-a58626c8.md(PR docs(qa): a repeatable Studio task benchmark — repair-ticket scenario, scoring sheet, user-session protocol and the first baseline #22180).
Duplicate check
- Semantic issue search on objectstack-ai/objectstack (open and closed), flow designer trigger object fields not offered when object is an unpublished draft, useObjectFields published read: 4 hits (metadata: publishing a field reorder from the object designer is a silent no-op — the content hash is key-order-insensitive, so a reordered
fieldsmap hashes equal and the draft is dropped #21790, [finding][repo:objectui] Studio Organization flows page: the publish sheet says package drafts release atomically, and a deep-link miss shows a false no-designers notice #21655, External object-draft renders a field key that is not authorable:fields.<f>.primaryKeyfailstscagainstServiceObjectandObjectSchema.safeParse#11000, A draft row stored under a manifest-absent plural (fields,seeds,external_catalogs,translations) is promotable by publishPackageDrafts and lands ACTIVE in the second namespace #8908), none about this. - Earlier in the same session, flow designer condition field picker empty for unpublished draft object, only previous offered: 8 hits, none about this.
- objectstack-ai/objectui issues: NOT MEASURED — no issue read access in this session. The objectui
maincommit messages since the pin (79 commits) name no change touseObjectFields.
Dedupe words: flow condition builder draft object fields · useObjectFields published read draft · entry condition only previous
Filed by Claude Code (session session_01VenZErfhzG51sJBHRM1pWJ) from the Studio task benchmark baseline run on #22137.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 8, 2026
Triage: closed as a duplicate of objectstack-ai/objectui#11895 (same file, same mechanism). That card is where the fix lands, and its seat already moved this card's evidence there.
Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-08T05:55Z. ⛔ Not a claim, ⛔ not a dispatch.