Skip to content

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

Open
chrysh wants to merge 1 commit into
OpenPRoT:mainfrom
9elements:compose-updatable
Open

chrysh wants to merge 1 commit into
OpenPRoT:mainfrom
9elements:compose-updatable

Conversation

@chrysh

@chrysh chrysh commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

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 2 times, most recently from 6fe01da to ace86fe Compare August 27, 2026 19:30
@chrysh
chrysh force-pushed the compose-updatable branch 5 times, most recently from 0f07730 to 28c306e Compare September 22, 2026 11:44
@chrysh
chrysh marked this pull request as ready for review September 22, 2026 11:45
@chrysh
chrysh requested review from leongross and rusty1968 and removed request for rusty1968 September 22, 2026 11:45
BoardCapabilities gains an Updatable associated type and Board an
updatables array, indexed like images. request_update is the seam
between an update frontend (PLDM FD, a staged image) and the
orchestrator: driver.submit_update(target) records the job, then
Event::UpdateRequest is dispatched. The order matters: StageUpdate
with no stored job fails closed, and a refused submit (unknown id,
update already in flight) injects no event. The executors for the
update quartet wait on the update-pump design.

Event::UpdateRequest carries no target by design: the machine
supervises one update at a time and never inspects which component
it is. The driver resolves the target before injecting the event.

ReportUpdateDeferred and ReportUpdateAborted clear pending_update
so a deferred request or an aborted update does not permanently
block the slot.

Assisted-by: Claude (Anthropic)

This branch has not been deployed

No deployments
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.

2 participants