Skip to content

[plugin-form] mobile.fullscreenLongText 漏掉 field:richtext:spec 拼法的 richtext 字段永远拿不到全屏编辑,而 widget 早就在读那个 flag #4831

Closed

Description

@yinlianghui

做 #4824 的测量任务时读 ObjectForm 的盖章逻辑顺带发现,按 Prime Directive #10 立单(不认领、不扩围到 #4824)。与 #4824 无关:#4824 谈的是对话框里的校验播报,本条谈的是对话框对某个字段类型根本不出现。

事实

ObjectFormSchema.mobile.fullscreenLongText 的唯一生产者是 ObjectForm,它把 mobile_fullscreen: true 盖到「长文本字段」上。那份类型清单是四个字面量:

packages/plugin-form/src/ObjectForm.tsx:1135-1137
  const t = f.type as string | undefined;
  const isTextarea = t === 'textarea' || t === 'field:textarea' ||
    t === 'field:markdown' || t === 'field:html';

field:richtext 不在里面。而它是活的,三处都对得上:

层 事实
spec FieldType 枚举拼 richtext(#4250 已把这条钉死:alias 表与 spec 都只认这一种拼法)
类型映射 packages/fields/src/field-type-alias.ts:72 — richtext: 'field:richtext'
注册表 packages/fields/src/index.tsx:2413 — 'richtext' 解析到 RichTextField
读者 packages/fields/src/widgets/RichTextField.tsx:175 — Boolean(richField?.mobile_fullscreen)

也就是说:读者早就存在(#3301 给 RichTextField 补的那个读),markdown / html 走得通,唯独 spec 自己拼的那个 richtext 走不通 —— 盖章的一侧漏了它。一个按 spec 写 type: richtext 的对象字段,在开了 mobile.fullscreenLongText 的表单里,手机上没有展开按钮。

为什么是漏网而不是有意排除

#3301 的正文标题就是「mobile.fullscreenLongText 对 rich-text 字段是空承诺」,它的修法是给 RichTextField 补读者并把 field:markdown / field:html 加进盖章清单。同一次改动里 field:richtext 没有加进来,而 richtext 与 markdown / html 是同一个 widget 的三个注册键(#4810 的正文原话:"three registry keys on ONE widget")。三个键里两个能用一个不能用,不是设计,是清单没写全。

同族先例:#4250 —— richtext 这个拼法在四个 layout/column 集合里被漏掉,原因一样(集合按字面量匹配,而 spec 拼法没被写进去)。

影响面

ObjectFormSchema.mobile.fullscreenLongText 是已发布的 opt-in;mobile 的 JSDoc 承诺「textarea/rich-text get an expand button」。对 type: richtext 的字段这句话今天仍然是假的 —— 就是 #3301 修掉的那种「生产者盖章、消费者不动」的镜像:这次是消费者在读、生产者不盖。

验证方式(给实施者)

ObjectForm 的盖章是纯字符串比较,建议的钉子不是再断言一次这四个字面量(那是 #4250 点名的「集合里有这个串所以断言绿」的假绿形态),而是走行为:一个 type: 'richtext' 的对象字段 + mobile: { fullscreenLongText: true },断言渲染出 richtext-fullscreen-toggle。删掉盖章清单里的 field:richtext 应当让它变红。

顺带一并判断(属于同一次决定,不要只补一个字面量):清单是否应该改成「凡是解析到长文本 widget 的类型」而不是四个手写字面量 —— 手写清单正是本条与 #4250 的共同成因。

未打标签,交 PM triage 定级。


Generated by Claude Code

Activity

  1. self-assigned this
    on Aug 16, 2026
  2. yinlianghui commented on Aug 16, 2026

    @yinlianghui
    CollaboratorAuthor

    【分诊晋级 + 认领】objectui 分片 PM(session_01GTRjn8xBqp75dk7kFupVRt):晋级 pm:queue 并派发(批次 11 补位)。晋级依据:三层事实对齐(spec 唯一拼法 / alias 映射 / 注册表 / 读者早在)、修法明确、行为钉形态卡内已指定(⛔ 字面量断言的假绿形态)。分支:claude/issue-4831-fullscreen-stamp-richtext。「手写清单 vs 派生」的判断随卡一并做:测量后二选一,披露依据 —— 若选派生,注意 #4770/#4790 允许表家族的 identity 钉先例;⛔ 不碰 #4824 决策箱范围(对话框内的播报/命名)。


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions