Skip to content

Conversation

@mtrezza
Copy link
Member

@mtrezza mtrezza commented Nov 28, 2025

Closes #968

Summary by CodeRabbit

  • New Features

    • Added automated monthly dependency audits with security reporting and issue creation.
    • Added an issue template for reporting SDK version conflicts.
  • Documentation

    • Added versioning policy and migration guides; updated package READMEs and CONTRIBUTING guidance for supported versions and conflict handling.
  • Chores

    • Bumped minimum SDK constraints to Dart 3.10.0 and Flutter 3.38.0.
    • Configured Dependabot and updated CI matrices to newer SDK versions.

✏️ Tip: You can customize this high-level summary in your review settings.

@parse-github-assistant
Copy link

parse-github-assistant bot commented Nov 28, 2025

🚀 Thanks for opening this pull request!

@coderabbitai
Copy link

coderabbitai bot commented Nov 28, 2025

Warning

Rate limit exceeded

@mtrezza has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 14 minutes and 54 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 56e4087 and 056e7ae.

📒 Files selected for processing (7)
  • .gitignore (2 hunks)
  • packages/flutter/example/linux/flutter/generated_plugin_registrant.cc (0 hunks)
  • packages/flutter/example/linux/flutter/generated_plugin_registrant.h (0 hunks)
  • packages/flutter/example/linux/flutter/generated_plugins.cmake (0 hunks)
  • packages/flutter/example/windows/flutter/generated_plugin_registrant.cc (0 hunks)
  • packages/flutter/example/windows/flutter/generated_plugin_registrant.h (0 hunks)
  • packages/flutter/example/windows/flutter/generated_plugins.cmake (0 hunks)
📝 Walkthrough

Walkthrough

Adds CI/dependency automation and versioning docs, raises Dart/Flutter SDK constraints, introduces a version-support checker and issue template, and applies widespread formatting changes across library and test files; no functional library API changes besides a few public typedef/typedef additions in Flutter live-list.

Changes

