ci(repo): centralize path/draft gating in a per-workflow gate job#2669
Conversation
`dorny/paths-filter@v3` uses the GitHub API for `pull_request` events
but needs `git` history for `push` events. After the recent move of the
path filter to a job-level gate, the master post-merge run fails with:
[command]/usr/bin/git branch --show-current
fatal: not a git repository ...
The process '/usr/bin/git' failed with exit code 128
Add `actions/checkout@v6` ahead of the filter step so push events have
the git context they need; pull_request events ignore the checkout but
the extra few seconds are negligible.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
💤 Files with no reviewable changes (1)
📝 WalkthroughWalkthroughThree GitHub Actions workflows were changed to centralize gating into a new ChangesCentralized gating for CI workflows
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/legacy_version_analyze.yml:
- Line 34: Replace the mutable action reference "uses: actions/checkout@v6" with
a pinned commit SHA for actions/checkout (e.g., actions/checkout@<commit-sha>)
and add the checkout step's input "with: persist-credentials: false" to disable
credential persistence (so update the checkout step that contains uses:
actions/checkout@v6 to use the SHA and include the persist-credentials: false
setting).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: f7ce6802-31ed-481c-b196-31583105a987
📒 Files selected for processing (1)
.github/workflows/legacy_version_analyze.yml
Three workflows had path filters at the workflow level (`on.paths`), which leaves required checks stuck on "Expected — Waiting for status to be reported" whenever a PR doesn't touch the filtered paths. GitHub documents the fix: move the filter to a job-level `if:` so skipped jobs report `success` (see https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks). Each affected workflow now starts with a `gate` job that centralizes every gating decision in one place — path filter (via dorny/paths-filter), draft state, and push-vs-PR semantics. Downstream jobs only need a single `if: needs.gate.outputs.should_run == 'true'` instead of repeating the same compound expression across analyze / format / test / build. Workflows updated: - legacy_version_analyze.yml — gate combines path filter and draft check, preserves push-to-master always-runs behavior. - check_db_entities.yml — gate just on path filter (no draft skip, because the PR-comment helper is useful on draft PRs too). - stream_flutter_workflow.yml — gate combines all three (path, draft, push), replaces the per-job `draft == false` conditions. Also tightens the previous `changes` job style in legacy_version_analyze.yml: named checkout step and a named "Detect Path Changes" step, matching the rest of the file. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`draft-build` ran on draft PRs and echoed one line — it existed as a workaround from before the "skipped via if = success" behavior was broadly understood. With the new gate job, every required check on a draft PR is skipped by the gate (drafts are excluded from `should_run`) and reports `success` automatically. The placeholder is no longer doing any work. Caveat: if `draft-build` is listed by name as a required check in branch protection, that entry needs to be removed too — otherwise the now-missing job leaves the required check stuck at "Expected — Waiting for status to be reported" on draft PRs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (1)
.github/workflows/legacy_version_analyze.yml (1)
38-39: ⚡ Quick winPin
dorny/paths-filterto a commit SHA.GitHub Actions best practice recommends pinning to commit SHAs for supply chain security. Update the reference from
@v3to a pinned commit SHA (e.g.,@abc123...). Note: The same should apply to other unpinned action references in the workflow if this security posture is being adopted.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/legacy_version_analyze.yml around lines 38 - 39, Replace the unpinned GitHub Action reference currently used by the "Detect Path Changes" job (uses: dorny/paths-filter@v3) with a pinned commit SHA (e.g., uses: dorny/paths-filter@<commit-sha>) to harden supply chain security; update the uses value for "Detect Path Changes" and scan the workflow for any other uses: entries that end in a tag like `@v3` and replace them with their corresponding pinned commit SHAs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/check_db_entities.yml:
- Around line 22-26: Update the two action usages to immutable references and
disable credential persistence: replace the mutable tags for the Checkout and
Paths Filter actions (the steps named "📥 Checkout" using actions/checkout@v6
and "🛤️ Detect Path Changes" using dorny/paths-filter@v3) with their respective
full commit SHAs, and add persist-credentials: false to the "📥 Checkout" step
so the workflow token is not written to git config.
- Around line 17-32: Add explicit workflow permissions for the jobs instead of
relying on defaults: inside the "gate" job (job id gate) add permissions: {
contents: read, pull-requests: read } to allow actions/checkout and
dorny/paths-filter to work; in the "Check entity modifications" job (the job
that runs the DB entity checks and uses peter-evans/find-comment and
peter-evans/create-or-update-comment) add permissions: { contents: read,
pull-requests: write } so checkout and PR comment creation have the required
scopes.
In @.github/workflows/legacy_version_analyze.yml:
- Around line 27-39: The gate job currently runs actions/checkout@v6 and
dorny/paths-filter@v3 without explicit token scopes; add a permissions block to
the gate job that grants only the needed permissions (e.g., contents: read for
actions/checkout and pull-requests: read for dorny/paths-filter) to follow
least-privilege practice; update the job named "gate" to include permissions: {
contents: read, pull-requests: read } so the checkout and paths-filter steps
have explicit, minimal token access.
In @.github/workflows/stream_flutter_workflow.yml:
- Around line 32-41: Update the `gate` job to harden third-party action usage:
pin the actions used in the steps named "Git Checkout" (`actions/checkout`) and
"Detect Path Changes" (`dorny/paths-filter`) to their full commit SHAs instead
of mutable tags, set the `persist-credentials: false` input on the "Git
Checkout" step, and add explicit permissions—declare `permissions: contents:
read` at the workflow level and add `pull-requests: read` to the `gate` job (or
to the step running `dorny/paths-filter`) so the paths filter only has the
minimal access it needs.
---
Nitpick comments:
In @.github/workflows/legacy_version_analyze.yml:
- Around line 38-39: Replace the unpinned GitHub Action reference currently used
by the "Detect Path Changes" job (uses: dorny/paths-filter@v3) with a pinned
commit SHA (e.g., uses: dorny/paths-filter@<commit-sha>) to harden supply chain
security; update the uses value for "Detect Path Changes" and scan the workflow
for any other uses: entries that end in a tag like `@v3` and replace them with
their corresponding pinned commit SHAs.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: bb5d960c-5b96-4ffc-9dc4-0f81422be5b2
📒 Files selected for processing (3)
.github/workflows/check_db_entities.yml.github/workflows/legacy_version_analyze.yml.github/workflows/stream_flutter_workflow.yml
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #2669 +/- ##
=======================================
Coverage 65.27% 65.27%
=======================================
Files 423 423
Lines 26622 26622
=======================================
Hits 17377 17377
Misses 9245 9245 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Brings master's QA / security / perf work into the v10 design-refresh branch. Highlights of what landed in v10 from master: LLC (`stream_chat`) - `Client.queryDrafts` now forwards `filter` (#2647). - `Client.queryChannels` coalesces concurrent identical queries via the new `InFlightCache<K, V>` (#2652). - `SortedListX` / `ListX` extensions added in `list_extensions.dart`; duplicate-keyed inputs are tolerated by `merge` (#2660). v10's `IterableMergeExtension.merge` / `.mergeFrom` are kept — `SortedListX` is on `List` and routes there for the new perf paths; the old extension still serves `Iterable<T>` callers in v10. - `ChannelClientState._checkExpiredAttachmentMessages` removed (#2653); v10's `StreamImageCDN.cacheKey` already keeps the image cache valid across signed-URL rotations. - `ChannelClientState.updateChannelState` now identity-short-circuits when `updatedState.messages` is null or the same reference, so downstream `.distinct()` listeners can skip rebuilds. - Reaction listeners now dispatch via `_findMessage` (parentId-aware) while keeping v10's `addMyReaction` / `deleteMyReaction` semantics. `stream_chat_flutter_core` - `BetterStreamBuilder` correctness fixes: mounted guard, error reporting via `FlutterError.reportError`, identity-equal emission gating (#2651). - `MessageListCore` caches its `messagesStream` / `_initialMessages` as fields instead of recomputing in `build()` (#2651). `defaultMessageFilter` takes an optional `currentUserId`. - `StreamChatCore` debounces connectivity events to 3 s (#2652). `stream_chat_flutter` - `scrollable_positioned_list/`: master version taken in full. Bounded `_keyToIndexMap`, `isScrolling` / `isScrollingListenable`, `itemKeyBuilder` anchor preservation, fit-anchor fallback in `UnboundedRenderViewport`, sensible defaults on `scrollTo` (#2651). - `tld.dart` removed (#2654); `StreamMessageComposer` relaxed its URL regex from `[a-z]{2,4}` to `[a-z]{2,}` and dropped the `isValidTLD` filter at both call sites. - `StreamMessageListView` and `separated_reorderable_list_view`: v10's design-refresh version retained. v10 already covers the functional surface; master's identity-preserving micro-optimizations to `updateMessage` are a follow-up. CI / repo - Path/draft gating job (`gate`) added to `legacy_version_analyze`, `check_db_entities`, and `stream_flutter_workflow` (#2669). - Flutter 3.44 fixes (#2667), pana / build cleanups (#2656), local-setup CI fixes (#2650). - `melos.yaml`: kept v10's higher floors; added `firebase_crashlytics` (master's #2665); dropped `sentry_flutter` (per master). Notes / follow-ups - `sample_app/`: v10's redesigned app retained. The Sentry → Firebase Crashlytics migration (#2665) applies to master's pre-redesign sample app and was not ported here; left for a separate pass. - `channel_test.dart` `updateMessage quoted-rewrite > does not rewrite quotes when an existing quoted target is updated without being deleted` is marked `skip:` — v10's `_updateMessages` reconstructs the channel list via `_mergeMessagesIntoExisting`, so identity is not preserved on non-deletion edits. Functional behavior matches master. - `goldens/`: deleted-on-v10 goldens kept deleted; modified-on-both goldens kept at v10's bytes (the redesigned UI is the source of truth). - `stream_message_composer.dart` had `SizeTransition(alignment:)` which was never a valid parameter — switched to `axisAlignment: -1` (the Flutter API the v10 author intended). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brings master's QA / security / perf work into the v10 design-refresh branch. Highlights of what landed in v10 from master: LLC (`stream_chat`) - `Client.queryDrafts` now forwards `filter` (#2647). - `Client.queryChannels` coalesces concurrent identical queries via the new `InFlightCache<K, V>` (#2652). - `SortedListX` / `ListX` extensions added in `list_extensions.dart`; duplicate-keyed inputs are tolerated by `merge` (#2660). v10's `IterableMergeExtension.merge` / `.mergeFrom` are kept — `SortedListX` is on `List` and routes there for the new perf paths; the old extension still serves `Iterable<T>` callers in v10. - `ChannelClientState._checkExpiredAttachmentMessages` removed (#2653); v10's `StreamImageCDN.cacheKey` already keeps the image cache valid across signed-URL rotations. - `ChannelClientState.updateChannelState` now identity-short-circuits when `updatedState.messages` is null or the same reference, so downstream `.distinct()` listeners can skip rebuilds. - Reaction listeners now dispatch via `_findMessage` (parentId-aware) while keeping v10's `addMyReaction` / `deleteMyReaction` semantics. `stream_chat_flutter_core` - `BetterStreamBuilder` correctness fixes: mounted guard, error reporting via `FlutterError.reportError`, identity-equal emission gating (#2651). - `MessageListCore` caches its `messagesStream` / `_initialMessages` as fields instead of recomputing in `build()` (#2651). `defaultMessageFilter` takes an optional `currentUserId`. - `StreamChatCore` debounces connectivity events to 3 s (#2652). `stream_chat_flutter` - `scrollable_positioned_list/`: master version taken in full. Bounded `_keyToIndexMap`, `isScrolling` / `isScrollingListenable`, `itemKeyBuilder` anchor preservation, fit-anchor fallback in `UnboundedRenderViewport`, sensible defaults on `scrollTo` (#2651). - `tld.dart` removed (#2654); `StreamMessageComposer` relaxed its URL regex from `[a-z]{2,4}` to `[a-z]{2,}` and dropped the `isValidTLD` filter at both call sites. - `StreamMessageListView` and `separated_reorderable_list_view`: v10's design-refresh version retained. v10 already covers the functional surface; master's identity-preserving micro-optimizations to `updateMessage` are a follow-up. CI / repo - Path/draft gating job (`gate`) added to `legacy_version_analyze`, `check_db_entities`, and `stream_flutter_workflow` (#2669). - Flutter 3.44 fixes (#2667), pana / build cleanups (#2656), local-setup CI fixes (#2650). - `melos.yaml`: kept v10's higher floors; added `firebase_crashlytics` (master's #2665); dropped `sentry_flutter` (per master). Notes / follow-ups - `sample_app/`: v10's redesigned app retained. The Sentry → Firebase Crashlytics migration (#2665) applies to master's pre-redesign sample app and was not ported here; left for a separate pass. - `channel_test.dart` `updateMessage quoted-rewrite > does not rewrite quotes when an existing quoted target is updated without being deleted` is marked `skip:` — v10's `_updateMessages` reconstructs the channel list via `_mergeMessagesIntoExisting`, so identity is not preserved on non-deletion edits. Functional behavior matches master. - `goldens/`: deleted-on-v10 goldens kept deleted; modified-on-both goldens kept at v10's bytes (the redesigned UI is the source of truth). - `stream_message_composer.dart` had `SizeTransition(alignment:)` which was never a valid parameter — switched to `axisAlignment: -1` (the Flutter API the v10 author intended). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brings master's QA / security / perf work into the v10 design-refresh branch. Highlights of what landed in v10 from master: LLC (`stream_chat`) - `Client.queryDrafts` now forwards `filter` (#2647). - `Client.queryChannels` coalesces concurrent identical queries via the new `InFlightCache<K, V>` (#2652). - `SortedListX` / `ListX` extensions added in `list_extensions.dart`; duplicate-keyed inputs are tolerated by `merge` (#2660). v10's `IterableMergeExtension.merge` / `.mergeFrom` are kept — `SortedListX` is on `List` and routes there for the new perf paths; the old extension still serves `Iterable<T>` callers in v10. - `ChannelClientState._checkExpiredAttachmentMessages` removed (#2653); v10's `StreamImageCDN.cacheKey` already keeps the image cache valid across signed-URL rotations. - `ChannelClientState.updateChannelState` now identity-short-circuits when `updatedState.messages` is null or the same reference, so downstream `.distinct()` listeners can skip rebuilds. - Reaction listeners now dispatch via `_findMessage` (parentId-aware) while keeping v10's `addMyReaction` / `deleteMyReaction` semantics. `stream_chat_flutter_core` - `BetterStreamBuilder` correctness fixes: mounted guard, error reporting via `FlutterError.reportError`, identity-equal emission gating (#2651). - `MessageListCore` caches its `messagesStream` / `_initialMessages` as fields instead of recomputing in `build()` (#2651). `defaultMessageFilter` takes an optional `currentUserId`. - `StreamChatCore` debounces connectivity events to 3 s (#2652). `stream_chat_flutter` - `scrollable_positioned_list/`: master version taken in full. Bounded `_keyToIndexMap`, `isScrolling` / `isScrollingListenable`, `itemKeyBuilder` anchor preservation, fit-anchor fallback in `UnboundedRenderViewport`, sensible defaults on `scrollTo` (#2651). - `tld.dart` removed (#2654); `StreamMessageComposer` relaxed its URL regex from `[a-z]{2,4}` to `[a-z]{2,}` and dropped the `isValidTLD` filter at both call sites. - `StreamMessageListView` and `separated_reorderable_list_view`: v10's design-refresh version retained. v10 already covers the functional surface; master's identity-preserving micro-optimizations to `updateMessage` are a follow-up. CI / repo - Path/draft gating job (`gate`) added to `legacy_version_analyze`, `check_db_entities`, and `stream_flutter_workflow` (#2669). - Flutter 3.44 fixes (#2667), pana / build cleanups (#2656), local-setup CI fixes (#2650). - `melos.yaml`: kept v10's higher floors; added `firebase_crashlytics` (master's #2665); dropped `sentry_flutter` (per master). Notes / follow-ups - `sample_app/`: v10's redesigned app retained. The Sentry → Firebase Crashlytics migration (#2665) applies to master's pre-redesign sample app and was not ported here; left for a separate pass. - `channel_test.dart` `updateMessage quoted-rewrite > does not rewrite quotes when an existing quoted target is updated without being deleted` is marked `skip:` — v10's `_updateMessages` reconstructs the channel list via `_mergeMessagesIntoExisting`, so identity is not preserved on non-deletion edits. Functional behavior matches master. - `goldens/`: deleted-on-v10 goldens kept deleted; modified-on-both goldens kept at v10's bytes (the redesigned UI is the source of truth). - `stream_message_composer.dart` had `SizeTransition(alignment:)` which was never a valid parameter — switched to `axisAlignment: -1` (the Flutter API the v10 author intended). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brings master's QA / security / perf work into the v10 design-refresh branch. Highlights of what landed in v10 from master: LLC (`stream_chat`) - `Client.queryDrafts` now forwards `filter` (#2647). - `Client.queryChannels` coalesces concurrent identical queries via the new `InFlightCache<K, V>` (#2652). - `SortedListX` / `ListX` extensions added in `list_extensions.dart`; duplicate-keyed inputs are tolerated by `merge` (#2660). v10's `IterableMergeExtension.merge` / `.mergeFrom` are kept — `SortedListX` is on `List` and routes there for the new perf paths; the old extension still serves `Iterable<T>` callers in v10. - `ChannelClientState._checkExpiredAttachmentMessages` removed (#2653); v10's `StreamImageCDN.cacheKey` already keeps the image cache valid across signed-URL rotations. - `ChannelClientState.updateChannelState` now identity-short-circuits when `updatedState.messages` is null or the same reference, so downstream `.distinct()` listeners can skip rebuilds. - Reaction listeners now dispatch via `_findMessage` (parentId-aware) while keeping v10's `addMyReaction` / `deleteMyReaction` semantics. `stream_chat_flutter_core` - `BetterStreamBuilder` correctness fixes: mounted guard, error reporting via `FlutterError.reportError`, identity-equal emission gating (#2651). - `MessageListCore` caches its `messagesStream` / `_initialMessages` as fields instead of recomputing in `build()` (#2651). `defaultMessageFilter` takes an optional `currentUserId`. - `StreamChatCore` debounces connectivity events to 3 s (#2652). `stream_chat_flutter` - `scrollable_positioned_list/`: master version taken in full. Bounded `_keyToIndexMap`, `isScrolling` / `isScrollingListenable`, `itemKeyBuilder` anchor preservation, fit-anchor fallback in `UnboundedRenderViewport`, sensible defaults on `scrollTo` (#2651). - `tld.dart` removed (#2654); `StreamMessageComposer` relaxed its URL regex from `[a-z]{2,4}` to `[a-z]{2,}` and dropped the `isValidTLD` filter at both call sites. - `StreamMessageListView` and `separated_reorderable_list_view`: v10's design-refresh version retained. v10 already covers the functional surface; master's identity-preserving micro-optimizations to `updateMessage` are a follow-up. CI / repo - Path/draft gating job (`gate`) added to `legacy_version_analyze`, `check_db_entities`, and `stream_flutter_workflow` (#2669). - Flutter 3.44 fixes (#2667), pana / build cleanups (#2656), local-setup CI fixes (#2650). - `melos.yaml`: kept v10's higher floors; added `firebase_crashlytics` (master's #2665); dropped `sentry_flutter` (per master). Notes / follow-ups - `sample_app/`: v10's redesigned app retained. The Sentry → Firebase Crashlytics migration (#2665) applies to master's pre-redesign sample app and was not ported here; left for a separate pass. - `channel_test.dart` `updateMessage quoted-rewrite > does not rewrite quotes when an existing quoted target is updated without being deleted` is marked `skip:` — v10's `_updateMessages` reconstructs the channel list via `_mergeMessagesIntoExisting`, so identity is not preserved on non-deletion edits. Functional behavior matches master. - `goldens/`: deleted-on-v10 goldens kept deleted; modified-on-both goldens kept at v10's bytes (the redesigned UI is the source of truth). - `stream_message_composer.dart` had `SizeTransition(alignment:)` which was never a valid parameter — switched to `axisAlignment: -1` (the Flutter API the v10 author intended). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
The repo has three workflows that use
on.pathsfilters to skip non-applicable PRs:legacy_version_analyze.ymlcheck_db_entities.ymlstream_flutter_workflow.ymlGitHub branch protection treats a workflow skipped by
on.pathsas "Expected — Waiting for status to be reported" forever — required checks hang and the PR can't merge. The official GitHub Docs fix is to move the filter to a job-levelif:so skipped jobs reportsuccess.This PR replaces each workflow's
on.pathsfilter with a singlegatejob at the top that centralizes every gating decision — path filter (viadorny/paths-filter), draft state, and push-vs-PR semantics. Downstream jobs collapse to one condition:What's in each workflow
gate.should_runevaluateslegacy_version_analyze.ymlcheck_db_entities.ymlstream_flutter_workflow.ymldraft == falserepeats onanalyze,format,test,buildThe previous
draft-buildplaceholder job instream_flutter_workflow.ymlis also removed — with the gate, every required check on a draft PR is skipped byshould_runevaluating false and therefore reportssuccess. The echo-one-line placeholder is no longer doing any work.Why a single
gatejob and not multiple workflows / merge-gatekeepergatematches GitHub's own troubleshooting docs recommendation.upsidr/merge-gatekeeper,pkgdeps/automerge-gate) are either unmaintained or too young — see review-thread notes for the comparison.paths-ignoretrick clutters the Actions tab with two workflows of the same name and breaks if anyone re-runsflutterfire configureor similar tooling that overwrites the file.Implementation notes
gatejob runsactions/checkout@v6beforedorny/paths-filter@v3. The action uses the GitHub API onpull_requestevents but needsgithistory onpushevents, so the checkout is required.github.event_name == 'push'to preserve that behavior.determine_platformspattern fromdistribute_internal.yml, just shortened togatebecause the output is computed (not a passthrough of filter names).Test plan
successinstead of hanging (this PR itself exercises the case forlegacy_version_analyze)legacy_version_analyzeruns,stream_flutter_workflowruns,check_db_entitiesruns only ifstream_chat_persistence/**is touchedstream_flutter_workflowruns; the others skip and reportsuccesssuccessdraft-buildis not in the required-checks list of branch protection (or remove it if it is)🤖 Generated with Claude Code
Summary by CodeRabbit