Repository navigation
[epic] Studio design surface layout redesign: one skeleton for the shell and the four pillars (Data, Automations, Interfaces, Access), from the 2026-10-15 design canvas #12446
Description
Closed: 2026-10-16T06:31Z · every sub-issue closed (26 of 26; summary 6206354798) · on the maintainer's word in seat domain:ui#4's chat, verbatim 「可以,关闭史诗 #12446」
Ruled: 6192878850 · Decision D · letter C (batch #351 record 6203298329) · 2026-10-15T22:14Z
Previous body refresh: the epic PM session at 2026-10-15T09:27Z; this rewrite adds the Ruled: line above and replaces the subscript line only.
Source
The Studio design surface (/_console/studio/app.objectstack.hotcrm/data (the package id, then the pillar segment), packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx and its panels) is the console's metadata-authoring workbench. On 2026-10-15 the maintainer reviewed it in the browser against the HotCRM app (objectui main a2225f91, hotcrm served by objectstack serve --dev) and asked for a layout redesign: the pillars stack a shell header, a pillar-specific second band, an object header that spans the rail, a segmented tab strip and a bordered card before the first row of content; read-only is said in five places; the Automations rail is a flat list of 23 flows; the Interfaces rail shows one kind of entry at a time.
The target is a design canvas of eight artboards (a Claude Design artifact, private to the maintainer): Data Records (writable), Data Form designer, Data Records (read-only package), Automations, Access, Interfaces page designer, Interfaces object entry, Interfaces dashboard entry. Every child card below restates its artboard in words and numbers, so a developer never needs the canvas.
Session
Epic PM session: session_cdb7a717-def7-4e71-9988-f089fbaa18ff (Claude Code desktop, maintainer attending).
Dispatch seat: domain:ui#4, session session_01SJn1GEkrbbBQkhGC26wEDw (os-sales), on the maintainer's instruction in that session's chat, verbatim: 「你负责专题卡的派发 objectui#12446」. It claims and dispatches the seven open children; the epic PM session above keeps #12459 to MERGED.
Territory
Closed and released. Every sub-issue is closed and pm:epic is removed, so these paths are ordinary lane territory again; nothing below is held.
packages/app-shell/src/views/studio-design/**—StudioDesignSurface.tsx(shell, DataPillar, AutomationsPillar, InterfacesPillar, AccessPillar),ObjectFormDesigner.tsx,ObjectListViewInspector.tsx, and two new shared files the children introduce (a rail and an inspector shell).packages/app-shell/src/views/metadata-admin/i18n.ts— Studio keys only (engine.studio.*,engine.inspector.appNav.*).- Named but not claimed:
packages/plugin-grid(the Records toolbar's icon-only buttons) — the Data card touches it only if the toolbar restyle cannot be done from the host. - Outside the subtree: the objectstack console pin bump (
pnpm objectui:refresh+ manifest regeneration) is a follow-up card in objectstack-ai/objectstack once the last child lands. The Console Pin Gate builds and does not boot, so that bump opens the console locally and walks all four pillars.
Rulings
Maintainer, in this session on 2026-10-15, verbatim:
使用 pm-dispatch 技能,创建专题卡,以及具体的子卡片。
流程自动化左侧平铺有点乱,是否建议按对象分类?
界面设计那个你看一下真实的前端界面,而且有很多种菜单类型,仪表盘只是一种。
Design decisions the canvas carries, which every child cites by number:
- One skeleton for all four pillars. Rail 240 px → content column (item header row + underline tab row + toolbar + body) → inspector aside 300 px. The pillar-specific second band (Automations "Off by default · review before enabling", Interfaces "Home · Dashboard", Access "Permission matrix · Objects × CRUD") retires; what it said moves into the item header row of the content column.
- Shell header, 48 px, a three-column grid. Left: home, then an app chip (24 px app icon tile, package name, chevron). Center: the pillars as a segmented control. Right: Changes with a count badge, Publish. The "·" separator retires.
- Type scale and rhythm. 18 / 13 / 12 / 11 px for item title / body / meta / label; rail rows 32 px, table rows 40 px, radius 8 px; the console's existing primary token; no new colors.
- Read-only is said twice. A lock with "Read-only" in the app chip, and one "Read-only · Customize with an overlay" link in the item header. Publish drops to an outline disabled button; the rail's add button hides; "Add record" stays because records remain usable.
- Rails carry the user's mental model. Automations groups by trigger object; Interfaces shows the app's navigation tree exactly as the shipped sidebar renders it, and "+" offers the ten nav kinds the spec declares.
Open decisions
Three children reverse an earlier ruling or a pinned behavior. Each names it. The maintainer answered all three on 2026-10-15, as designed; the ruling comment on this card quotes the words and states the premise each card re-checks before building. The three cards are dispatched once #12459 lands.
- A. Access in the nav, More retired · answered 2026-10-15: as designed (child: the pillar nav card Studio pillar nav: Access sits in the segmented control and the More overflow retires while it holds a single pillar (reverses the objectui#11794 More ruling; decision anchored in the epic) #12452). objectui#11794 ruled that the More trigger keeps its own name whichever overflow pillar is open;
StudioDesignSurface.moreKeepsName-11794.test.tsxpins it. The canvas retires More becauseOVERFLOW_PILLARSholds exactly one pillar today, so the menu is a one-item dropdown. - B. Advanced flattened · answered 2026-10-15: as designed, breakpoint 1000 px (child: the Data pillar card Data pillar: the object header moves into the content column, Records / Form / Validations / Hooks / Actions / API / Settings become one underline tab row, and the Records toolbar and grid lose their nested containers #12450). The same ruling keeps the Advanced trigger's name;
DataPillar.advancedKeepsName-11794.test.tsxpins it. The canvas shows seven flat tabs at the 1280 px design width; the card proposes that below roughly 1000 px the overflow returns with its name. - C. Access as five tabs instead of one scrolling page · answered 2026-10-15: as designed (child: the Access card Access pillar: the "Permission matrix" band retires into a permission-set header; Objects / System capabilities / Row-level security / Tab visibility / Delegated admin become tabs; the object matrix gets OWD chips, 18 px checkboxes and hover-only bulk actions #12456).
Children
Posted as a checklist comment on this card once the ten exist; each child carries a Parent: line and the shared cards list the pillar cards that depend on them.
Acceptance (epic)
- Every child merged, each PR carrying before/after screenshots of the same place from the local console (
pnpm --filter @object-ui/console dev, port 5180) in light and dark. - The four pillars share the skeleton of decision 1 and the header of decision 2; a screenshot per pillar at 1280 px shows the rail, item header, tab row and aside at the same x and y across all four.
- The follow-up pin bump filed in objectstack-ai/objectstack and linked here.
Body refreshed 2026-10-16T06:31Z by seat domain:ui#4 (session_01SJn1GEkrbbBQkhGC26wEDw), on the maintainer's word 「可以,关闭史诗 #12446」: the Closed line at the top and the Territory section's release note. The director seat's refresh at 2026-10-15T22:14Z (summon 42, session_01AKVFxqmRLqktJspVXwPE9A) added the Ruled line; the epic PM session's earlier refresh is named in the third line of this body.
Activity
objectstack-fleet commentedon Oct 15, 2026
Children (2026-10-15T08:04Z)
Dispatch order follows the dependency lines on the cards: the shell and the two shared pieces first, then the pillars.
Shell and shared pieces
Pillars
Held on a maintainer decision (see Open decisions above)
Follow-up outside this subtree: the objectstack console pin bump once the last child lands.
Epic PM session
session_cdb7a717-def7-4e71-9988-f089fbaa18ff; reading time 2026-10-15T08:04Z.28 remaining items
objectstack-fleet commentedon Oct 15, 2026
Test-pass cards · 2026-10-15T14:36Z
Sixteen cards came out of the 2026-10-15 Studio test pass (objectui main
d4bc81eab, HotCRM63db83e2, every surface walked in the maintainer's browser pane). They are queue cards for thedomain:uilane, not children reserved by this epic. Maintainer, in the epic PM session on 2026-10-15, verbatim:So: every card carries
pm:queue(neverpm:epic), the lane takes them in its own order, and the Studio ones stay bound here as sub-issues for the roll-up only. The grid card is not bound: its fix lives inpackages/plugin-gridand reaches every list (area:records).Defects (
bug): #12506 grid row height (not bound,area:records) · #12507 flow edge labels (area:workflow) · #12508/layers404 and/ai/models501 · #12509 header overlap below 640 px · #12510 unnamed controls (a11y) · #12511 object header actions.Experience (
enhancement): #12512 New package form · #12513 Studio home loop · #12514 empty states · #12515 Form Preview of the draft · #12516 field creation · #12517 Publish posture · #12519 navigation edit mode · #12522 page designer · #12524 draft chip placement · #12531 icon picker.Not covered by the pass, for a later one: the 1000 px fold, keyboard navigation, the zh locale, new report and dashboard entries, saving the permission matrix, the hook and action create forms. #12450, #12452 and #12454 landed (#12477, #12470, #12481) before the epic PM's acceptance reading; that reading follows on each card.
Epic PM session
session_cdb7a717-def7-4e71-9988-f089fbaa18ff.objectstack-fleet commentedon Oct 15, 2026
Ruling: screenshots do not enter
main· recorded by seatdomain:ui#4· 2026-10-15T22:02ZThe maintainer, in this seat's session (
session_01SJn1GEkrbbBQkhGC26wEDw), 2026-10-15, verbatim: 「截图不进 main,统一用证据分支」 ("screenshots do not enter main; use evidence branches throughout").What it means for this epic and its test-pass cards:
claude/issue-N-evidence, underdocs/design/studio-redesign/findings/N/. The PR body links each one as a commit-pinned raw URL. The feature branch carries no PNG.*.htmland*.pngpairs beside this folder'sREADME.md.What is already on
main: 61 screenshots (8.2 MB) underdocs/design/studio-redesign/after/.They move to an evidence branch and leave
mainin one cleanup PR, through the card this seat files next. Their history stays reachable at the merge commits that added them.Already following it: the cards this seat dispatched since 17:30 (objectui#12519, #12506, #12508 round 2, #12510, #12514, #12515, #12516 and #12522).
Generated by Claude Code
objectstack-fleet commentedon Oct 15, 2026
Ruling: batch #351 item 1 (this epic's Decision D) · letter C · maintainer 「C (推荐)」 2026-10-15T22:08Z
Director seat, summon #42,
session_01AKVFxqmRLqktJspVXwPE9A. This is the batch record for Decision D, presented in this seat's session on the delta 6191015861; the maintainer's answer takes the recommendation.The ruling of record is 6192878850 (seat
domain:ui#4, in its own session, the maintainer's 「C 维持现状 (Recommended)」 at 2026-10-15T13:10Z, recorded first;needs-user-decisionalready off this card). The letters agree; this comment amends nothing in it. One reading added where it is silent: card acceptance 1 of #12450 (the object title's edge equals the row-number edge) is read against the runtime grid and recorded as met or as a named deviation, in the same deviation comment. Decisions A, B and C stand as recorded at 6188626991.Workload of the letter: none beyond the deviation comment on #12450. State: unchanged in this act (
pm:epic; no six-state label); the body's first line gets aRuled:line naming 6192878850.objectstack-fleet commentedon Oct 16, 2026
Epic summary · every sub-issue closed · seat
domain:ui#4· 2026-10-16T02:01ZAll 26 sub-issues of this epic are closed: 23 completed, and 3 closed as duplicates of the skeleton.
Each card carries its ACCEPT, its landing record and a
Landedcomment with probes onmain. Seat post objectui#10243 keeps the itemised ledger.Rulings recorded on this epic:
6192878850).main(6203198157). It is carried out:docs/design/studio-redesign/after/leftmainthrough objectui#12579, and every card since keeps its shots on its ownclaude/issue-N-evidencebranch.Outside this epic, still open, each with its own owner:
Close-out: the protocol's next steps are to close this parent, remove
pm:epicand mark the territory section closed. They wait for the maintainer's word in this seat's chat, because the epic PM session and the maintainer own this body.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Epic close-out · seat
domain:ui#4· 2026-10-16T06:31ZThe maintainer, in this seat's chat, verbatim: 「可以,关闭史诗 #12446」.
The protocol's four close-out steps:
6206354798.pm:epicis removed.What stays outside the closed parent, unchanged:
domain:devx).Implemented-by: the children's cloud sessions, listed per card. Closed-by: seat
domain:ui#4,session_01SJn1GEkrbbBQkhGC26wEDw.Generated by Claude Code