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.
importPredicates is produced by the spec resolver and consumed nowhere — the same inverse-symmetry gap as #4646, one key over #5142
Found while implementing #4646 (related-list "+ New" consuming createPredicates).
@objectstack/spec@17.0.0 widened both toolbar-scope keys, not just create. UserActionsSchema (spec src/data/object.zod.ts:1528-1531) types them identically:
…and resolveCrudAffordances emits a predicate envelope for each (spec object.zod.ts:2472 and its neighbour). The CrudAffordances docblock states the binding for both in one breath:
> createPredicates — "CEL predicates for the generic New button … these evaluate once per toolbar, against the record in scope where the toolbar renders"
> importPredicates — "Toolbar-scope CEL predicates for the CSV import entry; same binding as createPredicates."
#4646 closed the create half. The import half is still declared-and-inert: importPredicates has zero consumers in objectui src.
Verification (src level, on 958d7573a)
$ grep -rn "importPredicates" --include=*.ts --include=*.tsx packages/ apps/
(no matches)
Producer confirmed live against the installed spec:
An author can write the object form on userActions.import today — the spec accepts it and the resolver parses it — and objectui silently drops the predicate, offering the CSV import entry unconditionally. Identical shape to the defect #4646 recorded from a downstream EHR project, just on the adjacent key.
Not reported from the field, unlike #4646; whether that makes it lower priority or merely less-noticed is the triage call, not mine. Noting honestly that severity judged at filing time is unreliable in both directions.
That PR widened objectui's local UserActionsOverride.create from boolean to the union so the shape it now honours also type-checks. It left import?: boolean narrow on purpose, with the reason in-code:
> widening the type ahead of a consumer would re-declare the inert-metadata defect this change removes, one key over.
So the type is currently the honest statement of what objectui supports. Fixing this issue means widening that key and adding the consumer together.
Where the consumer would go
Wherever the import entry is offered — the object-list toolbar's Import button. Mirror template is now in-tree: RelatedRecordActionsBridge's evalCreatePredicate + the visibleWhen fails-CLOSED / disabledWhen fails-SOFT split (PR for #4646).
Activity
yinlianghui commentedon Aug 18, 2026
认领(PM 派发,objectui 分片,批次 23):session_01GTRjn8xBqp75dk7kFupVRt,分支
claude/issue-5142-import-predicates,os-dev 席即将开工。排序条件已满足:PR #5145(create 半 + 镜像模板
evalCreatePredicate)已落 main(dfc697554)。范围:对象列表工具栏 Import 入口消费importPredicates(visibleWhen fail-CLOSED / disabledWhen fail-SOFT,与 create 半同形)+ 同 PR 放宽UserActionsOverride.import类型(卡面明确:类型与消费者必须同车,单放宽=重造 inert 缺陷)+ 测试 + changeset。与在飞席位零重叠(当前在飞 0,#5143 已收)。Generated by Claude Code
fix(app-shell,core): 对象列表工具栏 Import 消费 importPredicates (objectstack-…
fix(app-shell): object-list "New" and its mobile FAB consume createPr…