Repository navigation
spec(ui): record:related_list.actions is declared ("Action IDs available for related records") and read by no renderer — ENFORCE or RETIRE under ruling A′ ④ (the remainder of objectui#8071) #20665
Description
Activity
- addedenhancementNew feature or requestNew feature or requestarea:recordsBusiness objects, records, the views that show data, usable forms, searchBusiness objects, records, the views that show data, usable forms, search
on Sep 29, 2026 objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsRuling: batch #247 item 1 · ENFORCE · maintainer 「20665 业务上需要支持,ENFORCE」 2026-09-30T01:39Z
Director seat (objectstack#12708, summon #30 续 2,
session_01AsCNgFBs8HCjwhyHQsFbx3). Provenance: maintainer, live PM chat with the director seat, 2026-09-30, replying 「11111 同意;20665 业务上需要支持,ENFORCE;20542 同意;5930 v18 启动;20513 A」 to batches #246–#249 as presented. Presented on this card: the triage seat's packet (the body), read whole, with the director's reading in chat.Ruled: ENFORCE, on the maintainer's stated ground — the business needs per-list actions.
record:related_list.actionsstays declared; objectui'srecord:related_listrenderer reads it: each action ID resolves through the existing action registry and renders on the related list; host-bridge actions remain the default whenactionsis absent, and the authored list is what renders when it is present; an unresolvable ID is refused where the registry resolves it, never dropped silently. The parity ledger's last exemption (NO_READ_SITE_TO_PIN) becomes a member pin andMEMBER_PIN_EXEMPTION_CEILINGgoes1 → 0.The pre-measurement the director proposed (whether the host bridge already offers a per-list configuration) is still taken by the implementing seat, but it no longer flips the word: if the bridge has such a channel, the PR states how the two compose rather than treating the key as a duplicate.
Readings that decided it:
- Long-term: the mainstream shape — a Salesforce related list carries its own action buttons (the standard
Newplus custom list buttons); the consumer is one read in one renderer, not a subsystem. - Real use: the maintainer's ground — CRM authoring (hotcrm's included) configures actions per list.
- AI-safety: today an authored
actionssilently does nothing; enforced, it renders, and a bad ID is refused loudly. - Startup scope: one read, one pin, a ceiling to zero.
Execution parameters:
- The consumer is objectui#11163 (filed in the same stroke,
pm:queue,domain:ui, p3,area:records). - This card is
pm:blockedon it; when it lands, this card closes with the key's liveness row flipped tolive(the spec key is unchanged). - Confidence gap recorded: the host bridge's per-list configuration is unmeasured; it decides composition, not the word.
State:
needs-user-decision→pm:blocked,Blocked-by: objectstack-ai/objectui#11163; the Ruled line goes on the body in the same stroke.- Long-term: the mainstream shape — a Salesforce related list carries its own action buttons (the standard
- added a commit that references this issue
on Sep 30, 2026 objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsTriage: closed
completed. The ENFORCE ruling is delivered by objectstack-ai/objectui#11163 (PR objectui#11263 →f4ed2387e9)Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-30T21:11Z. ⛔ Not a claim, ⛔ not a dispatch.Measured on objectui
origin/main:renderers/record-related-list.tsxreadsschema.actionsand resolves each id against the related object's actions. An unresolvable id is refused in arole="status"notice, never dropped. The host bridge stays the default when the key is absent. That is the ruling (5902374623) as written.- The parity ledger:
NO_READ_SITE_TO_PINis deleted with its one entry, and the key's member pin is registered (apps/console/src/__tests__/registry-inputs-spec-parity.test.ts).- The ceiling went 5 → 4, not 1 → 0 as the card was written. The file records why: objectui#11111's bookings landed in between, and the four remaining
element:*units belong to objectui#11168. So the ruling's intent (−1 exemption, +1 pin) is met.
Follow-ons, each on its own card:
- the lint walking this key: lint:
validate-action-name-refsdoes not walkrecord:related_list.actions, which the objectui renderer now resolves as action ids (objectui#11163), so a misspelled id is refused only at runtime #20936, unlocked this round; record_relatedon related-list rows: spec(ui): therecord_relatedaction location ("actions on a related list section inside a record") has no read site in objectui, while the showcase and a platform-checklist item rely on it (ADR-0049 enforce-or-remove) #20937 / objectui#11270.
Generated by Claude Code
- added a commit that references this issue
on Oct 7, 2026
Ruled: 5902374623 · letter ENFORCE —
related_list.actionsis enforced (rendered) by the record page; consumer card objectstack-ai/objectui#11163; the host-bridge measurement no longer flips the word · 2026-09-30T01:47ZBlocked-by: objectstack-ai/objectui#11163
Filing gate: ① a declared≠enforced family of one key, filed by the triage seat (#6015, session
session_01AavokzJ5DndAwitDXvKy4U) as its answer to objectui#8071'spm:retriage. The rest of that card's population is pinned. This key can't be pinned, because nothing reads it.The key and the reach
packages/spec/src/ui/component.zod.ts:1285, insideRecordRelatedListProps(ComponentPropsMap['record:related_list']):actions: z.array(z.string()).optional().describe('Action IDs available for related records'). It is published and parsed.record:related_listrenderer (packages/plugin-detail'srecord-related-list.tsx) never touchesschema.actions. Its row actions come from the host bridge.NO_READ_SITE_TO_PIN(apps/console/src/__tests__/registry-inputs-spec-parity.test.ts).MEMBER_PIN_EXEMPTION_CEILINGis1since PR objectui#11113 (objectui#8071, slice 18).not_planned. This card replaces it.The one word (ruling A′ ④ on #18900,
5727134555)The criterion is the maintainer's: 「每族该问的是:主流平台有没有这个能力 —— 有 ⇒ 补消费端(一次做对);没有 ⇒ 退役」.
维护者速读
记录详情页里的「相关列表」(比如客户下的联系人列表),规范里允许作者写一个
actions:在这个列表上放哪些操作按钮。但目前没有任何渲染器读它,写了也不起作用。actions,把这些操作按钮画在相关列表上只问一字:ENFORCE / RETIRE?
Recommendation: ENFORCE.
New, plus custom list buttons). Real CRM authoring, hotcrm's included, wants per-list actions.actionsis absent.After the word
domain:uichild implements the read. The ledger entry becomes a pin, and the ceiling goes1→0.spec-property-retirement. The objectui ledger entry is deleted in the same step.Dedupe: no open objectstack card names
record:related_listorRecordRelatedListProps. On objectui, objectui#7300 (closednot_planned) was the key's only tracker.