Skip to content

orchestrator: Wire the Updatable seam and the update frontend connection - #441

Draft
chrysh wants to merge 2 commits into
OpenPRoT:mainfrom
9elements:compose-updatable
Draft

orchestrator: Wire the Updatable seam and the update frontend connection#441
chrysh wants to merge 2 commits into
OpenPRoT:mainfrom
9elements:compose-updatable

Conversation

@chrysh

@chrysh chrysh commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

This PR stays in draft until we agreed on how Events are injected into the SM.

The board composes the update capability: BoardCapabilities gains an Updatable associated type and Board an updatables array, indexed like images.

On top of that, the connection between an update frontend (PLDM FD, staged blob) and the SM: driver.submit_update(target) records the in-flight job — unknown id and double submit are refused, nothing stored on refusal — and request_update submits first, then dispatches Event::UpdateRequest. The order is load-bearing: StageUpdate can never run without a target, and a refused request never reaches the SM; the frontend answers the requester over its own protocol.

The update-quartet executors are not in here; they follow with the update pump. Until then the end-to-end test pins today's fail-closed behavior (the Updating entry effects latch Locked).

Progress toward 9elements#8.

@chrysh
chrysh force-pushed the compose-updatable branch from 10b87c3 to 6fe01da Compare August 26, 2026 11:24
chrysh added 2 commits August 27, 2026 21:19
BoardCapabilities gains an Updatable associated type and Board an
updatables array, indexed like images. Wiring only: the executors for
the update quartet wait on the update-pump design, since a staging
transfer spans many event-loop iterations and cannot run inside one
effect.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
request_update is the seam between an update frontend (PLDM FD, staged
blob) and the orchestrator: driver.submit_update(target) records the
job, then Event::UpdateRequest is dispatched. The order is load-bearing:
StageUpdate with no stored job fails closed, and a refused submit
(unknown id, update already in flight) injects no event; the frontend
answers the requester over its own protocol.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
@chrysh
chrysh force-pushed the compose-updatable branch from 6fe01da to ace86fe Compare August 27, 2026 19:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant