在做 #3446(PR #3453)时顺带发现,不在该 PR 范围内,单独记录。
事实
apps/console/src/preview-samples.ts 的 page 样例只声明了 name / label / regions,没有 type:
page: {
name: 'crm_welcome',
label: 'CRM Welcome',
regions: [ ... ],
},
PageSchema 里 type 是 PageTypeSchema.default('record')(@objectstack/spec@17.0.0-rc.2 的 src/ui/page.zod.ts:412),所以这个样例一旦被 parse,就会落成一个 type: 'record' 且没有 object 绑定的记录页。实测(PR #3453 里让 page 进 SPEC_CLEAN 时跑的):
=== proposed VALID
parsed page type = "record" template = "default"
而同一个文件里的 app 样例是把它当首页用的:
navigation: [
{ id: 'home', type: 'page', label: 'Home', pageName: 'crm_welcome' },
...
]
PageTypeSchema 里有 'home' 这一档(record | home | app | utility | list),home 也确实注册了渲染器(packages/components/src/renderers/layout/page.tsx:607,与 page 共用 PageRenderer)。所以正确的声明大概率就是 type: 'home' 一行。
为什么归为 observation 类
今天没有用户会踩到:
也就是说这是素材语义上的问题,不是运行时缺陷:样例作为"照抄这个就能用"的范本,把自己的页面种类说错了——抄的人(越来越多是生成元数据的模型)会得到一个没有绑定对象的记录页。
没有顺手改的原因
#3446 的范围是"组件类型能否在注册表里解析",而页面级 type 会改变运行时对这张页的分类(usePageAssignment 按 type: 'record' 认记录页),影响面超出那个 issue;PR #3453 的 fence 也明确只允许改组件类型那一处。留给 PM 定夺。
可能的修法
page 样例加 type: 'home' 一行,并在 preview-samples-spec-valid.test.ts 复跑确认仍在 SPEC_CLEAN(风险很低:home 有渲染器,PagePreview 会把它透给 SchemaRenderer,拿到的是同一个 PageRenderer)。
在做 #3446(PR #3453)时顺带发现,不在该 PR 范围内,单独记录。
事实
apps/console/src/preview-samples.ts的page样例只声明了name/label/regions,没有type:PageSchema里type是PageTypeSchema.default('record')(@objectstack/spec@17.0.0-rc.2的src/ui/page.zod.ts:412),所以这个样例一旦被 parse,就会落成一个type: 'record'且没有object绑定的记录页。实测(PR #3453 里让page进 SPEC_CLEAN 时跑的):而同一个文件里的
app样例是把它当首页用的:PageTypeSchema里有'home'这一档(record | home | app | utility | list),home也确实注册了渲染器(packages/components/src/renderers/layout/page.tsx:607,与page共用PageRenderer)。所以正确的声明大概率就是type: 'home'一行。为什么归为 observation 类
今天没有用户会踩到:
PagePreview读的是未 parse 的 draft,draft.type是undefined,所以isRecordPage为 false,不会去拉记录,渲染路径与现在完全一致(PR fix(console): preview 画廊的 page 样例改用注册过的块类型,并加注册表可解析断言 #3453 的浏览器复核可证)。parse()时才具体化,而画廊不 validate。也就是说这是素材语义上的问题,不是运行时缺陷:样例作为"照抄这个就能用"的范本,把自己的页面种类说错了——抄的人(越来越多是生成元数据的模型)会得到一个没有绑定对象的记录页。
没有顺手改的原因
#3446 的范围是"组件类型能否在注册表里解析",而页面级
type会改变运行时对这张页的分类(usePageAssignment按type: 'record'认记录页),影响面超出那个 issue;PR #3453 的 fence 也明确只允许改组件类型那一处。留给 PM 定夺。可能的修法
page样例加type: 'home'一行,并在preview-samples-spec-valid.test.ts复跑确认仍在 SPEC_CLEAN(风险很低:home有渲染器,PagePreview会把它透给 SchemaRenderer,拿到的是同一个PageRenderer)。