|
6 | 6 | | Field | Record | |
7 | 7 | |---|---| |
8 | 8 | | Date | 31 October 2026, Asia/Bangkok | |
9 | | -| Scope | App-only bounded current-text recovery; existing Play open-testing and TestFlight channels | |
| 9 | +| Scope | App-only bounded current-text recovery; existing Play open-testing and TestFlight channels, with subsequent explicit owner authorization to promote the same accepted Android build to production | |
10 | 10 | | Runtime source | Recovery baseline plus landscape layout, native keyboard dismissal and iPad palette-geometry repairs at `bef67bded9e5b83437e3eb0e2ec4be6a4cfd1a64` | |
11 | 11 | | Build checkout | Release worktree `c6e685dd3ebe718ed89fcfe58e441331eb174648`; app tree `60b3a68b693551af5d83076547c502f69838e052`, verified identical to the runtime baseline | |
12 | | -| State | M-02 and app-only M-04 engineering admission accepted on 31 October for the frozen artifacts below. [PR #41](https://github.com/PyBLE-dev/PyBLE/pull/41) merged at `247e58a` after all 36 final-head checks passed; M-05 is partial: internal-account TestFlight delivery verified; external build 9 is submitted and Waiting for Review; Google Play open-testing build 9 is submitted with Changes in review; approval and delivery remain pending | |
| 12 | +| State | M-02 and app-only M-04 engineering admission accepted on 31 October for the frozen artifacts below. [PR #41](https://github.com/PyBLE-dev/PyBLE/pull/41) merged at `247e58a` after all 36 final-head checks passed; M-05 is partial: internal-account TestFlight delivery verified; external build 9 is submitted and Waiting for Review; Google Play open-testing build 9 is submitted with Changes in review; production promotion is blocked on the audience/Bluetooth requirement below; approval and delivery remain pending | |
13 | 13 | | Local evidence | Ignored `local/recovery-completion/release/candidate-bef67bd/`: build/check logs, source/artifact manifests, runtime evidence and retained signed binaries | |
14 | 14 | | Public copy | [Release packet](../../../publication/app-0.3.0-build-9-release-packet.md); build-9 test details saved and app description publicly verified; TestFlight delivery observed for the existing internal account only | |
15 | 15 |
|
@@ -516,3 +516,72 @@ The uniquely staged Downloads AAB was removed after hash/size verification; |
516 | 516 | No store approval, live build-9 rollout or Android installation of the update |
517 | 517 | has been observed. PYB-014.1 submission is complete for the selected channels; |
518 | 518 | PYB-014.2 and M-05 remain partial until the remaining delivery evidence exists. |
| 519 | + |
| 520 | +## 31 October Android production scope decision |
| 521 | + |
| 522 | +After the open-testing submission above, the user explicitly requested Android |
| 523 | +production release of `0.3.0 (9)`. This is the separate production decision |
| 524 | +required by [PYB-014.1](../05_Product_Backlog_and_Stories.md#35-release-and-channel-verification). |
| 525 | +It extends the selected track scope to production using the same accepted AAB |
| 526 | +from the Play artifact library; it does not authorize a new binary or another |
| 527 | +build-9 upload. The frozen source, signed artifact hash, packaging checks and |
| 528 | +app-only M-04 engineering admission remain unchanged. The earlier |
| 529 | +`15:23:55 UTC` open-testing receipt and production-build-8 baseline remain dated |
| 530 | +history. |
| 531 | + |
| 532 | +The production draft uses accepted build `9` from the artifact library. Its |
| 533 | +preview passed and requested a full rollout to the existing 178 countries and |
| 534 | +regions. The final Restart review confirmation was **not confirmed**; production |
| 535 | +build `9` has not been submitted for review or observed live. The earlier |
| 536 | +open-testing review remains separate. |
| 537 | + |
| 538 | +The actual maintained target-audience settings include ages **9–12, 13–15, |
| 539 | +16–17 and 18+**, with a Families commitment last updated on 7 August. Console |
| 540 | +showed no required actions, ten completed App content declarations and no |
| 541 | +policy issues. Those automated/account views do not resolve the specific |
| 542 | +implementation requirement found during source review. |
| 543 | + |
| 544 | +For an audience including children, the current [Google Play Families policy](https://support.google.com/googleplay/android-developer/answer/9893335?hl=en) |
| 545 | +requires Companion Device Manager (CDM) when requesting Bluetooth, with an |
| 546 | +exception only for apps targeting OS versions that cannot support CDM. |
| 547 | +[Android documents CDM from API 26](https://developer.android.com/develop/connectivity/bluetooth/companion-device-pairing). |
| 548 | +This candidate supports API 24 and later and targets API 36, including the tested |
| 549 | +API-31 Lenovo; the incompatible-OS-only exception does not apply. The frozen |
| 550 | +[scan adapter](../../../../app/lib/ble/fbp_ble_adapter.dart) invokes |
| 551 | +`FlutterBluePlus.startScan`. The [locked](../../../../app/pubspec.lock) |
| 552 | +`flutter_blue_plus_android 7.0.4` path requests `BLUETOOTH_SCAN` directly and calls |
| 553 | +`BluetoothLeScanner.startScan`; the reviewed path does not use CDM. |
| 554 | + |
| 555 | +This is a pre-existing Android package/audience issue, also relevant to the |
| 556 | +ongoing open-testing review and existing production baseline; it is not a |
| 557 | +requirement unique to production promotion. The previously submitted open-testing |
| 558 | +review has not been changed while the owner clarifies the audience. Its accepted |
| 559 | +submission does not establish policy clearance. |
| 560 | + |
| 561 | +The newly requested production promotion is therefore **blocked by the saved |
| 562 | +audience and the Bluetooth implementation mismatch**, not by a Google validation |
| 563 | +error. The owner's actual intended audience must be established before choosing an |
| 564 | +accurate audience correction or a separately specified and qualified |
| 565 | +implementation change. No audience declaration has been changed to bypass |
| 566 | +this decision. The broader Data safety worksheet remains a conservative |
| 567 | +proposal, not a newly attested declaration or an additional established |
| 568 | +production blocker. Existing scoped M-02/app-only M-04 engineering results stay |
| 569 | +valid; they do not establish current Families compliance or unconditional |
| 570 | +production admission. |
| 571 | + |
| 572 | +The production preparation and unchanged App content observations are retained |
| 573 | +in `local/recovery-completion/android/play-console-production/production-release-preparation.json`, |
| 574 | +SHA-256 `c8504d5dbf278c8c2d7544e084979afcc181928bdb58be5458b2f8582ed32e86`. |
| 575 | +Its hold was recorded at `2026-10-31T15:37:16Z` with the final confirmation still |
| 576 | +open and unconfirmed. The [Data safety assessment](../../../publication/google-play-data-safety.md#31-october-2026--actual-console-inspection-and-audience-hold) |
| 577 | +records the observed saved answers without adopting or reattesting them. |
| 578 | + |
| 579 | +The immutable source/policy audit is retained privately as |
| 580 | +`local/recovery-completion/android/play-console-production/policy-review/families-bluetooth-review.json`, |
| 581 | +SHA-256 `44f6a9ffefc12b7be4a60a1f0ef91ed791072f303eb934c3c0d0efbb4fa7c8a0`. |
| 582 | +It binds the frozen source, admitted AAB, supported API range, locked plugin and |
| 583 | +saved audience evidence; the same directory retains the reviewed policy page. |
| 584 | + |
| 585 | +The iPad's final observed external state remains Waiting for Review at |
| 586 | +`15:23:25 UTC`; its verified internal-account delivery is separate. No further |
| 587 | +iPad operation is required to document that snapshot. |
0 commit comments