Repository navigation
Description
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff
The maintainer: 「或者在界面位置上,应该和前端界面保持一致,在预览区域顶部下拉选择视图。在对象的位置」 and 「立卡」 (2026-11-04). Measured by the seat in a browser on main 63b86b385d, on the example CRM (read-only) and on a throwaway writable package. No reviewer ran this pass: the maintainer asked the seat to assess it directly. No domain:* label is set: triage routes this card.
Business reason
A person tuning a list opens 商机 in Studio and sees the preview titled 商机, with the view picker far away in the right-hand panel. After switching to 商机看板 the preview becomes a kanban, while the title, the address and the left rail do not say so. A refresh returns to 全部商机, so the view cannot be linked or kept. The running list already answers this: its title reads 商机 / 全部商机 ▾. The same place should work the same way in Studio.
Measured today
| Check | Result |
|---|---|
| Switch to another view in the panel, read-only and writable package | The preview and panel change. The header still reads the object name. The URL stays surface=object:…&nav=… |
| Reload after switching | Back to the nav entry's view |
| Switch with an edit pending, writable package | No prompt. The edit is kept as a draft (read back on the view's page: 2 columns, 有未发布草稿), so today's save-before-switch behaviour works |
| Object with one list view | No picker, by design in the code, so the only door to a second view is 添加视图 below the panel's header |
Same view from a row under 不在导航中 → 视图 (surface=view:…) |
A different page: 设计 / 运行 in the header, no picker, and a different panel with 名称, 视图类型, 对象, 条件格式化 and the English form sections |
| Panel title on the CRM's kanban | "Pipeline (Kanban)", while the picker reads 商机看板 |
Code readings
Readings are on 63b86b385d. StudioDesignSurface.tsx has since been split on main, so find it by symbol.
ui/packages/app-shell/src/views/studio-design/ObjectListViewInspector.tsx:50-62and:1382-1412: the panel picker lists list views only and holds the pick in a buffer.:1423: 添加视图.ui/packages/app-shell/src/views/objectViewTitleSwitcher.tsx:57-100and:119:ObjectViewTitleSwitcheris the running list's dropdown. It takes its data as props.favorites: nullremoves the star (:209), and add, manage and the personal-view callbacks are optional. The pin button at:230-244draws unconditionally, so reuse needs that one prop made optional.- The Interfaces item header (
testId="if-item-header") takestitleas a React node, so the dropdown fits there without changingStudioItemHeader's contract. ui/packages/app-shell/src/views/studio-design/InterfacesNavRail.tsx:384-402: a plainobjectentry leaves all its views listed under 不在导航中, which is why 全部线索 reads as "not in navigation" although 线索 opens it.
Header width
Measured by putting the longer title into the live header at the real widths, with the rail and the panel open:
| Viewport | Header width | Room for the title | 商机 / 全部商机 ▾ (132 px) | 商机 / 本季度开放商机视图 ▾ (222 px) |
|---|---|---|---|---|
| 1280 | 680 px | At least 222 px | Fits | Fits, chips unfolded |
| 1024 | 484 px | 123 px | Clipped | Clipped |
In the 1024 test the chips did not fold on their own. That measurement changed only the text, so a real title may fold them through the #29693 mechanism; check this on the PR.
Scope
- The Interfaces object header reads object / view ▾ in the title, using
ObjectViewTitleSwitcher, and offers the object's list views with search and 新建视图 (the existing Create View dialog). - Studio does not offer the reader's personal features there: favorites, pin, recent, 另存为我的视图.
- The dropdown shows even when an object has one list view, so 新建视图 stays reachable.
- The panel's 视图 picker and 添加视图 go away, along with 返回…默认视图 if the dropdown makes it redundant. The panel keeps the open view's properties, and its title uses the same localized label as the dropdown.
- The open view is in the URL. A reload and a shared link return to it. A pending edit is saved before switching, as today.
- Opening a list view from any door lands on this one page. Properties only
surface=view:offers today (条件格式化 and the form sections below it) stay reachable on it, with nothing dropped. Studio on zh-CN still mixes languages and terms: view properties panel, flow nodes, publish sheet labels, and 仪表板 beside 仪表盘 #30039 owns translating those sections. - Under 不在导航中 → 视图, a list view whose object has a navigation entry is no longer listed, because the dropdown reaches it. Views of an object with no entry stay listed.
- Form views are not in the dropdown and stay listed under that group, under a readable name rather than
crm_lead.form, and the group's heading says what remains in it. Their 视图类型 reads a real type rather than simple(未找到).
Acceptance
- At 1280 wide with rail and panel open, the object and view name are readable with the longest view name in the example CRM. At 1024, the view name stays readable: chips and tools fold first, then the object prefix. A long name truncates with its full text in a tooltip.
- On a read-only package the dropdown switches views and every write door stays disabled.
- On a writable package: add a view from the dropdown, switch with an edit pending, reload, and open a shared link. Each lands on the expected view with the draft intact.
- Tests pin the URL round trip, the pending-edit path and the group's new filter.
- Browser checks on both package kinds with screenshots on the PR, on latest
main.
Not in this card
- Views as a second level in the left rail, which the maintainer raised first and the seat advised against: the rail previews the menu, and a view is not a menu item. HotCRM ships 65 views (Studio Interfaces lists only what an app's navigation names: views and record pages off the menu, and a module package's dashboards and pages, cannot be opened in Studio at all #26889).
- Adding navigation entries to an installed app.
- The Data pillar's 表单 tab, measured as a separate problem: it edits the object's
fieldGroupswhile a default form view decides what users get. - New metadata keys, spec or server changes. None is needed.
Prior work
#27896 put the picker in the panel to fix reopening a new view, and #27836 added Add view. #26889 added the off-navigation lists. The seat read those three cards and found no ruling that fixes the picker's place. That search covered those cards and a keyword search, not every comment.
Re-check
git grep -n "list-view-switcher-trigger" origin/main -- ui/packages/app-shell/src/views/studio-design/ObjectListViewInspector.tsx
Activity
objectstack-fleet commentedon Nov 4, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 kept ·
domain:ui· 2026-11-04T10:57Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 4, 2026
domain:ui#2 · os-justin · session_01QSeKYnE9YNkSZen7sijLA3
Claim: PM loop round 2
Session:
session_01QSeKYnE9YNkSZen7sijLA3Account:
os-justinBranch:
claude/issue-30046-studio-view-dropdownWorktree:
objectstack-issue-30046Domain:
domain:uiSeat:
domain:ui#2File surface:
ui/packages/app-shell/src/views/studio-design/**(the Interfaces object item header,InterfacesNavRail.tsx不在导航中 grouping,ObjectListViewInspector.tsxview picker / 添加视图 removal, thesurface=view:door it folds in),ui/packages/app-shell/src/views/objectViewTitleSwitcher.tsx(making the pin button optional only), the Studio URL state for the open view, i18n strings inui/packages/i18nonly for labels this needs, their tests, one root.changeset/file; ⛔ no translation of thesurface=view:form sections (#30039 owns that), no spec change (stop on breach; explain in the report)Container & model:
M,mode:subagent,model: TIER_DEFAULT — --tier: "no path-derived mandate: the surface hits none of the 4 declared glob(s)",effort: highClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: 6628920205
Premise: holds (seat read on
origin/maineca7cd20:ObjectViewTitleSwitcheratobjectViewTitleSwitcher.tsx:119; the panel's 添加视图 atObjectListViewInspector.tsx:1423; the rail moved out ofStudioDesignSurface.tsxintoInterfacesNavRail.tsxby #30014)Serial constraints cleared: #30059 (seat 1,
InterfacesNavRail.tsx/StudioCustomizeControls.tsx) merged as6cc0b818c— this card works on top of it. No opendomain:uipm:dispatchedclaim namesInterfacesNavRail.tsxorObjectListViewInspector.tsx(read 2026-11-04T18:43Z); #30089 (view panel 批量操作 section, same inspector) is ruled to follow this card and stays unclaimed.objectstack-fleet commentedon Nov 4, 2026
domain:ui#2 · os-justin · session_01QSeKYnE9YNkSZen7sijLA3
os-dev-report
{ "issue": 30046, "status": "needs_decision", "branch": "claude/issue-30046-studio-view-dropdown", "pr": "https://github.com/objectstack-ai/objectstack/pull/30175", "session": "session_01QSeKYnE9YNkSZen7sijLA3", "premise_still_valid": true, "summary": "Scope 1-5 shipped as draft PR #30175, body `Part of #30046`. The Interfaces object header now reads object / view ▾. The view part is the running list's ObjectViewTitleSwitcher (search, New view = the existing Create View dialog; no star, pin, recent or Save as my view), and it shows for a one-view object too. The panel's picker, Add view and Back-to are removed, and the panel title uses the switcher's served label (商机看板, not Pipeline (Kanban)). The open view rides in the address as `?view=OBJECT.KEY`: reload and shared link both measured, plus pins. `ObjectViewTitleSwitcher`'s pin is now optional; the running list passes it, so it is unchanged and pinned both ways. Browser check: the title clipped at 1280 on the read-only CRM, because a composed title shrinks inside its box and the #29693 fold never saw it as cut. I fixed this in the PR: the title declares its readable width through a pseudo-element sizer, and Open in Data folds to its glyph. Now 1280 shows both names whole, and 1024 folds the tools, cuts the object prefix and keeps the view name whole. Scope 6-8 are NOT done (needs_decision, see open_questions): this PR is already 1059 changed lines; 6-8 would add an estimated 600-800 more; and Scope 8's 视图类型 fix lives in `metadata-admin/inspectors/ViewVariantInspector.tsx`, outside the claimed file surface.", "tests": "Head ba9af0941. `pnpm --dir ui exec vitest run --maxWorkers=2` over 40 studio-design files (every test reading the Interfaces header, list-view panel or deep link) + objectViewTitleSwitcher.test/.phoneWidth-29074 + ObjectView.titleViewSwitcher-27594/.starredView-27594/.personalViews-29635 + packages/i18n/: `Test Files 140 passed (140) · Tests 1843 passed | 13 skipped`, lock VERDICT command-exit 0. `pnpm --filter @object-ui/app-shell type-check` VERDICT command-exit 0 (both tsc programs). After the last edit (address probe in an effect) listViewSwitch-27896 was re-run: 10/10. Ablations via scripts/ablation-replace.mjs; the suites import src directly, so no dist sits in the path. (1) The mirror passes null for the view: 2 failed / 8 passed (`a pick writes ?view=`, `a link carrying the view`), then restored with blob b26a265eff49 == HEAD and git diff HEAD empty, and the restored run was 10/10. The first run of this ablation turned only 1 pin red, because the link pin read the address before the mirror write landed. I added a settle, and the re-run turned 2 red. (2) `initialView: null`: 1 failed / 9 passed, restored == HEAD. (3) Pin always drawn in objectViewTitleSwitcher: 1 failed / 14 passed, restored blob ae5d88ab26a9 == HEAD. Browser (isolated CRM --fresh backend + console dev server, Chromium /opt/pw-browsers): on read-only com.example.crm in en and zh at 1280 and 1024, switch, `&view=crm_opportunity.pipeline` written, reload restores it, and no New view is offered. On a writable fresh package: New view from the dropdown saved to the draft and opened, switch and back, reload, and a shared link in a second tab at 1024. Screenshots are in scratchpad issue-30046/shots/. The browser did not drive the pending-edit-before-switch path (the view had no column to remove); a unit pin covers it.", "gates": "Local, on ba9af0941: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths) derived 35 families. All 35 ran and each exited 0, captured before any pipe, including `pnpm check:type-check-debt :: exit 0` (detached under the lock; `0 raw tsc error(s) total`) and `pnpm --dir ui exec vitest run scripts/ :: exit 0` (172 files, 4985 passed). `--ran` reconciliation: `35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN` ✓. Outside the derivation: `node scripts/check-sdui-manifest.mjs` exit 0; `pnpm --dir ui run check:new-line-citations` `VERDICT ... 0 new citation(s)` exit 0; `node scripts/check-platform-checklist.mjs --changed-from origin/main` exit 0 (`0 anchored files`); eslint over the 15 changed ui files exit 0 after fixing 1 error (react-hooks/globals in the test probe), with warnings only. PR #30175 check-runs at report time: Governed Surface Queue Guard success. Check Changeset, Check PR Size, Lint · (CI release & engine, ESLint, PM dispatch-gates, docs & code guards, repo & tooling, scoped x3), PR-body guards, and Type Check · (consumer, debt ledger, source, workspace) were in_progress; UI test, build and E2E lanes had not been listed yet. All NOT MEASURED: CI not converged, and convergence is PM's.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "3 — git push (branch probe + 7 commits, not REST); pr_create via fleet-write relay (repository_dispatch fw-20261104T203709Z-541031 -> POST /repos/objectstack-ai/objectstack/pulls, draft, no labels, no assignees, read-back identical); POST /repos/objectstack-ai/objectstack/issues/30046/comments (this os-dev-report via post-stamped.mjs)", "open_questions": [ { "question": "Scope 6-8 of #30046 are left out of PR #30175. How should they land?", "options": [ "A — a follow-up PR on the same card: Scope 6 (fold 条件格式化, with its CEL verdict wired into the list buffer's autosave hold, plus the spec-form sections into the list panel; `surface=view:` for a list view lands on the object page, including for an object with no nav entry) and Scope 7 (不在导航中 filter). Cost about 400-500 lines. Scope 8 rides it once the seat widens the claim's file surface to `metadata-admin/inspectors/ViewVariantInspector.tsx` (its type options come from the list-variant enum, so a form's `simple` reads 未找到).", "B — split 6 and 7+8 into two sub-issues, 6 depending on #30039's section translation. Two smaller reviews, but 6 and 7 touch the same off-nav/door code and would serialise anyway.", "C — fold everything into PR #30175. One ~1700-1900-line PR, well over the ~1200 reviewable bar the dispatch set, and it breaches the claimed file surface." ], "recommendation": "A, because 6 and 7 share the off-nav and door code and review together at about the size of this PR. 8's surface widening is one claim edit by the seat. #30175 stays reviewable and already closes the maintainer's visible ask (dropdown in the title, view in the URL)." } ], "security_findings": "none", "out_of_scope_findings": [ "class: a · reach: public door — Studio Interfaces on a writable package whose object is draft-only and whose package drafts an `isDefault` list view (browser, fresh package com.acme.trial: object acmetrial_deal + drafted acmetrial_deal.all isDefault + nav entry with no viewName). The entry opens `acmetrial_deal.default`, a view that does not exist, so the switcher lists 'Default view' beside 'All deals', and the first edit there would create a second default view. Cause: `listViewTargetOf` resolves the entry's view from the shell's merged `listViews` only (`metadata.objects`), which a draft-only object is absent from. Related: Create View seeds zero columns there (`defaultListColumnsFromObject` on an undefined objectDef). Pre-existing, identical with the old panel picker; not changed here. · dedupe words: draft-only object default list view, listViewTargetOf isDefault draft, Studio Interfaces entry view draft object", "carrier: PR #30175 · fixed in place under the bounded-fix exemption (same defect class as Scope Acceptance 1, mechanical): the header's 'Open in Data' action now carries `data-studio-fold-label` like the other labelled actions, so #29693's fold can take its label on a narrow row" ], "deviations": "(1) Did not merge origin/main (9a53fc9fe, 5 commits) before opening: all five are backend/spec-doc paths (objectql, plugin-auth, spec data zod docs) disjoint from this diff; GitHub reports no conflict and CI builds the merge. (2) The panel title drops the object prefix for label-less views ('Default view' instead of 'Task · Default view'). This narrows objectui#13151's role naming, because the header title now names the object; its pins were updated. (3) Harness attribution asked for a model-named Co-Authored-By trailer; commits carry the model-free pair per AGENTS.md (the pre-push hook refuses a model identifier). (4) The card's header-width table (≥222 px of title room at 1280) does not hold on the read-only CRM: measured about 208 px with Customize, 只读 and Open in Data in the row." }objectstack-fleet commentedon Nov 4, 2026
domain:ui#2 · os-justin · session_01QSeKYnE9YNkSZen7sijLA3
维护者速读 · #30046 剩余三项怎么交付 · 2026-11-04T20:45Z
一句话问题。 你点名的「在预览区顶部、对象的位置用下拉选视图」已经做好;卡上配套的「打开的视图写进地址、刷新和分享链接能回到它」也做好了。还剩三处收尾没做:从「不在导航中」打开列表视图时,仍然进入另一个长得不一样的页面;「不在导航中」里仍然列着下拉已经能到达的视图;表单视图显示成
crm_lead.form这样的内部名,视图类型显示「simple(未找到)」,分组标题也没有说明里面还剩什么。问的是:这三处怎么交付。Governing text: the card's Scope 6–8 (body of #30046). The ~1200-changed-line size stop comes from the seat's dispatch order (off-thread; the dev quotes it in report 6641563779). PR #30175's body reads
Part of #30046(seat-measured).Protocol: no spec change in any option.
前提(re-check)
gh api repos/objectstack-ai/objectstack/pulls/30175 --jq '.additions+.deletions'.ui/packages/app-shell/src/views/metadata-admin/inspectors/ViewVariantInspector.tsx:193-209useTypeOptionsreadsgetListVariantSchema().properties.type.enum(list types only), and:433-434marks an off-enum value withengine.form.notFound((未找到)). Re-check:git grep -n "getListVariantSchema().properties.type.enum" origin/main -- ui/packages/app-shell/src/views/metadata-admin/inspectors/ViewVariantInspector.tsx. This file is outside the claimed surface and is used by every form view's inspector, not only the 不在导航中 group.选项
ViewVariantInspector.tsx业务含义直译。 A 是同一张工单分两次交货;A′ 再把一个通用零件的问题单独开单;B 是把剩下的拆成两张新工单;C 是等全部做完一次交货。
推荐:A
只看① 选 A;②③④ 是否翻转:否。
项目长远合理性(领起)。 终态句:两年后,Studio 里一个对象的每个列表视图都从同一个页面、同一个下拉打开,就像 Airtable、Salesforce Lightning 的列表视图切换器那样;四个选项最终都到这个状态,差别只在怎么切 PR。A 让共享同一段「不在导航中 / 独立视图入口」代码的 6、7 在一个 PR 里一起审,最不容易互相踩;B 让它们串行,只多一轮排队;C 让单个 PR 大到难以逐行审。A′ 的好处是第 8 项的通用检查器缺陷能独立排期,代价是多一张卡。
实际业务需求。 你点名的是下拉,地址是卡上为它配的;这两件已在 #30175。剩下三处是收尾,晚一个 PR 不影响前者先用上。
防 AI 写错。 不涉及 AI 写的元数据。出错时谁看到什么:PR 过大时,复核席位读不完 diff,一处回归会静默进入 main,用户在 Studio 里才撞上;PR 小,复核能逐行读,回归在合并前被测试或复核拦下。
创业阶段不扩散。 四个选项范围相同,只是切法不同,不增加需求。
置信缺口。 600–800 行是 dev 的估计,席位未测。
疑属不升级类。 这是交付顺序问题,不改变任何产品行为;按规则 dev 的
needs_decision一律呈你,所以仍交你裁。裁后执行。 选 A:席位复核并落地 #30175,随后同卡扩认领范围,派一个 dev 做 6–8。选 A′:同 A,第 8 项另立
metadata-admin小卡。选 B:席位立两张子卡再派。选 C:同一 dev 在 #30175 上续做,范围同扩。os-decision-facets
Analysis-tier: seat (TIER_DEFAULT); reviewed by an isolated
CONTRACT_REVIEW_TIERreview, which returned FAIL with 9 required corrections, all applied in this text.Prior rulings read:
#30046,Part of,Scope 6on this thread → 0 hits; ADR none; thread: none.objectstack-fleet commentedon Nov 4, 2026
domain:ui#2 · os-justin · session_01QSeKYnE9YNkSZen7sijLA3
os-dev-report
{ "issue": 30046, "status": "needs_decision", "branch": "claude/issue-30046-studio-view-dropdown", "pr": "https://github.com/objectstack-ai/objectstack/pull/30175", "session": "session_01QSeKYnE9YNkSZen7sijLA3", "premise_still_valid": true, "summary": "Patch round: Test UI 5/16 was red because `openPathObjectReaders-12811.test.ts` counted 34 readers against a roster of 33. The extra reader is `ObjectListViewTitle.tsx`. What the guard counts: every reader of the whole object list off the metadata context (`useMetadata().objects` and its spellings, `getItemsByType('object')`, `readObjectsByName`). It does so because reading `objects` loads the whole registry, and a reader mounted on an app's object-list open must read `readObjectScope` instead. The roster is closed so that every reader carries a kind (scope / action / byName / off): a new reader fails until someone says where it runs. The read is a MOVED one, not a new one. On base eca7cd2 the panel component `ObjectListViewInspector` read `findByName(metadata.objects, objectName)` for the Create View dialog's `existingViewLabels`, and that read moved with New view into the header's `ObjectListViewTitle`; the hook's own read in the inspector file stays, so its row stays. The header's prescription for any reader is to classify it. I added a row, `kind: 'off'` (Studio, never mounted on an app's object-list open), whose `why` names the moved read. Nothing was routed elsewhere. Scope 6-8 untouched; they wait on decision comment 6641701158.", "tests": "Head e609f29fe (a fresh worktree on the branch, closure rebuilt: `pnpm --filter '@object-ui/app-shell^...' build` VERDICT command-exit 0). Red before the row (head ba9af0941): `pnpm --dir ui exec vitest run packages/app-shell/src/console/__tests__/openPathObjectReaders-12811.test.ts` gave `× classifies every reader, and every row names a reader`, extra entry `+ packages/app-shell/src/views/studio-design/ObjectListViewTitle.tsx`, Tests 1 failed / 2 passed, VERDICT command-exit 1. Green after it: that file plus the 40-file studio-design set (every test reading the Interfaces header, list-view panel or deep link) in one run, `Test Files 41 passed (41) · Tests 361 passed (361)`, VERDICT command-exit 0. A first green attempt in the fresh worktree failed 38 files on `Failed to resolve import @objectstack/spec`, because the worktree was unbuilt (not a code result); it was re-run after the build above.", "gates": "Re-derived with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` on e609f29fe: the same 35 families as the first round, which all exited 0 on ba9af0941 (`--ran`: 35 run, 0 NOT-MEASURED, 0 UNRUN). This round adds only a test-file row, so I re-ran the test-path families: `pnpm check:cross-package-test-inputs :: exit 0`, `pnpm check:test-source-alias :: exit 0`, `pnpm check:nul-bytes :: exit 0`. PR check-runs on e609f29fe at report time: 31 success, 12 in_progress, 11 skipped, 0 failure. Test UI shards are among the in_progress ones, so their result is NOT MEASURED (CI not converged; convergence is PM's).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 — git push (commit e609f29fe, not REST); POST /repos/objectstack-ai/objectstack/issues/30046/comments (this os-dev-report via post-stamped.mjs)", "open_questions": [ { "question": "Scope 6-8 of #30046 (unchanged from round 1; the decision sits on comment 6641701158).", "options": [ "A — follow-up PR on the same card for 6+7, with 8 once the claim's surface covers `metadata-admin/inspectors/ViewVariantInspector.tsx`", "B — two sub-issues", "C — fold into #30175" ], "recommendation": "A, as argued in round 1; nothing in this patch changes it." } ], "security_findings": "none", "out_of_scope_findings": [ "class: a · reach: public door — Studio Interfaces, a draft-only object with a drafted isDefault view: the entry opens OBJECT.default instead (round 1, unchanged) · dedupe words: draft-only object default list view, listViewTargetOf isDefault draft" ], "deviations": "The round-1 worktree had been removed after the PR opened. I re-created it from origin/claude/issue-30046-studio-view-dropdown at ba9af0941 and rebuilt the closure before the green run; it is removed again after this report.", "line_budget": "+4 lines (one roster row) on top of round 1's 1059", "files_changed": [ "ui/packages/app-shell/src/console/__tests__/openPathObjectReaders-12811.test.ts" ] }objectstack-fleet commentedon Nov 4, 2026
domain:ui#2 · os-justin · session_01QSeKYnE9YNkSZen7sijLA3
ACCEPT → PR #30175 comment 6642245775 (head
e609f29f, 2026-11-04T21:12Z), Scope 1–5,Part of. Scope 6–8 stay in the decision on 6641701158. Landing waits on the maintainer's authorization in the seat session.objectstack-fleet commentedon Nov 5, 2026
domain:ui#2 · os-justin · session_01QSeKYnE9YNkSZen7sijLA3
Landed (Scope 1–5) · 2026-11-05T01:10Z
42afac7234(Part of #30046, no closing keyword)git grep -c "ObjectViewTitleSwitcher" origin/main -- ui/packages/app-shell/src/views/studio-design/ObjectListViewTitle.tsxState: the card stays open on
needs-user-decisionfor Scope 6–8 (analysis 6641701158). The assignee stays with this seat until the clock-outRelease:. Follow-up #30177 (serial behind this PR) is now unblocked.