Skip to content

Polish top bar and animate contextual sidebar toggle - #360

Merged
wesbillman merged 15 commits into
mainfrom
cynthiac/topnav-styling
Sep 29, 2026
Merged

wesbillman merged 15 commits into
mainfrom
cynthiac/topnav-styling

Conversation

@cynfria

@cynfria cynfria commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Why

The top bar needs the approved compact style. Channels, Agents, and Settings also need a way to hide the shared sidebar without losing its place or its gap from the main panel.

What

  • Set the header to 48px, control containers to 28px, icons to 16px, and the Bestie image to 18px.
  • Add an animated sidebar toggle for Channels, Agents, and Settings. Keep the panel gap when open and turn off motion for people who request reduced motion.

How

Use a CSS width cap for the transition and keep sidebar contents mounted while collapsed. Keep the toggle in the shell and preserve the narrow Settings overlay.

Risk

This changes shared shell layout. Check narrow windows, other destinations, and the native animation before marking the PR ready.

Testing

Matching Chromium browser fixtures at a 1440×950 viewport, cropped to the top 400px. Before: PR base 1f71ee94. After: pushed head 116b3177. Both use synthetic data and an open sidebar. These screenshots show browser styling; native animation and hands-on visual sign-off remain pending.

Messages

Before After
Messages before top-bar changes Messages after top-bar changes

Settings

Before After
Settings before, without the desktop sidebar toggle Settings after, with the sidebar toggle retained

Bigger picture

Draft for review. Do not merge until the native motion is captured and Cynthia has tested the refreshed build.

Generated with Codex

Tree Trunks and others added 5 commits September 28, 2026 12:08
Co-authored-by: Peppermint Butler <29b529ff43be424db89f51bff58a38cf86942acbffff98a14ce50b38c2a57d8f@buzz.block.builderlab.xyz>
Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>
Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>
Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>
Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>
Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>
@cynfria
cynfria marked this pull request as ready for review September 28, 2026 22:45
@cynfria
cynfria requested review from a team, comp615 and wesbillman as code owners September 28, 2026 22:45
Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord’s automated source review via Wes’s account.

Reviewed head ccf572e196d2d139b9d2330a233e5194ab0ad8c5 against base 23929d764697d1747d0ba711ad47598d172cd07e (12 changed files). Mantis independently reviewed sidebar focus, visibility and responsive callers; findings were reconciled against this source.

Two changes requested:

  • P2 — Public commit metadata exposes internal deployment identifiers. The co-author/sign-off trailers in 900738ef, and sign-off trailers in 64f4ecde, 116b3177, 5db12ae3, 843ad719 and ccf572e1, contain an internal deployment hostname plus deployment-specific agent identifiers. I am deliberately not repeating them here. Arrange a public-safe attribution correction with the authors/maintainers while preserving truthful authorship and DCO certification; do not invent a replacement identity or substitute the requesting human’s sign-off. This is a public-material finding, not a claim that a credential was exposed.
  • P3 — Expanded sidebar clipping hides resize help. Detailed inline; preserve the existing hover/keyboard help without compromising collapse containment.

Optional follow-ups: clear obsolete narrow-Settings disclosure state when leaving the narrow breakpoint, and preserve sensible focus if that transition hides a focused sidebar; update docs/shell-design.md:32-44, which still describes a 56px header and always-visible desktop sidebar. The three added browser cases exercise actual sizing, responsive layout and animation/DOM retention—appropriate browser boundaries; document that case delta and deferred acceptance in the description.

Validation: source/test inspection only; no tests, builds, app launches or PR-code execution. All four description screenshots were inspected and show synthetic fixture content, but they are explicitly from earlier head 116b3177, not current native acceptance. One hosted snapshot of run 36495351628 showed measurements, security and DCO passing; JavaScript, Rust and all six browser shards were still running, and Windows was skipped. Native animation, narrow/enlarged-text geometry, focus transitions and human acceptance remain unverified. This is a non-blocking COMMENT review, not approval or merge authorization.

Comment thread src/shared/styles/globals.css Outdated
Tree Trunks added 2 commits September 28, 2026 16:28
Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>
Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord’s automated source review via Wes’s account.

Follow-up reviewed at head dc3c260c841b6ef3c07e212e044256419da5af88 against base 23929d764697d1747d0ba711ad47598d172cd07e, focused on the two commits since ccf572e1 and their supported callers.

Addressed in source: the expanded sidebar now releases its clip, with discrete containment during the width transition (globals.css:222–243). The existing browser case adds pointer/keyboard resize-help checks and seeks both width and clip transitions; no new cases were added by this follow-up. The shell documentation now describes the 48px header and contextual toggle. No new production-code defect was found in this bounded follow-up.

Still open — P2, public commit metadata: the internal deployment hostname and deployment-specific agent identifiers reported in the preceding review remain in the commit trailers, including the new 76d7dbc0 and dc3c260c commits. Please coordinate a public-safe attribution correction with the authors/maintainers, preserving truthful authorship and valid DCO certification; do not invent identities or substitute a human’s sign-off. I am not repeating those identifiers publicly. This is a publication-privacy finding, not evidence of leaked credentials.

Validation: source/test inspection only; no tests, builds, app launches or PR-code execution. The public description and all four attached images were inspected; they show synthetic fixtures at earlier head 116b3177, not acceptance of this fix. Error/retry focus ownership was traced separately from toggle/Escape success paths; this CSS/docs follow-up does not change those handlers. One hosted check snapshot for run 36498206825 showed measurements, security and DCO passing; JavaScript was queued, Rust and all six browser shards were running, Windows was skipped. Current-engine/native transition behavior, interruption/reversal, focus recovery and human visual acceptance remain unverified. This is a non-blocking COMMENT review, not approval or merge authorization.

Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord’s automated source follow-up via Wes’s account.

