---
ui_doc_type: component
component_id: console-rail
status: 계획
source_evidence:
  - type: code
    path: packages/flutter/oto_console/lib/src/oto_console_shell.dart
    notes: "_OtoConsoleLeftMenu, _LeftMenuButton 구현"
  - type: docs
    path: apps/client/README.md
    notes: "oto_console embeddable UI surface"
  - type: user
    path: null
    notes: "agent-ui 생성 요청"
---

# Console Rail

Component ID: `console-rail`

Status: `계획` (Jenkins IA gate 미충족: global/context menu 모델 분리가 후속 구현 대기)

## Source Evidence

| Type | Path | Notes |
|------|------|-------|
| code | `packages/flutter/oto_console/lib/src/oto_console_shell.dart` | `_OtoConsoleLeftMenu`, `_LeftMenuButton` 구현 |
| docs | `apps/client/README.md` | embeddable console surface |
| user | 없음 | agent-ui 생성 요청 |

## Purpose

콘솔 section 사이를 빠르게 이동하는 고정 rail navigation을 제공한다.

## Used By

- `overview`: shell navigation
- `runners`: shell navigation
- `pipelines`: shell navigation
- `executions`: shell navigation
- `artifacts`: shell navigation
- `agent`: shell navigation
- `settings`: shell navigation

## Anatomy

- icon button
- tooltip
- selected visual state
- top main section group
- bottom agent/settings group

## Jenkins Reference Alignment

- OTO rail은 Jenkins Dashboard-level left menu의 일부 destination만 전역 section으로 축약한다.
- Jenkins classic job/run page의 좌측 메뉴는 page-local task/action list이므로, 현재 OTO rail과 동일한 것으로 보지 않는다.
- Jenkins와 달리 breadcrumb stack과 contextual task menu는 현재 제공하지 않는다. 세부 route가 늘어나면 shell/header와 view-local left task menu로 분리한다.
- 사용자 결정(2026-07-03): OTO의 메뉴 구조는 Jenkins 메뉴 모델 중 OTO에 바로 적용 가능한 항목만 1차 적용한다. 현재 rail의 partial mapping은 최종 목표가 아니라 구현 전 상태다.

## Jenkins Left Menu Mapping

### 1차 적용 Global Menu

| Order | Jenkins menu model | OTO menu item | Target |
|-------|--------------------|---------------|--------|
| 1 | Dashboard / view root | `Overview` | Control Plane dashboard/home |
| 2 | `New Item` | `New Item` | Pipelines create flow |
| 3 | Jobs / item list | `Pipelines` | job list and selected job status |
| 4 | `Build History` | `Build History` | execution history |
| 5 | Nodes/Agents | `Runners` | runner/node list |
| 6 | `Artifacts` | `Artifacts` | artifact list |
| 7 | `Manage Jenkins` | `Manage OTO` / `Settings` | Jenkins-style management categories |
| 8 | OTO-specific Agent | `Agent` | OTO assistant surface |

### 1차 적용 Context Menus

| Context | Jenkins menu model | OTO menu item | Target |
|---------|--------------------|---------------|--------|
| Job | `Status` | `Status` | selected job status/detail |
| Job | `Build History` | `Build History` | selected job execution history |
| Job | `Stages` / `Full Stage View` | `Stages` | selected execution stage graph |
| Run | `Pipeline Overview` | `Pipeline Overview` | stage graph primary region |
| Run | `Console Output` | `Console Output` | selected execution log |
| Run | `Artifacts` | `Artifacts` | selected execution artifacts |
| Run | `Build History` | `Build History` | nearby execution history/context |

### 제외/후순위

`People`, `Changes`, existing job `Build Now`, `Configure`, `Replay`, `Pipeline Syntax`는 OTO Core/UI 계약이 생기기 전까지 1차 메뉴에 만들지 않는다.

## Target Layout Delta

- rail은 현재 60px icon-only 구조에서 Jenkins Dashboard-level left menu를 알아볼 수 있는 메뉴로 재정렬한다.
- Jenkins job/run left menu parity는 rail이 아니라 view-local contextual task menu로 정의하고 구현한다.
- selected state와 tooltip은 유지하고, section ordering은 overview, new item, pipelines, build history, runners, artifacts, manage, agent 순서를 기준으로 검토한다.
- 02 shell/jobs 구현에서 `New Item`, `Pipelines`, `Build History`, `Artifacts` global label과 job context `Status`, `Build History`, `Stages` primitive를 코드와 widget 테스트로 확인했다.
- 03 executions/ops 구현 전까지 `Nodes`, `Manage OTO`, run context menu(`Pipeline Overview`, `Console Output`) primitive는 Jenkins IA gate 미충족 상태로 둔다.

## Variants

- default: 208px left menu width, labeled menu button hit area
- selected: primary color icon and tinted background

## States

- default
- selected
- hover/focus via Flutter button semantics
- disabled: 없음

## Rules

- navigation destination은 `OtoConsoleSection` enum과 일치해야 한다.
- section 추가 시 rail button, enum, view definition을 함께 갱신하고, visual source가 있으면 frame-view definition도 함께 갱신한다.

## Decision History

- 2026-06-24: shell rail을 `console-rail` component로 정의했다.
