Skip to content

test(example-showcase): the related-heavy detail case pins the record page's tabbed tier - #27174

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-27114-showcase-detail-tabs
Oct 28, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-27114-showcase-detail-tabs

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #27114
Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:showcase 浏览器冒烟里 Contoso 详情页那条用例,开页前把视口定在 1200 px,让记录页留在「标签页」档。
  • 为什么改:feat(plugin-detail,app-shell): the default record page is one page at two widths — resident columns on a wide page, the tabs in a drawer #26758 按维护者裁决把默认记录页改成按容器宽度分档,Desktop Chrome 1280 视口减去侧栏落在两栏档,没有标签条,用例找不到 Details 标签,夜间 live 档因此变红。
  • 风险与回滚:只改一个 e2e 用例(+8 行,无产品代码);回滚即撤这一个 commit。
  • 先看:examples/app-showcase/e2e/detail-shapes.spec.ts 中 Contoso 用例开头新加的 setViewportSize 与注释。
  • 两分钟验证:cd examples/app-showcase && CI=1 OS_TEST_TIERS=nightly pnpm exec vitest run test/showcase-smoke.live.test.ts,预期 53/53 通过(需先 pnpm console:build)。
  • 需要你做的:无,席位落地。

What changes

examples/app-showcase/e2e/detail-shapes.spec.ts, the case "ungrouped + related-heavy: flat details and related-list tabs on Contoso": it now pins a 1200 x 800 viewport before opening the record. That keeps the synthesized record page in its tabbed tier. No assertion is removed, skipped, retried or moved to another tier.

Bisect. The last green nightly ran on b53322d5. The first red commit is 0d07de2f (#26758, "the default record page is one page at two widths — resident columns on a wide page, the tabs in a drawer"). Both legs ran under the nightly invocation, each on a full tree at that commit:

  • 1f1eda4d (0d07de2f^): 53/53 passed.
  • 0d07de2f: 52/53, the same case failing at the same assertion (getByRole('tab', { name: /Details/i }), L165).

Why the spec follows, not the product. #26758 implements the maintainer's ruling 1 on epic #26676, verbatim: 「抽屉和整页是同一张页在两个宽度。」 Its table rules it: a container of 1024 – 1279 px gets "Details · timeline; the related column folds into a rail opened from a Related (N) toggle", and only below 1024 px does it get "The tab strip, exactly as before". The red screenshot on origin/main shows exactly that tier: two columns, a Related 5 toggle, no tablist. Desktop Chrome's 1280 px viewport, less the console sidebar, gives the record view about 1024 px. #26758 handled the same thing in ui/e2e/live/detail-related-list.spec.ts and record-history-display.spec.ts with a 1200 px viewport ("each now pins a 1200 px viewport to stay in the tabbed tier they test"). This PR does the same for the showcase case, which that PR missed. ADR-0085's prominence rule (related lists as tabs) still holds in the tabbed tier, and that tier is the one this case asserts.

The viewport is pinned per case, not per file. The other three cases in the file pass at the default viewport, so their coverage stays as it was.

Tests

The showcase live tier ran under the nightly invocation (CI=1 OS_TEST_TIERS=nightly, vitest run test/showcase-smoke.live.test.ts, with the dependency closure and pnpm console:build built first):

Readings
  • origin/main 24351cfe (reproduction): 1 failed, 52 passed. The failure is detail-shapes.spec.ts:156 at getByRole('tab', { name: /Details/i }), failed on its retry too. Lock VERDICT command-exit 1.
  • 9bfc7e48 (fix on 24351cfe): 53 passed, Test Files 1 passed. VERDICT command-exit 0.
  • f81fbddd (fix merged with origin/main 3346da26, whose RecordDetailView.tsx change is why this ran again): 53 passed, Test Files 1 passed. VERDICT command-exit 0.
  • pnpm --filter @objectstack/example-showcase typecheck (its tsconfig includes e2e/**/*, and --listFiles counts the spec once): exit 0.

Acceptance notes

  • The private package @objectstack/example-showcase gets a test-only edit, so it carries skip-changeset.
  • No ablation: the diff adds no tested behaviour. It moves an e2e case onto the tier it asserts. The bisect legs above are the before/after proof.

Verification

Derived gates at f81fbdd

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 37 commands over the 1 changed path. All 37 exit 0, each exit captured before any pipe. pnpm check:dual-build-cjs-loads first answered PREREQUISITE NOT MET (exit 3: seven packages outside the showcase closure had no dist/). After building them it exits 0. --ran reports "37 derived famil(ies) accounted for — 37 run, 0 NOT-MEASURED (a DERIVED zero)". Every family CI runs beyond these is read from this PR's check-runs.

Session: session_01QSeKYobVx7yTf1SUMMbKnP, dispatched by session_01QSeKYmTYfaPbLQD4BJfomW (claim 6463869260).


Generated by Claude Code

… page's tabbed tier

The synthesized record page lays itself out by its container width since
0d07de2: at the Desktop Chrome viewport the record view lands in the
two-column tier, which has no tablist. Pin a 1200 px viewport for the
case that opens the tab strip, as that commit did for the ui/e2e specs.

Claude-Session: https://claude.ai/code/session_01QSeKYobVx7yTf1SUMMbKnP
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 28, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 — ACCEPT · domain:devx#2 · head f81fbddd6c · 2026-10-28T09:23Z

席位意见:合入。修掉 #27114 的第二个失败文件(showcase live):二分到 #26758(按裁决把记录页做成按宽度分档),属于裁决过的行为,不是回归;照 #26758 自己修 ui/e2e/live 的做法,只给这一个用例固定 1200×800 视口,断言一个没改。

Shape: draft → main, Part of #27114. Label skip-changeset (an e2e spec under examples/app-showcase), assignee os-justin. 1 file, examples/app-showcase/e2e/detail-shapes.spec.ts, +8/−0. Report: os-dev-report 6465200990.

Seat's own read:

Gates:

  • At head f81fbddd6c: 44 check-runs, 26 success, 18 skipped, 0 failure. check-expected-skips OK. Not governed.
  • The showcase live tier does not run on a PR, so its reading is the dev's: main red (52/53), fix green (53/53), and the merged head green again after origin/main brought a RecordDetailView.tsx change.

Open questions: all A.

  1. Pin per case. The other three cases pass at the default viewport.
  2. No new live column-tier case. feat(plugin-detail,app-shell): the default record page is one page at two widths — resident columns on a wide page, the tabs in a drawer #26758's unit pins hold the tiers.
  3. The repo's trailer rule wins.

Owed after landing: the next scheduled nightly (29 5 * * * UTC) is the first that runs both of #27114's files. Green on both closes the card.

Landing: non-governed. Ready + auto-merge now.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 28, 2026 09:24
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 28, 2026
Merged via the queue into main with commit 2f96d87 Oct 28, 2026
45 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-27114-showcase-detail-tabs branch October 28, 2026 09:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants