Polish mobile timeline and emoji interactions - #6297
Conversation
Signed-off-by: kenny lopez <klopez4212@gmail.com>
There was a problem hiding this comment.
💡 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".
Co-authored-by: Carl <3c4caeafb646d23867f1c4832e68211d77e2561946171625f75c3ce1a3f2670f@buzz.block.builderlab.xyz> Signed-off-by: Kenny Lopez <klopez4212@gmail.com>
|
@codex review |
There was a problem hiding this comment.
💡 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".
Co-authored-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz> Signed-off-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>
There was a problem hiding this comment.
💡 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".
Co-authored-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz> Signed-off-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>
There was a problem hiding this comment.
💡 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".
Co-authored-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz> Signed-off-by: Watcher <bb7abfd757d0af7b66569d02ab9c0316b616f9d0c151ecf5b964344c462e7f8f@buzz.block.builderlab.xyz>
|
@codex review |
There was a problem hiding this comment.
💡 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".
jedwards27
left a comment
There was a problem hiding this comment.
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-382and:631-642).correctThreadTailInstantly()performs one jump, then unconditionally recordsisAtThreadTail = trueboth immediately and on the next frame without recheckingthreadTailIsVisible(). A long variable-heightScrollablePositionedListcan 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
RunnerTestson 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
_latestTailCorrectionLimitfrom 8 to 0 makesthread Latest settles across expanding lazy scroll extentsfail becausereply-159never 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
left a comment
There was a problem hiding this comment.
: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.
Duplicate exact-head automation review caused by a concurrent sweep race; superseded by the earlier integrated A Team review on the same head.
wesbillman
left a comment
There was a problem hiding this comment.
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>
|
🤖 Addressed the automatic thread-tail blocker in |
jedwards27
left a comment
There was a problem hiding this comment.
: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.
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>
…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>
…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
…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>
…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>
…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>
…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>
…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>
Summary
Why
Threads and emoji selection used competing scroll and compositing paths, causing rebounds, flicker, and inconsistent controls.
Testing
just mobile-checkflutter test(1,529 tests)