Reviewed head 1467634b8c28e950d05e2f10211b17ab59a723cf against base 23929d764697d1747d0ba711ad47598d172cd07e, focused on the single test-only commit since dc3c260c841b6ef3c07e212e044256419da5af88 and the earlier findings.

No new code finding in this bounded follow-up. tests/browser/global-search.spec.mjs:195–254 now installs the membership gate before the first navigation instead of navigating and reloading. The fixture already seeds saved community selection before navigation, so the gate still delays the conversation list while the real palette is open. Selection identity, arriving-row geometry, Enter navigation, and finally release remain checked. This follow-up adds/removes no test cases and changes no assertions, timeouts, retries, or production code. The prior expanded-sidebar resize-help repair remains present in source.

Still open — P2, public commit metadata: the internal deployment hostname and deployment-specific agent identifiers reported in the preceding review remain in the public commit trailers, including the new 1467634b commit. Coordinate a public-safe attribution correction with the authors/maintainers while preserving truthful authorship and valid DCO certification. Do not invent replacement identities or substitute the requesting human’s sign-off. I am deliberately not repeating those identifiers here; this is a publication-privacy finding, not evidence of exposed credentials.

Scope: the incremental diff and its fixture/search lifecycle, prior findings, the complete PR diff for publication material, all nine commit messages, the public description and all four attached screenshots. The screenshots show synthetic fixtures and explicitly document earlier head 116b3177, not current native acceptance. Error/retry focus paths were considered separately from successful selection/Escape paths; this test-only change does not alter their handlers or validate them in a browser. The isolated snapshot’s 1,645 Git blobs and SHA-256 manifest were verified unchanged; no dirty worktree inputs were used.

Validation is source-only: no tests, builds, installs, app launches or PR-code execution. One hosted CI snapshot showed browser measurements, security checks and DCO passing; JavaScript, Rust and all six browser shards were still running, and Windows native validation was skipped. No waiting or polling. Current-head functional counts, wall time, summed test time and slowest-test/file results were not available in that in-progress snapshot, so this review makes no timing improvement or flake-elimination claim. Both-engine execution of the affected full browser file, native animation/focus behavior and human acceptance remain unverified.

Non-blocking COMMENT only—not approval, Request Changes, or merge authorization.

Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord’s automated source follow-up (via Wes’s account)

Reviewed head 936e3e739f759ee353c4f223b00223568d4de5d7 against base 0c3a601bfee641d58bf3d8806730ffa398398464. This is a bounded review of the new merge resolutions and prior findings, not another audit of unchanged features.

Changes needed

  1. P2 — Synchronize the shared Settings navigation helper with responsive state. tests/browser/navigation.mjs:54–63 immediately samples Show navigation with isVisible() after callers resize the viewport. The shell’s label and drawer mode now follow the asynchronous media-query/React update (AppShell.tsx:56–77). In the current Chromium shard, plugin-import.spec.mjs:221–222 resizes to 320px; the retained trace shows that visibility check returning false, no drawer-opening click, then a ten-second timeout waiting for the hidden Appearance button. The failure screenshot shows the correctly collapsed drawer. This is a demonstrated test synchronization defect, not evidence that users cannot open Settings. The new waits in layout.spec.mjs:85–88 and sidenav-polish.spec.mjs:591–594 fix two callers but miss this shared helper. Wait for the applicable responsive toggle/sidebar state in the shared helper before deciding whether to open it; keep the assertions and timeouts, then rerun the affected full browser files in both engines.

  2. Still open, P2 — Public commit metadata disclosure. The internal deployment hostname and deployment-specific agent identifiers identified in the previous review remain in author/committer and attribution trailers, including the new merge commit 936e3e73. Coordinate a public-safe correction with the authors/maintainers while preserving truthful attribution and valid DCO certification. Do not invent replacement identities or substitute the requesting human’s sign-off. I am not repeating those identifiers here; this is a publication-privacy issue, not evidence of exposed credentials.

Source assessment

  • The merge preserves the all-page narrow drawer, navigation-attempt close/focus handoff, Escape return, independent desktop collapsed state, Settings’ 220px minimum/gap, and the earlier expanded resize-help repair. No new production-code defect found in this scope. Error/retry transitions were assessed separately through App.tsx, app/navigation.ts and the navigation controller; this is not rendered focus acceptance.
  • The merge adds/removes no browser cases; its additional responsive assertions belong in the existing real-layout journeys. Previously reviewed geometry/motion cases remain. The prior seven non-merge feature patches are unchanged; inherited main changes were separated with the merge-resolution diff.
  • Confirmed the repository is public. Inspected the complete feature diff, all ten PR commits, description and all four attached images. The images show fixture labels and explicitly cover earlier head 116b3177, not this head or native acceptance. No additional disclosure identified in those displayed images/description or added source. All ten commits contain DCO trailers.

Validation limits

Source-only: 1,682 extracted blobs verified against the pinned Git tree; unchanged SHA-256 manifest, no dirty checkout inputs; git diff --check passed. No PR code, tests, builds, installs or apps executed locally.

One hosted CI snapshot for run 36507614544 showed JavaScript, Rust/tool integration, measurements, security checks and DCO passing; Chromium shard 3 failed, two WebKit shards were still running, and Windows was skipped. The failed shard’s checkout was merge 9800bd0c1197318a5a9def3ecc2093cc0435f6b5 of these exact head/base pins. Its artifact reports 142 passed/1 failed, 526.05s runner wall time and 997.39s summed test time; slowest test 27.62s (thread-unread), slowest file 148.57s (message-navigation). These are one shard’s measurements, not a before/after performance claim. Logs, screenshot and trace were inspected read-only; no CI polling. Both-engine completion, native motion/focus and Cynthia’s hands-on acceptance remain unverified.

Non-blocking COMMENT only—not approval, Request Changes or merge authorization.

Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord’s automated source follow-up (via Wes’s account)

Reviewed head e806c0d484d2c3beece0c25cbf0a5897694915c3 against base 0c3a601bfee641d58bf3d8806730ffa398398464. Bounded follow-up to the prior review: one new commit, two test files, no production-code changes.

