Skip to content

Polish mobile timeline and emoji interactions - #6297

Merged
klopez4212 merged 7 commits into
mainfrom
kennylopez-mobile-bug-fixes
Aug 20, 2026
Merged

Polish mobile timeline and emoji interactions#6297
klopez4212 merged 7 commits into
mainfrom
kennylopez-mobile-bug-fixes

Conversation

@klopez4212

@klopez4212 klopez4212 commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Align mobile home avatars and share the same sticky-date and Latest controls across channels and threads.
  • Stabilize thread tail navigation and emoji category scrolling.
  • Remove iOS glass compositing artifacts and match long-press blur across action surfaces.

Why

Threads and emoji selection used competing scroll and compositing paths, causing rebounds, flicker, and inconsistent controls.

Testing

  • just mobile-check
  • flutter test (1,529 tests)
  • Signed Release installed, launched, and reviewed on a connected iPhone

Signed-off-by: kenny lopez <klopez4212@gmail.com>
@klopez4212 klopez4212 changed the title fix(mobile): polish timeline and emoji interactions Polish mobile timeline and emoji interactions Aug 19, 2026
@klopez4212
klopez4212 marked this pull request as ready for review August 19, 2026 08:38
@klopez4212
klopez4212 requested a review from a team as a code owner August 19, 2026 08:38

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5a8957045e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/ios/Runner/NativeEmojiPickerModel.swift
Comment thread mobile/lib/features/channels/message_actions/reaction_popover.dart Outdated
Co-authored-by: Carl <3c4caeafb646d23867f1c4832e68211d77e2561946171625f75c3ce1a3f2670f@buzz.block.builderlab.xyz>
Signed-off-by: Kenny Lopez <klopez4212@gmail.com>
@klopez4212

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b4fff31021

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/thread_detail_page.dart Outdated
Co-authored-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>
Signed-off-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5d7f310c03

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/thread_detail_page.dart Outdated
Co-authored-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>
Signed-off-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d15934a01e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/jump_to_latest_button.dart Outdated
Co-authored-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>
Signed-off-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>
@klopez4212

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b7ed524237

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/thread_detail_page.dart Outdated

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verdict: REQUEST CHANGES

Reviewed: 93114c9c65138397de39729fde0a816eb9f314ab..b7ed5242372616c182ac1eecd5f3352dfb1c50d4 (exact live head)
Risk: high — virtualized thread-tail state, lazy layout, and iOS-native presentation.

Blocking finding

  • P2 — automatic thread-tail correction can hide Latest before the tail is visible (mobile/lib/features/channels/thread_detail_page.dart:360-369, callers at :372-382 and :631-642). correctThreadTailInstantly() performs one jump, then unconditionally records isAtThreadTail = true both immediately and on the next frame without rechecking threadTailIsVisible(). A long variable-height ScrollablePositionedList can discover additional extent after that jump, leaving the newest reply below the viewport while the Latest control is hidden. The explicit Latest path already handles this same lazy-layout behavior with measured, bounded retries at :434-458; automatic composer-focus/local-reply follow should use equivalent measured correction while preserving drag cancellation. Add a long variable-height regression for composer focus or a newly sent local reply. The existing local-reply test uses only 30 short rows and does not exercise repeated extent growth.

Contracts traced

The diff is confined to mobile UI/native presentation. I traced thread hydration and deep-link precedence, active-scroll-position ownership, automatic and explicit tail-follow lifecycle, drag cancellation, shared Latest/sticky-date semantics, action-backdrop compositing, and native emoji category tracking. No relay/protocol, tenancy, persistence, auth/security, or schema contract changes were introduced. The supplied base is two commits behind current main, but those commits touch no mobile paths and the merge-tree is conflict-free.

Validation

At matching exact head with a clean source tree:

  • just mobile-check — pass; 423 files format-clean and Flutter analyze clean.
  • cd mobile && flutter test — pass; full package suite, 1,531 tests.
  • git diff --check 93114c9c65138397de39729fde0a816eb9f314ab..HEAD — pass.
  • Full RunnerTests on an iPhone 17 Pro / iOS 26.5 simulator — pass after installing missing Pods. This validates native category-tracker boundaries; it is not real-device visual evidence.
  • Mutation: setting _latestTailCorrectionLimit from 8 to 0 makes thread Latest settles across expanding lazy scroll extents fail because reply-159 never mounts; restored control passes. This proves the explicit retry loop is causal, while the automatic path above does not use it.
  • Exact-head required CI is green, including Mobile, DCO, and applicable aggregate checks.

Product/UI assessment and residual risk

No separate material accessibility, responsive-platform, or native emoji defect was found. The shared Latest control retains a 48×48 semantic target and reduced-motion handling; sticky dates preserve scaled text/header semantics; emoji selection preserves selected accessibility traits. However, the automatic tail bug affects a core journey and blocks approval.

I did not independently capture the author’s signed-Release real-device iPhone run, so real-device compositing smoothness remains supported by source, simulator-native tests, and the author’s report rather than independently witnessed pixels.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent

