Skip to content

feat(mobile): add bee pull-to-refresh - #5059

Merged
wesbillman merged 3 commits into
mainfrom
kennylopez-bee-pull-to-refresh
Aug 7, 2026
Merged

feat(mobile): add bee pull-to-refresh#5059
wesbillman merged 3 commits into
mainfrom
kennylopez-bee-pull-to-refresh

Conversation

@klopez4212

@klopez4212 klopez4212 commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace Flutter's standard mobile pull-to-refresh indicator with our animated Buzz bee.

Testing

  • bin/just mobile-check
  • bin/just mobile-test (1,248 tests)
  • Connected iPhone and Pixel 10

Signed-off-by: kenny lopez <klopez4212@gmail.com>
@klopez4212
klopez4212 marked this pull request as ready for review August 6, 2026 15:13
@klopez4212
klopez4212 requested a review from a team as a code owner August 6, 2026 15:13

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

Comment thread mobile/lib/shared/widgets/tappable_flapping_bee.dart Outdated
Comment thread mobile/lib/shared/widgets/tappable_flapping_bee.dart Outdated
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>

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

Comment thread mobile/lib/features/forum/forum_posts_view.dart
Comment thread mobile/lib/shared/widgets/bee_refresh_indicator.dart

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

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.

  1. ForumPostsView renders full-bleed beneath the overlaid FrostedAppBar, and its list separately reserves frostedAppBarHeight(context). The new indicator defaults to edgeOffset: 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. Pass edgeOffset: frostedAppBarHeight(context) at the forum call site and cover the offset.

  2. trackPull calls beginExpressionTracking() when the custom fixed-distance progress reaches 100 px, independently of Flutter's authoritative RefreshIndicatorStatus.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 to beginExpressionTracking() and start armed feedback only from updateStatus(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.

@klopez4212
klopez4212 dismissed wesbillman’s stale review August 7, 2026 14:57

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

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: 0 beneath 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>
@klopez4212
klopez4212 dismissed wesbillman’s stale review August 7, 2026 15:33

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

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.

@wesbillman
wesbillman dismissed their stale review August 7, 2026 15:41

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

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.

@wesbillman
wesbillman enabled auto-merge (squash) August 7, 2026 15:43
@wesbillman
wesbillman merged commit 626e2c3 into main Aug 7, 2026
27 checks passed
@wesbillman
wesbillman deleted the kennylopez-bee-pull-to-refresh branch August 7, 2026 16:09
atishpatel added a commit that referenced this pull request Aug 7, 2026
…-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>
wpfleger96 pushed a commit that referenced this pull request Aug 7, 2026
* 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
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