Change still needed

P2 — Public commit metadata disclosure remains open. All eleven current PR commits retain the previously reported internal deployment hostname and deployment-specific agent identifiers in author/committer metadata and attribution trailers. The new commit e806c0d4 extends that exposure through its author, committer and Signed-off-by fields. Coordinate a public-safe correction with the authors/maintainers, preserving truthful attribution and valid DCO certification; do not invent identities or substitute the requesting human’s sign-off. All eleven commits have DCO trailers, but that does not resolve this publication-privacy issue. I am deliberately not repeating the identifiers; this is not evidence of exposed credentials.

Prior fix and regression assessment

  • Responsive Settings race addressed in source: tests/browser/navigation.mjs:54–66 now retries the toggle’s accessible name against the actual 650px shell breakpoint before sampling whether to open the drawer. This synchronizes the asynchronous media-query/React state that caused the previously reported hidden Appearance-button timeout. Checked the shared helper’s callers in appearance, notification settings, plugin import, layout and Todos journeys. Runtime confirmation in both engines remains outstanding.
  • Agent polling assertions retain their ordering: tests/browser/agent-control.spec.mjs:308–340,386–449 installs the clock before fixture loading and pauses it before injecting read/action failures. The existing failed-Stop detail, retained state/draft, disabled actions and explicit-write-count assertions remain; advancing 5,000ms then observes the periodic refresh error before the second explicit Stop recovers. This matches control-react.ts:14–27 and control.ts:329–370,385–457: polling reads status, not replaying commands. No new actionable source defect found in these fixes.
  • Incremental browser-case delta: 0 added / 0 removed. No timeout/retry relaxation or removed assertions. The existing browser integration cases remain; this is not proof that all flakes are eliminated.
  • Separately traced navigation failure/retry and focus ownership through AppShell.tsx, App.tsx, app/navigation.ts and the navigation controller, alongside the agent error/recovery path. No fix-introduced focus change found; this is not rendered focus acceptance.

Public surface and validation limits

Confirmed the repository is public. Inspected the complete feature diff, all eleven commit metadata/messages, description and all four attached images. No additional disclosure identified in that source/description/image scope. The images show synthetic fixtures at earlier head 116b3177, not this head or native acceptance.

Source-only: 1,659 extracted files verified against the pinned Git tree and rechecked unchanged; no dirty checkout inputs. No PR code, tests, builds, installs or apps executed.

The single hosted CI snapshot for run 36519765206 showed measurements, Rust/tool integration, security checks and DCO successful; JavaScript and all twelve browser shards were still running, and Windows native validation was skipped. Completed browser counts, wall time, summed test time and slowest-file evidence were unavailable in that snapshot. No polling, performance-improvement or both-engine-pass claim. Native motion/focus and Cynthia’s hands-on acceptance remain unverified.

Non-blocking COMMENT only—not approval, Request Changes or merge authorization.

Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord’s automated source follow-up (via Wes’s account)

Reviewed head 6c71f316476fa6d79d6e59c26a5b6efd09e76305 against base a94f88de8b3c69de0f0ced790f7468d16e1cc38a. This is a bounded follow-up to the previous review, checking the retained finding and merge interactions rather than reopening settled design decisions.

Change still needed

P2 — Public commit metadata disclosure remains open. All twelve current PR commits include the previously reported internal deployment hostname in author/committer metadata and attribution trailers. The new merge commit 6c71f316 repeats it, including in its Signed-off-by trailer. Coordinate a public-safe correction with the authors/maintainers, preserving truthful authorship and valid DCO certification. Do not invent replacement identities or substitute the requesting human’s sign-off. All twelve commits have DCO trailers, and the hosted DCO check passed; neither resolves this publication-privacy issue. I am deliberately not repeating the internal identifier. This finding is not evidence of exposed credentials.

Merge and regression assessment

  • No new actionable source defect found in the merge resolution. tests/browser/profile-avatar-gap.spec.mjs:62–67 adapts the upstream paint samples from a 40px to a 28px control. The 4px screenshot margin, cutout sample, and left/top/right focus-ring samples remain consistent with the control, avatar mask and shared 2px outline/offset. Confirmed-presence setup and keyboard paint assertions from the base remain intact. Actual paint still needs browser execution.
  • The prior responsive Settings synchronization remains in tests/browser/navigation.mjs:54–66, matching the shell’s 650px breakpoint. The agent-control clock/error-ordering fix remains intact; the merge incorporates the upstream import-button label rather than changing that recovery contract.
  • Compared both merge parents: the presence behavior and other upstream test changes are inherited, not additional feature machinery. The feature still adds three browser cases for real header geometry, responsive navigation and sidebar animation/mounted-state/reduced-motion behavior. The upstream cosmetic-test subtraction is not a request to restore those matrices.
  • Separately traced navigation failure/retry and focus ownership through AppShell.tsx, App.tsx, app/navigation.ts and the navigation controller. The failure UI retains Retry/Open Settings; drawer closure and focus handling are unchanged by this merge. No merge-introduced focus defect established. This is source analysis, not rendered or native focus acceptance.

Public surface and validation limits

Confirmed public repository visibility; inspected the complete feature diff, all twelve commit metadata/messages, description and all four attached images. No additional disclosure identified in that scope. The screenshots show synthetic fixtures at earlier head 116b3177, not this head or native acceptance.

Source-only: 79 extracted source/reference files verified by Git blob and SHA-256 hashes, then rechecked unchanged; no dirty checkout inputs. No PR code, tests, builds, installs or apps executed.

