[PR #7232] [MERGED] fix(flutter): read unlabeled Dart Version::String() from engines #7733

Closed
opened 2026-11-03 13:39:59 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/7232
Author: @BeqaKs
Created: 10/26/2026
Status: ✅ Merged
Merged: 11/3/2026
Merged by: @morluto

Base: main ← Head: fix/flutter-unlabeled-dart-version


📝 Commits (2)

  • 2cd058e fix(flutter): read unlabeled Dart Version::String() from engines
  • 2b3e222 fix(flutter): qualify unlabeled version candidates

📊 Changes

8 files changed (+160 additions, -48 deletions)

View changed files

📝 docs/flutter-analysis.md (+14 -7)
📝 docs/testing-lanes.md (+3 -3)
📝 scripts/fixtures/flutter-gallery-expectations.json (+3 -3)
📝 src/domain/flutter/flutterBuildAnalysis.ts (+1 -1)
📝 src/flutter/FlutterBuildProvider.ts (+1 -1)
📝 src/flutter/FlutterPayloadScan.test.ts (+82 -22)
📝 src/flutter/FlutterPayloadScan.ts (+31 -11)
📝 tests/boundary/filesystem/flutterBuildProvider.test.ts (+25 -0)

📄 Description

Summary

  • Accept Dart's unlabeled Version::String() form (<version> (<channel>) (<commit time>) with optional on "<os>_<arch>") in LabeledStringScanner, alongside the existing Dart VM version: label.
  • Keep unmatched unlabeled runs ignored (no dart_version_capped), and update Gallery expectations plus flutter analysis docs/schema wording.

Fixes #7226

Problem and expected behavior

Release libflutter.so embeds the Dart version without the standalone VM label, so identify_flutter_build reported dart_version: null on real APKs including Flutter Gallery.

Change and scope

Pattern match is channel-bearing and whole-run, so ordinary dotted version text stays ignored. Unlabeled matches are candidates by string shape, not verified symbol identities; the result limitation, schema description and documentation now disclose that distinction, including the possibility of unrelated matching text. Contribution scope: ordinary fix within the existing Flutter identification boundary; maintainer scope decision not applicable.

Contract and boundary impact

  • Semantic owner: LabeledStringScanner / Flutter payload scan
  • CLI and MCP: identify_flutter_build dart_version observation only
  • Generated metadata: none authored; schema description text only

Expected effects:

  • Read existing files or captured data.
  • Documentation or usability only; no target interaction. (docs + fixture expectations accompany the scanner fix)

Evidence and regression coverage

  • Tests added or updated: FlutterPayloadScan.test.ts for release/Gallery strings, channel requirement, non-capping misses, and grammar boundaries
  • Base reproduction: labeled-only scanner returned null for Gallery/release engine strings cited in #7226

Validation performed

  • npm run test:local -- src/flutter/FlutterPayloadScan.test.ts — 23 passed
  • npm run check:fast — passed
  • npm run test:focused -- tests/boundary/filesystem/flutterBuildProvider.test.ts — 109 passed, including an unrelated matching string and the qualification limitation
  • npm run docs:check — passed (9 README conformance tests)
  • npm run verify:flutter -- --apk PATH --expectations scripts/fixtures/flutter-gallery-expectations.json — passed against official Flutter Gallery 2.9.2 (SHA-256 659b5fc6a4319dfe4f117d00ad4e7ec004915ebcadcb96628797fb3544040e29); CLI/MCP parity and expected per-ABI strings passed. Full AOT string-pool projection remains bounded and partial.

Author readiness

Human owner: @BeqaKs

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/7232 **Author:** [@BeqaKs](https://github.com/BeqaKs) **Created:** 10/26/2026 **Status:** ✅ Merged **Merged:** 11/3/2026 **Merged by:** [@morluto](https://github.com/morluto) **Base:** `main` ← **Head:** `fix/flutter-unlabeled-dart-version` --- ### 📝 Commits (2) - [`2cd058e`](https://github.com/morluto/rea/commit/2cd058e9882509a4de66b7d34269f4d92ce3d11d) fix(flutter): read unlabeled Dart Version::String() from engines - [`2b3e222`](https://github.com/morluto/rea/commit/2b3e2227232644c8967dd8d6b82e30757731c813) fix(flutter): qualify unlabeled version candidates ### 📊 Changes **8 files changed** (+160 additions, -48 deletions) <details> <summary>View changed files</summary> 📝 `docs/flutter-analysis.md` (+14 -7) 📝 `docs/testing-lanes.md` (+3 -3) 📝 `scripts/fixtures/flutter-gallery-expectations.json` (+3 -3) 📝 `src/domain/flutter/flutterBuildAnalysis.ts` (+1 -1) 📝 `src/flutter/FlutterBuildProvider.ts` (+1 -1) 📝 `src/flutter/FlutterPayloadScan.test.ts` (+82 -22) 📝 `src/flutter/FlutterPayloadScan.ts` (+31 -11) 📝 `tests/boundary/filesystem/flutterBuildProvider.test.ts` (+25 -0) </details> ### 📄 Description ## Summary - Accept Dart's unlabeled `Version::String()` form (`<version> (<channel>) (<commit time>)` with optional ` on "<os>_<arch>"`) in `LabeledStringScanner`, alongside the existing `Dart VM version:` label. - Keep unmatched unlabeled runs ignored (no `dart_version_capped`), and update Gallery expectations plus flutter analysis docs/schema wording. Fixes #7226 ## Problem and expected behavior Release `libflutter.so` embeds the Dart version without the standalone VM label, so `identify_flutter_build` reported `dart_version: null` on real APKs including Flutter Gallery. ## Change and scope Pattern match is channel-bearing and whole-run, so ordinary dotted version text stays ignored. Unlabeled matches are candidates by string shape, not verified symbol identities; the result limitation, schema description and documentation now disclose that distinction, including the possibility of unrelated matching text. Contribution scope: ordinary fix within the existing Flutter identification boundary; maintainer scope decision not applicable. ## Contract and boundary impact - Semantic owner: `LabeledStringScanner` / Flutter payload scan - CLI and MCP: `identify_flutter_build` `dart_version` observation only - Generated metadata: none authored; schema description text only Expected effects: - [x] Read existing files or captured data. - [x] Documentation or usability only; no target interaction. (docs + fixture expectations accompany the scanner fix) ## Evidence and regression coverage - Tests added or updated: `FlutterPayloadScan.test.ts` for release/Gallery strings, channel requirement, non-capping misses, and grammar boundaries - Base reproduction: labeled-only scanner returned null for Gallery/release engine strings cited in #7226 ## Validation performed - `npm run test:local -- src/flutter/FlutterPayloadScan.test.ts` — 23 passed - `npm run check:fast` — passed - `npm run test:focused -- tests/boundary/filesystem/flutterBuildProvider.test.ts` — 109 passed, including an unrelated matching string and the qualification limitation - `npm run docs:check` — passed (9 README conformance tests) - `npm run verify:flutter -- --apk PATH --expectations scripts/fixtures/flutter-gallery-expectations.json` — passed against official Flutter Gallery 2.9.2 (SHA-256 `659b5fc6a4319dfe4f117d00ad4e7ec004915ebcadcb96628797fb3544040e29`); CLI/MCP parity and expected per-ABI strings passed. Full AOT string-pool projection remains bounded and partial. ## Author readiness Human owner: @BeqaKs - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-11-03 13:39:59 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#7733
No description provided.