Skip to content

v1.14#299

Merged
pooza merged 17 commits intomainfrom
develop
Apr 11, 2026
Merged

v1.14#299
pooza merged 17 commits intomainfrom
develop

Conversation

@pooza
Copy link
Copy Markdown
Owner

@pooza pooza commented Apr 9, 2026

概要

v1.14 のリリース PR。UX 改善とバグ修正を中心としたマイルストーン。

含まれる変更

機能追加・改善

不具合修正

調査・可観測性

既知の不具合

その他

  • iOS デプロイメントターゲットを 13.0 → 14.0 に正規化 (Podfile は既に 14.0 だったため Runner 側だけ取り残されていた)。最低サポート OS が iOS 14 になる

Test plan

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@pooza pooza added this to the v1.14 milestone Apr 9, 2026
pooza and others added 14 commits April 10, 2026 07:14
- hasLivecureTag でボット投稿を判定対象外にし、お知らせ投稿が非表示にならないようにする
- pubspec.yaml を 1.14.0+34 にバンプ
- CLAUDE.md のロードマップを v1.14〜v1.16 に更新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ストリーミングで受信した新着投稿を、ユーザーがスクロール中の場合はキューに溜め、
先頭付近に戻った時点でまとめて反映するようにした。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
アイコン 16px / パディング 4px (タップ領域 24px) では小さく
タップしづらかったため、Material ガイドラインに従い 48dp を確保。

- アイコン: 16 → 24
- パディング: 4 → 12
- 中心位置維持のため top: 20 → 8

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
OS がバックグラウンドのアクティビティを破棄したときに、入力途中の
テキストが消えるのを防ぐ。

- WidgetsBindingObserver で AppLifecycleState を監視し、paused 等で
  本文・CW テキスト・CW 有効フラグを SharedPreferences に保存
- フリーの新規投稿セッションでのみ自動保存・復元を有効化
  (reply/quote/redraft/sharedText/initialText は元投稿と紐付くため
  テキスト単独で復元しても文脈が壊れるので対象外)
- 投稿成功時に保存内容をクリア

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SimplePostBar に入力したテキストを詳細な投稿画面へ引き継いで投稿した
場合、元の SimplePostBar にテキストが残ったままになっていた。投稿成功
時は ComposeScreen から pop(true) を返し、SimplePostBar 側で結果を受
け取ってコントローラをクリアする。キャンセル(戻る)時はテキストを残
したままにして再編集できるようにする。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
元投稿が public の場合に限り、アクションメニューのブースト項目の下に
「公開」「ひかえめな公開」(Misskey では「ホーム」)の ActionChip を
表示し、タップで visibility 指定付きのブースト/リノートを実行する。
本体のリストタップは従来通り visibility 未指定で動作する。

あわせて PostScope の表示ラベル/アイコンを
packages/capsicum/lib/src/ui/util/post_scope_display.dart に集約し、
compose_screen.dart と post_tile.dart に分散していた辞書と
_scopeIcon を削除してここを参照するようにする。

BackendAdapter.repeatPost に optional な visibility 引数を追加し、
Mastodon は /api/v1/statuses/:id/reblog の visibility パラメータ、
Misskey は /api/notes/create の visibility パラメータに渡す。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
最新版を対象とする方針の一部として、廃止語(トゥート・未収載・
インスタンス)と統一語(ノート)を区別して整理。中央集約された
定数(post_scope_display.dart など)を参照する設計を優先する
方針を明記する。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
リノート/ブースト投稿では先頭に「○○ がリノートしました」のヘッダー
行が追加されるため、ユーザー名 Row 全体が下にずれて、右上に固定配置
されているアクションメニュー起動ボタンの可視領域と重なっていた。

ユーザー名 Row をリノートの場合にのみ EdgeInsets.only(right: 48) で
包むことで日付を左に寄せ、ボタンアイコンと衝突しないようにする。
非リノート時は変更しないため既存の見た目への影響はない。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
前のコミット(73e268d)ではユーザー名 Row に右 padding を入れて
日付を左に寄せ、ボタンとの重なりを回避した。しかし非リノート時の
ボタン可視位置はもともと username 行ではなく handle 行の中央付近に
あるため、リノート時もそれに合わせて ~20px 下にずらすほうが
一貫した見た目になる。