One hosted CI snapshot for run 36602915743 showed measurements, Rust/tool integration, security checks and DCO successful; JavaScript and all twelve journey shards were still running, with Windows skipped. The completed measurement artifact reports 9/9 passed, 173.978s wall time, 162.500s summed test time; slowest test was Chromium cursor paging (71.774s), slowest file scroll.spec.mjs (127.919s summed). Its synthetic merge 4f112f22 has the same source tree as the reviewed head. This does not establish changed-journey success or a before/after cost improvement; the three documented local-only WebKit measurements are outside that CI selection. No polling performed. Native motion and Cynthia’s hands-on acceptance remain unverified.

Non-blocking COMMENT only—not approval, Request Changes or merge authorization.

Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord’s automated source follow-up (via Wes’s account)

Reviewed head 92884c713c89b893c5d63c403a604917acd6785b against base a94f88de8b3c69de0f0ced790f7468d16e1cc38a. Bounded follow-up to the previous review: the only code delta since that review is nine added lines in tests/browser/channel-activity-corners.spec.mjs.

Change still needed

P2 — Public commit metadata disclosure remains open. All thirteen current PR commits contain the previously reported internal deployment-domain identity in author/committer metadata and attribution trailers. The new commit 92884c713 repeats it, including in Signed-off-by. Coordinate an author/maintainer-approved public-safe metadata correction, preserving truthful authorship and valid DCO certification; do not simply delete required trailers or substitute the requesting human’s identity. All thirteen commits have sign-offs and the current-head DCO check passed, but that does not resolve this privacy finding. I am deliberately not repeating the internal identifier; this is not evidence of exposed credentials.

Follow-up assessment

No new actionable source defect found in this test fix. At tests/browser/channel-activity-corners.spec.mjs:54–62, the retrying accessible-name assertion waits for the shell’s React breakpoint state, matching AppShell.tsx:56–77 and its 650px CSS breakpoint. The conditional click reads the corresponding aria-expanded state and opens navigation before hovering Alpha. This preserves the popup’s row counts, radius tolerance, overflow/scroll, keyboard activation and dismissal assertions; it adds no test cases, sleeps, retries or relaxed assertions. Real popup geometry still justifies browser coverage, with the existing small fixture histories retained.

The prior shell/Settings/avatar/agent-test fixes are unchanged. Separately checked navigation failure/retry focus ownership: the retained target, Retry/Open Settings controls and drawer closure on navigation attempts are unchanged; this test-only revision introduces no new focus handling. That is source analysis, not observed browser/native behavior.

Publication surface and validation limits

Confirmed public repository visibility; inspected the description, all four attached screenshots and all thirteen commit metadata/messages. No additional disclosure identified in that scope or the inspected source diff. The synthetic screenshots document old head 116b3177, not this revision or native acceptance.

Source-only: 35 source/reference files verified against pinned Git blobs, plus three vision documents at block/buzz@b9d22a273f2225917f13b13a9fde305629126502; SHA-256 manifests rechecked unchanged. No dirty checkout inputs, PR code execution, tests, builds, installs or app launches.

One current-head check snapshot showed Semgrep OSS, zizmor and DCO successful only. It does not establish full CI or affected Chromium/WebKit journey success. Current-head test counts, wall time, summed execution time and slowest-test/file metrics were unavailable in that snapshot; no cost-improvement claim or old-head test result is carried forward. Native motion capture and Cynthia’s hands-on test of the refreshed build remain unverified, as required by the PR’s existing acceptance criteria.

Non-blocking COMMENT only—not approval, Request Changes or merge authorization.

Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord automated source follow-up (via Wes’s account)

Reviewed head d4fd57387d9f89f1111adfa3aeb7bc83106e3601 against base 32982724223d8090441415ed89ddf7cb7a8d286e. This is a bounded follow-up to the previous review, not a reopening of the accepted compact-header design.

Change still needed

P2 — Previously reported public commit-metadata disclosure remains open. All fourteen PR commits still contain the internal deployment-domain identity in author/committer metadata and attribution trailers; the new merge d4fd5738 repeats it. Coordinate an author/maintainer-approved public-safe correction while preserving truthful authorship and valid DCO certification. Do not substitute the requesting human’s identity or simply remove required trailers. The current DCO check passes, but that does not settle the publication concern. I am not repeating the identifier here; this is not evidence of exposed credentials.

Source assessment

No new actionable code defect found in the merge/test follow-up. Of fourteen changed files since 92884c71, thirteen now match the pinned base byte-for-byte. The remaining branch-specific integration is tests/browser/channel-activity-corners.spec.mjs: it keeps the upstream bounded width discovery and adds the responsive-state barrier before the geometry probe and each width-matrix entry (lines 30–53, 79–81).

The retrying accessible-name assertion observes the same React breakpoint state that controls data-sidebar-collapsible, inert and visibility in AppShell.tsx:56–77,179–188; it agrees with the 650px CSS drawer boundary. The probe then tests actual layout, rather than racing CSS against the old React state. Popup row counts, corner tolerance, scroll overflow, keyboard activation and dismissal remain asserted. No cases were added or removed by this follow-up; the small fixture history remains. Real hover/overflow geometry warrants browser coverage. The production feature files and prior sidebar-help, Settings-helper, avatar and agent-refresh fixes remain unchanged from the last reviewed head.

I separately traced unavailable-destination and retry focus ownership through App.tsx:165–183, navigation.ts:270–285 and AppShell.tsx:78–84, alongside success/Escape and search dismissal. This revision introduces no focus-handling change; runtime focus and native animation are not established by that source trace.

Public material and validation

Confirmed public repository visibility and inspected the description, all four attached images, all seventeen changed paths and all fourteen commit metadata/messages. No additional disclosure found in those inspected surfaces. The images contain synthetic fixture content and document older head 116b3177, not this revision or native acceptance.

Source-only: 1,714 archived files verified against pinned Git blobs and rechecked unchanged; no dirty checkout inputs, PR execution, local tests, builds, installs or app launches. Applicable repository instructions, shell/design-system/plugin ownership docs and the relevant product vision documents were read.

