You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit c19cafb
Browse filesBrowse the repository at this point in the historyBrowse files
| Scope | App-only bounded current-text recovery; existing Play open-testing and TestFlight channels |
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 |Production Android and iOS rebuilt cleanly with the iPad palette-geometry repair; packaging and the bounded Android 16 KiB runtime smoke pass. Final physical acceptance and release admission remain separate gates|
12
+
| State |M-02 and app-only M-04 engineering admission accepted on 31 October for the frozen artifacts below. Final PR required CI and merge precede publishing; M-05 delivery remains 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 |[Prepared release packet](../../../publication/app-0.3.0-build-9-release-packet.md); no submission or availability claim |
15
15
16
+
A post-freeze comment correction clarifies Android's asset/file-access adapter
17
+
semantics. It changes no executable behavior or loading path; the retained
18
+
artifacts remain bound to the frozen runtime and app tree above.
19
+
16
20
## Gate selection
17
21
18
22
This increment changes the app, not the firmware bytes. The
@@ -24,11 +28,11 @@ claim a new firmware release, fresh firmware OI-1 qualification or a Ready badge
24
28
25
29
| Gate | Required evidence | Current disposition |
26
30
|---|---|---|
27
-
| M-02 recovery acceptance | All DR-T01–14 required evidence, including representative physical generated-text recovery and both platform offline/current-board-consent records |Reconcile against the [execution record](00_Execution_Record.md) and actual device reports; installation/scan alone is insufficient|
28
-
| App regression | Accepted source contract, red/green history, locked dependencies, ordinary tests, pinned goldens, platform builds and repository gates |PR #40/post-merge CI passed historically; the final keyboard repairs record 984 ordinary Flutter tests, including 28 shell widget tests, six iOS guide/platform-control tests and one platform-fallback test, plus clean analysis/source gates. Integrated-candidate CI and final physical acceptance remain separate|
29
-
| Five-profile app compatibility | Q01–Q10 below with exact app/firmware identity, actual observations and retained failures |Final complete candidate-bound matrix not yet established|
31
+
| M-02 recovery acceptance | All DR-T01–14 required evidence, including representative physical generated-text recovery and both platform offline/current-board-consent records |Accepted: mandatory DR-T01–14 evidence is reconciled in the [execution record](00_Execution_Record.md) and its iPad/Android reports, including final normal-candidate generated-text recovery, offline restore and current-target Cancel checks|
32
+
| App regression | Accepted source contract, red/green history, locked dependencies, ordinary tests, pinned goldens, platform builds and repository gates |Accepted runtime evidence: 984 ordinary Flutter tests, including 28 shell widget tests, six iOS guide/platform-control tests and one platform-fallback test; 36 Android runtime CI checks; pinned goldens and clean analysis/source gates. The final documentation/rebase head must still pass required PR CI before merge and publishing|
33
+
| Five-profile app compatibility | Q01–Q10 below with exact app/firmware identity, actual observations and retained failures |Accepted Q01–Q10 on the exact named firmware inputs below, with source-impact mapping for earlier unaffected rows and final affected keyboard/recovery reruns on both tablets; retained failures remain visible in the device reports|
30
34
| Production packaging | Android upload signer/AAB/APK/native alignment; iOS distribution export/IPA validation; capability parity | Android and iOS checks below pass for the repaired source and exact retained artifacts |
31
-
| Release review | Frozen artifact identity, resolved mandatory failures, supported scope, privacy/dependency review and recorded acceptance |Not yet admitted|
35
+
| Release review | Frozen artifact identity, resolved mandatory failures, supported scope, privacy/dependency review and recorded acceptance |Accepted app-only M-04 engineering admission for `bef67bd` and the hashes below, with the Lenovo OEM precondition and historical firmware limits retained|
32
36
| M-05 channel delivery | Actual upload/processing/review/availability, followed by store-delivered installed identity and upgrade/launch checks | No upload or new channel delivery established by this preparation |
33
37
34
38
Pilot participation and useful-return evidence remain separate from maintenance
@@ -179,10 +183,10 @@ path. The exact-asset controls observed `onPageStarted`, then `hostReady`, and
179
183
confirmed that `window.pybleBlocks.configureHost` exists. The selected provider
180
184
was installed/enabled and not stopped or suspended at inspection time.
181
185
182
-
The current isolated profile candidate subsequently reached the real Blocks
183
-
workspace. These observations distinguish the retained debug failure from a
184
-
completed profile-candidate failure; they do not identify the original cause
185
-
or prove DR-T12 by themselves. The inline control exposed a possible callback
186
+
The earlier isolated profile candidate subsequently reached the real Blocks
187
+
workspace. Those observations did not establish the cause of the retained
188
+
debug failure or prove DR-T12 by themselves. A later final-candidate profile
189
+
failure was reproduced and isolated separately below. The inline control exposed a possible callback
186
190
ordering hazard, but neither exact-asset control reproduced it, so no startup-protocol
187
191
change or claimed startup fix followed. The physical report must separately record
188
192
actual generated-text handoff, recovery and cold relaunch. Diagnostic fixture
@@ -192,11 +196,73 @@ A separate physical finding established that console Expand did not dismiss
192
196
an Android keyboard owned by a native Blockly field. The final candidate adds
193
197
a narrow current-window dismissal request on Android and iOS while retaining
194
198
layout based on actual insets. The Android rerun observed IME visibility change
195
-
from shown to hidden, an expanded console and retained field text. The iPad
196
-
outcome remains part of its separate physical report. The production artifacts
199
+
from shown to hidden, an expanded console and retained field text. The final iPad
200
+
report also passes reachable Expand/dismissal in both Editor and Blocks. The production artifacts
197
201
above include this repair and the later iPad geometry fallback; the diagnostic controls
198
202
did not change the Blocks startup protocol.
199
203
204
+
## Final Android renderer suppression control
205
+
206
+
The final `bef67bd` isolated qualifier profile subsequently timed out on Blocks
207
+
startup, including Retry and a startup with no active UI-automation polling.
208
+
The failure is retained; earlier profile success does not erase it. An ignored
209
+
instrumented copy of the actual host completed controller setup and asset-load
210
+
submission by 412 ms. At 3 and 9 seconds the native URL was the bundled asset,
211
+
but bounded JavaScript readiness probes timed out. No page-start, page-finished
212
+
or bridge callback arrived; the 15-second watchdog fired at generation zero.
213
+
This observed failure preceded the startup gate, so no host-readiness protocol
214
+
change was justified.
215
+
216
+
Android retained the qualifier's renderer service as pending with no process or
217
+
binder. Its ActivityManager explicitly suppressed service startup. The device's
218
+
DuraSpeed service was enabled and listed the isolated qualifier package in its
219
+
suppression set. The actual production package `dev.pyble.pyble` was absent from
220
+
that set and was not changed. A plain native Activity loading the exact bundled
221
+
assets under the same qualifier APK/UID also failed before any page/bridge
222
+
callback, establishing that Flutter and the Blocks startup gate were not
223
+
necessary for this failure.
224
+
225
+
The ordinary qualifier App info → Battery screen initially selected
226
+
**Optimized**. A scoped, reversible control selected **Unrestricted** for that
227
+
qualifier alone. The same native APK/UID then emitted page-start at 594 ms,
228
+
`hostReady` at 801 ms, page-finished at 809 ms, and successful document/API
229
+
readiness probes at 3 and 9 seconds. DuraSpeed remained globally enabled and
230
+
its global configuration was unchanged. No provider replacement, global
231
+
optimization disable, hidden allowlist mutation, firmware change or app-data
232
+
reset was used. This native control alone was not final app acceptance: a later
233
+
normal-APK shell launch still produced a retained watchdog failure. Both the
234
+
older and final normal profile APKs subsequently opened a valid empty workspace
235
+
through the actual launcher. A helper initially misclassified that ready empty
236
+
state because it waited for enabled Preview code before any blocks existed;
237
+
the raw hierarchy instead showed Visual block workspace, Browse examples and
238
+
Add blocks to generate Python, with no startup error. This oracle correction
239
+
does not erase the separate real watchdog failures.
240
+
241
+
The final normal `945e9746` qualifier then passed Hello example generation,
242
+
native-field keyboard Expand/dismissal with content retained, guarded Editor
243
+
handoff, a local generated-text checkpoint, offline cold relaunch/Restore with
244
+
both radios off, and current-C3 Save Cancel and Run Cancel. A first post-radio
245
+
C3 service-discovery timeout was retained; explicit reconnect succeeded before
246
+
the two Cancel checks. The board was explicitly disconnected afterward.
247
+
No startup source change or extra artifact rebuild followed these controls.
248
+
249
+
After these observations, the qualifier's original **Optimized** battery mode
250
+
was restored through the same ordinary Settings screen. Fresh native hierarchy
251
+
and screenshot receipts show only Optimized checked. The qualifier was removed
252
+
from the device-idle allowlist; the global DuraSpeed configuration is byte-for-
253
+
byte identical to its baseline and remains enabled. The production package
254
+
remains absent from the DuraSpeed suppression/explicit allowlist observations
255
+
and its settings were untouched. The final acceptance therefore records the
256
+
observed Unrestricted/actual-launcher qualification precondition and restoration,
257
+
rather than promising operation while the OS suppresses renderer startup.
258
+
259
+
Raw callback logs, the failed attempts and normal APK identities are retained
260
+
under ignored `local/recovery-completion/android/`. OEM policy, checked-radio
261
+
screenshots and the restoration recipe are under
262
+
`local/recovery-completion/blockly-startup-diagnostic/`. This is an explicit
263
+
device precondition for the isolated qualification container, not a claim of
264
+
unconditional operation while Android suppresses its WebView renderer.
265
+
200
266
## iPad keyboard palette regression
201
267
202
268
On the native-dismissal candidate `01a7ac8`, opening the docked keyboard through
@@ -223,9 +289,30 @@ and runtime `bef67bd`. The complete ordinary suite passes 984 tests; six guide
223
289
regressions cover the actual fallback, Blocks dismissal/host retention,
224
290
maximum/padding behavior, resize ordering, stale callbacks/lifecycle and the
225
291
unchanged Android path. Native iOS profile compilation and static/source gates
226
-
pass. Exact physical iPad palette reopening and reachable Expand/dismissal
227
-
remain acceptance observations in the [execution record](00_Execution_Record.md);
228
-
a production IPA export alone cannot substitute for them.
292
+
pass. Final physical iPad palette reopening and reachable Expand/dismissal
293
+
passed in both Editor and Blocks on `bef67bd`; the iPad report linked from the [execution record](00_Execution_Record.md)
294
+
retains the original failures and measured diagnostic alongside the successful
295
+
reruns. These physical observations, not the IPA export alone, satisfy the
296
+
affected keyboard acceptance.
297
+
298
+
## Dependency review scope
299
+
300
+
On 31 October, GitHub's 19 open Dependabot entries mapped to 12 advisory
301
+
families in the website's npm manifests. Current main already contains fixes
302
+
for 11 families; the braces advisory was withdrawn. A fresh
303
+
`npm audit --audit-level=high --json` exited successfully with no high or
304
+
critical findings. It reports 15 moderate affected dependency nodes from two
305
+
roots: minimatch in development lint tooling and Satori in vinext image tooling.
306
+
No authored affected SVG, cache or TLS invocation was found. Production serves
307
+
static output, and these website dependencies are outside the frozen app
308
+
artifact. The moderate findings remain separate web maintenance; this review
309
+
does not claim that every dependency is vulnerability-free. No alerts were
310
+
dismissed and no dependencies were changed.
311
+
312
+
The retained audit completed at `2026-10-31T12:54:17.290202+00:00` against lockfile
Copy file name to clipboardExpand all lines: docs/publication/app-0.3.0-build-9-release-packet.md
+7-1Lines changed: 7 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,8 @@
5
5
6
6
Prepared 31 October 2026. This is candidate copy for the existing Google Play
7
7
open-testing and TestFlight channels. It does not announce availability, a
8
-
submission, or release admission. The [readiness record](../developments/2026-q4-reliable-workflow/c1-s2/06_Release_Readiness.md)
8
+
submission, or store delivery. Engineering admission is accepted for the frozen
9
+
artifacts; final PR checks and merge precede publishing. The [readiness record](../developments/2026-q4-reliable-workflow/c1-s2/06_Release_Readiness.md)
9
10
owns the artifact and gate states. Confirm that build 9 is unused in each
10
11
account before uploading; a consumed number requires a new source version
11
12
contract and rebuilt artifacts, not a renamed file.
@@ -57,6 +58,11 @@ application identities. Their successful installation does not prove an upgrade
57
58
of `dev.pyble.pyble`, store processing, or store delivery. A distribution export
58
59
also does not establish successful execution on the physical tablet.
59
60
61
+
The [dependency review](../developments/2026-q4-reliable-workflow/c1-s2/06_Release_Readiness.md#dependency-review-scope)
62
+
records the current website audit separately from the frozen mobile artifact:
63
+
no high/critical findings, with moderate web-tooling findings still open for
64
+
maintenance. It does not claim that every dependency is vulnerability-free.
65
+
60
66
## Privacy and recovery scope
61
67
62
68
Candidate 0.3.0 adds an app-private local database containing one current text
0 commit comments