diff --git a/.claude/skills/flutter-version-bump/SKILL.md b/.claude/skills/flutter-version-bump/SKILL.md index e645e45709..8b7ede7d7c 100644 --- a/.claude/skills/flutter-version-bump/SKILL.md +++ b/.claude/skills/flutter-version-bump/SKILL.md @@ -534,6 +534,29 @@ Then, per `STYLE_GUIDE.md`, one short bullet under `🔄 Changed` in each of the Finish with `melos bootstrap` and commit the resulting root `pubspec.lock`. +### Sweep the workarounds the new floor unblocks + +Still in Track B, after the constraints move. `FLUTTER_BLOCKED.md` lists every workaround that +exists only because an upstream fix had not shipped; each row carries the release that makes it +removable. Read it, and cross-check the code so a stale file cannot hide a site: + +```bash +grep -rn 'TODO(flutter)' packages/ sample_app/ # every tagged site, even if the file drifted +``` + +For each row whose "Removable at" is now `<=` the new floor, confirm the fix really shipped +before deleting anything — the recorded version is a prediction, and upstream fixes slip: + +```bash +# in a Flutter checkout, using the fix commit named in the row +git tag --contains | grep -vE '\-' | sort -V | head -1 +``` + +Then remove the workaround, its `TODO(flutter)`, any test that only pinned the workaround's +mechanism, and the row. If the fix slipped, re-date the row instead — do not silently drop it. + +Keep this in the Track B commit: it is only correct because the floor moved. + ## Step 7 — Changelog and PR Track A changes that are user-visible (a widget swapped, a deprecation migrated) get a CHANGELOG bullet in the diff --git a/FLUTTER_BLOCKED.md b/FLUTTER_BLOCKED.md new file mode 100644 index 0000000000..901c9d7304 --- /dev/null +++ b/FLUTTER_BLOCKED.md @@ -0,0 +1,19 @@ +# Workarounds blocked on a Flutter release + +Workarounds that exist only because an upstream Flutter fix has not shipped. The +[`flutter-version-bump`](.claude/skills/flutter-version-bump/SKILL.md) floor raise reads +this to decide what is now removable. + +One registry for the whole monorepo: append an entry with the same fields, never add a +file. Tag the code site `// TODO(flutter):` too, so `grep -rn 'TODO(flutter)'` finds it if +this file drifts. Delete the entry when the workaround goes — git history is the archive. + +## `SelectionArea` keyed on `BrowserContextMenu.enabled` + +- **Removable at:** Flutter 3.48 — predicted, not confirmed +- **Site:** `packages/stream_chat_flutter/lib/src/message_widget/components/stream_message_text.dart` +- **Upstream:** [flutter#186459](https://github.com/flutter/flutter/issues/186459), fixed by [flutter#186553](https://github.com/flutter/flutter/pull/186553) (`2a469b88`) +- **Confirm the release:** `git tag --contains 2a469b88` in a Flutter checkout — empty as of 3.47.1 +- **Verify removal:** needs the browser test in FLU-713; the VM test passes even with the key hardcoded +- **Keep:** `_BrowserContextMenu` in `context_menu_region.dart` — reference counting, not Flutter-blocked +- **Tracked:** FLU-710, [#2906](https://github.com/GetStream/stream-chat-flutter/issues/2906) diff --git a/STYLE_GUIDE.md b/STYLE_GUIDE.md index e1a6ab76d4..2afa4e764c 100644 --- a/STYLE_GUIDE.md +++ b/STYLE_GUIDE.md @@ -1095,6 +1095,11 @@ Include an issue link when the deferred work is tracked; if the constraint is self-explanatory ("wait for backend enrichment", "wait for next major"), a link isn't required. +A workaround that only exists because an upstream Flutter fix has not shipped yet uses the +`// TODO(flutter):` tag and gets an entry in +[`FLUTTER_BLOCKED.md`](FLUTTER_BLOCKED.md), which the floor raise reads. Both matter: the +entry holds what does not fit in a comment, the tag survives the file drifting. + ### Bare ignore directives are fine `// ignore: rule_name` directives do not require an explanatory comment in this repo.