Cohort / File(s) Change Summary
GitHub config & workflows
/.github/ISSUE_TEMPLATE/---3-version-conflict.md, /.github/dependabot.yml, /.github/workflows/ci.yml, /.github/workflows/dependency-audit.yml
New issue template for SDK version conflicts; Dependabot configured for pub (packages/dart, packages/flutter) and Actions; CI matrices updated to newer Dart/Flutter (including beta) and Windows line-ending step; new dependency-audit workflow that runs monthly, audits dependencies, and creates/updates security issues.
Versioning & migration docs
VERSIONING_POLICY.md, MIGRATION_GUIDES.md, CONTRIBUTING.md, packages/dart/README.md, packages/flutter/README.md
New VERSIONING_POLICY specifying a 6-month support window, migration guidance and automation; MIGRATION_GUIDES and CONTRIBUTING updated with conflict-resolution and framework support guidance; package READMEs add supported-versions and conflict-handling sections.
Version support tooling
scripts/check-version-support.js
New Node.js utility computing EOL using a 6-month window, classifying versions (supported/expiring/expired), outputs JSON or Markdown reports, and exports calculateEOL, checkVersionSupport, generateMarkdownTable.
SDK manifests
packages/dart/pubspec.yaml, packages/flutter/pubspec.yaml
Raised minimum Dart SDK to >=3.10.0 <4.0.0; Flutter constraint to >=3.38.0; bumped dev_dependency mockito to ^5.4.6.
Repository config
/.gitignore
Added ignore entry for AI agent files (e.g., /.claude).
Flutter public typedef addition
packages/flutter/lib/src/utils/parse_live_list.dart
Added new public typedef DataGetter<T> = T? Function() (and minor formatting around child-builder types).
Dart library & utils formatting
packages/dart/lib/parse_server_sdk.dart, packages/dart/lib/src/...
Extensive stylistic reflows: multi-line initializer lists, typedef and function signature reformatting, trailing commas, map/list reflows; no semantic/behavioral changes reported.
Flutter library formatting
packages/flutter/lib/...
Formatting changes across Flutter package files, small API-signature formatting moves for getInstance-style methods; one signature formatted as multi-line named params (no param additions).
Dart tests & mocks formatting
packages/dart/test/...
Large-scale formatting and reflow in tests and generated mocks (Mockito), trailing commas and compacted assertions; some tests adjusted for inline data—no logic changes claimed.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Areas to focus on:
    • VERSIONING_POLICY and MIGRATION_GUIDES: confirm the 6‑month support window semantics (start/end dates relative to minor/major releases) align with linked issue #968 and project expectations.
    • SDK constraint bumps (packages/*/pubspec.yaml): verify intended minimums (>=3.10 / Flutter >=3.38) and ensure CI matrices and published package metadata are consistent.
    • scripts/check-version-support.js: validate EOL calculation logic, the embedded release datasets, CLI behavior (exit code on expired versions), and exported API signatures.
    • dependency-audit workflow: review permissions, issue creation/update logic, labeling, and noise/duplication avoidance.
    • New typedef in Flutter live-list: ensure the addition (DataGetter) is intentional for the public API and documented in package README or CHANGELOG.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is severely incomplete, containing only 'Closes #968' without addressing any required template sections like Approach or Tasks. Expand the description to include the Approach section explaining changes made and indicate which Tasks apply (e.g., documentation updates were completed).
Out of Scope Changes check ❓ Inconclusive Most changes align with the versioning policy update objective. However, additions like the new DataGetter typedef in parse_live_list.dart and formatting changes throughout appear unrelated to version removal. Clarify whether the DataGetter typedef addition and extensive code formatting changes are intentional or should be separated into a distinct PR focused on code style improvements.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'feat: Remove support for expired Dart and Flutter versions' clearly and specifically describes the primary change—removing support for outdated SDK versions.
Linked Issues check ✅ Passed The PR successfully addresses issue #968 by updating the Dart/Flutter version support policy from 1 year to 6 months after the next significant release, bumping minimum versions to Dart 3.10 and Flutter 3.38 with comprehensive documentation and CI updates.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link

codecov bot commented Nov 28, 2025

Codecov Report

❌ Patch coverage is 13.94558% with 253 lines in your changes missing coverage. Please review.
✅ Project coverage is 43.46%. Comparing base (f98e85c) to head (056e7ae).
⚠️ Report is 4 commits behind head on master.

Files with missing lines Patch % Lines
packages/dart/lib/src/utils/parse_live_list.dart 0.00% 162 Missing ⚠️
...ackages/flutter/lib/src/utils/parse_live_list.dart 0.00% 34 Missing ⚠️
...ackages/flutter/lib/src/utils/parse_live_grid.dart 0.00% 23 Missing ⚠️
packages/dart/lib/src/utils/parse_utils.dart 66.66% 6 Missing ⚠️
...ages/dart/lib/src/storage/core_store_sem_impl.dart 0.00% 5 Missing ⚠️
packages/flutter/lib/parse_server_sdk_flutter.dart 37.50% 5 Missing ⚠️
...ackages/dart/lib/src/network/parse_dio_client.dart 0.00% 2 Missing ⚠️
packages/dart/lib/src/objects/parse_base.dart 0.00% 2 Missing ⚠️
packages/dart/lib/src/objects/parse_user.dart 0.00% 2 Missing ⚠️
packages/flutter/lib/src/push/parse_push.dart 0.00% 2 Missing ⚠️
... and 9 more
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1052      +/-   ##
==========================================
- Coverage   43.55%   43.46%   -0.10%     
==========================================
  Files          61       61              
  Lines        3577     3587      +10     
==========================================
+ Hits         1558     1559       +1     
- Misses       2019     2028       +9     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/dart/README.md (1)

40-45: Critical: End of Support dates don't match the 6-month policy.

The EOL dates in the compatibility table don't align with the stated 6-month support window. Based on the release dates in scripts/check-version-support.js:

  • Dart 3.2 (released 2023-11-15): Next version 3.3 released 2024-02-15 → EOL should be Aug 2024, not Jan 2025
  • Dart 3.3 (released 2024-02-15): Next version 3.4 released 2024-05-15 → EOL should be Nov 2024, not Apr 2025
  • Dart 3.4 (released 2024-05-15): Next version 3.5 released 2024-08-15 → EOL should be Feb 2025, not Jun 2025
  • Dart 3.5 (released 2024-08-15): No next version yet → EOL is N/A or TBD

Run the check-version-support.js script to generate the correct table:

#!/bin/bash
# Generate correct EOL dates using the version support script
node scripts/check-version-support.js

The script output includes markdown tables that can be copied directly into the README.

🧹 Nitpick comments (12)
.github/dependabot.yml (1)

11-12: Consider using "chore" prefix for dependency updates.

Using "feat" as the commit prefix for dependency updates may trigger feature releases when the updates don't add new features. Consider using "chore" or "build" instead, unless your semantic-release configuration specifically requires "feat" for patch releases.

Apply this diff if you want to use "chore" prefix:

     commit-message:
-      prefix: "feat"
+      prefix: "chore"

Also applies to: 22-23

.github/workflows/dependency-audit.yml (1)

30-36: Avoid duplicate command execution in audit steps.

The outdated dependency checks run the same command twice (once to console, once to summary), which is inefficient.

Use tee to output to both destinations in a single command:

       - name: Check for outdated dependencies
         id: outdated
         working-directory: packages/dart
         run: |
           echo "## Dart Package - Outdated Dependencies" >> $GITHUB_STEP_SUMMARY
-          dart pub outdated --mode=outdated || true
-          dart pub outdated --mode=outdated >> $GITHUB_STEP_SUMMARY || true
+          dart pub outdated --mode=outdated | tee -a $GITHUB_STEP_SUMMARY || true

Also applies to: 62-68

scripts/check-version-support.js (1)

18-31: Add validation comments for manual release date updates.

The hardcoded release dates require manual updates. Consider adding a comment with the source URL for these dates to help maintainers keep them current.

 // Dart version releases (update this manually as new versions are released)
+// Source: https://dart.dev/get-dart/archive
 const DART_RELEASES = [
   { version: '3.2', latest: '3.2.6', releaseDate: '2023-11-15' },
   { version: '3.3', latest: '3.3.4', releaseDate: '2024-02-15' },
   { version: '3.4', latest: '3.4.4', releaseDate: '2024-05-15' },
   { version: '3.5', latest: '3.5.3', releaseDate: '2024-08-15' },
 ];
 
 // Flutter version releases (update this manually as new versions are released)
+// Source: https://docs.flutter.dev/release/archive
 const FLUTTER_RELEASES = [
   { version: '3.16', latest: '3.16.9', releaseDate: '2023-11-15' },
   { version: '3.19', latest: '3.19.6', releaseDate: '2024-02-15' },
   { version: '3.22', latest: '3.22.3', releaseDate: '2024-05-15' },
   { version: '3.24', latest: '3.24.3', releaseDate: '2024-08-15' },
 ];
.github/ISSUE_TEMPLATE/---3-version-conflict.md (1)

40-43: Add language identifier to error message code block.

The code block for the error message should specify a language for proper syntax highlighting and to satisfy markdown linting rules.

 **Error Message:**
-```
+```text
 Paste the full error message from `dart pub get` or `flutter pub get`

</blockquote></details>
<details>
<summary>VERSIONING_POLICY.md (1)</summary><blockquote>

`36-43`: **Clarify "API impact" criteria in version bump table.**

The distinction between "breaking API impact," "non-breaking API impact," and "without API impact" for major dependency changes may be unclear to contributors. Consider adding examples or a footnote explaining what constitutes each category.



Add a footnote or examples section:

```diff
 | Major with breaking API impact | Major |
 | Major with non-breaking API impact | Minor |
 | Major without API impact | Patch |
 | Minor | Patch |
 | Patch | Patch |
+
+**Examples:**
+- Breaking API impact: Dependency changes a method signature we expose in our public API
+- Non-breaking API impact: Dependency adds new features we expose
+- Without API impact: Dependency is internal-only or changes don't affect our public API
MIGRATION_GUIDES.md (7)

21-25: Add language specifier to code block.

Code blocks should specify their language for syntax highlighting. This error output block should use a language identifier.

-```
+```plaintext
 Because your_app depends on parse_server_sdk ^8.0.0 which depends on dio ^5.0.0,
   and your_app depends on another_package ^2.0.0 which depends on dio ^6.0.0,
   version solving failed.
-```
+```

51-51: Wrap bare URL in markdown link syntax.

Bare URLs should be wrapped in markdown links for better formatting and accessibility.

-1. Go to https://github.com/parse-community/Parse-SDK-Flutter/issues
+1. Go to [Parse SDK issues](https://github.com/parse-community/Parse-SDK-Flutter/issues)

79-82: Add language specifier to code block.

This error output code block should specify a language identifier for consistency with other blocks in the document.

-```
+```plaintext
 Because parse_server_sdk >=8.0.0 requires SDK version >=3.2.6 <4.0.0,
   and your project has SDK version 2.19.0, version solving failed.
-```
+```

113-114: Wrap bare URLs in markdown links.

For consistency and better formatting, these URLs should be wrapped in markdown link syntax rather than appearing as bare URLs.

-Dart migration: https://dart.dev/guides/language/evolution
-Flutter migration: https://docs.flutter.dev/release/breaking-changes
+Dart migration: [https://dart.dev/guides/language/evolution](https://dart.dev/guides/language/evolution)
+Flutter migration: [https://docs.flutter.dev/release/breaking-changes](https://docs.flutter.dev/release/breaking-changes)

154-157: Add language specifier to code block.

This error output block should include a language identifier for consistency.

-```
+```plaintext
 Because package_a depends on http ^0.13.0 and package_b depends on http ^1.0.0,
   and both are required by your app, version solving failed.
-```
+```

188-188: Fix heading level to skip only one level.

Markdown heading levels should increment by only one level at a time. Change this h4 to h3.

-#### I Need Dart 3+ Features But Parse SDK Doesn't Support Them Yet <!-- omit in toc -->
+### I Need Dart 3+ Features But Parse SDK Doesn't Support Them Yet <!-- omit in toc -->

194-194: Hyphenate compound modifier.

"Dart 2.x compatible" should be hyphenated as "Dart 2.x-compatible" when used as a compound modifier before "patterns".

-4. Temporarily use Dart 2.x compatible patterns
+4. Temporarily use Dart 2.x-compatible patterns
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f98e85c and 9494667.

📒 Files selected for processing (10)
  • .github/ISSUE_TEMPLATE/---3-version-conflict.md (1 hunks)
  • .github/dependabot.yml (1 hunks)
  • .github/workflows/ci.yml (6 hunks)
  • .github/workflows/dependency-audit.yml (1 hunks)
  • CONTRIBUTING.md (1 hunks)
  • MIGRATION_GUIDES.md (1 hunks)
  • VERSIONING_POLICY.md (1 hunks)
  • packages/dart/README.md (3 hunks)
  • packages/flutter/README.md (3 hunks)
  • scripts/check-version-support.js (1 hunks)
🧰 Additional context used
🪛 LanguageTool
MIGRATION_GUIDES.md

[grammar] ~194-~194: Use a hyphen to join words.
Context: ...ate yourself 4. Temporarily use Dart 2.x compatible patterns ### CI/CD Pipeline ...

(QB_NEW_EN_HYPHEN)

VERSIONING_POLICY.md

[style] ~10-~10: Some style guides suggest that commas should set off the year in a month-day-year date.
Context: ...:** - Dart 3.3.0 released: February 15, 2024 - Dart 3.2.x end-of-support: August 15,...

(MISSING_COMMA_AFTER_YEAR)

packages/dart/README.md

[style] ~35-~35: Using many exclamation marks might seem excessive (in this case: 4 exclamation marks for a text that’s 2788 characters long)
Context: ...ificant version (major or minor).

[!Note]
Support windows are calculated ...

(EN_EXCESSIVE_EXCLAMATION)


[style] ~36-~36: ‘advance notice’ might be wordy. Consider a shorter alternative.
Context: ...he next Parse SDK major release without advance notice. For full details, see [VERSIONING_POLI...

(EN_WORDINESS_PREMIUM_ADVANCE_NOTICE)

packages/flutter/README.md

[style] ~38-~38: Using many exclamation marks might seem excessive (in this case: 5 exclamation marks for a text that’s 3110 characters long)
Context: ...heck both SDK compatibility tables. > [!Note] > Support windows are calculated f...

(EN_EXCESSIVE_EXCLAMATION)


[style] ~39-~39: ‘advance notice’ might be wordy. Consider a shorter alternative.
Context: ...he next Parse SDK major release without advance notice. For full details, see [VERSIONING_POLI...

(EN_WORDINESS_PREMIUM_ADVANCE_NOTICE)

🪛 markdownlint-cli2 (0.18.1)
.github/ISSUE_TEMPLATE/---3-version-conflict.md

41-41: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

MIGRATION_GUIDES.md

21-21: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


51-51: Bare URL used

(MD034, no-bare-urls)


74-74: Link fragments should be valid

(MD051, link-fragments)


79-79: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


113-113: Bare URL used

(MD034, no-bare-urls)


114-114: Bare URL used

(MD034, no-bare-urls)


154-154: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


188-188: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)

packages/flutter/README.md

37-37: Blank line inside blockquote

(MD028, no-blanks-blockquote)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: Test Dart 3.2
  • GitHub Check: Test Dart 3.3
  • GitHub Check: Test Dart 3.5, macOS
  • GitHub Check: Test Dart 3.5, Windows
  • GitHub Check: Test Flutter 3.24, Windows
  • GitHub Check: Test Flutter beta
  • GitHub Check: Test Flutter 3.24, macOS
🔇 Additional comments (14)
.github/workflows/ci.yml (1)

17-19: LGTM! Clear documentation of version support policy.

The added comments effectively document the 6-month support window policy and reference the comprehensive VERSIONING_POLICY.md. This helps maintainers understand when to remove older versions from the CI matrix.

Also applies to: 32-32, 42-42, 87-89, 102-102, 112-112

scripts/check-version-support.js (3)

38-42: LGTM! EOL calculation logic is correct.

The function correctly adds 6 months to the next release date to calculate the end-of-support date, which aligns with the stated policy.


252-254: Module exports are well-structured.

The script properly exports key functions for programmatic use while supporting CLI execution, following Node.js best practices.


49-51: Based on my verification through official sources, I've found important discrepancies in the review comment's verification request. Let me provide the rewritten review comment:


Verify timezone-aware date handling and correct release date references.

The formatDate function uses toISOString() which converts to UTC. If the input dates are intended to be in a specific timezone, this could cause off-by-one-day errors. However, the release dates cited in the verification request contain inaccuracies:

  • Dart 3.2: November 15, 2023 ✓
  • Dart 3.3: February 15, 2024 ✓
  • Dart 3.4: May 14, 2024 (not May 15)
  • Dart 3.5: August 6, 2024 (not August 15)

Verify that the actual release dates in the DART_RELEASES and FLUTTER_RELEASES arrays match official sources:

If the script contains incorrect dates, they should be corrected. Additionally, consider whether the UTC conversion in formatDate aligns with the intended timezone semantics.

CONTRIBUTING.md (1)

13-26: LGTM! Clear contribution guidance added.

The new sections effectively guide contributors on commit message format, dependency management, and framework support policy. The cross-reference to VERSIONING_POLICY.md ensures contributors can find detailed information when needed.

.github/ISSUE_TEMPLATE/---3-version-conflict.md (1)

1-77: LGTM! Comprehensive issue template.

The template provides a well-structured format for users to report version conflicts, with all necessary information fields and helpful references to migration guides. This will make it easier to triage and resolve dependency issues.

VERSIONING_POLICY.md (1)

1-68: LGTM! Comprehensive and clear versioning policy.

The document effectively addresses the issue #968 by establishing a 6-month support window based on the next significant version release date, rather than the previous "1 year after release" policy. The policy is well-structured, includes practical examples, and provides clear guidance for maintainers.

packages/dart/README.md (2)

33-36: LGTM! Policy clearly states the new 6-month support window.

The updated compatibility section correctly reflects the PR objective: changing from "1 year after release" to "6 months after the next significant version release." The note about support windows and the reference to VERSIONING_POLICY.md provide helpful context.


47-57: Helpful troubleshooting guidance for version conflicts.

The numbered checklist and reference to the Version Conflict Guide provide a clear path for users encountering dependency issues. This aligns well with the new issue template and policy documentation.

packages/flutter/README.md (3)

33-33: Verify policy window aligns with VERSIONING_POLICY.md.

The README states a 6-month support window, but the PR objectives reference a 12-month upgrade window based on the next significant Dart/Flutter release. Confirm that the 6-month window is intentional for Flutter specifically (with 12 months potentially applying to Dart), or if this should be harmonized. This should be consistent with the referenced VERSIONING_POLICY.md.


43-48: Verify end-of-support dates are correctly calculated.

Ensure that each end-of-support date is accurately calculated as 6 months from the release date of the next higher Flutter version (not from the version's own release date). Provide verification that these dates align with official Flutter release dates.


50-60: Clear, actionable conflict resolution guidance.

The Handling Version Conflicts section provides a practical step-by-step approach with proper cross-references to MIGRATION_GUIDES.md and related documentation. Well structured for developer self-service.

MIGRATION_GUIDES.md (2)

196-220: Well-structured CI/CD troubleshooting guidance.

Clear step-by-step instructions with appropriate code examples and proper language specifiers. Covers version verification, cache management, and dependency repair.


221-247: Comprehensive coverage of platform-specific and device support scenarios.

Good practical guidance on Flutter Web conflicts and device support considerations, with clear resource links and policy references. The additional resources section properly directs readers to versioning policy and related documentation.

@mtrezza mtrezza changed the title ci: Add version policy feat: Drop support for Dart/Flutter versions that have exceeded their 6-month support window after the next significant version release Nov 28, 2025
@mtrezza
Copy link
Member Author

mtrezza commented Nov 28, 2025

BREAKING CHANGE: This release removes support for Dart 3.2 - 3.9 and Flutter 3.16 - 3.37. These versions exceeded their 6-month support window after the next significant version release. The minimum required versions are now Dart 3.10 and Flutter 3.38.

@mtrezza mtrezza changed the title feat: Drop support for Dart/Flutter versions that have exceeded their 6-month support window after the next significant version release feat: Remove support for expired Dart and Flutter versions Nov 28, 2025
coderabbitai[bot]
coderabbitai bot previously approved these changes Nov 28, 2025
coderabbitai[bot]
coderabbitai bot previously approved these changes Nov 28, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
packages/dart/test/src/objects/parse_object/parse_object_fetch_test.dart (1)

72-72: Minor typo in mock URL.

The URL contains "exampe.com" instead of "example.com". While this is test mock data that's never actually called, fixing it would improve consistency.

-                "url": "https://exampe.com/gyBUISapgwfxB/resume.txt",
+                "url": "https://example.com/gyBUISapgwfxB/resume.txt",
packages/dart/test/src/objects/parse_object/parse_object_delete_eventually_test.dart (1)

34-52: deleteEventually mocks align with intended control flow

Stubbing client1.delete with any cleanly forces the initial failure, and the client2.delete stub with a success payload still matches the expected shape for clearing the eventual delete queue; the assertions over the CoreStore lists remain valid.

packages/dart/test/src/objects/parse_object/parse_object_delete_test.dart (3)

90-93: Good use of full JSON snapshots around error path

Capturing dietPlansObject.toJson(full: true) before and after a failing delete and asserting equality is a solid way to guarantee the object’s state is not mutated on error. The mock and verification for the single delete call look consistent with that intent.

Also applies to: 100-101, 120-123, 129-132


135-193: New delete(id: id) coverage is strong; consider one extra edge check

This new test mirrors the objectId-based success test and nicely validates URL construction, response handling, and data/state equality when using the explicit id parameter.
To make it even more robust, you could also cover the case where dietPlansObject.objectId is set to a different value than id, and assert that the delete still targets id and that no network call is made to the mismatched objectId URL.


195-217: Invalid-argument delete() test behavior is clear

The test correctly asserts that delete() throws when both objectId and id are null or empty, and that the client mock sees no interactions, which tightly guards the early-validation branch.
As a non-functional nit, you could adjust the description to “…both objectId and id parameters are null or empty” for slightly clearer wording.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7bd8658 and ae3e138.

📒 Files selected for processing (55)
  • .gitignore (1 hunks)
  • packages/dart/lib/parse_server_sdk.dart (1 hunks)
  • packages/dart/lib/src/data/parse_core_data.dart (2 hunks)
  • packages/dart/lib/src/data/parse_subclass_handler.dart (1 hunks)
  • packages/dart/lib/src/network/parse_client.dart (1 hunks)
  • packages/dart/lib/src/network/parse_dio_client.dart (2 hunks)
  • packages/dart/lib/src/network/parse_http_client.dart (1 hunks)
  • packages/dart/lib/src/network/parse_live_query.dart (2 hunks)
  • packages/dart/lib/src/network/parse_query.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_acl.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_base.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_config.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_file_base.dart (2 hunks)
  • packages/dart/lib/src/objects/parse_function.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_geo_point.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_installation.dart (3 hunks)
  • packages/dart/lib/src/objects/parse_object.dart (2 hunks)
  • packages/dart/lib/src/objects/parse_operation/parse_operation.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_operation/parse_remove_relation_operation.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_relation.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_session.dart (1 hunks)
  • packages/dart/lib/src/objects/parse_user.dart (5 hunks)
  • packages/dart/lib/src/objects/parse_x_file.dart (1 hunks)
  • packages/dart/lib/src/storage/core_store_sem_impl.dart (1 hunks)
  • packages/dart/lib/src/utils/parse_decoder.dart (1 hunks)
  • packages/dart/lib/src/utils/parse_encoder.dart (1 hunks)
  • packages/dart/lib/src/utils/parse_live_list.dart (20 hunks)
  • packages/dart/lib/src/utils/parse_logger.dart (3 hunks)
  • packages/dart/lib/src/utils/parse_login_helpers.dart (1 hunks)
  • packages/dart/lib/src/utils/parse_utils.dart (4 hunks)
  • packages/dart/test/parse_query_test.mocks.dart (1 hunks)
  • packages/dart/test/src/network/parse_live_query_test.dart (1 hunks)
  • packages/dart/test/src/network/parse_query_test.dart (13 hunks)
  • packages/dart/test/src/network/parse_query_test.mocks.dart (7 hunks)
  • packages/dart/test/src/objects/parse_base_test.dart (3 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_array_test.dart (11 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_create_test.dart (2 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_delete_eventually_test.dart (1 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_delete_test.dart (5 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_distinct_test.dart (7 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_fetch_test.dart (3 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_get_all_test.dart (6 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_get_object_test.dart (2 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_increment_decrement_test.dart (12 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_query_test.dart (6 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_relation_test.dart (12 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_save_eventually_test.dart (1 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_save_test.dart (10 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_test.dart (1 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_test.mocks.dart (7 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_unset_test.dart (2 hunks)
  • packages/dart/test/src/objects/parse_object/parse_object_update_test.dart (3 hunks)
  • packages/dart/test/src/objects/response/parse_response_utils_test.dart (1 hunks)
  • packages/dart/test/src/utils/parse_encoder_test.dart (2 hunks)
  • packages/dart/test/test_utils.dart (3 hunks)
✅ Files skipped from review due to trivial changes (36)
  • packages/dart/test/src/objects/parse_object/parse_object_save_eventually_test.dart
  • packages/dart/lib/src/objects/parse_relation.dart
  • packages/dart/test/src/objects/parse_object/parse_object_unset_test.dart
  • .gitignore
  • packages/dart/lib/src/objects/parse_operation/parse_operation.dart
  • packages/dart/lib/src/utils/parse_login_helpers.dart
  • packages/dart/lib/src/objects/parse_config.dart
  • packages/dart/lib/src/objects/parse_operation/parse_remove_relation_operation.dart
  • packages/dart/lib/src/objects/parse_x_file.dart
  • packages/dart/test/src/objects/parse_object/parse_object_create_test.dart
  • packages/dart/test/src/objects/response/parse_response_utils_test.dart
  • packages/dart/lib/src/objects/parse_acl.dart
  • packages/dart/lib/src/objects/parse_object.dart
  • packages/dart/test/src/network/parse_query_test.mocks.dart
  • packages/dart/test/src/objects/parse_object/parse_object_update_test.dart
  • packages/dart/lib/src/objects/parse_session.dart
  • packages/dart/lib/src/objects/parse_installation.dart
  • packages/dart/test/src/objects/parse_object/parse_object_save_test.dart
  • packages/dart/lib/src/utils/parse_decoder.dart
  • packages/dart/test/test_utils.dart
  • packages/dart/lib/src/storage/core_store_sem_impl.dart
  • packages/dart/test/src/network/parse_query_test.dart
  • packages/dart/lib/src/data/parse_subclass_handler.dart
  • packages/dart/test/src/objects/parse_object/parse_object_query_test.dart
  • packages/dart/test/src/objects/parse_base_test.dart
  • packages/dart/lib/parse_server_sdk.dart
  • packages/dart/lib/src/objects/parse_base.dart
  • packages/dart/lib/src/objects/parse_file_base.dart
  • packages/dart/lib/src/objects/parse_user.dart
  • packages/dart/test/src/objects/parse_object/parse_object_get_object_test.dart
  • packages/dart/test/src/objects/parse_object/parse_object_array_test.dart
  • packages/dart/test/src/utils/parse_encoder_test.dart
  • packages/dart/test/src/network/parse_live_query_test.dart
  • packages/dart/lib/src/network/parse_dio_client.dart
  • packages/dart/lib/src/utils/parse_encoder.dart
  • packages/dart/lib/src/utils/parse_live_list.dart
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Test Flutter beta
  • GitHub Check: Test Flutter 3.38, Windows
  • GitHub Check: Test Dart 3.10, Ubuntu
🔇 Additional comments (29)
packages/dart/lib/src/network/parse_live_query.dart (2)

141-142: Broadcast stream initialization remains correct

_clientEventStream is still derived via .asBroadcastStream(), so multiple listeners (e.g., reconnect controller and others) remain supported; this looks like a formatting-only change with no behavioral impact.


172-174: Singleton instance construction stays behaviorally identical

The introduction of the local instance variable with _instance ?? LiveQueryClient._internal(...) and the subsequent _instance ??= instance keeps lazy, memoized singleton semantics unchanged; this is a harmless readability/formatting tweak.

packages/dart/lib/src/network/parse_query.dart (1)

769-773: Behavior-preserving cascade formatting in first()

The refactor to (QueryBuilder.copy(this)..setLimit(1)).query() is purely stylistic; the cascade and method call order are unchanged and behavior remains identical.

packages/dart/lib/src/objects/parse_function.dart (1)

13-16: LGTM!

The reformatted constructor initializer list improves readability while preserving all functional behavior. The indentation is consistent and follows Dart formatting conventions.

packages/dart/lib/src/network/parse_http_client.dart (1)

141-144: LGTM!

The constructor initializer list reformatting improves readability and aligns with Dart's multi-line formatting conventions. No functional changes.

packages/dart/lib/src/data/parse_core_data.dart (2)

55-59: LGTM!

The multi-line reformatting of the null-coalescing assignment improves readability without changing behavior.


68-74: LGTM!

The multi-line reformatting of the clientCreator default factory assignment enhances clarity. No functional changes.

packages/dart/lib/src/utils/parse_logger.dart (3)

3-7: LGTM!

Function signature reformatted with one parameter per line for improved readability. No functional changes.


26-28: LGTM!

The ternary expression reformatted to multi-line style improves readability. Logic remains unchanged.


38-44: LGTM!

Function signature reformatted with one parameter per line, consistent with the logAPIResponse formatting above.

packages/dart/lib/src/network/parse_client.dart (1)

3-7: LGTM!

The typedef reformatting improves readability with no functional changes to the signature.

packages/dart/lib/src/utils/parse_utils.dart (5)

42-60: LGTM!

The multiline formatting for the function signature and Uri constructor improves readability. No semantic changes.


63-81: LGTM!

Consistent multiline formatting applied to match getSanitisedUri. No semantic changes.


93-124: LGTM!

Formatting changes to function signature, client initialization, and method calls improve readability. Logic remains unchanged.


136-141: LGTM!

Minor formatting adjustments to groupFoldBy and removeWhere calls. Behavior unchanged.


161-163: LGTM!

Multiline formatting for the getStringList call is consistent with other changes in this file.

packages/dart/test/src/objects/parse_object/parse_object_relation_test.dart (1)

1-628: LGTM! Formatting changes align with Dart SDK upgrade.

All changes in this file are purely cosmetic formatting adjustments (trailing commas, line breaks, indentation) with no modifications to test logic, assertions, or behavior. These changes are consistent with running dart format using a newer Dart SDK version, which aligns with the PR's objective of upgrading to newer Dart/Flutter versions.

packages/dart/test/parse_query_test.mocks.dart (1)

1-139: LGTM! Auto-generated mock formatting updates.

This Mockito-generated file has been updated with expanded formatting (additional line breaks, trailing commas, aligned blocks) consistent with modern Dart style. No functional changes—all method signatures, return types, and mock behaviors remain identical.

packages/dart/test/src/objects/parse_object/parse_object_distinct_test.dart (2)

37-86: LGTM! Formatting improvements follow Dart best practices.

The multi-line test description and trailing commas in the JSON payloads are excellent improvements that enhance code formatting and maintainability.


92-97: LGTM! Cleaner Mockito stub and verification calls.

The simplified single-line when() stubs and cleaned-up verify() calls improve readability without changing behavior.

Also applies to: 124-124, 133-133, 153-153

packages/dart/test/src/objects/parse_object/parse_object_fetch_test.dart (1)

36-82: Good expansion of test data for better coverage.

The expanded owner object structure (lines 51-62) now includes realistic ACL permissions, timestamps, and type information, providing more comprehensive test coverage for nested Parse objects with relations. The test data effectively covers various Parse data types (Pointer, GeoPoint, File, Relation).

packages/dart/test/src/objects/parse_object/parse_object_increment_decrement_test.dart (4)

29-84: LGTM! Test refactoring and math are correct.

The test descriptions are now more concise, and the inlined JSON data improves readability. The mathematical expectations are correct (2.5 + 2.5 = 5.0).


85-200: LGTM! Added test coverage is valuable.

The new tests for setIncrement() and setDecrement() accounting for previously set values strengthen the test suite. All mathematical expectations are correct.


300-365: Async test logic is sound, but note timing dependency.

The test correctly verifies that concurrent increments during save() are tracked separately. However, the test relies on hardcoded delays (100ms mock response, 150ms wait), which could theoretically cause flakiness in slow environments.

Consider verifying that CI environments have sufficient resources to reliably meet these timing expectations, especially if you observe intermittent test failures.


367-406: LGTM! Error handling test is well-structured.

The test correctly verifies that internal state remains consistent when save() fails, ensuring no corruption occurs during error scenarios.

packages/dart/test/src/objects/parse_object/parse_object_test.dart (1)

9-10: String reflow keeps test description intact

The concatenated description still reads correctly and this is a pure formatting change with no impact on test behavior.

packages/dart/test/src/objects/parse_object/parse_object_test.mocks.dart (1)

27-41: Generated mocks appear unchanged semantically

The constructor reflow for _Fake* classes and the MockParseClient noSuchMethod stubs maintain the same invocations and return types; changes are formatting-only and safe to keep as regenerated output.

Also applies to: 52-58, 66-82, 91-103, 112-124, 135-161, 169-177, 187-211

packages/dart/test/src/objects/parse_object/parse_object_get_all_test.dart (1)

49-55: Formatting and mock setup changes preserve test behavior

Trailing commas in the desiredOutput map and the expanded when/verify blocks keep the same data and call patterns; the length check against desiredOutput["results"]!.length remains valid given the inferred List type.

Also applies to: 69-80, 83-94, 108-116, 126-133, 152-158

packages/dart/test/src/objects/parse_object/parse_object_delete_test.dart (1)

26-27: Core delete() success test remains sound

The reflowed description and more compact when/verify calls still assert the same behavior: correct delete URL, a successful 200 response, and unchanged object JSON after deletion via objectId. No functional changes here.

Also applies to: 41-47, 79-82

Comment on lines +14 to +21
assert(
latitude < 180,
'Longitude must be within the range (-180.0, 180.0).',
),
assert(
latitude > -180,
'Longitude must be within the range (-180.0, 180.0).',
);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Critical: Longitude validation checks wrong variable.

Lines 14-17 and 18-21 validate latitude against longitude bounds instead of validating longitude. This means:

  • Longitude is never validated, allowing invalid coordinates like (0.0, 200.0) to pass.
  • Valid latitudes in the range [90, 180) would incorrectly fail the assertion.

Apply this diff to fix the validation:

     assert(
-      latitude < 180,
+      longitude < 180,
       'Longitude must be within the range (-180.0, 180.0).',
     ),
     assert(
-      latitude > -180,
+      longitude > -180,
       'Longitude must be within the range (-180.0, 180.0).',
     );
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
assert(
latitude < 180,
'Longitude must be within the range (-180.0, 180.0).',
),
assert(
latitude > -180,
'Longitude must be within the range (-180.0, 180.0).',
);
assert(
longitude < 180,
'Longitude must be within the range (-180.0, 180.0).',
),
assert(
longitude > -180,
'Longitude must be within the range (-180.0, 180.0).',
);
🤖 Prompt for AI Agents
In packages/dart/lib/src/objects/parse_geo_point.dart around lines 14 to 21, the
two assertion checks are incorrectly validating the variable latitude against
longitude bounds; change both assertions to validate longitude instead (i.e.,
assert(longitude < 180, 'Longitude must be within the range (-180.0, 180.0).')
and assert(longitude > -180, 'Longitude must be within the range (-180.0,
180.0).')), leaving the messages intact so longitude is actually validated and
latitude assertions remain correct elsewhere.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.gitattributes (1)

4-15: Consider extending coverage to other generated file types.

While *.mocks.dart is covered, other generated files (e.g., *.g.dart from build_runner, *.config.dart, etc.) may also benefit from explicit LF normalization. You might preemptively add them here or document which generated patterns are already handled by the auto-normalize fallback.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ae3e138 and ca49b3a.

📒 Files selected for processing (1)
  • .gitattributes (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Test Dart 3.10, macOS
  • GitHub Check: Test Flutter 3.38, Windows
  • GitHub Check: Test Flutter 3.38, Ubuntu
🔇 Additional comments (1)
.gitattributes (1)

1-15: ✓ Clean .gitattributes setup for line ending normalization.

The file correctly enforces LF line endings across all key file types (Dart, YAML, Markdown, JSON, shell scripts, and generated mocks). The pattern ordering is sound—general patterns precede specific overrides—and the text=auto fallback is a sensible default for other files.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.github/workflows/ci.yml (1)

48-53: Review line ending normalization script for shell compatibility.

The Windows line ending normalization uses find ... -exec ... \; syntax which may have compatibility concerns depending on the shell environment. While the sed fallback is prudent, consider a more robust approach.

The current script attempts dos2unix then falls back to sed. Consider this more robust alternative:

-      - name: Normalize line endings in generated mock files (Windows)
-        if: matrix.os == 'windows-latest'
-        shell: bash
-        run: |
-          find packages/dart/test -name "*.mocks.dart" -type f -exec dos2unix {} \; 2>/dev/null || \
-          find packages/dart/test -name "*.mocks.dart" -type f -exec sed -i 's/\r$//' {} \;
+      - name: Normalize line endings in generated mock files (Windows)
+        if: matrix.os == 'windows-latest'
+        shell: bash
+        run: |
+          find packages/dart/test -name "*.mocks.dart" -type f | while read file; do
+            dos2unix "$file" 2>/dev/null || sed -i 's/\r$//' "$file"
+          done

This approach avoids potential shell quoting issues with -exec and provides clearer error handling.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca49b3a and 7fed11a.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml (3 hunks)
🔇 Additional comments (2)
.github/workflows/ci.yml (2)

105-114: LGTM: Flutter setup logic correctly handles both beta and version-specific channels.

The conditional setup steps properly distinguish between beta and stable Flutter versions, ensuring the correct installation method is used for each.


17-34: Cannot verify version policy alignment—next significant versions lack stable release dates.

The Dart 3.10 and Flutter 3.38 versions were released on November 12, 2025 (just now). However, the review comment claims these versions reflect a "6 months after next significant version release" policy. This verification is inconclusive because:

  • Dart 3.11: No stable release date announced (tentative only, expected ~3 months after 3.10 per cadence)
  • Flutter 3.39: Still in beta/candidate state; no stable release date available

The minimum versions set in the CI cannot yet be validated against the stated 6-month post-release policy, since the subsequent versions required for that calculation do not have published release dates. The policy comment may reflect planned future alignment rather than current verification.

Recommendation: Verify with the PR author whether these versions were selected based on estimated release timelines or a different criterion, and confirm the VERSIONING_POLICY.md actually exists and documents this 6-month window.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7fed11a and 2aee2f0.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml (3 hunks)
🔇 Additional comments (3)
.github/workflows/ci.yml (3)

40-45: Verify Windows git configuration necessity.

The post-checkout git reconfiguration using core.autocrlf false, git rm --cached -r ., and git reset --hard is a heavy-handed approach. While reasonable in a CI context with fresh checkouts, confirm this is the intended approach for normalizing line endings and that it won't interfere with subsequent steps. Consider whether pre-checkout configuration via action parameters would be cleaner if available.


22-34: Version matrix updates align with PR objectives.

The Dart and Flutter matrices correctly reflect the new minimum versions (3.10.0 and 3.38.0 respectively), remove support for expired versions, maintain multi-platform coverage (Ubuntu, macOS, Windows), and include beta channel testing for early identification of breaking changes. Implementation is clear and well-structured.

Also applies to: 87-99


156-156: Node.js version 24 is appropriate, though not the absolute latest.

As of November 2025, Node.js v24 is designated as Active LTS (Long-Term Support). While v25.2.1 is the latest Current release, v24 remains a supported, stable version suitable for production use in CI workflows. Using an LTS version is a common and valid practice. No update is required unless the project explicitly requires the latest release branch.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
.github/workflows/ci.yml (1)

17-18: Version support policy comments still reference incorrect timeframe.

The comments state "6 months after next significant version release" but the PR objectives specify a "12-month upgrade window" after the next significant release. This should be updated for consistency across both Dart and Flutter policy references.

Apply this diff to update both sections:

-          # Version Support Policy: 6 months after next significant version release
+          # Version Support Policy: 12 months after next significant version release
           # See VERSIONING_POLICY.md for full details

This applies to:

  • Line 17 (Dart section)
  • Line 82 (Flutter section)

Also applies to: 82-83

🧹 Nitpick comments (2)
packages/flutter/test/src/storage/core_store_directory_io_test.dart (2)

62-90: iOS migration test logic looks solid; typo in assertion reason

The test correctly verifies that the old DB file is removed, the new directory is libraryPath, and the copied file matches the original size; the revised newDBFilePath construction at Line 83 is clear and idiomatic.

Very minor: the failure reason at Line 89 says “coped db file”; consider changing to “copied db file” for clarity.


128-167: Non‑iOS platforms loop test correctly guards migration; consider isolating platform override

Using TargetPlatform.values.toSet()..remove(TargetPlatform.iOS) (Lines 134–135) is a nice way to cover all non‑iOS platforms, and the assertions that the DB file remains unchanged and dbDirectory == applicationDocumentsPath (Lines 147–164) accurately reflect the intended behavior.

One minor improvement to avoid leaking state into other tests: you could reset debugDefaultTargetPlatformOverride after the loop, or register a teardown inside this test, for example:

-        () async {
-          final targetPlatforms = TargetPlatform.values.toSet();
+        () async {
+          final targetPlatforms = TargetPlatform.values.toSet();
           targetPlatforms.remove(TargetPlatform.iOS);
@@
-          for (final platform in targetPlatforms) {
+          addTearDown(() => debugDefaultTargetPlatformOverride = null);
+
+          for (final platform in targetPlatforms) {
             debugDefaultTargetPlatformOverride = platform;

Not required for correctness here, but it makes the test more self-contained.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2aee2f0 and 56e4087.

📒 Files selected for processing (10)
  • .github/workflows/ci.yml (3 hunks)
  • packages/flutter/lib/parse_server_sdk_flutter.dart (2 hunks)
  • packages/flutter/lib/src/push/parse_push.dart (2 hunks)
  • packages/flutter/lib/src/storage/core_store_directory_io.dart (1 hunks)
  • packages/flutter/lib/src/storage/core_store_sembast.dart (1 hunks)
  • packages/flutter/lib/src/storage/core_store_shared_preferences.dart (1 hunks)
  • packages/flutter/lib/src/utils/parse_live_grid.dart (3 hunks)
  • packages/flutter/lib/src/utils/parse_live_list.dart (7 hunks)
  • packages/flutter/test/parse_client_configuration_test.dart (1 hunks)
  • packages/flutter/test/src/storage/core_store_directory_io_test.dart (5 hunks)
✅ Files skipped from review due to trivial changes (7)
  • packages/flutter/test/parse_client_configuration_test.dart
  • packages/flutter/lib/src/storage/core_store_directory_io.dart
  • packages/flutter/lib/src/storage/core_store_shared_preferences.dart
  • packages/flutter/lib/parse_server_sdk_flutter.dart
  • packages/flutter/lib/src/push/parse_push.dart
  • packages/flutter/lib/src/storage/core_store_sembast.dart
  • packages/flutter/lib/src/utils/parse_live_grid.dart
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Test Flutter 3.38, macOS
  • GitHub Check: Test Flutter beta
  • GitHub Check: Test Flutter 3.38, Windows
  • GitHub Check: Test Flutter 3.38, Ubuntu
🔇 Additional comments (11)
.github/workflows/ci.yml (5)

22-30: Dart version constraint updates align with PR objectives.

The minimum Dart version is correctly raised to 3.10.0 across all platforms (Ubuntu, macOS, Windows), removing support for expired versions 3.2–3.9 as specified in the PR.


31-34: Beta channel addition for early breaking change detection.

Adding the Dart beta channel to the test matrix is a good practice for identifying breaking changes early in the development cycle.


40-45: Windows git configuration for line ending handling.

The new step configures git to handle line endings correctly on Windows, which prevents checkout-related issues on that platform. This is a reasonable addition to the CI pipeline.


87-95: Flutter version constraint updates align with PR objectives.

The minimum Flutter version is correctly raised to 3.38.1 across all platforms (Ubuntu, macOS, Windows), removing support for expired versions 3.16–3.37 as specified in the PR.


96-99: Beta channel addition for early breaking change detection.

Adding the Flutter beta channel to the test matrix is a good practice for identifying breaking changes early in the development cycle.

packages/flutter/lib/src/utils/parse_live_list.dart (3)

13-14: LGTM! Clean public API addition.

The DataGetter typedef is well-named, follows the existing pattern of StreamGetter, and clearly represents an optional data loader for ParseLiveList elements.


221-229: Breaking change appropriately enforced.

Making childBuilder required is a breaking change, but it's justified since the widget cannot function without it (always invoked at line 301). All existing usages already provide this parameter with a fallback to defaultChildBuilder.


4-8: Consistent formatting improvements throughout.

The multiline formatting applied to typedefs, function parameters, and constructor calls improves readability and aligns with modern Dart formatting conventions from the updated SDK versions.

Also applies to: 72-75, 112-115, 121-138, 184-208, 251-256, 261-264

packages/flutter/test/src/storage/core_store_directory_io_test.dart (3)

93-125: iOS “no source db in old dir” test is well‑structured

This test cleanly captures the “no-op migration” scenario when the DB exists only in LibraryDirectory: using dbFileInNewPath (Lines 101–103, 105, 107–108) and asserting unchanged size and last-modified timestamp plus dbDirectory == libraryPath (Lines 115, 121, 123) is precise and non-flaky for this use case.

No issues from my side.


182-185: Library DB helper path join is clear and consistent

Switching create1MBParseDBFileInLibraryPath (Line 183) to a single-line path.join(libraryPath, 'parse', 'parse.db') keeps behavior identical and improves readability relative to the previous multiline construction.

Looks good.


217-220: applicationDocumentsPath formatting change is non-functional

The multiline path.join for applicationDocumentsPath (Lines 217–220) is purely stylistic and keeps the effective path unchanged while matching the surrounding style.

No concerns here.

@mtrezza mtrezza merged commit dbeb5cb into parse-community:master Nov 28, 2025
11 of 13 checks passed
parseplatformorg pushed a commit that referenced this pull request Nov 28, 2025
# [9.0.0](dart-8.0.2...dart-9.0.0) (2025-11-28)

### Features

* Remove support for expired Dart and Flutter versions ([#1052](#1052)) ([dbeb5cb](dbeb5cb))

### BREAKING CHANGES

* This release removes support for Dart 3.2 - 3.9 and Flutter 3.16 - 3.37. These versions exceeded their 6-month support window after the next significant version release. The minimum required versions are now Dart 3.10 and Flutter 3.38. ([dbeb5cb](dbeb5cb))
@parseplatformorg
Copy link

🎉 This change has been released in version 9.0.0

parseplatformorg pushed a commit that referenced this pull request Nov 28, 2025
# [10.0.0](flutter-9.0.0...flutter-10.0.0) (2025-11-28)

### Bug Fixes

* `ParseXFile` uploads file with content-type `application/octet-stream` if not explicitly set ([#1048](#1048)) ([a47f2a0](a47f2a0))
* Add support for Dart 3.4, 3.5; remove support for Dart 3.0, 3.1 ([#1016](#1016)) ([a3449f4](a3449f4))
* HTTP client exception not handled properly resulting in incorrectly formatted error ([#1021](#1021)) ([4f20640](4f20640))

### Features

* Add client access via `ParseDioClient.client` and `ParseHTTPClient.client` ([#1025](#1025)) ([af14388](af14388))
* Remove support for expired Dart and Flutter versions ([#1052](#1052)) ([dbeb5cb](dbeb5cb))

### BREAKING CHANGES

* This release removes support for Dart 3.2 - 3.9 and Flutter 3.16 - 3.37. These versions exceeded their 6-month support window after the next significant version release. The minimum required versions are now Dart 3.10 and Flutter 3.38. ([dbeb5cb](dbeb5cb))
@mtrezza mtrezza deleted the feat/version-policy branch November 29, 2025 05:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Incorrect Dart support policy

2 participants