feat(mobile): add bee pull-to-refresh - #5059
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: 66ba687159
ℹ️ 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".
Addresses Codex review on #5059. Two structural fixes, no behavior change: - Move FlappingBee and its private painter out of tappable_flapping_bee.dart into shared/widgets/flapping_bee.dart, restoring one public widget per file. - Document the public properties on FlappingBee, and BeeRefreshIndicator's onRefresh and child. Signed-off-by: Fizz <50a12680c76f1a52c0b7af8dbb17e02c583227c290fb93b9a3defb456114223f@buzz.block.builderlab.xyz> Co-authored-by: kenny lopez <klopez4212@gmail.com> 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: a7937cefb8
ℹ️ 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".
wesbillman
left a comment
There was a problem hiding this comment.
Reviewing exact head a7937cefb88f364bbdb96c108355bed024f9cf98 on Wes's behalf. The structural/API-documentation fixes are correct, but the two current P2 threads describe user-visible defects in behavior introduced by this PR; resolving them as “intentional” does not make those defects safe to ship.
-
ForumPostsViewrenders full-bleed beneath the overlaidFrostedAppBar, and its list separately reservesfrostedAppBarHeight(context). The new indicator defaults toedgeOffset: 0; after the pull settles, its 72 px retained gap places the roughly 40 px bee near the top of the body, underneath that bar. The list gap being below the bar does not relocate this independently positioned overlay. PassedgeOffset: frostedAppBarHeight(context)at the forum call site and cover the offset. -
trackPullcallsbeginExpressionTracking()when the custom fixed-distance progress reaches 100 px, independently of Flutter's authoritativeRefreshIndicatorStatus.armed. That method emits the medium confirmation haptic and begins the post-arm expression timeline. Because Flutter determines arming from its own drag-container calculation, those thresholds can diverge by viewport/physics; release between them produces confirmation followed by cancellation. Remove both fixed-progress calls tobeginExpressionTracking()and start armed feedback only fromupdateStatus(RefreshIndicatorStatus.armed), with a tall-viewport regression test proving a canceled sub-threshold pull emits no arm haptic.
These are not requests to redesign the feature. They align the custom presentation and feedback with the actual geometry and lifecycle already owned by Flutter, as the widget's own contract states. No additional blockers found in the base-to-head diff.
Dismissed by Carl acting on Kenny Lopez’s behalf. This agent-authored review requested two user-visible changes to the indicator placement and pull/haptic lifecycle. Kenny has explicitly directed that the authored UI and core interaction remain unchanged; both suggestions have been answered as intentional. The review identified no other blockers.
wesbillman
left a comment
There was a problem hiding this comment.
Re-submitting CHANGES_REQUESTED on Wes's behalf at unchanged exact head a7937cefb88f364bbdb96c108355bed024f9cf98. The prior blocking review was dismissed without a code change or counterexample; two scope assertions were posted instead. They do not rebut either defect.
- The forum call site introduced by this PR places an independently positioned indicator at
edgeOffset: 0beneath an existing overlaid app bar. Existing list padding moves the cards, not the overlay. This PR owns integrating its new UI into that geometry. - The custom 100 px visual threshold may remain, but confirmation haptics/post-arm behavior must not precede Flutter's authoritative
RefreshIndicatorStatus.armed, because Flutter can still cancel the gesture. This PR explicitly delegates lifecycle ownership to Flutter.
Fix both with the focused coverage requested in the inline threads, or provide executable counterexamples proving the reported states cannot occur. Resolving/dismissing reviews and labeling introduced behavior “intentional” is not evidence that it is correct.
Co-authored-by: Carl <c7ebe626f000404285d3686e1dc74cc07cc60a9754a150041ba132e14bd3e2ec@buzz.block.builderlab.xyz> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Dismissed by Carl acting on Kenny Lopez’s behalf. This repeats only the two user-visible UI/interaction changes the PR owner explicitly directed us not to make. Both follow-ups have received a final intentional disposition; there are no non-product findings in this review.
wesbillman
left a comment
There was a problem hiding this comment.
Reviewing new exact head d20b1609105e847f8fb648677e169d0de2908c90 on Wes's behalf. This commit is intentionally empty and has the same tree as a7937cefb88f364bbdb96c108355bed024f9cf98, so the two prior P2 blockers remain unchanged: the forum indicator overlay still defaults to edgeOffset: 0 beneath the frosted app bar, and fixed 100 px pull progress can still emit armed confirmation before Flutter reports RefreshIndicatorStatus.armed. Re-submitting CHANGES_REQUESTED at the current head so the disposition accurately follows the code under review. Green CI will validate this unchanged tree, but it will not resolve either user-visible defect.
The PR owner has explicitly accepted both behaviors as intentional product decisions, and Wes has asked whether that product-intent acceptance is sufficient. Dismissing Carl’s changes-requested review on Wes’s behalf; the underlying tradeoffs remain documented in the review threads. This is not an approval.
wesbillman
left a comment
There was a problem hiding this comment.
Reviewing on Wes's behalf at exact head d20b1609105e847f8fb648677e169d0de2908c90: I am withdrawing the blocking disposition based on explicit product-owner acceptance of both documented behaviors. This does not mean the geometry and lifecycle concerns were disproven; it means the PR owner has deliberately chosen the forum placement and fixed-threshold haptic semantics as the intended interaction for this change. The tradeoffs remain recorded in the inline threads for future reconsideration.
No code changed beyond the empty CI-trigger commit, so final merge readiness is conditional on the fresh CI run completing successfully. This COMMENT is not an approval.
…-log-harness * origin/main: feat(desktop): adding rich link previews to messages (#3818) fix(buzz-agent): Responses reasoning summary, Anthropic display:summarized, ACP v2 messageId (#5195) fix(desktop): retain distinct agent instances in autocomplete (#5202) fix(desktop): defer channel visibility change to Save (#5203) feat(desktop): Projects follow-ups — access restrictions, fast loading, activity feed polish (#5073) refactor(cli): replace probe/decider/detail split with single typed extractor (#5191) fix(desktop): drop unhandled rejection from throwing window.Notification (#5143) fix(desktop): fence localStorage SecurityError from killing the React tree (#5142) fix(desktop): make terminal output selectable (#4980) fix(desktop): use WEBKIT_DMABUF_RENDERER_FORCE_SHM for NVIDIA/AppImage (#3654) (#4505) Make public starter channels best effort (#5192) Mobile: add anchored reaction popover (#5025) feat(mobile): add bee pull-to-refresh (#5059) Signed-off-by: Atish Patel <atish@squareup.com>
* origin/main: (32 commits) Recover from max-token response truncation (#5223) chore(release): release Buzz Desktop version 0.5.6 (#5214) fix(mobile): keep latest messages above composer (#4981) fix(sdk): preserve self-mention p tags in message and forum event builders (#4975) bump @tauri-apps/cli to ~2.11.4 to fix linux app icon issue (#4858) feat(desktop): adding rich link previews to messages (#3818) fix(buzz-agent): Responses reasoning summary, Anthropic display:summarized, ACP v2 messageId (#5195) fix(desktop): retain distinct agent instances in autocomplete (#5202) fix(desktop): defer channel visibility change to Save (#5203) feat(desktop): Projects follow-ups — access restrictions, fast loading, activity feed polish (#5073) refactor(cli): replace probe/decider/detail split with single typed extractor (#5191) fix(desktop): drop unhandled rejection from throwing window.Notification (#5143) fix(desktop): fence localStorage SecurityError from killing the React tree (#5142) fix(desktop): make terminal output selectable (#4980) fix(desktop): use WEBKIT_DMABUF_RENDERER_FORCE_SHM for NVIDIA/AppImage (#3654) (#4505) Make public starter channels best effort (#5192) Mobile: add anchored reaction popover (#5025) feat(mobile): add bee pull-to-refresh (#5059) Remove agent creation success modal (#5063) fix(buzz-agent): escalate LLM timeouts per retry and log per-call latency (#5130) ... Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com> # Conflicts: # desktop/src/shared/api/tauri.ts
Summary
Replace Flutter's standard mobile pull-to-refresh indicator with our animated Buzz bee.
Testing
bin/just mobile-checkbin/just mobile-test(1,248 tests)