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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Mobile UX (round 3): when the host form passes mobileFullscreen (or the field schema sets mobile_fullscreen: true), an "expand" affordance opens a fullscreen edit dialog
实现读了四条来源:
constshowFullscreenButton=Boolean((propsasany).mobileFullscreen??// ① camelCase proptextareaField?.mobile_fullscreen??// ② 字段元数据(propsasany).mobile_fullscreen??// ③ snake_case prop(propsasany).schema?.mobile_fullscreen,// ④ schema 载体);
Activity
xuyushun441-sys commentedon Aug 3, 2026
认领:PM 循环第 1 轮
会话:
session_01NVPjPzmmAJ2Ngtvgg5MSRa(objectui 分片 PM,账号xuyushun441-sys,已在 objectstack#4604 登记)分支:
claude/issue-3232-textarea-mobilefullscreenWorktree:
objectui-issue-3232复核记录:四条读取路径与「只有 ② 活着」实测属实
origin/main@ca58e45全仓 grep,原单的判断逐条成立:mobileFullscreen(camelCase)TextAreaField.tsx:47读、:57解构剥离field.mobile_fullscreenTextAreaField.tsx:48plugin-form/src/ObjectForm.tsx:1049props.mobile_fullscreenTextAreaField.tsx:49components/src/renderers/form/form.tsx:266明确剥离props.schema.mobile_fullscreenTextAreaField.tsx:50决策裁定(PM,不升级维护者,可否决)
原单给的建议(留 ②,删 ①③④,改注释)直接采纳,不问维护者。依据 SKILL.md 的升级门槛:这是「declared ≠ enforced / 消费端宽容」的恢复不变量类修复,属于明确的非升级类 —— 仓规(AGENTS.md #0.1、主令 #12)已经把答案写死了:分歧在生产者收敛,不在消费者用
??累积。按两条评估轴:
undefined的读取,留着就是在文档和代码里同时维持一份不存在的契约,下一个作者照注释传 prop 会被静默忽略 —— 删除是唯一与主令 [WIP] Enhance UI components for forms and layouts #12 一致的走法;??链恰恰是 AI 批量犯错被掩盖的温床(读四个拼写、都不报错、都没人写)。收敛成单一来源后,写错的拼写会没有任何读取路径接住,错误变响亮。Generated by Claude Code
xuyushun441-sys commentedon Aug 3, 2026
PM 验收:ACCEPT — PR #3244,已入合并队列
按 GitHub 实况核对:
main、Fixes objectstack-ai/objectui#3232TextAreaField.tsx、新增测试、changeset。未动form.tsx(scope fence 被遵守)content/docs/releases/零改动Changeset Bump Policy与Changeset Fixed Group Check)四路
??链收敛成Boolean(textareaField?.mobile_fullscreen),①③④ 连同第 57 行那条只为挡 DOM spread 而存在的解构一并删除,注释改写为描述真实生产者。没有新增宿主覆盖 prop —— 我在派发时定的非目标被遵守了,并且把「真需要时的正确做法」写进了注释而不是直接实现。护栏是真的,不是装饰
关键一条:测试不只断言死路径消失,还钉住活路径仍然工作(元数据 flag → 展开按钮 → 开对话框 → 改草稿 → 点 Done 才回调)。mutation 验证:把实现临时改回
Boolean((props as any).mobileFullscreen),6 个用例里 4 个立刻转红(含全部三个活路径用例),恢复后全绿。这正是我在派发时要求的「不能只证明死路径没了」。退役拼写用
@ts-expect-error在编译期钉住(而@ts-expect-error本身不能空转 —— 未使用的指令是 TS2578 错误,所以type-check干净通过同时证明了这两条确实各压住一个真实报错),运行时也钉住了「无类型宿主硬塞进来入口也不复活」。needs-user-decision这单最有价值的产出可能不是 PR 本身,而是它顺链路查出来的:
ObjectForm的mobile.fullscreenLongText对自动生成字段根本到不了TextAreaField。链条断在两处相互配合的地方:flag 被盖在 FormField 自己身上(
ObjectForm.tsx:1049),而原始元数据挂在f.field槽上(:584);form.tsx:1336转发的是field.field || field,于是带 flag 的那个对象被丢掉;唯一还带着 flag 的载体(prop)又在form.tsx:266被 strip。结果:只有手写customFields能用,自动生成字段不行 —— 而自动生成是绝大多数表单的路径。三点必须说清楚:
undefined、③ 被剥离、④ 与 ② 同对象,那时同样是断的;本 PR 只删死读取,行为零变化。修点在packages/components/packages/plugin-form,在我给的 scope fence 之外。needs-user-decision而不是塞回队列:两条修法都动公共契约,A(生产者把 flag 盖到元数据载体)需要先回答「mobile_fullscreen是不是字段元数据的一等属性」——那是 spec 层的决定,按分片规则也归主 backlog PM。顺带一提,这个特性至今没有任何集成测试,这正是它能一直断着没被发现的原因;#3245 建议落地修之前先补一个跑通
ObjectForm → form.tsx → widget的用例把现状钉住。Generated by Claude Code
refactor(fields): TextAreaField reads mobile_fullscreen from one sour…
fix(plugin-form,types): carry `mobile_fullscreen` on the field metada…