Repository navigation
fix(workspace): keep a starred or pinned chat's title beside its glyph in the tab overflow menu (#3737) - #3742
Merged
Merged
Conversation
…h in the tab overflow menu (#3737) The OverflowTabs "N more" menu row was `flex justify-between`, and the pinned/starred glyphs were its first flex children. Free space was spread between the glyph and the label, so a shorter title drifted further right. The same rule floated the Draft mark to mid-row. The glyphs and the label now sit in one `[data-menu-lead]` group (`flex min-w-0 flex-1 items-center`), and `justify-between` is dropped. Trailing items (Draft, badge or dot) cluster at the right edge, and the #2794 v-if/v-else-if chain is unchanged. The inline row and the measuring mirror row are untouched. New mount spec overflowTabsMenuRow.mount.spec.js: 7 of 8 tests were red on the unfixed template; the scope guard is green both ways. Each mutation was restored from a scratch copy: (a) wrapper removed -> 7 red; (b) justify-between restored -> 5 red (starred/pinned/plain/closable/fixedWidth); (c) label moved out of the group -> 7 red; (d) DraftMark moved between badge and signal -> 2 red (trailing order, #2794 chain). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 14, 2026
Merged
trinity-ability
approved these changes
Oct 14, 2026
trinity-ability
left a comment
Contributor
There was a problem hiding this comment.
PR Validation Report — /validate-pr (Lane B, frontend only)
Tip: 3c843907b · Base: dev · Files: 2 (+194/−4) · Fixes #3737 (P2 · type-bug · theme-ui-ux)
| Category | Status | Notes |
|---|---|---|
| Commit message | ✅ | fix(workspace): … conventional, describes the change |
| Base branch / size | ✅ | dev; 2 files |
| Status auto-promotion | ✅ | Fixes #3737 (same repo) |
| Requirements / Architecture / Feature flows | ➖ | bug fix, layout-only; no behaviour or API change |
| Security (§4.1–4.10) | ✅ | no keys, emails or host paths, no mode or symlink change. The one IP-shaped hit (48.05.67.65) is SVG path data inside the existing star glyph |
| Build / config packaging | ➖ | no backend paths |
| Design system | ✅ | one literal class string changed (justify-between dropped), plus a new flex min-w-0 flex-1 items-center span. No colour classes; raw-colour, loading-gate and source-text ratchets pass |
| Scope | ✅ | only the menu-row button changed. Inline-row and mirror-row markup have no hunk, and a spec test checks they are unchanged |
| Structural review | ✅ | /review MERGEABLE (0 findings) and /cso --diff clean, both recorded in the PR body |
| Merge gate (Tier 1) | ✅ | every check on the tip is green, including regression diff, pytest (head), build, e2e, journey-smoke, schema-parity, verify-non-root and both Analyze runs. dev-last-green.sh resolves to the dev tip e4e739f7e, and no dev-ci red issue is open |
Execution coverage (§5.4)
| changed symbol / test | executed by | live consumer | verdict |
|---|---|---|---|
menu-row button markup ([data-menu-lead] group) |
overflowTabsMenuRow.mount.spec.js, 8 tests. It is a real jsdom mount with an overflow forced by stubs, and the trigger click opens the menu. It has no source-text reads |
OverflowTabs.vue dropdown, rendered wherever the component is used (Workspace tab strip) |
✅ |
Fix-PR mutation (run here, in an isolated worktree): with OverflowTabs.vue reverted to the parent commit, the new spec goes 7 of 8 red. The one test that stays green is the inline/mirror scope guard, which is correct, because those rows did not change. With the fix restored, the 4 overflowTabs* specs and the 3 ratchet specs give 57/57 passing.
Notes (non-blocking)
⚠️ The PR is still a draft by design: #3738's PR stacks on this branch. It merges first, on the operator's call.- jsdom has no layout, so the assertions check structure: the lead group holds the glyphs and the label, and the trailing items are direct children. With
justify-betweengone and the lead group set toflex-1, that structure produces the visual fix. The e2e run is green.
Recommendation
APPROVE. The change is minimal and inside its stated scope. The test mounts the component and goes red when the fix is reverted, the security scan is clean and Tier 1 is green.
vybe
marked this pull request as ready for review
October 14, 2026 21:36
18 tasks
vybe
pushed a commit
that referenced
this pull request
Oct 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #3737 — first of two Workspace composer/tab fixes in chain-3737 (epic #3471). Base is
dev. Draft until the chain is in: #3738's PR stacks on this branch and the two merge together in order on the operator's call.What
src/frontend/src/components/OverflowTabs.vue— the dropdown menu-row button only (+13/−4, one hunk):justify-betweendropped; the bookmark glyph, the star glyph and the label now sit in one leading group (<span data-menu-lead class="flex min-w-0 flex-1 items-center">), so a starred or pinned chat in the "N more" menu reads glyph → title at the left edge like every other row. The Draft mark, the count badge and the activity dot follow as direct children in their existing order, so they stay at the right edge. The inline tab row and the hidden mirror row have no hunk.src/frontend/tests/unit/overflowTabsMenuRow.mount.spec.js— new jsdom mount spec, 8 tests: overflow forced by width stubs, starred and pinned rows last in a 6+ list (cannot pass on an empty menu), the lead-group structure, the bug(workspace): attachments are dropped when a 1:1 chat is escalated into a room via @mention #2794 trailing chain order,fixedWidthtruncation +title, inline/mirror rows unchanged, the ent#841 × still a sibling.Rulings carried (orchestrator, on the operator's behalf — plan file)
justify-betweenrather than keep it: once the lead group isflex-1the class does nothing and would mislead.overflowTabs*.mount.spec.js, one feature per file.Review + security
/review(Fable, report-only): MERGEABLE — 0 critical, 0 informational; rider checks hold: menu row is the only hunk, #2794 chain order and direct-child placement intact,fixedWidthclamp insidemin-w-0, close × still a sibling withCLOSE_PAD, one literal class string changed with no colour, no raw colours, spec cannot pass on an empty menu. Mutation checks: fix reverted → 7/8 red;justify-betweenrestored → 5 red; DraftMark moved between the chain arms → 2 red./cso --diff: no new surface, label still text-interpolated, zero findings.Tests
overflowTabs*specs: 29 passed. 3 ratchet specs (loading gate, raw colour, source text): 28 passed. 11 other specs referencing the component: 344 passed.npm run test:unitisland and Playwright e2e — CI's (frontend-e2eis required sincesrc/frontendchanged).Before merge
dev(e4e739f) is clean; no open PR touchesOverflowTabs.vue. No migration.feature/3737-overflow-starred-row) retargeted todev.Handoffs
🤖 Generated with Claude Code