Skip to content

[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

Closed

Description

@objectstack-fleet

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

Premises (each with its re-check)

  • P1: the enum is not narrowed. sed -n 4544,4552p packages/spec/src/ui/view.zod.ts on origin/main a90163d477 lists simple, 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.tsx is the modal container. So the values are enforced, not dead keys under ADR-0049.
  • P3: the unlock shipped. ModalForm.tsx:167 and :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 under ui/.
  • P5: real usage of the removed values was audited by the record as five demo views (showcase task, hotcrm lead); 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

  1. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: lane domain:spec · decision card stays with the maintainer · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-28T02:56Z

    ⛔ Not a claim.

    • Read fresh. ADR-0050 (FormView.type layout vs presentation), set aside from ADR batch 2 by the maintainer, verbatim: 「ADR-0050 表单布局 vs 呈现,单独立卡交维护者处理,其他同意」. The maintainer rules on this card directly.
    • Lane domain:spec: the narrowing under letter A is a spec-major enum change. Its ObjectForm cutover would be a domain:ui child card.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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/main e6e41998, 2026-10-28T07:42Z):

    • P1–P3 re-run: the enum still lists six values (packages/spec/src/ui/view.zod.ts:4546–4551); ObjectForm.tsx imports SplitForm / DrawerForm (L41–42) and branches at L516 / L553; ModalForm.tsx:167, 950 carry 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's lead view is not reachable from this session (REST 403, repository not attached), unmeasured.
    • Correction to the card's framing: the record and the card say the narrowing waits for a "spec-major". This repository has no spec-major window. AGENTS.md L1084–1090: 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 — the kit the spec-property-retirement skill carries; [Decision] A list view's addRecord defaults (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′ retired addRecord.mode under 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.
    • Facets, seat's reading: ① 长远:一字段一维,与 ADR-0049 同向;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。
    • Seat's letter: A′ = Accepted, cutover now as a (narrowing) minor — one domain:spec card (enum → three values; tombstones with the mapping split → the list's navigation.mode: 'split' + subforms, drawer / modal → the caller's open mode) with a domain:ui child (ObjectForm drops the three branches, SplitForm retires; the two showcase views and hotcrm lead re-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.
    • Workload: spec 1 PR (narrowing kit, S–M; precedent [Decision] A list view's addRecord defaults (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′, the addRecord.mode retirement) + 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.ts L4034, L4619–4627 are the live values; docs/adr/README.md L123 the index row); #24692 B′ 6281834942; #26076 A 6417460375; batch #417 ruling 6458958232; thread: 6459431864.

  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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).

    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 completed with the record. On the spec PR: Clause-②: no (narrowing), Metadata-protocol: narrowed, Skills-docs: owed line.

  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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:38Z

    ADR-0050 is Accepted; the cutover lands now as a (narrowing) minor. Execution: spec #27155 (pm:queue), renderer #27159 (pm:blocked on #27155), hotcrm lead view 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions