---
ui_doc_type: component
component_id: runner-self-update-form
status: 구현됨
source_evidence:
  - type: code
    path: packages/flutter/oto_console/lib/src/oto_runners_surface.dart
    notes: "_buildSelfUpdateForm 구현"
  - type: code
    path: packages/flutter/oto_console/lib/src/oto_console_contract.dart
    notes: "OtoRunnerSelfUpdateDraft validation"
  - type: docs
    path: agent-roadmap/sdd/control-plane-product-surface/control-plane-security-audit-surface/SDD.md
    notes: "self-update-runner write action audit 후보"
---

# Runner Self Update Form

Component ID: `runner-self-update-form`

Status: `구현됨`

## Source Evidence

| Type | Path | Notes |
|------|------|-------|
| code | `packages/flutter/oto_console/lib/src/oto_runners_surface.dart` | `_buildSelfUpdateForm` 구현 |
| code | `packages/flutter/oto_console/lib/src/oto_console_contract.dart` | `OtoRunnerSelfUpdateDraft` validation |
| docs | `agent-roadmap/sdd/control-plane-product-surface/control-plane-security-audit-surface/SDD.md` | self-update write action audit 후보 |

## Purpose

runner별 target version과 HTTPS download URL을 받아 self-update action을 제출한다.

## Used By

- `runners`: `runners.self-update-form`

## Anatomy

- version text field
- download URL text field
- Update button
- inline submitting spinner
- action feedback

## Jenkins Reference Alignment

- Jenkins plugin/core update action의 운영 밀도를 참고하되, runner self-update는 OTO 고유 action으로 정의한다.
- HTTPS URL guard는 Jenkins update center처럼 신뢰 가능한 artifact source를 요구하는 UX 신호로 둔다.
- update accepted/deferred/failed 결과는 같은 runner row 안에서 확인할 수 있어야 한다.

## Target Layout Delta

- self-update form은 runner row의 always-open 입력 영역이 아니라 action panel 또는 inline expanded action으로 제한한다.
- version/URL validation은 유지하고, failed/deferred feedback은 같은 runner context에 묶는다.
- 현재 form은 runner management action layout 반영이 완료되어 `구현됨` 상태다.

## Variants

- enabled: version과 HTTPS URL이 유효하고 handler가 있음
- disabled: 입력 부족, HTTP URL, submitting, handler 없음

## States

- default
- editing
- submitting
- disabled
- result-visible

## Rules

- download URL은 `https://`로 시작해야 한다.
- private release credential 원문을 문서나 UI fixture에 남기지 않는다.

## Decision History

- 2026-06-24: runner self-update form을 독립 component로 정의했다.