Requesting changes at exact head b7ed5242372616c182ac1eecd5f3352dfb1c50d4 for one material thread-tail correctness defect.

mobile/lib/features/channels/thread_detail_page.dart:360-369 makes correctThreadTailInstantly() jump once and then sets isAtThreadTail = true immediately and again next frame without re-measuring threadTailIsVisible(). Composer focus (:372-382), automatic local/remote reply follow (:631-642), and resize/IME paths use this helper. In a long variable-height ScrollablePositionedList, laying out unseen children can increase maxScrollExtent after the first jump, leaving the newest reply below the viewport while the Latest control is hidden because state falsely says the tail was reached.

The explicit Latest path already solves this lazy-extent condition with bounded, measured retries and drag cancellation (:434-458). Reuse that measured correction behavior for automatic paths and add a long variable-height regression for composer focus and/or automatic follow after a newly sent reply. An unresolved exact-head Codex thread independently identifies the same line and consequence.

Integrated evidence: just mobile-check passed; all 1,531 Flutter tests passed; native RunnerTests passed on an iPhone 17 Pro / iOS 26.5 simulator; exact-head Mobile and applicable checks are green. Mutation evidence proves the explicit retry loop is necessary (_latestTailCorrectionLimit = 0 leaves reply-159 unmounted), but current coverage does not apply that guard to the automatic helper. Product/UI review found no additional material issue. No tenancy, persistence, protocol, auth, or security boundary changed. Actual-device compositing smoothness was not independently witnessed.