One hosted-check snapshot for run 36608774455 showed Rust/tool integration, measurements, Chromium shard 3/6, DCO and security checks successful; JavaScript and the other eleven browser shards were still running; Windows was skipped. The hosted synthetic merge b72f035c has exactly the reviewed head’s tree. Completed-job artifacts report:

Hosted scope Cases Test-command wall time Summed test execution Slowest test / file
Measurements 9 passed 131.401s 124.412s Cursor paging 60.439s / scroll.spec.mjs 100.500s
Chromium shard 3/6 75 passed 195.090s 331.296s Saved-top gesture 14.775s / workflows journey 79.562s

The Chromium shard includes both channel-activity-corner cases (about 9.4s and 9.2s). These wall times exclude preceding checkout/install/native-fixture setup; no before/after speed improvement or complete-CI claim is made. No polling performed. WebKit completion, native motion capture and Cynthia’s refreshed-build acceptance remain unverified.

Non-blocking COMMENT only—not approval, Request Changes or merge authorization.

Signed-off-by: Tree Trunks <6ba22921d9dc2ad0aa6ecdf63787ddd24726e266d866da31af69f2e4e146ace5@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Star Lord automated source follow-up (via Wes’s account)

Reviewed head 3a42a8b7e6fcff9f9ebcbb829f15257fea8e514b against base 9b680b6dadbe8a72b664d804a7137ae7f71bd009, following the previous review.

No new actionable source defect found. The accepted compact-header design is not being reopened. The earlier attribution-only P2 is withdrawn in light of the maintainer’s clarification that legitimate agent sign-offs are permitted; no attribution rewrite is requested on that basis. Preserve truthful authorship and required DCO trailers.

Source assessment

Of 169 paths changed since the last reviewed head, 165 now match the pinned base byte-for-byte. The four overlapping paths preserve this branch’s existing changes while incorporating upstream updates:

  • src/app/navigation.test.tsx retains the desktop matchMedia fixture around the incoming scoped-membership/retry cases.
  • tests/browser/channel-activity-corners.spec.mjs:22–68 scopes the Alpha locator to the mounted sidebar, including while hidden. It retains the responsive-state barrier before geometry probes and the actual popup row, corner, overflow, keyboard and dismissal assertions.
  • tests/browser/agent-control.spec.mjs:199–215 distinguishes managed cards with actions from read-only profiles, while preserving the existing controlled-polling regression.
  • docs/shell-design.md incorporates background-read guidance without changing the compact-header/sidebar contract.

No new browser cases were added or removed by this merge follow-up. Real hover/overflow geometry still justifies the existing browser cases; the small history fixture remains. The production feature files are unchanged from the last reviewed head.

Separately traced unavailable/retry focus paths through App.tsx:165–186, navigation.ts:289–307 and AppShell.tsx:78–84, plus search/menu dismissal and successful navigation. This merge adds no sidebar focus owner; source tracing does not establish native focus or animation acceptance.

Public material and validation

Inspected the public PR description, all four attached images, all 17 PR-diff paths and all 15 commit messages/attribution records. No actionable public-material disclosure found in these surfaces. Images show synthetic fixtures at older head 116b3177, not current-head or native acceptance.

Source-only: 1,753 extracted files verified against pinned Git blobs and rechecked unchanged; no dirty checkout inputs, PR execution, local tests, builds, installs or app launches.

One hosted-check snapshot for run 36630989114 showed JavaScript, Rust/tool integration, measurements, all twelve browser shards, DCO and security checks successful; CI required was still queued and Windows was skipped. The recorded browser merge 793a39cc has exactly the reviewed head’s tree. Selected hosted artifacts report:

Scope Passed Command wall time Summed test time Slowest test / file
Vitest 5,387 363.811s 408.176s Durable read-state growth 7.914s / AgentsPage 19.195s*
Measurements 9 187.551s 175.201s Cursor paging 73.680s / scroll 135.605s
Chromium shard 3/6 79 206.351s 356.496s Saved-top gesture 15.329s / workflows 79.507s
WebKit shard 3/6 79 304.336s 510.061s Saved-top gesture 19.126s / workflows 121.185s

*Vitest file duration is elapsed per file; browser file durations are summed test execution. Command timings exclude preceding job setup. Both corner cases passed in each engine. These are hosted fixture results, not local execution, a before/after speed claim or native acceptance; no polling performed.

Native motion capture and Cynthia’s hands-on test of the refreshed build remain unverified, as the PR description requires. COMMENT only—not approval or merge authorization.

