Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Mobile: a channel-section edit that doesn't publish within 5s is silently dropped on the next provider rebuild

オープン 初心者向け
#8,140 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
70/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
rust
領域
mobile

調査の方向性

mobile/lib/features/channels/channel_sections/channel_sections_provider.dart と channel_sections_manager.dart を読み、特に ChannelSectionsNotifier.build()、dispose()、markDirty() を確認してください。provider の再ビルド時に保留中の debounce タイマーがどのように処理されるかを追跡し、関連する channel-sections テストを実行してください。再ビルド時に公開待ちのローカル編集が破棄されず、この動作をカバーする回帰テストがある状態になれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Describe the bug
On mobile, editing a channel section (create/rename/delete/reorder/assign) schedules the relay publish on a 5-second debounce timer. If anything causes the channelSectionsProvider to rebuild before that timer fires — e.g. a relay reconnect while backgrounding/foregrounding the app — the pending publish is cancelled and discarded, not flushed. The edit stays in local storage on that device only; it never reaches the relay, so no other device (including the same mobile app after a fresh rebuild) ever sees it.

Steps to reproduce

  1. On mobile, open a channel and move it into a different section (or create/rename/delete a section).
  2. Within 5 seconds, background the app (or otherwise cause a relay reconnect — e.g. brief network drop) so the relay session status transitions and the provider rebuilds.
  3. Return to the app, or check the same section on desktop/another device.
  4. The edit is gone — it was never published, and it does not reappear.

Expected behavior
A local edit that hasn't published yet should survive a provider rebuild — either by flushing the pending publish before tearing down the old manager, or by re-arming the debounce on the new manager instance — so it is never silently dropped.

Version and platform

  • Buzz version: 0.5.14
  • OS: macOS 26.5.2 (Apple Silicon) — bug is in shared mobile client code, platform-independent

Logs / additional context
Root cause, confirmed against current source:

  • mobile/lib/features/channels/channel_sections/channel_sections_manager.dart:288 — markDirty() only arms a 5-second Timer before calling _publish(); nothing ties it to the manager's lifecycle beyond that timer.
  • mobile/lib/features/channels/channel_sections/channel_sections_manager.dart:170 — dispose({bool flushPending = true}) will flush a pending publish if flushPending is true.
  • mobile/lib/features/channels/channel_sections/channel_sections_provider.dart:29 — ChannelSectionsNotifier.build() calls _manager?.dispose(flushPending: false) on every rebuild, explicitly discarding any pending publish instead of flushing it.
  • build() watches relaySessionProvider (session connect status) and activeCommunityProvider, both of which commonly change during normal mobile use — e.g. relay_session.dart pauses the session on app background and reconnects on resume (_paused, SessionStatus.reconnecting → connected), which re-triggers build().

So a mobile edit followed within 5 seconds by an app background/foreground cycle (a very ordinary user action) loses the publish permanently, with no error, no retry, and no UI signal — it looks identical to a successful but not-yet-synced edit.

This is separate from #5797 (mobile UI not repainting after a local mutation — that one self-corrects once anything triggers _onChanged()). This bug is about the relay publish itself being discarded, so there is nothing to self-correct: other devices never receive the change.

Reported from a self-hosted single-user deployment; reproduced by reading the source, not by capturing a live network trace of the drop in progress.

主要言語
Rust
スター
35.6k
フォーク
4.7k
平均マージ
2日 6時間
マージ済み PR(30日)
188

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

block/buzz のほかの issue

block/buzz の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。