Positioned の top をリノート時のみ 28 に変更し、Row の右 padding は
不要になったため削除する。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
#281(通知・お知らせのタブ化)を v1.14 から v1.17 に移動。
#281 は UI 再整理を伴う大型作業のため、他に同規模の項目がない
独立マイルストーンでじっくり取り組む方針。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
複数アカウントの通知を一画面で閲覧できる「すべての通知」画面を新設。
各アカウントの最新ページを並列取得し、createdAt 降順でマージして表示する。
項目タップで該当アカウントに切り替えてから投稿/プロフィールを開く。
各アカウントの既読マーカーには手を出さず、サーバ側の既読状態は既存画面に
委ねる。取得に失敗したアカウントはリスト末尾に明示する。

ドロワーからの導線はアカウントが2件以上あるときのみ表示する。
お知らせの統合は今回は見送り。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
workmanager の registerPeriodicTask に渡す uniqueName が Info.plist の
BGTaskSchedulerPermittedIdentifiers と一致していなかったため、iOS では
BGTaskScheduler がタスクを受け付けずバックグラウンドポーリングが一度も
起動していなかった。

uniqueName を Info.plist 側の identifier
(jp.co.b-shock.capsicum.iOSBackgroundAppRefresh) に揃えた上で、
AppDelegate.didFinishLaunchingWithOptions 内で
WorkmanagerPlugin.registerPeriodicTask(withIdentifier:frequency:) を
呼び、BGTaskScheduler に launch handler を登録する。iOS は Info.plist で
宣言された identifier について didFinishLaunchingWithOptions 中の登録を
要求しており、登録されないまま submit すると NSInternalInconsistencyException
で即クラッシュする (Dart の try/catch では捕まえられない)。

合わせて、workmanager_apple が iOS 14.0 を要求するため、Runner の
IPHONEOS_DEPLOYMENT_TARGET を 13.0 → 14.0 に正規化した (Podfile は
既に 14.0 だったため Runner 側だけ取り残されていた)。これにより
capsicum の最低サポート iOS は 14.0 となる。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- アカウント名は displayName を EmojiText で表示し、空/未設定時のみ
  @user@host にフォールバック
- リアクション通知は行頭の顔アイコンをカスタム絵文字画像に置き換え
  (既存の NotificationTile と同じ解決ロジックを使用)
- absoluteTimeProvider が true のとき時刻を YYYY-MM-DD HH:MM 形式で表示

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Android でブラウザから戻れずログイン画面から進めない症状の原因特定と
回避を容易にするため、以下を追加:

- Sentry breadcrumbs を _login / _tryMiAuthFallback / _tryManualCodeFallback
  の各段階に追加。host・backend・reachedAuthenticate 等をデータに含め、
  次に同症状が出た際に Sentry 上で「どこで詰まったか」が追えるようにする
- CANCELED 例外でも fallback が試行されて失敗した場合は
  login.stage=fallback_failed_after_cancel タグ付きで Sentry に送信。
  CANCELED + fallback 成功の正常回避ルートは従来通り無音
- 画面下部のヒントを Card 化し、以下 2 パターンを明示:
  1) 承認後に同じ承認画面に戻るケース → スワイプで戻れば自動完了
  2) 承認後にタイムライン等へ遷移してしまうケース → スワイプで戻り
     認証コード入力ダイアログから再取得してログイン

根本原因 (flutter_web_auth_2 の Android 12+ Custom Tabs リダイレクト
不安定問題) への対処は今回は見送り。可観測性データが揃ってから v1.15
以降で判断する。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@pooza pooza changed the title 1.14 v1.14 Apr 11, 2026
@pooza pooza marked this pull request as ready for review April 11, 2026 16:29
Copy link
Copy Markdown

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

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: 22a44a5e72

ℹ️ 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 packages/capsicum/lib/src/ui/screen/compose_screen.dart Outdated
Comment thread packages/capsicum/lib/src/provider/timeline_provider.dart
pooza and others added 2 commits April 12, 2026 01:37
_clearDraft() が投稿成功時に無条件で呼ばれていたため、リプライ/引用/
再投稿/シェア経由の compose で投稿すると、別途 fresh compose で保存
されていた未投稿ドラフトが巻き添えで削除されていた。_draftAutoSave が
true のときのみドラフトをクリアするよう修正。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
TimelineNotifier._pendingPosts は build() 再実行時にクリアされていな
かったため、スクロール中に新着がキューされた状態で別のタイムライン
(ホーム↔ローカル等) に切り替えると、切替先で flushPending() が走った
際に前のタイムラインの投稿が混入するバグがあった。build() の冒頭で
_pendingPosts.clear() と _isNearTop リセットを行う。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@pooza pooza merged commit cd81eea into main Apr 11, 2026
1 check passed
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.

1 participant