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 }}
Repository navigation
[Decision] spec(ui): the five ComponentPropsMap members #21464's last stage stopped on — object-metric drillDown.report, object-form customFields, form sections, object-timeline items, action:group / action:menu members #21704
Ruled: 5979239990 · forks 4 and 5 letters B, A (batch #277) — all five forks ruled: 1 B, 2 B, 3 B, 4 B, 5 A · 2026-10-04T10:58Z
Ruled: 5978663135 · forks 1, 2, 3 letters B, B, B (batch #276); forks 4 and 5 pending batch #277 · 2026-10-04T09:50Z
Filing gate: ② decisions only the maintainer can make. Each fork picks the published shape of a page-component member, and no existing ruling decides it. Filed by the director seat, summon #32 (session_016tKoy8NJa35Yih1FdzrVmn), holder of #21464's S-objectui-held claim 5976829576, from that stage's dev report 5977481177 (open_questions 1–5). The at-tier contract review of record on #21699 (5977620713, PASS) judges each a genuine fork, not owed work skipped, and takes no position among the options. PR #21699 records all five in the enumeration pin's new fork stage (component-props-unknown-members.pin.test.ts), each with its shapes. The five are folded into one card under the filing quota: they belong to one card, and the ruled letters ship as one more #21464 stage. ⛔ Not a claim.
Reader who acts: the maintainer, one letter per fork (five letters). Then the director seat dispatches one #21464 stage carrying the ruled shapes. Fork 1's B waits on #21702.
Measured (the dev's census, read as claims; the contract review on #21699 judges them)
Corpora: objectstack 7d0781482d, objectui pin ab1879721595 and main 94985a92ba, hotcrm 4054ec2680, cloud b2d7a7f6f8. The instrument is a TypeScript-AST walk over code and fenced docs. It reproduces stage 5's drillDown population exactly.
Fork 1, drillDown.report: 3 objectui values. 1 is drawn and parses ReportSchema. 2 are it.each probes, not drawn, both refused by ReportSchema. objectstack 0, hotcrm 0, cloud 0.
Fork 2, customFields: 27 values, 31 entries, all objectui. Each is { name, label, type } plus a few draw keys. 0 snake_case grid keys. 2 keys outside objectui's 45 (group, defaultValue), in two tests.
Fork 3, sections, inline "shape 3" entry: written 7 times, all in plugin-form's README wizard and its submit-target tests. Form-view writers author none.
Fork 4, timeline items: 14 values, all objectui tests (8 feed entries, 5 gantt rows), 0 with content. objectstack 1 (a spec test), hotcrm 0, cloud 0.
Fork 5, action group/menu members: 21 static members. They use only name, label, type, locations, target, bodyExtra, bodyShape and objectName, plus one host auto-trigger test. None uses an undecided key.
Ruled: 5979239990 · forks 4 and 5 letters B, A (batch #277) — all five forks ruled: 1 B, 2 B, 3 B, 4 B, 5 A · 2026-10-04T10:58Z
Ruled: 5978663135 · forks 1, 2, 3 letters B, B, B (batch #276); forks 4 and 5 pending batch #277 · 2026-10-04T09:50Z
Filing gate: ② decisions only the maintainer can make. Each fork picks the published shape of a page-component member, and no existing ruling decides it. Filed by the director seat, summon #32 (
session_016tKoy8NJa35Yih1FdzrVmn), holder of #21464's S-objectui-held claim5976829576, from that stage's dev report5977481177(open_questions1–5). The at-tier contract review of record on #21699 (5977620713, PASS) judges each a genuine fork, not owed work skipped, and takes no position among the options. PR #21699 records all five in the enumeration pin's newforkstage (component-props-unknown-members.pin.test.ts), each with its shapes. The five are folded into one card under the filing quota: they belong to one card, and the ruled letters ship as one more #21464 stage. ⛔ Not a claim.Reader who acts: the maintainer, one letter per fork (five letters). Then the director seat dispatches one #21464 stage carrying the ruled shapes. Fork 1's B waits on #21702.
维护者速读
ComponentPropsMaprows still type renderer-read members asz.unknown()—navigationon object-map / object-gantt / object-tree andconditionalFormattingon object-kanban accept42— the family close-out after #21445 #21464 把页面组件里「平台没声明、写错也不报错」的属性逐个补上类型。最后一段(PR feat(spec)!: object-gantt markers, object-timeline mapping and both forms' fields take the shape each block reads; five objectui-held contracts reported as forks (#21464, S-objectui-held) #21699)补了 4 个,另外 5 个各有两种以上都说得通的写法,现有裁决都没覆盖,所以按「停阀」规则停下来,交给你选。drillDown.report:推荐 B,先修报表契约([finding] spec(report): atype: 'joined'report whose blocks bind nodatasetparses and passesobjectstack validate, while ReportSchema's own refinement comment and reports.mdx say "each block dataset-bound" #21702),再直接引用报表契约。customFields:推荐 B,平台写一份封闭的、驼峰命名的字段定义,只收表单真正会画的属性。sections:推荐 B,页面块自己的分区形状,不动已存储的表单视图。依赖第 2 项。items:推荐 B,两种条目都封闭,content先当不透明成员,按variant校验条目种类。outcomeMessages对四个操作块一起决定,A 下四块都暂不声明。1B 2B 3B 4B 5A。Measured (the dev's census, read as claims; the contract review on #21699 judges them)
7d0781482d, objectui pinab1879721595and main94985a92ba, hotcrm4054ec2680, cloudb2d7a7f6f8. The instrument is a TypeScript-AST walk over code and fenced docs. It reproduces stage 5'sdrillDownpopulation exactly.drillDown.report: 3 objectui values. 1 is drawn and parsesReportSchema. 2 areit.eachprobes, not drawn, both refused byReportSchema. objectstack 0, hotcrm 0, cloud 0.customFields: 27 values, 31 entries, all objectui. Each is{ name, label, type }plus a few draw keys. 0 snake_case grid keys. 2 keys outside objectui's 45 (group,defaultValue), in two tests.sections, inline "shape 3" entry: written 7 times, all inplugin-form's README wizard and its submit-target tests. Form-view writers author none.items: 14 values, all objectui tests (8 feed entries, 5 gantt rows), 0 withcontent. objectstack 1 (a spec test), hotcrm 0, cloud 0.name,label,type,locations,target,bodyExtra,bodyShapeandobjectName, plus one host auto-trigger test. None uses an undecided key.Governing text
ReportSchema's refinement comment andcontent/docs/ui/reports.mdx: "each block dataset-bound". This is not enforced; see [finding] spec(report): atype: 'joined'report whose blocks bind nodatasetparses and passesobjectstack validate, while ReportSchema's own refinement comment and reports.mdx say "each block dataset-bound" #21702.camelCase".types/src/form.ts(about:1770):FormField, 45 members plus an index signature (about:1906).ObjectFormSection.fields: (string | FormField)[].TimelineFeedItem/TimelineGanttItem, paired byvariant.component.zod.tsaction rows, on feat(spec)!: object-gantt markers, object-timeline mapping and both forms' fields take the shape each block reads; five objectui-held contracts reported as forks (#21464, S-objectui-held) #21699's head:outcomeMessagesis forwarded since objectui#11344 and not declared, "foraction:button's reason". objectui leaves the input unpublished until a row declares it.endpointhas been refused since finding(spec):action:button/action:iconacceptendpoint, the keyActionSchemarefuses with the prescriptionendpoint→target: one concept, two verdicts in one release #21005.drillDown report,customFields,FormField spec,form section inline field,timeline items variant,UIActionSchema,outcomeMessages→ 0 hits on an open objectstack card. MCPsearch_issues, scoped, for 「outcomeMessages action:button action block contract decision」 → 0. For 「object-form customFields sections inline runtime form field spec declaration」 → 2, both closed and unrelated (Studio field designer is hand-coded, not metadata-driven — bring design-time authoring into the protocol (fieldForm / metadata-form-registry) #3257, finding: a section-less public form accepts ANY non-anchor field from an anonymous visitor (the write-side twin of #6601) #6920). ADR: none. Thread: spec(ui): theComponentPropsMaprows still type renderer-read members asz.unknown()—navigationon object-map / object-gantt / object-tree andconditionalFormattingon object-kanban accept42— the family close-out after #21445 #21464.分叉 1:指标卡下钻的报表
object-metricdrillDown.report一句话问题: 指标卡点开下钻时,能挂一张报表;平台该按「报表」的正式契约来校验它,还是另写一套只给下钻用的规则?
ReportSchema校验ReportSchema校验TaskOverviewReport)每块都绑了数据集,不受影响业务含义直译:
四轴(业务立场):
objectstack validate当场报错。os-decision-facets
推荐:B。 两年后的样子:下钻、仪表盘、报表页都引用同一份报表契约,「能通过校验」就等于「画得出来」。参照 Salesforce:仪表盘组件引用的是同一份报表定义,不另立格式。
回退:A。 先引用现有契约,未绑数据集的漏洞留给 #21702 单独修。
自检: 只看①选 B;②③④ 是否翻转:否。
置信缺口: hotcrm 和 cloud 的联合报表还没普查,#21702 的认领会先普查。
裁后执行:
type: 'joined'report whose blocks bind nodatasetparses and passesobjectstack validate, while ReportSchema's own refinement comment and reports.mdx say "each block dataset-bound" #21702 先落地,按收紧规范发版。之后 spec(ui): theComponentPropsMaprows still type renderer-read members asz.unknown()—navigationon object-map / object-gantt / object-tree andconditionalFormattingon object-kanban accept42— the family close-out after #21445 #21464 的下一段把report写成对ReportSchema的引用。type: 'joined'report whose blocks bind nodatasetparses and passesobjectstack validate, while ReportSchema's own refinement comment and reports.mdx say "each block dataset-bound" #21702 照常排队。分叉 2:表单的自定义字段
object-formcustomFields一句话问题: 不绑对象的表单可以直接写一组字段。平台该怎么声明「一个字段」?
FormFieldFormFieldSchemaname索引业务含义直译:
四轴(业务立场):
{ name, label, type }加少量绘制键。零个蛇形表格键。开放字段袋和表格键都没有拉动。os-decision-facets
推荐:B。 两年后的样子:无对象表单的字段和对象字段一样有封闭契约,Studio 能据此做字段面板。参照 Salesforce Screen Flow:屏幕组件有固定、具名的属性表。
回退:C。
自检: 只看①选 B;②③④ 是否翻转:否。
置信缺口: 私有客户可能用了表格控件的蛇形键。B 下这些写法会被拒绝,需要等 objectui 改名后再收进来。
裁后执行:
分叉 3:表单分区
object-form/object-master-detail-formsections一句话问题: 表单分区里除了字段名,还可以直接内嵌一个完整的字段定义(objectui#11550 保留了这种写法)。平台的分区形状要不要连「已存储的表单视图」一起放宽?
FormSectionSchema,并放宽其字段条目FormSectionSchema的键,加上表单实际读取的三种条目,只收规范写法;表单视图不动业务含义直译:
四轴(业务立场):
plugin-form的 README 向导和它的测试里。表单视图的写法零次。没有放宽视图的拉动。os-decision-facets
推荐:B,排在分叉 2 之后。 内嵌条目引用分叉 2 选出的字段定义。两年后的样子:存储的视图只引用对象字段,临时表单的内嵌字段只在页面块上出现。
回退:A。
自检: 只看①选 B;②③④ 是否翻转:否。
置信缺口: 如果分叉 2 选 A,B 的内嵌条目也是开放的,封闭的好处就打折扣。
裁后执行:
FormSectionSchema,另开一张存储视图的契约卡,先于本段。分叉 4:时间线条目
object-timelineitems一句话问题: 时间线有「动态流」和「甘特条」两种条目,由父组件的
variant决定是哪种。平台要不要校验条目和variant对得上?动态条目里的子内容content怎么处理?content作为插槽,按variant配对content当作子组件位置去检查content先不透明,按variant配对variant匹配;content暂不深入检查content不透明,不配对业务含义直译:
四轴(业务立场):
content。插槽机制零拉动。content的写法,再把它升级成插槽。os-decision-facets
推荐:B。 两年后的样子:等有人真的往动态条目里放子内容,再把
content升级成插槽。到那时有写法可测,形状是测出来的。回退:A。
自检: 只看①选 B;②③④ 是否翻转:否。
置信缺口: 「
content暂不检查」意味着里面写错也不会报错,直到升级成插槽为止。今天这里零写法。裁后执行:
variant的配对校验。content在台账里记为不透明成员,写明原因。分叉 5:操作组和操作菜单的成员
action:group/action:menuactions[]一句话问题: 操作组和操作菜单里的每个成员,就是一个内联操作。平台按哪套词汇校验它?
action:button同一套键;未决的键(outcomeMessages、成员className、properties.params)先拒绝,endpoint按既有提示改写到targetoutcomeMessages、成员className、properties: { params }ActionSchema业务含义直译:
四轴(业务立场):
os-decision-facets
推荐:A。
outcomeMessages是四个操作块(按钮、图标、组、菜单)共同的问题。A 下四块都暂不声明,等出现内联写法再一次性声明。两年后的样子:内联操作和按钮共用一套封闭词汇,新增键四块一起进。回退:B。
自检: 只看①选 A;②③④ 是否翻转:否。
置信缺口: objectui#11344 已经在渲染端转发
outcomeMessages,并注明等 spec 的行声明后再公开输入。A 下这个公开会继续等。如果你希望现在就让四个操作块都接受outcomeMessages,回5A+,四块一起声明。裁后执行:
action:button同一套键和提示。outcomeMessages,按ActionSchema引用。Related
#21464 · PR #21699 · #21702 · objectui#11550 · objectui#6356 · objectui#11344 · #21005 · ADR-0021 · ADR-0087.
Dedupe words:
drillDown.report,customFields,FormField,sections inline field,timeline items variant,action:group members,action:menu members,outcomeMessages,UIActionSchema. Searches are listed under Governing text.Generated by Claude Code