Cleanup: reviewer trees were reported clean; no author-branch writes or pushes; REPOS/*-carl is empty.

@jedwards27
jedwards27 dismissed their stale review August 19, 2026 14:41

Duplicate exact-head automation review caused by a concurrent sweep race; superseded by the earlier integrated A Team review on the same head.

@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.

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Request changes — P2 thread-tail correctness defect at b7ed5242372616c182ac1eecd5f3352dfb1c50d4.

mobile/lib/features/channels/thread_detail_page.dart:360-369 makes correctThreadTailInstantly() jump once, then sets isAtThreadTail = true immediately and again next frame without rechecking threadTailIsVisible(). Composer focus (:372-382), automatic reply follow (:631-642), and viewport/IME correction use this helper. In a long variable-height lazy list, layout can expand maxScrollExtent after the jump, leaving the newest reply off-screen while Latest is hidden.

The explicit Latest path already handles this condition with bounded measured retries (:434-458). Please give automatic correction equivalent remeasurement/retry behavior while preserving drag cancellation, and add a long variable-height regression around composer focus or a newly sent local reply.

Signed-off-by: kenny lopez <klopez4212@gmail.com>
…-fixes

Signed-off-by: kenny lopez <klopez4212@gmail.com>
@klopez4212

Copy link
Copy Markdown
Contributor Author

🤖 Addressed the automatic thread-tail blocker in 412f41718 and merged current main in 10cf542d8. Automatic composer/local-reply/viewport corrections now remeasure lazy extent with bounded retries, preserve drag cancellation, and only hide Latest after the tail is actually visible. Added a long 160-reply variable-height regression that fails with retries disabled. Validation is green: 154 affected widget tests, all 1,531 mobile tests, mobile format/analyze, and the complete pre-push gate. Ready for re-review.

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

:bot: Jude’s code review agent — APPROVED at exact head 10cf542d8693a21b6b657ca1c84ce02753729b81 against base f88cda9eb886500ec7d205e1d265ac6f654aa433.

The previous blocker is resolved. The tail-correction path now re-measures actual tail visibility and retries boundedly while preserving user control and generation ownership (mobile/lib/features/channels/thread_detail_page.dart:361-409,473-489,621-662,701-738,820-848). Stale callbacks cannot settle newer navigation, drag/opt-out cancels continuation, and Latest remains visible until the lazy tail is genuinely visible. The regression fixture exercises expanding maxScrollExtent, preserves Latest during settlement, and proves the local reply becomes visible before scrolling stops (mobile/test/features/channels/channel_detail_page_test.dart:8936-9056).

Validation at the pinned clean head:

  • just mobile-check — pass (format + analyze).
  • Full just mobile-test — pass, 1,552 tests.
  • Independent focused suites across all five touched Dart test packages — pass, 225 tests.
  • Causal mutation disabling repeated lazy-tail correction — the new local-reply regression fails because the reply never mounts; restoring exact-head bytes passes.
  • git diff --check f88cda9eb886500ec7d205e1d265ac6f654aa433...HEAD — pass.
  • Effective diff is 26 files, all under mobile/; no relay/protocol, identity/tenancy, persistence, schema, migration, auth, or security contract change was found.
  • Live head was re-read immediately before this review and remained 10cf542d8693a21b6b657ca1c84ce02753729b81. All reported exact-head GitHub checks are complete and green or intentionally skipped, including Mobile, Desktop Core, desktop smoke/integration, macOS build, and DCO.

Residual risk: no fresh exact-head signed Release run on physical iPhone, MP4/AX capture, or native RunnerTests rerun was performed. The post-clearance delta is Dart tail-settlement logic rather than native glass/emoji code; full Flutter coverage, causal mutation evidence, and exact-head CI are sufficient for approval, but do not independently attest physical-device compositing smoothness.

Any new head invalidates this approval until its delta is reviewed.

@klopez4212
klopez4212 dismissed wesbillman’s stale review August 20, 2026 08:45

approved by jude

@klopez4212
klopez4212 merged commit da818ed into main Aug 20, 2026
24 checks passed
@klopez4212
klopez4212 deleted the kennylopez-mobile-bug-fixes branch August 20, 2026 08:45
klopez4212 added a commit that referenced this pull request Aug 20, 2026
Resolve import-ordering conflicts in channel_detail_page.dart and its test after #6297 landed on main; keep both the new timeline imports and the huddle controller import. No logic changes.

Co-authored-by: Mongo <9cfd347903944d5b85aa6c93d2ab67381b978a92a31914bca69998968752a1d7@buzz.block.builderlab.xyz>
Co-authored-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
wpfleger96 pushed a commit that referenced this pull request Aug 20, 2026
…as-aware-labels

* origin/main:
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
tellaho added a commit that referenced this pull request Aug 20, 2026
…ress

* origin/main:
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)
  fix(desktop): show complete repository trees (#5102)
  Add appearance preference previews (#6193)
  fix(desktop): restore emoji recents (#6263)
  chore: serialize mobile pre-push checks (#6322)
  fix(buzz-acp): loosen workspace-scan guardrail to allow named paths (#6261)
  fix(buzz-dev-mcp): expand leading ~ in read_file/str_replace paths (#6271)
  perf(desktop): move five hot renderer paths from JS into Rust (#6024)
  fix(media): accept portrait video resolutions (#6058)
  fix(desktop): hide archived channels from #/Tab autocomplete (#6156)
  Unify mobile channel details (#6113)
  Revert "fix(acp): gate relay-signed workflow messages on their attributed author" (#6311)

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>

# Conflicts:
#	desktop/src/features/messages/ui/MentionAutocomplete.test.mjs
morgmart added a commit that referenced this pull request Aug 20, 2026
…handoff

* origin/main:
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)
  fix(desktop): show complete repository trees (#5102)
  Add appearance preference previews (#6193)
  fix(desktop): restore emoji recents (#6263)
  chore: serialize mobile pre-push checks (#6322)

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
wpfleger96 pushed a commit that referenced this pull request Aug 20, 2026
…el-directory

* origin/main:
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)

Signed-off-by: Hayt <9e1c23a3fd83f61da34420e4e88ff1b16e45cafcc0cd9019eb07d4ecfa8ca9b0@buzz.block.builderlab.xyz>
wpfleger96 added a commit that referenced this pull request Aug 20, 2026
…el-directory

* origin/main:
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Hayt <9e1c23a3fd83f61da34420e4e88ff1b16e45cafcc0cd9019eb07d4ecfa8ca9b0@buzz.block.builderlab.xyz>
atishpatel added a commit that referenced this pull request Aug 20, 2026
…ounting-and-solo

* origin/main: (48 commits)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  Fix cross-owner relay agent mentions in owner-only builds (#6338)
  feat(cli): accept Buzz message links for thread reads (#6359)
  feat(workflows): add workflow editor (#6248)
  fix(desktop): preserve huddle speech boundaries (#6397)
  test(desktop): use a wordlist-safe separator in passphrase word-count test (#6356)
  fix(models): curate Databricks alias-aware labels for 5 missing endpoints (#6360)
  fix(acp): guard against unrequested public relay skills (#6394)
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)
  ...

Signed-off-by: Atish Patel <atishpatel2012@gmail.com>
brow added a commit that referenced this pull request Aug 20, 2026
…ifications-pr

* origin/main: (33 commits)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  Fix cross-owner relay agent mentions in owner-only builds (#6338)
  feat(cli): accept Buzz message links for thread reads (#6359)
  feat(workflows): add workflow editor (#6248)
  fix(desktop): preserve huddle speech boundaries (#6397)
  test(desktop): use a wordlist-safe separator in passphrase word-count test (#6356)
  fix(models): curate Databricks alias-aware labels for 5 missing endpoints (#6360)
  fix(acp): guard against unrequested public relay skills (#6394)
  feat(desktop): refine context-aware Projects collaboration (#6396)
  fix(desktop): distinguish duplicate agent devices (#6337)
  feat(desktop): close Buzz window with Cmd+W (#6314)
  refactor(prompt): simplify Buzz agent guidance (#6340)
  feat(desktop): make Projects workspaces selectable (#6368)
  Add Buzz-native collaboration benchmarks (#6264)
  Polish mobile timeline and emoji interactions (#6297)
  feat(desktop): make the Projects overview follow the selected section (#6335)
  refactor(desktop): coordinate TTS playback (#6341)
  ...

Signed-off-by: Tom Brow <tomb@block.xyz>
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.

4 participants