Repository navigation
[Decision] ADR-0050 form layout vs presentation — the maintainer's own call: schedule the spec-major narrowing of FormView.type to layout only, defer it, or withdraw the record (set aside from ADR batch 2 on #26553) #27032
Description
Ruled: 6464210455 · letter A′ · 2026-10-28T08:27Z
Filing gate: ③ maintainer-directed. The maintainer, answering ADR batch 2 on objectstack#26553 (batch #417, brief 6458849517), 2026-10-28, verbatim: 「ADR-0050 表单布局 vs 呈现,单独立卡交维护者处理,其他同意」. Filed by the director seat (session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). ⛔ Not a claim; ⛔ not presented again by the director seat — the maintainer rules on this card directly (as objectstack#26582). Reader who acts: the maintainer; after the ruling, the seat that opens the docs/adr/0050-*.md status-line PR (Tier H) and, under letter A, the domain:ui + domain:spec seats for the cutover card. Dedupe: #24692 (closed; ruling B′ amended this record on 2026-10-20), #1890 (the modal-hosts-tabbed unlock), objectui#1763 (viewschema key drift, out of scope) — no open card asks this question.
维护者速读
ADR-0050 的决策是把 FormView.type 收窄成纯布局(simple | tabbed | wizard),删掉混在同一字段里的呈现值 drawer | modal 和视图模式值 split。它解锁的能力——模态框里放 tabbed 表单——已经上线(#1890,ModalForm.tsx:950、AppContent.tsx:1513);收窄本身没做:packages/spec/src/ui/view.zod.ts:4546 仍列六个值,ObjectForm 仍分支到 SplitForm / DrawerForm。收窄是 spec-major 破坏性改动。2026-10-20 你在 #24692 裁 B′ 退役了 addRecord.mode,记录「呈现维度已在三处」的前提少了一处(剩 NavigationMode 与动作 type:'modal')。
请裁:
- A Accepted(收窄):状态行写「布局转发已实现;枚举收窄 +
ObjectForm三分支删除随下一次 spec-major」,并立一张domain:ui+domain:spec的 cutover 卡挂在 spec-major 窗口。 - B Deferred:状态行写 Deferred,重启条件「下一次 spec-major 窗口」;不立 cutover 卡。
- C Withdrawn:接受
type继续混两维(「模态+tabbed」已可表达);状态行写 Withdrawn,说明 [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890 取走了它的价值。
选 A / B / C?
Governing text
docs/adr/0050-form-layout-vs-presentation.mdDecision 1–4 and Migration ("breaking spec, tiny blast radius"; "should land after architect sign-off, ideally bundled with the modal/drawer layout-forwarding follow-up").- Its 2026-10-20 amendment (ruling 6281834942 on [Decision] A list view's
addRecorddefaults (enabled true, position bottom, mode inline) are not what the renderer does: enforce the spec, or make the spec say what renders (objectui#13099) #24692):addRecord.mode/addRecord.formViewretired under ADR-0049 enforce-or-remove. - [Decision] docs/adr: 143 ADRs with no index, four numbers used twice, 19 Proposed older than three months, three status-line spellings — how the registry gets put in order #26076 ruling A (6417460375): the stale Proposed records are ruled by the maintainer, one of Accepted / Deferred / Withdrawn / Superseded each.
- AGENTS.md Prime Directive 14:
docs/adr/**is Tier H.
Premises (each with its re-check)
- P1: the enum is not narrowed.
sed -n 4544,4552p packages/spec/src/ui/view.zod.tsonorigin/maina90163d477listssimple,tabbed,wizard,split,drawer,modal. - P2: the renderer still executes the three values.
grep -n "SplitForm\|DrawerForm" ui/packages/plugin-form/src/ObjectForm.tsx→ imports at :41–42, branches at :516 and :553;ModalForm.tsxis the modal container. So the values are enforced, not dead keys under ADR-0049. - P3: the unlock shipped.
ModalForm.tsx:167and:950("a modal can host a tabbed layout", ADR-0050, [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890);AppContent.tsx:1513. - P4: PR docs(adr): generated README index, one status-line spelling, shared numbers cited by stem #26503 row 8 counted 0 citations under
packages/; the two citations are underui/. - P5: real usage of the removed values was audited by the record as five demo views (showcase
task, hotcrmlead); not re-measured by this seat.
One-sentence problem
The record's unlock is live but its decision — a breaking narrowing of FormView.type — is neither scheduled nor withdrawn, so the record cannot honestly say Accepted or Proposed.
Options
| Option | What | Consequence | Workload |
|---|---|---|---|
| A | Accepted; cutover card for the next spec-major (FormViewSchema.type → three values; ObjectForm drops split/drawer/modal branches; five demo views re-spelled; migration note) |
type becomes one dimension; a breaking spec change, blast radius five demo views |
ui + spec · 1 cutover PR at the spec-major · M; status line now · XS |
| B | Deferred with restart condition "next spec-major" | the field stays two-dimensional until then; no card | status line · XS |
| C | Withdrawn | the field stays two-dimensional for good; split keeps three spellings |
status line · XS |
Business meaning
- A: the design is kept and the breaking change goes on the next major's list.
- B: shelved until a major is being cut anyway.
- C: the form field keeps its overloaded meaning; the practical gain already landed.
四维分析
- 实际业务需求:删除值零真实业务使用(记录自审),解锁价值已由 [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890 兑现;收窄的剩余收益是字段语义单一、lint 更简单。
- 项目长远合理性:一个字段混两维与 ADR-0049「键的含义唯一」方向相悖;但破坏性改动只在 spec-major 窗口合理。
- 防 AI 犯错:收窄后 agent 不会再写
type:'modal'来表达呈现;今天靠 lint 提示引导。 - 创业阶段不扩散:A 加一张卡、一次 spec-major 改动;B、C 零工作。
os-decision-facets
① 项目长远合理性:A 使 FormView.type 单维,与 ADR-0049 方向一致;只在 spec-major 窗口落。
② 实际业务拉动:删除值零业务使用;解锁价值已落地。
③ 防 AI 犯错:收窄后一字段一维;今天靠 lint。
④ 创业阶段不扩散:A 一卡一改,B/C 零工作。
Prior rulings read: #24692 B′ (6281834942), #26076 A (6417460375), batch 2 brief 6458849517; ADR-0049; thread: #26553.
Recommendation
The seat's reading on #26553 was A (narrowed), with the stated gap: whether the maintainer wants the spec-major cutover scheduled at all; if not, B. The maintainer set the record aside for their own ruling; the seat adds nothing here.
After the ruling
- A: status line Accepted + pending clause in the batch 3 docs PR (or its own XS PR); one cutover card
domain:ui+domain:spec,Blocked-by:the next spec-major decision. - B: status line Deferred + restart condition, same PR; no card.
- C: status line Withdrawn, same PR; the index moves the record to Withdrawn.
Related
#26553 (carrier), #24692 (amendment), #1890 (unlock), #26076 (ruling A), ADR-0049.
Activity
objectstack-fleet commentedon Oct 28, 2026
Triage: lane
domain:spec· decision card stays with the maintainer · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-28T02:56Z⛔ Not a claim.
FormView.typelayout vs presentation), set aside from ADR batch 2 by the maintainer, verbatim: 「ADR-0050 表单布局 vs 呈现,单独立卡交维护者处理,其他同意」. The maintainer rules on this card directly.domain:spec: the narrowing under letter A is a spec-major enum change. ItsObjectFormcutover would be adomain:uichild card.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Brief-claimed-by: session_01QSeKYo7qYsX6HsAneHBMP2 · batch #421 · 2026-10-28T07:42Z
Director seat, summon #53 (ledger objectstack#12708). Presented to the maintainer in batch #421 as item 3 of 3. The maintainer set this record aside for a ruling of their own (「ADR-0050 表单布局 vs 呈现,单独立卡交维护者处理」, batch #417); the seat puts the card in front of the maintainer with one correction and one letter, nothing more.
Seat increment (re-read at
origin/maine6e41998, 2026-10-28T07:42Z):packages/spec/src/ui/view.zod.ts:4546–4551);ObjectForm.tsximportsSplitForm/DrawerForm(L41–42) and branches at L516 / L553;ModalForm.tsx:167, 950carry the ADR-0050 / [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890 unlock. All hold. P5 partly re-measured:examples/app-showcase/src/ui/views/task.view.ts:421(split) and:431(drawer) — two demo views on this tree; hotcrm'sleadview is not reachable from this session (REST 403, repository not attached), unmeasured.(narrowing)arm is BREAKING and ships as a minor changeset carrying its migration (FROM → TO and the one-line fix), the tombstone and the ADR-0087 disposition — the kit thespec-property-retirementskill carries; [Decision] A list view'saddRecorddefaults (enabled true, position bottom, mode inline) are not what the renderer does: enforce the spec, or make the spec say what renders (objectui#13099) #24692 B′ retiredaddRecord.modeunder this same record on 2026-10-20, in 18.x. So "A = schedule at the next spec-major" waits on an event that does not exist, and B's restart condition can never fire.split/drawer/modal在NavigationMode与动作type:'modal'已各有第二拼写。② 拉动:零业务使用(本树 2 个 showcase 演示视图 + hotcrm 的演示视图);解锁价值已由 [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890 落地。③ 防错:收窄后 AI 写不出用type:'modal'表达呈现;拒收带 tombstone 处方。④ 不扩散:三个冗余值各是一条永久义务;「过渡从紧、立即退休」—— 等一个不存在的窗口等于 declare-and-maintain。(narrowing)minor — onedomain:speccard (enum → three values; tombstones with the mappingsplit→ the list'snavigation.mode: 'split'+subforms,drawer/modal→ the caller's open mode) with adomain:uichild (ObjectFormdrops the three branches,SplitFormretires; the two showcase views and hotcrmleadre-spelled). Status line "Accepted — cutover card #N". Not B: its restart event does not exist. Not C: it keeps a two-dimension field for good to save one M-sized PR.addRecorddefaults (enabled true, position bottom, mode inline) are not what the renderer does: enforce the spec, or make the spec say what renders (objectui#13099) #24692 B′, theaddRecord.moderetirement) + ui 1 PR (M, no precedent) + hotcrm 1 PR (XS, demo view re-spelling); status line XS inside the ADR docs PR.Prior rulings read: ADR-0050 · FormViewSchema · layout vs presentation → 199 hits in AGENTS.md / docs/adr / packages/spec/src (
view.zod.tsL4034, L4619–4627 are the live values;docs/adr/README.mdL123 the index row); #24692 B′ 6281834942; #26076 A 6417460375; batch #417 ruling 6458958232; thread: 6459431864.objectstack-fleet commentedon Oct 28, 2026
Ruling: batch #421 item 3 · letter A′ · maintainer 「多币种帮我专题分析,从多个维度深度分析,其他同意。」 2026-10-28T08:23Z
Recorded by the director seat (summon #53,
session_01QSeKYo7qYsX6HsAneHBMP2, ledger objectstack#12708). The maintainer had set this record aside for a ruling of their own (batch #417, ruling 6458958232) and answers it here with 「其他同意」 on the seat's letter. Brief 6463517173.A′ = ADR-0050 Accepted; the cutover lands now as a
(narrowing)minor, not at a "spec-major". This repository has no spec-major window: a(narrowing)arm is BREAKING and ships as a minor changeset carrying its migration (FROM → TO and the one-line fix), the tombstone and the ADR-0087 disposition — AGENTS.md L1084–1090; precedent #24692 B′ (addRecord.mode, retired under this same record on 2026-10-20, in 18.x).domain:spec, card filed in this act):FormViewSchema.type→simple | tabbed | wizard(defaultsimple);split,drawer,modalrefused with tombstones carrying the mapping —split→ the list'snavigation.mode: 'split'plussubforms;drawer/modal→ the caller's open mode (NavigationMode, actiontype: 'modal').section.paneretires withsplit. Stored-metadata survey of the three values owed in the PR.domain:ui, child card,Blocked-by:the spec card):ObjectFormdrops the three branches;SplitFormretires;DrawerForm/ModalFormstay as caller-supplied containers, the [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890 layout forwarding kept. Demo views re-spelled:examples/app-showcase/src/ui/views/task.view.ts(splitL421,drawerL431) in this repository; hotcrm'sleadview by the hotcrm seat (not reachable from this session).Workload: spec 1 PR S–M (narrowing kit; precedent #24692 B′) + ui 1 PR M (no precedent) + hotcrm 1 PR XS + status line XS.
Execution: the cutover cards are filed in this act and named in the closing comment; this card then closes
completedwith the record. On the spec PR:Clause-②: no (narrowing),Metadata-protocol: narrowed,Skills-docs:owed line.objectstack-fleet commentedon Oct 28, 2026
Closed completed · ruling 6464210455 (batch #421 item 3, letter A′, maintainer 「其他同意」 2026-10-28) recorded; execution filed · director seat (summon #53,
session_01QSeKYo7qYsX6HsAneHBMP2) · 2026-10-28T08:38ZADR-0050 is Accepted; the cutover lands now as a
(narrowing)minor. Execution: spec #27155 (pm:queue), renderer #27159 (pm:blockedon #27155), hotcrmleadview owed to the hotcrm seat (named in #27155), status line via the #26553 closeout docs PR (pointer posted there). Nothing is left on this card.