2.5 KiB
2.5 KiB
Context
The Platform already validates and dispatches POST /api/v1/server-instances/{id}/deploy; it accepts a draft or failed server only after its dedicated Run endpoint is registered. The server detail page exposes start, stop, and edit actions, but never calls that deployment API. As a result, a newly registered Run remains correctly idle and a failed server cannot be retried through the console.
Goals / Non-Goals
Goals:
- Make the existing deployment transition available to an authorized operator from the server detail header.
- Use the current server config version and a unique idempotency key, then display ordinary operation feedback and refresh state.
- Make the action unavailable while installation is already active or the state is not deployable.
Non-Goals:
- Do not change the backend API, deployment plan, Run protocol, SCUM install sequence, or automatic-start behavior.
- Do not expose protected directories, commands, tokens, or remote connectivity details.
- Do not change the separate build target / dedicated Run identity boundary.
Decisions
- Add the control beside existing lifecycle controls rather than auto-dispatching when a Run heartbeats. Registration proves connectivity only; automatic installation would make starting a downloaded executable perform a material remote write without a final operator action.
- Reuse
platformApiClient.deployServerInstancerather than duplicating request logic. This preserves backend authorization, version fencing, idempotency, and job projection behavior. - Reuse the existing operation store and
refresh()callback so the detail page follows the same feedback pattern as start/stop and immediately shows the job state.
Risks / Trade-offs
- [A stale page submits an outdated version] → The backend's
expectedConfigVersioncheck rejects it; the UI refreshes after the error. - [Users mistake registration for completed installation] → The action label explicitly distinguishes Deploy from Start, and the queued job result is shown through the standard task feedback.
- [A duplicate click creates duplicate work] → A fresh idempotency key is submitted and the backend enforces its lifecycle idempotency rules.
Migration Plan
- Deploy the frontend change with the existing Platform API.
- Open a failed or draft server whose dedicated Run is online and select Deploy / Retry deploy.
- Confirm the resulting install job is assigned to the dedicated endpoint. Rollback only removes the UI control; no data migration is required.
Open Questions
None.