@startuml title A/B preparation and activation skinparam shadowing false skinparam monochrome true participant "OTA manager" as Manager participant Installer database "Slot B" as B database "OTA progress" as Progress participant "Boot control" as Boot note over Manager, Boot A is confirmed. B is inactive. No earlier trial is pending. One installer owns B. A and shared data are preserved. end note Manager -> Progress : Save intent: release and target B Manager -> Installer : Prepare B Installer -> B : Write release Installer -> B : Complete required storage operations Installer -> B : Read and verify installed contents Installer --> Manager : Verified expected release note over Manager, Boot Reset before activation: boot A. Inspect B and verify again before a new activation request. end note Manager -> Progress : Save prepared release B Manager -> Boot : Save trial request for B Boot -> Boot : Persist target and attempt limit note right of Boot Interrupted state write: read valid old or new state, or enter defined recovery. end note Boot --> Manager : Trial request saved note over Manager, Boot Reset here: boot control may start B. Old OTA progress must not cause a rewrite or fresh attempts. end note Manager -> Progress : Save trial-requested result Manager -> Boot : Restart into trial ref over Manager, Boot Existing A/B trial boot, checks, and confirmation diagram end ref legend bottom Success path only. Any error stops forward progress and requires state inspection. Arrows assume completed durable operations under the platform storage contract. A saved trial request is not confirmation. endlegend @enduml