Repository navigation
Description
Ruled: 5805845085 · letter 乙 · 2026-09-24T01:31Z
Filing gate: ② a maintainer decision: a counter-fact measured while executing a ruling. Filed by the domain:spec execution seat 1 (session_013RDBh5DqXd2xnLwvHLgLFr, seat post #6017) from the round on #19678 (PR #19906). ⛔ The PR executes the ruling to the letter and is ⛔ not armed for merge while this is open.
维护者速读
裁决「不动 + 声明」(#19678,5793380467)的第 1 条写的是:元数据表单里,一行只要是枚举类型,就不写 options,由控件从 JSON Schema 自己推导出选项。PR #19906 已按原文把这条规则写进了说明和报错提示。
但仓库里现有 27 行恰恰是手写 options 的:
- 其中 5 行是 #19188 split: 47 top-level zod-only keys are scalar controls needing one form row each #19331 特意手写的,代码注释写明原因:「枚举原值读起来像个普通单词」,所以要配上人能看懂的标签;
- 另有 3 行只列了一部分枚举值(例如字段类型故意不给
secret/user),推导路径表达不了「只给一部分」。
照原文执行,这 24 行会丢掉下拉里的友好标签,那 3 行会多出本来故意不给的选项。不改的话,服务端下发的说明和仓库自己的表单互相矛盾,照着仓库抄的 AI 会看到两套说法。
- 甲:照原文执行。24 行改成推导(标签挪进
helpText),3 行子集保留手写,说明里写明子集是例外。 - 乙:把规则收窄到「成员拼不出合法值时才省略
options、改走推导」。27 行不动,PR fix(spec): the form option-value refusal and the options describe name the derive path for enum members that cannot be spelled #19906 的说明改一句再合。 - 丙:都不动,接受说明和仓库表单互相矛盾。
推荐乙。选 甲 / 乙 / 丙?
The counter-fact, measured
On origin/main 44ce049a8c:
packages/spec/src/data/object.form.ts:414(#19188 split: 47 top-level zod-only keys are scalar controls needing one form row each #19331): 「Each enum gets an explicitoptionslist because the bare member reads as a word…」 (re-read by this seat).- The round's census: 27 inline
optionslists in 11 of the 17 metadata forms. All are spec enums; none contains an unspellable member. - Three rows are deliberate subsets:
objectfields.typeomitssecret/user, and the twomaster_detaildeleteBehaviorrows omitset_null. The derive path would widen what they offer. - PR fix(spec): the form option-value refusal and the options describe name the derive path for enum members that cannot be spelled #19906 states the literal rule in
FormFieldSchema.options' describe, and appends the derive remedy todefineForm's refusal for an unspellable option value.
四棱
- 实际业务需求:Studio 作者今天在下拉里看到的是友好标签(#19188 split: 47 top-level zod-only keys are scalar controls needing one form row each #19331 的选择);甲会让 24 个下拉退回显示原始枚举值。乙和丙保持现状。
- 项目长远合理性:丙最差,说明和实现长期矛盾。甲是一条规则、一种写法,但要给子集留例外。乙也是一条规则,适用面更窄。
- 防 AI 写错:甲、乙都消除矛盾。丙会让照
object.form.ts抄写的 AI 和读说明的 AI 得出相反结论。 - 创业阶段不扩散:乙改动最小,只在 PR fix(spec): the form option-value refusal and the options describe name the derive path for enum members that cannot be spelled #19906 里改一句说明。甲要改 11 个文件、24 行,并处理标签迁移。
席位推荐乙:裁决起因是「成员拼不出来」这一种情况,乙正好覆盖它,同时不丢 #19331 刻意做的标签,也不需要为子集开例外。风险:裁决标题写的是「never hand-listed」,乙收窄了这个字面。
Prior rulings read: options,enum,metadata form,derive,helptext,formselectoptionschema → 30 hits; ADR-0003 Decision §2, ADR-0003 Decision §3, ADR-0003 Decision §4, ADR-0018 Decision §2, ADR-0019 D4, ADR-0021 D2, ADR-0035 Decision §3, ADR-0037 Decision §3; thread: 1 ruling(s) (5793380467); repo: objectstack-ai/objectstack
The ADR hits match only the word enum and rule on unrelated shapes. The one ruling on this question is 5793380467.
After the ruling
- 甲: a follow-up card converts the 24 rows (labels into
helpText), and PR fix(spec): the form option-value refusal and the options describe name the derive path for enum members that cannot be spelled #19906's describe gains the subset exception. - 乙: the seat has PR fix(spec): the form option-value refusal and the options describe name the derive path for enum members that cannot be spelled #19906's describe and remedy sentence narrowed to unspellable members before it lands.
- 丙: PR fix(spec): the form option-value refusal and the options describe name the derive path for enum members that cannot be spelled #19906 lands as is.
Activity
objectstack-fleet commentedon Sep 23, 2026
定级
needs-user-decision·priority:p2·domain:spec—— 执行裁决时量到的反事实,卡面速读与四棱齐全Path: studio-authoring
Triage: lands in
packages/spec/src/**/*.form.tsandFormFieldSchema.options' describe (PR #19906) ⇒domain:spec; rationale: ruling5793380467item 1 says an enum row omitsoptions, but 27 in-repo rows hand-list them — 5 deliberately for human-readable labels (#19331), 3 as subsets the derive path cannot express — so executing the letter either drops Studio's friendly labels on 24 dropdowns and widens 3, or leaves the served description contradicting the repo's own forms; it holds PR #19906 unmerged, so it is a real decision, not a wording note ⇒ p2.分诊席(
session_01Tw7jnJinGHvoGSi8aFkhPJ),2026-09-23T17:17Z。本席读完了卡面(本卡尚无评论)。本席的读数(
origin/main)packages/spec/src/data/object.form.ts:414起就是 #19188 split: 47 top-level zod-only keys are scalar controls needing one form row each #19331 的那段注释(「Each enum gets an explicitoptionslist because the bare member reads as a word…」),与卡面一致。packages/spec/src/**/*.form.ts里options:共 27 行,与卡面的普查一致。fields.type不给secret/user,两处deleteBehavior不给set_null)取自卡面,本席未逐行复读。判定
p2:它卡着 PR fix(spec): the form option-value refusal and the options describe name the derive path for enum members that cannot be spelled #19906 不能合;选错了,要么 Studio 里 24 个下拉退回显示原始枚举值,要么说明和仓库表单长期互相矛盾。Generated by Claude Code
objectstack-fleet commentedon Sep 24, 2026
Ruling: batch #218 item 3 · letter 乙 · maintainer 「其他同意」 2026-09-24T01:31Z
Director seat, summon #28 (续) (
session_01GLdRPcbaCBQCTvVmU6YEUY). Presented with recommendation 乙; approved. 甲 ⛔ (24 Studio dropdowns fall back to raw enum values); 丙 ⛔ (the served description contradicts the repo's own forms).Governing text: ruling 5793380467 (不动 + 声明) — its item 1 is NARROWED by this letter; #19331 (
packages/spec/src/data/object.form.ts:415: 「explicitoptionslist because the bare member reads as a word」); the counter-fact (5799421996): 27 inlineoptionsrows across 11 of 17 metadata forms, 5 deliberate for labels, 3 deliberate subsets, none unspellable.Ruled — 乙: derive only where a member cannot be spelled
FormFieldSchema.options' describe and indefineForm's refusal: an enum-typed metadata-form row MAY carry an inlineoptionslist (human labels, a deliberate subset); a row whose members cannot be spelled as option values (a hyphen, a capital) OMITSoptions, the control derives the members from the served JSON Schema, and meanings go inhelpText. The refusal names that path as the remedy.Execution
needs-user-decision→pm:queuein this stroke (the closure tool refuses to close a card an open PR references, and PR #19906 does): thedomain:specseat claims it into the PR #19906 round — that PR carriesFixes #19907beside its existing closing line — and the card closes on merge.domain:spec· p2 ·Clause-②: no.objectstack-fleet commentedon Sep 24, 2026
Claim: PM loop — ruling 乙 (
5805845085) executed inside the PR #19906 round: narrowFormFieldSchema.options' describe anddefineForm's refusal remedy to 「derive only where a member cannot be spelled」, dispatched at 2026-09-24T15:06ZSession:
session_013RDBh5DqXd2xnLwvHLgLFrBranch:
claude/issue-19678-enum-options-derive-declaredWorktree:
objectstack-issue-19678-r2Domain:
domain:specSeat:
domain:spec#1File surface: PR #19906's own files, and no others:
packages/spec/src/ui/view.zod.ts, region only:FormFieldSchema.optionsand thedefineFormrefusal text.packages/spec/src/ui/form-option-enum-derive.test.ts.content/docs/references/ui/view.mdx..changeset/19678-form-option-enum-derive-remedy.md.Plus a base merge of
origin/main.Container & model:
S,mode:subagent,model: opus (default judgment tier)Clause-②: no
Authorization: the ruling's own execution line, 「the
domain:specseat claims it into the PR #19906 round — that PR carriesFixes #19907beside its existing closing line」, and the maintainer's instruction in this seat's live PM chat, verbatim 「你session 的pr 红了为什么不修复,绿了为什么不 合并。」Thread-read: 5805845085
Serial constraints cleared:
view.zod.tsis region-split. The census covered all 38 open PRs at 2026-09-24T01:18Z, and the siblings that also edit this file have moved since; several landed. The dev re-derives the file's other open PRs from their actual file lists before editing, and stops if one touches theFormFieldSchema.optionsregion.objectstack-fleet commentedon Sep 24, 2026
Pointer from the claim holder,
domain:specexecution seat 1 (session_013RDBh5DqXd2xnLwvHLgLFr), 2026-09-24T16:42Z. Round 2 of PR #19906, which executes this card's ruling 乙, is accepted; the seat read is comment5818257227on #19678. PR #19906 now carries line-leadingFixes #19907. It waits only on its at-tier record, which this seat's reviewer cannot serve (HTTP 429).needs:contract-reviewis on the PR. ⛔ No label change on this card.objectstack-fleet commentedon Sep 24, 2026
Landed: PR #19906 merged as
655e8c07d9onorigin/main, which closes this card through itsFixes #19907line. The landing record and the by-content re-measure are comment5824008711on #19678.pm:dispatchedand the assignee are cleared here.domain:specexecution seat 1 (session_013RDBh5DqXd2xnLwvHLgLFr), 2026-09-24T23:32Z.fix(spec): the form option-value refusal and the options describe nam…