Repository navigation
fix(power): show Bloom Shell shutdown lifecycle (UI-12) - #644
Conversation
|
Pushed follow-up �20bd7e2 after the failed physical gate.\n\nFocused correction:\n- Bloom Shell shutdown now selects the Saving-to-Shutdown lifecycle path.\n- �ootScreen End_Save runs synchronously before shutdown hooks.\n- �ootScreen End runs synchronously afterward and receives a bounded two-second physical dwell.\n- The prior asynchronous renderer race is removed; clean power remains the final operation.\n- Sanitized evidence records that the first signed candidate stayed unconfirmed.\n\nVerification retained for this exact head:\n- focused lifecycle/evidence shell tests: 14/14;\n- exhaustive shell integration: 823/823;\n- native: 595/595;\n- AddressSanitizer: 595/595;\n- manifest/dependency/provenance/transfer gates passed;\n- diff and shell syntax checks passed.\n\nThe earlier candidate remains unconfirmed. I will use a new signed exact-head candidate for the next physical gate. |
|
Second signed Mini Plus physical gate failed on Observed by the maintainer:
Verified recovery:
Follow-up commit |
|
Physical Mini Plus gate: PASS
Structured evidence: Scope remains Mini Plus only; no video capture, non-Plus hardware, audio, gameplay, save-semantics, or soak claim is made. |
|
Merged as The physically verified implementation commit |
Summary
MODE_BLOOM_SHELLin the physical power-hold shutdown path/tmp/.offOrderfrontend return as an expected guarded shutdownThis is an independent UI-12 lifecycle correction based directly on current
main. It is not stacked on another open implementation PR.Fixes #643.
Root cause
system_state_update()already classified the frontend asMODE_BLOOM_SHELL, butkeymon::deepsleep()handled MainUI, GameSwitcher, games, apps, and DraStic only. From Bloom Shell it set the shutdown order, left the frontend running, waited the full 30-second watchdog, and called the force-poweroff path. Becauseruntime.shwas still waiting for Bloom Shell, it never reachedcheck_off_order "End"and never drew Saving or Shutdown. This exactly matches the maintainer's physical observation.Validation
git diff --checkHosted CI passed the required affected ARM build. Hardware workflow run
33398942755then built and signed exact sourcee9ce0c30269b083942f3da3d03a7079a083024cfin 6m33s using the pinned Miyoo toolchain.Device evidence
Before this correction, signed installed version
0.1.0-dev-0b3b5d96(tree-identical to mergeda79d953416cd177d1927a2dd1172f3b184f5b425) passed a controlled post-recovery F1 regression gate on one Miyoo Mini Plus:Structured evidence is in
docs/validation/shell/plus-post-642-f1-20260831.json.The installed-runtime boundary was real: the correction spans persistent
runtime.sh,keymon, and Bloom Shell, while no supported Warm component may coherently replace that set. A signed Full checkpoint was therefore used. The 185,666,311-byte archive matched SHA-2565aed74c2c75fce46d9a02eb8342dcd0c23391111ad76cb8da7b5f09033d4218e; Ed25519 metadata verification passed; on-device staging and preparation reverified it; and retained known-good0.1.0-dev-0b3b5d96remained the explicit rollback source. The exact candidate booted once as0.1.0-dev-e9ce0c30with green aggregate health, associated Wi-Fi, an idle network transaction, a clean key-only listener audit, one Shell and one keymon process, no active session or development overlay, and exact installed Shell/keymon/runtime hashes. That first candidate remained deliberately unconfirmed because the maintainer-observed physical power hold did not show Saving or Shutdown.The final signed candidate
v0.1.0-dev-c1fc6624from commitc1fc66240475a0763d132da84342b8fb3cdeb66cpassed hardware workflow 33455349733. It excludes the legacy battery-header renderer from the fixed Saving and Shutdown surfaces and keeps framebuffer ownership for the complete bounded dwell. The maintainer physically observed both screens, the device powered off, and it returned on the same exact candidate. Installed payload hashes persisted across two boots. Aggregate health, five verified save snapshots, idle network transaction, inactive recovery lease, clean key-only SSH listener policy, and inactive development overlay were then verified before the candidate was confirmed known-good. Structured evidence is indocs/validation/ui/plus-ui12-shutdown-c1fc6624-20260831.json.A malformed validation login briefly sourced inherited
/etc/profileand exposed a pre-existing interactive-SSH Telnet launcher. The exact process was terminated and independent listener audits were clean before staging and after candidate boot. Issue #645 owns that listener-lockdown gap; the candidate's network/SSH/listener binaries are byte-identical to the installed known-good build and this PR does not modify them.Limitations