Repository navigation
studio(page preview): a source page's live preview drops the page's type, so Studio draws an app or home page as a record page — no title heading, record width — while the running app draws it with both #11933
Description
Activity
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsTriage: first grade,
bug·priority:p3·domain:ui·area:studio·pm:queue. Direction: the preview handspageTypeexactly asPageViewdoesTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-08T09:07Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in
packages/app-shell/src/views/metadata-admin/previews/SourcePageEditor.tsx(previewSchema) ⇒domain:ui; rationale: Studio in objectui.- Why p3: a source page's preview draws with the wrong width and no title, but the running app is right. The contract broken is "preview is runtime" (builder-ui.md §6).
- Direction: one shared builder for the
{ type, pageType }pair, used byPageViewand the preview, so the two writers cannot drift again. - Pins: an
appand ahomesource page preview with the title and the page width. Control: arecordpage is unchanged.
- addedarea:studioChanging a running app without code — authoring, publish, docs and the portalChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Oct 8, 2026 objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsClaim: PM loop round 5
Session:session_01MgfduSkFrfM3eorB3UGfAU
Account:os-bill
Branch:claude/issue-11933-preview-page-type
Worktree:objectui-issue-11933
Domain:domain:ui
Seat:domain:ui#2
File surface (onf3a0488):packages/app-shell/src/views/metadata-admin/previews/SourcePageEditor.tsx:previewSchema(about:153) handspageTypeexactly asPageViewdoes.packages/app-shell/src/views/PageView.tsx: only the{ type, pageType }mapping (about:150–:190). It moves into one shared module-private builder that both writers call, so they cannot drift, as triage directs.- At most one new module-private helper beside either file. It is not exported from the package entry.
- The tests beside these, and
.changeset/11933-*.md.
⛔ Not on it:
PageRendererand the spec's page schema;StudioDesignSurface.tsxandinterfaceCreate.tsx, which this seat's re-land of objectui#11932 holds;- any new export from
@object-ui/app-shell's entry; packages/components/src/ui/**andpackages/i18n/**.
Any file outside this list: the dev reports it before opening the PR (stop on breach; explain in the report).
Container & model:S,mode:subagent,model: opus(dispatch-gates --tier --repo objectstack-ai/objectuiover these paths: no path-derived mandate; default tier)
Clause-②: no
Responsibility:objectui app-shell Studio page preview: a source page's live preview drops the page's type, so an app or home page previews as a record page with no title and record width, while the running app draws both | PageView's own type-to-pageType mapping is the runtime reference | every Studio author previewing an app or home page
Thread-read: 6056545683
Serial constraints cleared:noneblocking.- In-flight claims read 2026-10-08T10:24Z: none names
SourcePageEditor.tsxorPageView.tsx. - Open objectui PRs, read 2026-10-08T10:24Z: none touches either file.
Why
Clause-②: no: an internal helper shared by two app-shell modules. No export, prop, spec key orpackages/i18nkey changes.
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11933,
"status": "blocked",
"branch": "claude/issue-11933-preview-page-type",
"pr": null,
"session": "session_01MgfduSkFrfM3eorB3UGfAU",
"premise_still_valid": true,
"summary": "Premise holds and is fixed inside the claimed surface: a new module-private builderpageKindNode(packages/app-shell/src/views/pageKindNode.ts, not exported from the package entry) writes the{ type, pageType }pair; PageView and SourcePageEditor'spreviewSchemaboth spread it. PageView's output is unchanged; the source-page preview now draws app/home pages with the title heading and their own width. Pushed at 20b279b; NO PR opened. Blocked on the claim surface: the card's Done-when bullet 1 namesPagePreview('fix any that drops pageType'), and a probe measured that it does: PagePreview's run-mode render (the Studio canvas in Run mode, and metadata-admin's page preview) hands SchemaRenderer{ ...draft, type }with nopageType, so for anappregion page it draws data-page-type=record, width max-w-7xl, h1 list empty; same forhome. PagePreview.tsx is outside claim 6057820549's file list, and the dispatch says to stop and report before opening the PR on any such file. I did not edit it. Only the PM can amend the claim surface (see open_questions).",
"hypotheses": {
"H1": "Partly confirmed, partly falsified. PageView hands...page,type: page.type || 'page',pageType: page.type,context: { params }, inside ConsoleActionRuntimeProvider and RelatedRecordActionsProvider. The preview handed...draft,type: draft.type ?? 'page'. Page-shape keys the preview dropped:pageTypeonly, plus a different fallback operator (??vs||, which differs only for an empty-string type). The title heading and the width class are NOT separate keys: PageRenderer derives both frompageType(getPageMaxWidth(pageType);headerOwnsTitle = pageType === 'record' || pageHeaderOwnsTitle(schema)), and the title text istitle ?? label, which both writers carry through the spread. Moved into the builder: exactlytype+pageType. Left alone as data/context wiring:context: { params }and the two providers (a preview has no URL).",
"H2": "Done. Pin SourcePageEditor.pageKind-11933.test.tsx renders through the real SchemaRenderer, ComponentRegistry and PageRenderer (only the Monaco loader is mocked offline, as in the sibling source-page tests): CONTROL record page equals an untyped page (data-page-type record, same width, no h1); app and home: data-page-type equals the kind, h1 list equals [label], width differs from the record width (widths compared, never hard-coded); every region-composed kind from PageTypeSchema reaches the renderer as itself. PageView control: page-kind-writing-end-9718 and the five PageView.*.test.tsx files unchanged and green.",
"H3": "NOT MEASURED, reason: no PR this round, so no CI budget-bot comment; no console build per dispatch. Reading only: PageView's eager closure gains one small function and loses the inline pair. Note main moved to 3c888c6 (objectui#11956 landed, rolling back objectui#11931 and objectui#11932 to get under the eager ceiling), so the headroom is tight; read the bot comment once the PR exists."
},
"card_body_check": "Complete: Seam, Contract, Dedupe, What happens, Done when (3 bullets), dedupe words, footer. Read with both comments (triage 6056545683, claim 6057820549); the newest Claim names this branch.",
"card_bullet_3": "page-kind-writing-end-9718 is not widened: it pins PageView's write kind by kind and stays green unchanged. The preview's write is pinned at render level beside it (SourcePageEditor.pageKind-11933), and both writers spread one builder.",
"files_changed": [
"packages/app-shell/src/views/pageKindNode.ts (new, module-private)",
"packages/app-shell/src/views/PageView.tsx (the pair now spreads pageKindNode; comment extended)",
"packages/app-shell/src/views/metadata-admin/previews/SourcePageEditor.tsx (previewSchema spreads pageKindNode)",
"packages/app-shell/src/views/metadata-admin/previews/SourcePageEditor.pageKind-11933.test.tsx (new pin)",
".changeset/11933-preview-page-kind.md (patch, @object-ui/app-shell)"
],
"gates": {
"head": "20b279b2b (git rev-parse --short HEAD after the last commit). Every gate below ran on it, except two: the closure build (dependency packages only, which the diff does not touch) and the ablation (run at 36b3d33; the one later commit only renames the parametrised test title).",
"closure_build": "lock: pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' run build | VERDICT command-exit 0",
"vitest_union": "lock: pnpm exec vitest run --maxWorkers=2 over 15 files (the new pin; page-kind-writing-end-9718; PageView.test, .context-9673, .editInStudioNeedsAuthoring-10899, .recordNavigator-11293, .refreshInPlace-10519; no-refresh-key-remount.ratchet; useMonacoFallback.loaderRejection-11800; ResourceEditPage.pageRequiresStamp-11357; dataPreviews.i18n-10862-s3; StudioDesignSurface.interfacesCreatePage-11823; StudioDesignSurface.interfacesReadOnly-11136; PagePreview.test; packages/core column-identity.ratchet) | Test Files 15 passed (15) | Tests 120 passed (120) | VERDICT command-exit 0",
"vitest_scripts_reading_PageView": "lock: scripts/tests/page-key-read-census.test.ts + vite-declared-lazy-views.test.ts | Test Files 2 passed (2) | Tests 47 passed (47) | VERDICT command-exit 0",
"type_check": "lock: pnpm --filter @object-ui/app-shell type-check (script echoed: tsc --noEmit && tsc -p tsconfig.test.json) | VERDICT command-exit 0; tsc -p tsconfig.test.json --listFilesOnly lists the new pin and pageKindNode.ts",
"check:unreferenced-sources": "exit 0 | OK Every shipped source file in every covered package is reachable.",
"check:spec-symbols": "exit 0 | spec member citations: nothing cites a key its spec symbol does not declare.",
"check-changeset-presence": "exit 0 | 4 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/11933-preview-page-kind.md.",
"check-changeset-no-major": "exit 0 | No changeset declares amajorbump.",
"check:new-line-citations": "exit 0 | VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only",
"check:control-bytes": "exit 0 | check-control-bytes: OK; plus a self-scan of the 5 changed files for control bytes: zero hits",
"eslint_touched": "pnpm exec eslint on the 4 touched source/test files: exit 0, 0 errors, 3 warnings (pre-existing no-explicit-any in PageView outside the edited pair; the diff removes two such casts). File count 4 read from --format json. Narrowing evidence: eslint.config.js declares no projectService / parserOptions.project (type-aware linting off) and the repo's custom rules are single-file, so the diff moves no verdict on an untouched file. Repo-wide pnpm lint is CI's.",
"also_run": "check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape, check:test-path-roots, check:changeset-claims, check:pending-changeset-literals: all exit 0",
"ablation": "Fix committed first; run at 36b3d33. node ablation-replace.mjs restored the pre-fix line in SourcePageEditor (type: (draft as { type?: string }).type ?? 'page'): anchor x1 to x0, replacement x0 to x1, blob 90ef1c7fa03e to 268b032164fd. Pin: Tests 3 failed | 1 passed (4), app and home Expected the kind, Received 'record'; the record CONTROL stayed green. Restore: blob after restore == HEAD blob 90ef1c7fa03e, git diff HEAD empty. Direction observed: red, as expected.",
"probe_PagePreview": "Temporary probe, deleted, never committed: PagePreview with no editing, region page (label 'Team handbook', one text block): app, home, record and untyped all drew data-page-type record, width max-w-7xl, h1 list empty.",
"NOT_MEASURED": "eager-closure budget (H3): no PR, no CI; no console build per dispatch."
},
"deviations": [
"No PR opened and no label-write: the card's Done-when names PagePreview.tsx, which is outside the claim's file list; the dispatch orders a stop-and-report before opening the PR. Standing rule 'open a draft PR once there is something to show' yields to that per-card stop; the work is pushed.",
"origin/main moved to 3c888c6 (objectui#11956) after the branch was cut. Not merged yet: the dispatch places the merge before opening the PR. None of objectui#11956's files overlaps this diff (read from its PR file list).",
"Worktree /home/user/objectui-issue-11933 kept, with its built dependency closure, for the resume round; it is removed after the PR opens."
],
"tests": "See gates: vitest union 15 files / 120 tests green, scripts readers 2 / 47 green, type-check exit 0, ablation red-then-restored, all at 20b279b.",
"mcp_calls": "0",
"api_writes": "1 (planned at report time): the os-dev-report comment on objectui#11933 via scripts/pm/post-stamped.mjs (fleet-write relay, POST issues/11933/comments). git push x3 to the branch (probe, 36b3d33, 20b279b) are not REST writes. REST reads only otherwise: /rate_limit, issues/11933, its comments, open pulls and each open pull's files.",
"open_questions": [
{
"question": "PagePreview.tsx (schemamemo, used by its run-mode SchemaRenderer render) dropspageType, exactly as SourcePageEditor did; the card's Done-when bullet 1 requires it fixed, but claim 6057820549's file list does not include it. Amend the surface?",
"options": [
"A. Amend the claim's file surface to add packages/app-shell/src/views/metadata-admin/previews/PagePreview.tsx (one change: itsschemamemo spreads pageKindNode, as SourcePageEditor's does) plus a pin beside it (run-mode render through the real PageRenderer: app and home with title and non-record width, record control), then resume this run to merge main, add it, and open the draft PR withFixes #11933.",
"B. Rule PagePreview out of this card: resume to open the PR as it stands withPart of #11933, and the seat files PagePreview as a sub-issue of this card."
],
"recommendation": "A. Same defect class and the same one-line mechanical fix through the same builder; the card names it; no open objectui PR touches PagePreview.tsx (all 21 open PRs' file lists scanned at this round); same app-shell vitest/type-check gate family, no new verification surface. B splits one defect across two PRs and leaves the Studio Run-mode canvas wrong meanwhile."
}
],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11933,
"status": "done",
"branch": "claude/issue-11933-preview-page-type",
"pr": "#11959",
"session": "session_01MgfduSkFrfM3eorB3UGfAU",
"premise_still_valid": true,
"summary": "Resume round after the PM ruled A on the surface question: PagePreview.tsx was added by the seat (card Done-when bullet 1). The three writers that hand a page node to SchemaRenderer now spread one module-private builder,pageKindNode, for the{ type, pageType }pair. They are PageView (the running app, output unchanged), SourcePageEditor's previewSchema (the source-page live preview) and PagePreview's schema memo (the Studio Interfaces canvas in Run mode). So app and home pages preview with their title heading and their own width, and record pages preview as before. Draft PR objectui#11959 is open at 811475c with main 1c51e97 merged (no conflicts) and is assigned to os-bill. Its body opens with the closing line for this card, carriesClause-②: noat the start of a line, and carries the seat's surface-amendment line. The worktree is removed.",
"hypotheses": {
"H1": "As reported in round 1. The previews dropped exactly one page-shape key,pageType. Title and width are both derived from it inside PageRenderer, so they are not separate keys.context: { params }and the providers stay with PageView.",
"H2": "Two render-level pins through the real SchemaRenderer, ComponentRegistry and PageRenderer, with widths compared rather than hard-coded. SourcePageEditor.pageKind-11933 has 4 tests. PagePreview.pageKind-11933 has 5: the record CONTROL, app and home, and two empty-draft CONTROLs. page-kind-writing-end-9718 and the five PageView tests are unchanged and green.",
"H3": "Measured on PR objectui#11959 by the budget bot (comment 6058661388): Eager closure (gzip, 337 chunks) 3306.7 KB against a budget of 3312.0 KB, PASS, headroom 5.3 KB. main's own reading at 1c51e97 was NOT MEASURED: the push run's job-log download redirects to a blob-storage host this container cannot reach. The nearest readings on current main are bot comments on other PRs' merge refs: objectui#11934 at 3306.6 KB with 336 chunks (it also edits components), objectui#11953 at 3306.7 KB with 336 chunks, and objectui#11956 (the rollback) at 3306.6 KB with 336 chunks. Against those the delta is at most about +0.1 KB at the comment's 0.1 KB display grain, plus one chunk. The extra chunk is plausiblypageKindNodesplit out as a module shared by the eager PageView and the lazy previews. That is an inference: eager-closure.json was not read."
},
"files_changed": [
"packages/app-shell/src/views/pageKindNode.ts (new, module-private builder)",
"packages/app-shell/src/views/PageView.tsx (the pair now spreads pageKindNode; comment extended)",
"packages/app-shell/src/views/metadata-admin/previews/SourcePageEditor.tsx (previewSchema spreads pageKindNode)",
"packages/app-shell/src/views/metadata-admin/previews/PagePreview.tsx (schema memo spreads pageKindNode; empty-draft predicate restated on the draft's own keys)",
"packages/app-shell/src/views/metadata-admin/previews/SourcePageEditor.pageKind-11933.test.tsx (new pin)",
"packages/app-shell/src/views/metadata-admin/previews/PagePreview.pageKind-11933.test.tsx (new pin)",
".changeset/11933-preview-page-kind.md (patch, @object-ui/app-shell; names both previews)"
],
"gates": {
"head": "811475cd3, from git rev-parse --short HEAD after the last commit. The PR head sha is 811475c.",
"merge": "git merge of origin/main 1c51e97 (objectui#11956 rollback + objectui#11949 ceiling allowance): no conflicts. The unpushed merge commit's message was amended to carry the trailer pair.",
"vitest_union": "Ran under the lock with repo-root pnpm exec vitest run --maxWorkers=2 over 23 files. The files: both pins; page-kind-writing-end-9718; the 5 PageView tests; no-refresh-key-remount.ratchet; useMonacoFallback.loaderRejection-11800; ResourceEditPage.pageRequiresStamp-11357; dataPreviews.i18n-10862-s3; PagePreview.test; PagePreview.expandFls-7429; page-preview-record-type-10482; StudioDesignSurface interfacesReadOnly-11136, autosaveInFlight-11204, autosaveSwitch-11232, navItemTypes-11790 and navPlaceholderSave-11776; core column-identity.ratchet; scripts page-key-read-census and vite-declared-lazy-views. Result: Test Files 23 passed (23) | Tests 223 passed (223) | VERDICT command-exit 0.",
"type_check": "Under the lock, @object-ui/plugin-list was rebuilt first (it changed in the merge), then pnpm --filter @object-ui/app-shell type-check ran (tsc --noEmit && tsc -p tsconfig.test.json): VERDICT command-exit 0.",
"eslint_touched": "eslint over the 6 touched source and test files, file count read from --format json: exit 0, 0 errors. No new warnings: PageView has 3 against main's 5, and PagePreview has 15 against main's 15, all pre-existing. Type-aware linting is off in eslint.config.js.",
"changeset_gates": "check-changeset-presence exit 0 ('6 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)'). check-changeset-no-major, check:changeset-claims and check:pending-changeset-literals: exit 0.",
"other_gates": "check:unreferenced-sources, check:spec-symbols, check:new-line-citations (0 new citation(s)), check:control-bytes, check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape and check:test-path-roots: all exit 0.",
"ablation_PagePreview": "Run with ablation-replace under the lock at 811475c, two legs. Leg 1 restored the pre-fix type-only memo (blob b29ef4ae1128 to 5da520728ac5): Tests 2 failed | 3 passed (5), with app and home expected as the kind and received as 'record'. Leg 2 restored the old key-count empty check (blob b29ef4ae1128 to 13ca9d01052d): Tests 2 failed | 3 passed (5), with both empty-draft CONTROLs red. Each leg restored to HEAD blob b29ef4ae1128 with git diff HEAD empty.",
"ablation_SourcePageEditor": "Round 1, at 36b3d33: Tests 3 failed | 1 passed (4), restored to HEAD blob 90ef1c7fa03e.",
"ci": "Snapshot when this report was written: 25 completed/success, 3 skipped, 14 in_progress (Test shards 1-8, Type Check, Lint, Spec Main Shape Gate, Skill Example Check, README Export Check, Doc Snippet Type Check), 0 failures. Bundle Analysis: success."
},
"deviations": [
"PagePreview.tsx got two edits, not one. The PM asked for the schema memo only, but the empty-draft check counted the memo's keys (at most one meant empty), and the builder's addedpageTypekey would have silently stopped empty and type-only drafts from showing the add-components message. The predicate now asks the draft's own keys withtypeaside, the same predicate the old count expressed. Ablation leg 2 shows the line is load-bearing, and an empty-draft CONTROL pins it.",
"Comments in pageKindNode.ts, PageView.tsx and SourcePageEditor.tsx were reworded to name both previews so every sentence stays true. No code changed in those files this round.",
"My round-1 report said PagePreview's run-mode render is also the metadata-admin page preview. That is not verified, so it is dropped from the changeset, the pin and the PR body. Only the Studio Interfaces Run-mode canvas is claimed.",
"main's eager-closure reading at 1c51e97 was not readable (job-log blob host refused). The proxies are named under H3.",
"The round-1 blocked report (comment 6058281277) stays on the card. This report supersedes it."
],
"tests": "See gates: 23 files / 223 tests green, type-check exit 0, three ablation legs red then restored. All at 811475c except the round-1 SourcePageEditor leg.",
"mcp_calls": "0",
"api_writes": "4 REST writes over the run, all through the fleet-write relay. Round 1: POST issues/11933/comments (comment 6058281277). This round: POST pulls (pr_create, draft, objectui#11959; read-back 7373 bytes identical); POST issues/11959/assignees (os-bill, via label-write, read back as matching); POST issues/11933/comments (this report). Labels: zero written. The PR carriestestsandpackage: app-shellfrom labeler.yml. git push x4 (empty probe, 36b3d33, 20b279b, 811475c) are not REST writes.",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsReview: ACCEPT — PR objectui#11959 ·
domain:uiseat 2 · 2026-10-08T11:19ZImplemented-by:
os-devsubagent ofsession_01MgfduSkFrfM3eorB3UGfAU, branchclaude/issue-11933-preview-page-type, head811475c, withmain1c51e97merged. Reports6058281277(round 1, stopped on the surface) and6058705918.
Reviewed-by:domain:uiseat 2 (session_01MgfduSkFrfM3eorB3UGfAU), against GitHub and the branch diff, not against the report's prose.Checklist:
- PR shape: draft, first line
Fixes #11933,Clause-②: noat the start of a line, and the seat's surface-amendment line. The assignee isos-bill. - Scope: 7 files.
- Claim
6057820549coveredPageView.tsx(the pair only),SourcePageEditor.tsx, the new module-privatepageKindNode.ts, the pins and the changeset. - Surface amended by the seat:
PagePreview.tsx, because the card's done-when bullet 1 names it. Round 1 measured it droppingpageTypein Studio's Interfaces Run-mode canvas. At amendment time, no open PR or in-flight claim held it.
- Claim
- Triage direction met: one builder,
pageKindNode(page) → { type: page.type || 'page', pageType: page.type }. It is used byPageView(output unchanged),SourcePageEditor'spreviewSchemaandPagePreview's schema memo, so the writers cannot drift. - H1: title and width are not separate keys.
PageRendererderives both frompageType(getPageMaxWidth,headerOwnsTitle).contextand the providers stay withPageView. - Deviation, accepted:
PagePreview's empty-draft check counted the memo's keys, so the builder's addedpageTypekey would have silently broken the "add components" message for empty and type-only drafts. The check now reads the draft's own keys withtypeaside, which is the same predicate as before. An ablation leg proves the line is load-bearing, and two empty-draft controls pin it. Clause-②: noholds:pageKindNodeis not on the package entry. No prop, spec key orpackages/i18nkey.- Changeset:
@object-ui/app-shell: patch. Every sentence was checked against the diff. Round 1's unverified claim that the metadata-admin page preview shares the path was dropped. - Evidence:
- 23 files and 223 tests pass: both pins,
page-kind-writing-end-9718and the fivePageViewtests unchanged, the Studio Interfaces pins, the column-identity ratchet, and the scripts that readPageView. - The type-check passes.
- Three ablation legs went red, and each restore was proven.
- 23 files and 223 tests pass: both pins,
- First-load bytes: the budget bot reads 3306.7 KB against the 3312.0 KB ceiling, a PASS with 5.3 KB headroom. The delta against
mainis at most about +0.1 KB. - CI:
811475cis running. The PR lands through the merge queue when every check on that head is green.
Generated by Claude Code
- PR shape: draft, first line
- added a commit that references this issue
on Oct 9, 2026
Filing gate: ① product defect, class (b), a contract mismatch with a named producer and measured reach. Reader: objectui triage first-touch (grade and route).
Seam:
@object-ui/app-shellviews/PageView.tsx. It handsSchemaRenderertype: page.type || 'page'andpageType: page.type. Its comment says that withoutpageType"every page fell back topageType: 'record', so non-record pages got the record max-width, a wrongdata-page-typeand a suppressed header".views/metadata-admin/previews/SourcePageEditor.tsx,previewSchema(about:153–:156on objectuimainf1781be). It writes{ ...draft, type: draft.type ?? 'page' }and nopageType.@object-ui/componentsrenderers/layout/page.tsx,PageRenderer. It picks the max width and the implicit title frompageType.Contract:
SourcePageEditor's own header: "a live preview rendered through the runtime SchemaRenderer".docs/design/builder-ui.md§6: "source + live preview for react / html pages — a code editor beside a liveSchemaRenderer(预览即运行 · 同一渲染器 = preview is runtime)".Dedupe (MCP
search_issues, objectui, open and closed):PagePreviewreading the refuseddraft.pageTypealias. That is a different writer, and the opposite direction. None describes this.Filed by the
domain:uiexecution seat 3 (session_01CGZy1BGCjdN5cXqL9cnvB8) from the objectui#11823 step-3 dev report (6055881773, out-of-scope finding 1, PR objectui#11932). ⛔ Not graded or routed here; ⛔ not a claim.What happens (measured)
@objectstack17.7.0 and the PR objectui#11932 console. Pageteam_handbook(kind: 'html',type: 'app') was shown both ways:SourcePageEditor.previewSchemaandPageView's mapping onmainf1781be(quoted above). The preview never writespageType, soPageRendererfalls back to its record default for every source page whatever itstypeis. This affects everyhtml/reactpage shown in Studio, not only new ones.Done when
SchemaRendererwritespageTypefrom the draft'stype, asPageViewdoes.SchemaRenderercallers underpackages/app-shell/src/views/metadata-admin/previews/andstudio-design/that render a page node.SourcePageEditoris measured.PagePreview,PageBlockCanvasandstudio-canvas-previeware not measured. Read each one, and fix any that dropspageType.appsource page throughSourcePageEditor's preview and asserts the app width and the title heading. Control: arecordpage keeps the record layout.page-kind-writing-end-9718should also cover the preview writers.PageView's comment names it as the pin of that writing end. Its coverage of the previews was not read.Dedupe words: SourcePageEditor preview pageType · source page preview title missing · studio preview runtime parity page title · page-kind node-type channel preview
Generated by Claude Code