@wesbillman
wesbillman merged commit 32a33ee into main Sep 29, 2026
20 checks passed
@wesbillman
wesbillman deleted the cynthiac/topnav-styling branch September 29, 2026 22:02
johnmatthewtennant pushed a commit that referenced this pull request Sep 29, 2026
* origin/main:
  Polish top bar and animate contextual sidebar toggle (#360)
  fix(profiles): preserve nonlocal agent identity in profile fallback (#327)
  test(agents): pause the status poll around the failed-Stop checks (#431)
  fix(sidebar): paint channel rows with the scroller contents (#428)

Signed-off-by: Sol <49aa1f65411fd096d2e2ec144f1e7aa36fdc76d1b907cfdf7be000c66f9d3b8e@buzz.block.builderlab.xyz>
TheSentinel454 pushed a commit that referenced this pull request Sep 29, 2026
* origin/main: (58 commits)
  flake fix: keep restored reading anchor out of bottom follow (WebKit scroll measurement) (#407)
  Replace fixed browser-test waits with conditions, gates and the clock (#373)
  feat(updates): show installed version in Software Updates settings (#430)
  fix(desktop): allow deep-link delivery to the main webview (#432)
  feat(shell): open your profile from the account menu avatar (#390)
  Polish top bar and animate contextual sidebar toggle (#360)
  fix(profiles): preserve nonlocal agent identity in profile fallback (#327)
  test(agents): pause the status poll around the failed-Stop checks (#431)
  fix(sidebar): paint channel rows with the scroller contents (#428)
  feat(channels): archive and delete channels from settings (#385)
  feat(updates): add in-app auto-updates with restart toast (#312)
  fix(ui): keep background loading from shifting populated views (#418)
  Improve member and agent identity previews (#412)
  Fix initial emoji autocomplete selection (#419)
  Add community membership settings (#348)
  Keep nested replies compact and place actions above message text (#367)
  Import an exact inventory identity from its selected source with retry (#288)
  ci: add gated macOS preview updater feed promotion (#414)
  Set up incomplete inventory identities through a working Use here dialog (#287)
  Show saved local and relay inventory while retaining existing import controls (#286)
  ...
TheSentinel454 pushed a commit that referenced this pull request Sep 29, 2026
* origin/main: (58 commits)
  flake fix: keep restored reading anchor out of bottom follow (WebKit scroll measurement) (#407)
  Replace fixed browser-test waits with conditions, gates and the clock (#373)
  feat(updates): show installed version in Software Updates settings (#430)
  fix(desktop): allow deep-link delivery to the main webview (#432)
  feat(shell): open your profile from the account menu avatar (#390)
  Polish top bar and animate contextual sidebar toggle (#360)
  fix(profiles): preserve nonlocal agent identity in profile fallback (#327)
  test(agents): pause the status poll around the failed-Stop checks (#431)
  fix(sidebar): paint channel rows with the scroller contents (#428)
  feat(channels): archive and delete channels from settings (#385)
  feat(updates): add in-app auto-updates with restart toast (#312)
  fix(ui): keep background loading from shifting populated views (#418)
  Improve member and agent identity previews (#412)
  Fix initial emoji autocomplete selection (#419)
  Add community membership settings (#348)
  Keep nested replies compact and place actions above message text (#367)
  Import an exact inventory identity from its selected source with retry (#288)
  ci: add gated macOS preview updater feed promotion (#414)
  Set up incomplete inventory identities through a working Use here dialog (#287)
  Show saved local and relay inventory while retaining existing import controls (#286)
  ...

Signed-off-by: Elrond <28d6302a099e5225b02c4155ac4236e4912603df2ab08dbfc2f4fef08ce598c8@buzz.block.builderlab.xyz>
@kalvinnchau kalvinnchau mentioned this pull request Sep 29, 2026
2 of 3 tasks
matt2e added a commit that referenced this pull request Sep 30, 2026
…Show navigation guard

The shell toggle's accessible name is "Show/Hide navigation" at 650 px
and below and "Show/Hide Channel sidebar" above. Since #360 it comes
from React state that a matchMedia change listener sets
(AppShell.tsx:58-79), so it changes in a rendering update after
page.setViewportSize() has resolved. A non-waiting isVisible() guard on
"Show navigation" that runs before that render reads the previous
width's label. Wide to narrow, it sees a Channel-sidebar label, skips
the click, and the next sidebar action fails against a closed drawer.
Narrow to wide, it sees the stale "Show navigation" and the click it
issues either toggles drawer state the wide layout ignores or waits on
a button the render is about to relabel. Chromium answers
setViewportSize before the change event, which is how
settings.spec.mjs:401 failed there before #417 replaced that guard with
an auto-waiting click. A guard of the same shape remained at
settings.spec.mjs:333, after the resize to 1280 at :320, and the wait
for the label existed as four inline copies.

navigation.mjs: settleShellToggle(page) asserts the toggle's accessible
name against the pattern for the current viewport width. It is the body
selectSettingsSection carried, which now calls it.

channel-activity-corners.spec.mjs: the inline settleNavigation closure
is removed; its two call sites, after each setViewportSize in the
breakpoint search and in the geometry matrix, call settleShellToggle.

sidenav-polish.spec.mjs: selectChannel's copy checked only the narrow
label and only at 650 px or below. It becomes an unconditional
settleShellToggle: the test runs on the Messages page, where the toggle
renders at every width, so at 1440 and 900 the helper also asserts the
Channel-sidebar label.

layout.spec.mjs: shellFits keeps its `width <= 650` condition and calls
settleShellToggle inside it. shellFits also runs on the Projects page at
1280, where AppShell renders no toggle (collapsibleSidebar covers only
channels, agents and settings), so the wide branch cannot apply there.
The hunk is at lines 84-88; 5933307's hunks in this file start at line
395 and the pointer-events waits at 76-78 and 403-408 are untouched.

settings.spec.mjs: settleShellToggle precedes the guard at :333. After
the "Show navigation" click at :400 the toggle is asserted to read
"Hide navigation", so a mis-toggle fails at the toggle instead of at the
sidebar visibility check below it. The direct clicks at :452 and :462
have the same shape and are left as they are.

todos.spec.mjs, appearance.spec.mjs: settleShellToggle precedes the
guards in messages() and expectMode(). Both run well after their
resizes, so the wait is cover rather than a reproduced failure.

No assertion, threshold or timeout is weakened and no product code
changes. The two width-guarded copies gain the wide-width assertion
where the page has a toggle; every other site keeps its exact checks.

Verified: biome check on the seven files; settings, todos, appearance,
sidenav-polish, channel-activity-corners and layout on Chromium with
--repeat-each 5: 175 passed, 0 failed, in 3.9 min with no Vite port
collision; once on WebKit: 35 passed, 0 failed. Cherry-picked alone onto
a detached worktree at origin/main (5d2b08e) without conflict.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
loganj pushed a commit that referenced this pull request Sep 30, 2026
…Show navigation guard

The shell toggle's accessible name is "Show/Hide navigation" at 650 px
and below and "Show/Hide Channel sidebar" above. Since #360 it comes
from React state that a matchMedia change listener sets
(AppShell.tsx:58-79), so it changes in a rendering update after
page.setViewportSize() has resolved. A non-waiting isVisible() guard on
"Show navigation" that runs before that render reads the previous
width's label. Wide to narrow, it sees a Channel-sidebar label, skips
the click, and the next sidebar action fails against a closed drawer.
Narrow to wide, it sees the stale "Show navigation" and the click it
issues either toggles drawer state the wide layout ignores or waits on
a button the render is about to relabel. Chromium answers
setViewportSize before the change event, which is how
settings.spec.mjs:401 failed there before #417 replaced that guard with
an auto-waiting click. A guard of the same shape remained at
settings.spec.mjs:333, after the resize to 1280 at :320, and the wait
for the label existed as four inline copies.

navigation.mjs: settleShellToggle(page) asserts the toggle's accessible
name against the pattern for the current viewport width. It is the body
selectSettingsSection carried, which now calls it.

channel-activity-corners.spec.mjs: the inline settleNavigation closure
is removed; its two call sites, after each setViewportSize in the
breakpoint search and in the geometry matrix, call settleShellToggle.

sidenav-polish.spec.mjs: selectChannel's copy checked only the narrow
label and only at 650 px or below. It becomes an unconditional
settleShellToggle: the test runs on the Messages page, where the toggle
renders at every width, so at 1440 and 900 the helper also asserts the
Channel-sidebar label.

layout.spec.mjs: shellFits keeps its `width <= 650` condition and calls
settleShellToggle inside it. shellFits also runs on the Projects page at
1280, where AppShell renders no toggle (collapsibleSidebar covers only
channels, agents and settings), so the wide branch cannot apply there.
The hunk is at lines 84-88; 5933307's hunks in this file start at line
395 and the pointer-events waits at 76-78 and 403-408 are untouched.

settings.spec.mjs: settleShellToggle precedes the guard at :333. After
the "Show navigation" click at :400 the toggle is asserted to read
"Hide navigation", so a mis-toggle fails at the toggle instead of at the
sidebar visibility check below it. The direct clicks at :452 and :462
have the same shape and are left as they are.

todos.spec.mjs, appearance.spec.mjs: settleShellToggle precedes the
guards in messages() and expectMode(). Both run well after their
resizes, so the wait is cover rather than a reproduced failure.

No assertion, threshold or timeout is weakened and no product code
changes. The two width-guarded copies gain the wide-width assertion
where the page has a toggle; every other site keeps its exact checks.

Verified: biome check on the seven files; settings, todos, appearance,
sidenav-polish, channel-activity-corners and layout on Chromium with
--repeat-each 5: 175 passed, 0 failed, in 3.9 min with no Vite port
collision; once on WebKit: 35 passed, 0 failed. Cherry-picked alone onto
a detached worktree at origin/main (5d2b08e) without conflict.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
matt2e added a commit that referenced this pull request Sep 30, 2026
…Show navigation guard

The shell toggle's accessible name is "Show/Hide navigation" at 650 px
and below and "Show/Hide Channel sidebar" above. Since #360 it comes
from React state that a matchMedia change listener sets
(AppShell.tsx:58-79), so it changes in a rendering update after
page.setViewportSize() has resolved. A non-waiting isVisible() guard on
"Show navigation" that runs before that render reads the previous
width's label. Wide to narrow, it sees a Channel-sidebar label, skips
the click, and the next sidebar action fails against a closed drawer.
Narrow to wide, it sees the stale "Show navigation" and the click it
issues either toggles drawer state the wide layout ignores or waits on
a button the render is about to relabel. Chromium answers
setViewportSize before the change event, which is how
settings.spec.mjs:401 failed there before #417 replaced that guard with
an auto-waiting click. A guard of the same shape remained at
settings.spec.mjs:333, after the resize to 1280 at :320, and the wait
for the label existed as four inline copies.

navigation.mjs: settleShellToggle(page) asserts the toggle's accessible
name against the pattern for the current viewport width. It is the body
selectSettingsSection carried, which now calls it.

channel-activity-corners.spec.mjs: the inline settleNavigation closure
is removed; its two call sites, after each setViewportSize in the
breakpoint search and in the geometry matrix, call settleShellToggle.

sidenav-polish.spec.mjs: selectChannel's copy checked only the narrow
label and only at 650 px or below. It becomes an unconditional
settleShellToggle: the test runs on the Messages page, where the toggle
renders at every width, so at 1440 and 900 the helper also asserts the
Channel-sidebar label.

layout.spec.mjs: shellFits keeps its `width <= 650` condition and calls
settleShellToggle inside it. shellFits also runs on the Projects page at
1280, where AppShell renders no toggle (collapsibleSidebar covers only
channels, agents and settings), so the wide branch cannot apply there.
The hunk is at lines 84-88; 5933307's hunks in this file start at line
395 and the pointer-events waits at 76-78 and 403-408 are untouched.

settings.spec.mjs: settleShellToggle precedes the guard at :333. After
the "Show navigation" click at :400 the toggle is asserted to read
"Hide navigation", so a mis-toggle fails at the toggle instead of at the
sidebar visibility check below it. The direct clicks at :452 and :462
have the same shape and are left as they are.

todos.spec.mjs, appearance.spec.mjs: settleShellToggle precedes the
guards in messages() and expectMode(). Both run well after their
resizes, so the wait is cover rather than a reproduced failure.

No assertion, threshold or timeout is weakened and no product code
changes. The two width-guarded copies gain the wide-width assertion
where the page has a toggle; every other site keeps its exact checks.

Verified: biome check on the seven files; settings, todos, appearance,
sidenav-polish, channel-activity-corners and layout on Chromium with
--repeat-each 5: 175 passed, 0 failed, in 3.9 min with no Vite port
collision; once on WebKit: 35 passed, 0 failed. Cherry-picked alone onto
a detached worktree at origin/main (5d2b08e) without conflict.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
matt2e added a commit that referenced this pull request Oct 1, 2026
…Show navigation guard

The shell toggle's accessible name is "Show/Hide navigation" at 650 px
and below and "Show/Hide Channel sidebar" above. Since #360 it comes
from React state that a matchMedia change listener sets
(AppShell.tsx:58-79), so it changes in a rendering update after
page.setViewportSize() has resolved. A non-waiting isVisible() guard on
"Show navigation" that runs before that render reads the previous
width's label. Wide to narrow, it sees a Channel-sidebar label, skips
the click, and the next sidebar action fails against a closed drawer.
Narrow to wide, it sees the stale "Show navigation" and the click it
issues either toggles drawer state the wide layout ignores or waits on
a button the render is about to relabel. Chromium answers
setViewportSize before the change event, which is how
settings.spec.mjs:401 failed there before #417 replaced that guard with
an auto-waiting click. A guard of the same shape remained at
settings.spec.mjs:333, after the resize to 1280 at :320, and the wait
for the label existed as four inline copies.

navigation.mjs: settleShellToggle(page) asserts the toggle's accessible
name against the pattern for the current viewport width. It is the body
selectSettingsSection carried, which now calls it.

channel-activity-corners.spec.mjs: the inline settleNavigation closure
is removed; its two call sites, after each setViewportSize in the
breakpoint search and in the geometry matrix, call settleShellToggle.

sidenav-polish.spec.mjs: selectChannel's copy checked only the narrow
label and only at 650 px or below. It becomes an unconditional
settleShellToggle: the test runs on the Messages page, where the toggle
renders at every width, so at 1440 and 900 the helper also asserts the
Channel-sidebar label.

layout.spec.mjs: shellFits keeps its `width <= 650` condition and calls
settleShellToggle inside it. shellFits also runs on the Projects page at
1280, where AppShell renders no toggle (collapsibleSidebar covers only
channels, agents and settings), so the wide branch cannot apply there.
The hunk is at lines 84-88; 5933307's hunks in this file start at line
395 and the pointer-events waits at 76-78 and 403-408 are untouched.

settings.spec.mjs: settleShellToggle precedes the guard at :333. After
the "Show navigation" click at :400 the toggle is asserted to read
"Hide navigation", so a mis-toggle fails at the toggle instead of at the
sidebar visibility check below it. The direct clicks at :452 and :462
have the same shape and are left as they are.

todos.spec.mjs, appearance.spec.mjs: settleShellToggle precedes the
guards in messages() and expectMode(). Both run well after their
resizes, so the wait is cover rather than a reproduced failure.

No assertion, threshold or timeout is weakened and no product code
changes. The two width-guarded copies gain the wide-width assertion
where the page has a toggle; every other site keeps its exact checks.

Verified: biome check on the seven files; settings, todos, appearance,
sidenav-polish, channel-activity-corners and layout on Chromium with
--repeat-each 5: 175 passed, 0 failed, in 3.9 min with no Vite port
collision; once on WebKit: 35 passed, 0 failed. Cherry-picked alone onto
a detached worktree at origin/main (5d2b08e) without conflict.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
matt2e added a commit that referenced this pull request Oct 1, 2026
…Show navigation guard

The shell toggle's accessible name is "Show/Hide navigation" at 650 px
and below and "Show/Hide Channel sidebar" above. Since #360 it comes
from React state that a matchMedia change listener sets
(AppShell.tsx:58-79), so it changes in a rendering update after
page.setViewportSize() has resolved. A non-waiting isVisible() guard on
"Show navigation" that runs before that render reads the previous
width's label. Wide to narrow, it sees a Channel-sidebar label, skips
the click, and the next sidebar action fails against a closed drawer.
Narrow to wide, it sees the stale "Show navigation" and the click it
issues either toggles drawer state the wide layout ignores or waits on
a button the render is about to relabel. Chromium answers
setViewportSize before the change event, which is how
settings.spec.mjs:401 failed there before #417 replaced that guard with
an auto-waiting click. A guard of the same shape remained at
settings.spec.mjs:333, after the resize to 1280 at :320, and the wait
for the label existed as four inline copies.

navigation.mjs: settleShellToggle(page) asserts the toggle's accessible
name against the pattern for the current viewport width. It is the body
selectSettingsSection carried, which now calls it.

channel-activity-corners.spec.mjs: the inline settleNavigation closure
is removed; its two call sites, after each setViewportSize in the
breakpoint search and in the geometry matrix, call settleShellToggle.

sidenav-polish.spec.mjs: selectChannel's copy checked only the narrow
label and only at 650 px or below. It becomes an unconditional
settleShellToggle: the test runs on the Messages page, where the toggle
renders at every width, so at 1440 and 900 the helper also asserts the
Channel-sidebar label.

layout.spec.mjs: shellFits keeps its `width <= 650` condition and calls
settleShellToggle inside it. shellFits also runs on the Projects page at
1280, where AppShell renders no toggle (collapsibleSidebar covers only
channels, agents and settings), so the wide branch cannot apply there.
The hunk is at lines 84-88; 5933307's hunks in this file start at line
395 and the pointer-events waits at 76-78 and 403-408 are untouched.

settings.spec.mjs: settleShellToggle precedes the guard at :333. After
the "Show navigation" click at :400 the toggle is asserted to read
"Hide navigation", so a mis-toggle fails at the toggle instead of at the
sidebar visibility check below it. The direct clicks at :452 and :462
have the same shape and are left as they are.

todos.spec.mjs, appearance.spec.mjs: settleShellToggle precedes the
guards in messages() and expectMode(). Both run well after their
resizes, so the wait is cover rather than a reproduced failure.

No assertion, threshold or timeout is weakened and no product code
changes. The two width-guarded copies gain the wide-width assertion
where the page has a toggle; every other site keeps its exact checks.

Verified: biome check on the seven files; settings, todos, appearance,
sidenav-polish, channel-activity-corners and layout on Chromium with
--repeat-each 5: 175 passed, 0 failed, in 3.9 min with no Vite port
collision; once on WebKit: 35 passed, 0 failed. Cherry-picked alone onto
a detached worktree at origin/main (5d2b08e) without conflict.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants