From 27b5e6a8f23ebbab59be036efe52094157e2a356 Mon Sep 17 00:00:00 2001 From: toki Date: Fri, 3 Jul 2026 21:44:57 +0900 Subject: [PATCH] feat: control-plane jenkins menu IA code sync milestone, plan/code-review, UI console-rail & views definition --- .../control-plane-product-surface/PHASE.md | 3 + ...control-plane-jenkins-menu-ia-code-sync.md | 68 +++++ .../code_review_cloud_G07_0.log | 165 +++++++++++ .../code_review_local_G03_1.log | 239 ++++++++++++++++ .../01_definition_guardrails/complete.log | 42 +++ .../plan_cloud_G07_0.log | 189 +++++++++++++ .../plan_local_G03_1.log | 112 ++++++++ .../02+01_shell_jobs/CODE_REVIEW-cloud-G07.md | 141 ++++++++++ .../02+01_shell_jobs/PLAN-cloud-G07.md | 257 ++++++++++++++++++ .../CODE_REVIEW-cloud-G07.md | 165 +++++++++++ .../03+01_executions_ops/PLAN-cloud-G07.md | 255 +++++++++++++++++ .../components/console-rail/index.md | 50 +++- agent-ui/definition/components/index.md | 28 +- agent-ui/definition/index.md | 22 +- agent-ui/definition/views/index.md | 95 +++++-- 15 files changed, 1788 insertions(+), 43 deletions(-) create mode 100644 agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md create mode 100644 agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_cloud_G07_0.log create mode 100644 agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_local_G03_1.log create mode 100644 agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log create mode 100644 agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_cloud_G07_0.log create mode 100644 agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_local_G03_1.log create mode 100644 agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/CODE_REVIEW-cloud-G07.md create mode 100644 agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/PLAN-cloud-G07.md create mode 100644 agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/CODE_REVIEW-cloud-G07.md create mode 100644 agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/PLAN-cloud-G07.md diff --git a/agent-roadmap/phase/control-plane-product-surface/PHASE.md b/agent-roadmap/phase/control-plane-product-surface/PHASE.md index dcd7479..af18df2 100644 --- a/agent-roadmap/phase/control-plane-product-surface/PHASE.md +++ b/agent-roadmap/phase/control-plane-product-surface/PHASE.md @@ -33,6 +33,9 @@ - [완료] Control Plane Jenkins 정렬 레이아웃 패스 - 경로: `agent-roadmap/archive/phase/control-plane-product-surface/milestones/control-plane-jenkins-aligned-layout-pass.md` - 요약: Jenkins 최신 weekly/LTS와 `2.516+` refreshed UI, Pipeline Graph View를 러프 참조로 삼아 OTO console shell, navigation, 주요 운영 view의 레이아웃을 구현에 반영했다. +- [진행중] Control Plane Jenkins 메뉴·IA 코드 동기화 + - 경로: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` + - 요약: 화면정의서에 재정렬된 OTO 적용 가능 Jenkins 메뉴 모델을 Flutter shell, jobs, executions, runners, settings와 원격 preview에 코드로 동기화한다. - [진행중] Control Plane 운영 보안·감사 표면 - 경로: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-security-audit-surface.md` - 요약: write action 표면 이후 필요한 인증/권한, 감사 로그, 민감 정보 마스킹, UI 노출 경계를 SDD와 구현 가능한 Task로 구체화한다. diff --git a/agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md b/agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md new file mode 100644 index 0000000..1ad29b4 --- /dev/null +++ b/agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md @@ -0,0 +1,68 @@ +# Milestone: Control Plane Jenkins 메뉴·IA 코드 동기화 + +## 위치 + +- Roadmap: `agent-roadmap/ROADMAP.md` +- Phase: `agent-roadmap/phase/control-plane-product-surface/PHASE.md` + +## 목표 + +Jenkins 정렬 레이아웃 패스 이후 발견된 메뉴/정보구조 불일치를 바로잡는다. +화면정의서에 재정렬된 "OTO에 적용 가능한 Jenkins 메뉴 모델"을 Flutter Control Plane 코드에 반영하고, 원격 preview에서 확인 가능한 메뉴/화면 구조로 동기화한다. + +## 상태 + +[진행중] + +## 구현 잠금 + +- 상태: 해제 +- SDD: 불필요 +- SDD 사유: 기존 Flutter view/widget 구조와 agent-ui 정의를 재정렬하는 UI 정보구조 작업이며, 새 API/schema/proto/config/env 계약 또는 외부 provider 쓰기 경계를 만들지 않는다. +- 결정 필요: 없음 + +## 범위 + +- `agent-ui/definition/**`의 1차 적용 Jenkins 메뉴 기준을 source of truth로 삼는다. +- 적용 대상 global menu는 `Overview`, `New Item`, `Pipelines`, `Build History`, `Runners/Nodes`, `Artifacts`, `Manage OTO`, `Agent`다. +- 적용 대상 context menu는 job `Status`, job `Build History`, `Stages`, run `Pipeline Overview`, `Console Output`, `Artifacts`, `Build History`다. +- `packages/flutter/oto_console`의 shell, pipelines/jobs, executions, runners, settings surface를 메뉴 기준에 맞춰 재배치한다. +- `apps/client`는 console package mount와 widget regression 범위에서만 수정한다. +- 원격 preview `http://toki-labs.com:13020/`에 동기화 결과를 배포한다. + +## 기능 + +### Epic: [jenkins-menu-ia-sync] 적용 가능한 Jenkins 메뉴·IA 코드 동기화 + +화면정의서의 적용 가능 메뉴 기준을 Flutter UI 코드와 검증으로 동기화한다. + +- [ ] [definition-guardrail] 화면정의서에 적용 가능한 Jenkins 메뉴 기준과 제외/후순위 메뉴가 명확히 남아 있고, 후속 코드 검증 label이 고정되어 있다. 검증: `rg --sort path -n "1차 적용|제외/후순위|New Item|Build History|Manage OTO|Console Output|Pipeline Overview" agent-ui/definition` +- [ ] [shell-menu-sync] shell/global menu와 pipelines/jobs 화면이 `New Item`, `Pipelines`, `Build History`, job `Status`, job `Build History`, `Stages` 중심으로 동기화된다. 검증: `cd packages/flutter/oto_console && flutter analyze && flutter test`, `cd apps/client && flutter analyze && flutter test` +- [ ] [execution-ops-menu-sync] executions/runners/settings 화면이 `Pipeline Overview`, `Console Output`, `Artifacts`, `Build History`, `Nodes/Agents`, `Manage OTO` 중심으로 동기화된다. 검증: `cd packages/flutter/oto_console && flutter analyze && flutter test`, `cd apps/client && flutter analyze && flutter test` +- [ ] [preview-deploy] 동기화된 Flutter web build를 원격 preview에 배포한다. 검증: `cd apps/client && flutter build web --dart-define=OTO_SERVER_HTTP_URL=http://toki-labs.com:18020`, `curl -I http://toki-labs.com:13020/` + +## 완료 리뷰 + +- 상태: 없음 +- 요청일: 없음 +- 완료 근거: 없음 +- 검토 항목: 없음 +- agent-ui 상태 반영: 대기 +- 리뷰 코멘트: 없음 + +## 범위 제외 + +- Jenkins `People`, `Changes`, existing job `Build Now`, `Configure`, `Replay`, `Pipeline Syntax`는 1차 적용에서 제외하거나 후순위로 둔다. +- 새 Core API, proto, auth/audit schema, durable artifact storage, SCM changes source는 만들지 않는다. +- production identity provider, 권한/감사 모델 구현은 `Control Plane 운영 보안·감사 표면` Milestone 범위로 남긴다. +- Jenkins pixel parity, 색상/spacing exact parity는 목표가 아니다. + +## 작업 컨텍스트 + +- 관련 active plan: `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/PLAN-cloud-G07.md` +- 관련 active plan: `agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/PLAN-cloud-G07.md` +- 관련 active plan: `agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/PLAN-cloud-G07.md` +- agent-ui source of truth: `agent-ui/definition/views/index.md`, `agent-ui/definition/components/console-rail/index.md`, `agent-ui/definition/components/index.md` +- 선행 작업: `Control Plane Jenkins 정렬 레이아웃 패스` +- 후속 작업: `Control Plane 운영 보안·감사 표면` +- 확인 필요: 없음 diff --git a/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_cloud_G07_0.log b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_cloud_G07_0.log new file mode 100644 index 0000000..afe6faa --- /dev/null +++ b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_cloud_G07_0.log @@ -0,0 +1,165 @@ + + +# Code Review Reference - JENKINS_IA_DEF + +> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.** +> The task is NOT complete until every implementation-owned section below is filled in. +> Complete the `구현 체크리스트`; the final checklist item is mandatory before saving. +> Fill implementation-owned sections, then stop with active files in place and report ready for review. +> If implementation is blocked by a selected Milestone `구현 잠금 > 결정 필요` item, fill `사용자 리뷰 요청` with linked evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`. Environment/secret/service blockers, generic scope changes, repeated failures, and evidence gaps that a follow-up agent can close are normal follow-up issues, not user-review blockers by themselves. +> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation; record only Milestone lock decisions in `사용자 리뷰 요청` and stop for code-review. +> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume. +> Follow the ownership table at the bottom of this file for which sections you own. + +## 개요 + +date=2026-07-03 +task=m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails, plan=0, tag=JENKINS_IA_DEF + +## Roadmap Targets + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Task ids: + - `definition-guardrail`: 화면정의서에 적용 가능한 Jenkins 메뉴 기준과 제외/후순위 메뉴가 명확히 남아 있고, 후속 코드 검증 label이 고정되어 있다. +- Completion mode: check-on-pass + +## 이 파일을 읽는 리뷰 에이전트에게 + +> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다. + +각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요. + +1. 판정을 append한다. +2. `CODE_REVIEW-cloud-G07.md` -> `code_review_cloud_G07_N.log`, `PLAN-cloud-G07.md` -> `plan_cloud_G07_M.log`로 아카이브한다. +3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/`로 이동한다. +4. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다. + +--- + +## 구현 항목별 완료 여부 + +| 항목 | 완료 여부 | +|------|---------| +| [JENKINS_IA_DEF-1] Tighten Agent UI Status And Baseline | [x] | +| [JENKINS_IA_DEF-2] Define Testable IA Primitives | [x] | + +## 구현 체크리스트 + +- [x] [JENKINS_IA_DEF-1] `agent-ui/definition`의 Jenkins reference 기준을 rough alignment에서 structural acceptance로 강화하고, 현재 구현 status를 후속 구현 대기 상태로 정정한다. +- [x] [JENKINS_IA_DEF-2] 후속 구현자가 테스트로 검증할 Jenkins IA primitives와 Jenkins menu model primitives를 정의서에 명시한다. +- [x] `git diff --check`와 정의서 검색 검증을 실행한다. +- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. + +## 코드리뷰 전용 체크리스트 + +> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다. +> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다. + +- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. +- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다. +- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_cloud_G07_N.log`로 아카이브한다. +- [x] active `PLAN-*-G??.md`를 `plan_cloud_G07_M.log`로 아카이브한다. +- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다. +- [ ] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다. +- [ ] PASS이면 active task 디렉터리 `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/`를 `agent-task/archive/YYYY/MM/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다. +- [ ] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-control-plane-jenkins-menu-ia-code-sync/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다. +- [x] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-local-G03.md`와 `CODE_REVIEW-local-G03.md`를 작성하고 `complete.log`를 작성하지 않는다. + +## 계획 대비 변경 사항 + +- 계획 `수정 파일 요약`은 index-level 3개 파일(`index.md`, `views/index.md`, `components/index.md`)을 명시했고, JENKINS_IA_DEF-2 체크리스트가 `components/console-rail/index.md`를 추가로 지정했다. 계획대로 이 4개 파일만 수정했다. +- 계획의 Before/After 예시 라인 번호(`57`, `64`)는 이후 커밋으로 파일이 이미 갱신되어 현재 파일과 일치하지 않았다. 예시 라인 번호가 아니라 계획의 의도(러프 정렬 → structural gate, `구현됨` → `변경 필요`)를 기준으로 실제 현재 문구를 대상으로 수정했다. +- 개별 sub-doc(`components/console-shell/index.md`, `components/section-surface/index.md`, `views/executions/index.md`, `views/settings/index.md`, `views/overview/index.md`)은 계획 파일 범위에 없어 status를 바꾸지 않았다. 이들 문서에는 아직 `future 후보`/`러프 참조`/`후속 조정 후보다` 문구와 component-level `구현됨` status가 남아 있다. index-level gate가 상위 기준이 되므로 상충은 아니지만, sub-doc status 정합은 후속 작업(02/03) 또는 별도 guardrail 후속 항목으로 남긴다. 요청 범위 초과를 피하려 이번에 확장하지 않았다. + +## 주요 설계 결정 + +- `agent-ui/definition/index.md`의 `Target Layout Status`에 `### Jenkins IA gate` 표를 신설해 gate primitive(통합 header/breadcrumb/action, dashboard job table, run stage graph, node/manage 구조, global/context menu 모델)와 각 확인 대상·충족 기준을 고정했다. 이 표가 후속 `구현됨` 승격의 단일 acceptance 기준이 된다. +- Jenkins 정렬 대상 view/component status는 기존 `구현됨`에서 `변경 필요`로 정정했다. Jenkins parity 대상이 아닌 `agent`와 계획에서 제외된 `artifacts` view는 기존 status를 유지했다. +- JENKINS_IA_DEF-2는 후속 widget 테스트의 고정 label 기준을 명시하는 것이 목적이라, `views/index.md`에 `Required Visible Primitives` 표(view별 required primitive + global/context menu target), `components/index.md`에 `Jenkins IA Required Primitives` 표(component별 widget assertion target + menu target)를 추가했다. label(`New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO`, `Status`, `Console Output`, `Pipeline Overview`, `Stage Graph`)은 02/03 테스트 assertion 문자열로 그대로 사용할 수 있게 backtick으로 고정했다. +- 러프 표현(`Rough Alignment` 컬럼, `Rough Layout Rules` 섹션, executions `Stage graph는 후속 조정 후보`)은 `Structural Acceptance`/`Structural Layout Gate`/gate 필수 항목으로 치환해 loose 문구가 남지 않게 했다. + +## 사용자 리뷰 요청 + +_기본값은 `없음`이다. 구현 중 새 결정이 필요해 보여도 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 이 섹션은 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 채운다. 외부 환경/secret/서비스 준비, 검증 증거 공백, 반복 실패, 일반 범위 조정은 사용자 리뷰 요청이 아니며 `검증 결과`, `계획 대비 변경 사항`, 또는 code-review의 일반 follow-up plan으로 처리한다._ + +- 상태: 없음 +- 사유 유형: 없음 +- 연결 대상: 없음 +- 결정 필요: 없음 +- 차단 근거: 없음 +- 실행한 검증/명령: 없음 +- 자동 후속 불가 이유: 없음 +- 재개 조건: 없음 + +## 리뷰어를 위한 체크포인트 + +- Jenkins IA gate가 `rough alignment`보다 강한 구조적 acceptance로 바뀌었는지 확인한다. +- 현재 구현을 무조건 `구현됨`으로 선언하는 문구가 남지 않았는지 확인한다. +- 02/03 후속 작업이 테스트할 primitive와 Jenkins menu model 이름이 정의서에 남았는지 확인한다. + +## 검증 결과 + +_구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다._ + +환경: local `/config/workspace/oto`, branch `master`. 문서-only 변경이라 Flutter analyze/test는 이 단계 대상이 아니며 02/03에서 수행한다. + +### JENKINS_IA_DEF-1 중간 검증 +```bash +$ git diff --check +(no output; exit=0) + +$ rg --sort path -n "Jenkins IA gate|통합 header|breadcrumb|stage graph|Manage (Jenkins|OTO)" agent-ui/definition +# exit=0. structural gate 문구 출력됨(발췌): +agent-ui/definition/index.md:45:이 화면정의서는 pixel parity가 아니라 정보 구조를 Jenkins 최신 UI 기준으로 맞추는 structural gate로 참조한다. `러프 정렬`은 충족 기준이 아니며, 아래 `Jenkins IA gate` 항목이 테스트로 확인될 때만 대상 view/component를 `구현됨`으로 둔다. +agent-ui/definition/index.md:61:### Jenkins IA gate +agent-ui/definition/index.md:67:| 통합 header/breadcrumb/action | `console-shell` | Jenkins `2.516+` 통합 header, breadcrumb stack, action 영역이 shell/header에 존재한다. | +agent-ui/definition/index.md:69:| run stage graph | `executions` + `execution-action-toolbar` | Pipeline Graph View 스타일 Pipeline Overview / Stage Graph가 run detail primary region에 존재한다. | +agent-ui/definition/index.md:70:| node/manage 구조 | `runners`, `settings` | Nodes/Agents 목록과 Manage OTO(Manage Jenkins 대응) 관리 category 구조가 존재한다. | +agent-ui/definition/views/index.md:123:- Jenkins `2.516+`의 통합 header/breadcrumb/action 모델은 OTO view header와 action 영역의 필수 구조이며, 러프 참조가 아니라 Jenkins IA gate 항목이다. +agent-ui/definition/views/index.md:128:- Jenkins IA gate primitive가 코드와 widget 테스트로 확인된 대상 view만 status를 `구현됨`으로 승격한다. 미충족 상태에서는 `변경 필요`로 둔다. +# ... (전체 매치 다수: index/views/components index-level + 기존 sub-doc breadcrumb 언급) + +$ rg --sort path -n "stage graph는 후속 조정 후보|rail은 유지" agent-ui/definition +# no matches; exit=1 (legacy loose 문구 제거 확인) +``` + +### JENKINS_IA_DEF-2 중간 검증 +```bash +$ rg --sort path -n "New Item|Build History|Manage OTO|Status|Console Output|Pipeline Overview|Stage Graph|Nodes|Artifacts" agent-ui/definition +# exit=0. required primitive per-primitive 매치 라인 수: +# New Item=15, Build History=19, Manage OTO=12, Status=38, Console Output=11, +# Pipeline Overview=11, Stage Graph=8, Nodes=15, Artifacts=22 (총 106 라인, 각 ≥1 충족) +# 신규 추가된 고정 label 표(발췌): +agent-ui/definition/views/index.md:33:| `overview` | 통합 header, breadcrumb, `Dashboard` root | `Dashboard` | 없음 | +agent-ui/definition/components/index.md:61:| Navigation and app context | `console-shell`, `console-rail`, `section-surface` | 통합 header, breadcrumb, global menu(`New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO`), job/run context menu 분리 | Global: `New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO` | +``` + +### 최종 검증 +```bash +$ git diff --check +(no output; exit=0) + +$ rg --sort path -n "Jenkins IA gate|New Item|Build History|Manage (Jenkins|OTO)|Status|Console Output|Pipeline Overview|Stage Graph|Nodes|Artifacts" agent-ui/definition +# exit=0. 총 123 매치 라인, 28개 파일에서 매치. 모든 required primitive와 `Jenkins IA gate`가 정의서에 존재함을 확인. +``` + +--- + +> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?** +> If anything is blank, go back and fill it in before saving this file. +> Leave review-agent-only sections unchanged. + +## 코드리뷰 결과 + +- 종합 판정: FAIL +- 차원별 평가: + - correctness: Fail + - completeness: Fail + - test coverage: Fail + - API contract: Fail + - code quality: Pass + - implementation deviation: Warn + - verification trust: Fail +- 발견된 문제: + - Required: `agent-ui/definition/components/console-rail/index.md:4`의 frontmatter `status: 변경 필요`는 `agent-ops/rules/common/rules-agent-ui.md:72`에서 허용한 status 값(`구현됨`, `계획`, `가정`, `불명확`)에 없다. 같은 비허용 상태값이 `agent-ui/definition/views/index.md:19`, `agent-ui/definition/components/index.md:30`, `agent-ui/definition/index.md:57` 등 index-level 상태 설명에도 반복되어 agent-ui source of truth가 스키마와 충돌한다. Jenkins IA gate 미충족 대상은 상태값을 `계획`으로 두고, “Jenkins IA gate 미충족/후속 구현 대기”는 description 또는 별도 gate 문구로 표현해야 한다. +- 다음 단계: user-review gate는 트리거하지 않는다. 후속 `PLAN-local-G03.md` / `CODE_REVIEW-local-G03.md`에서 비허용 `변경 필요` 상태 표현을 agent-ui 허용 status로 정리하고 deterministic 검색 검증을 추가한다. diff --git a/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_local_G03_1.log b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_local_G03_1.log new file mode 100644 index 0000000..66c43e4 --- /dev/null +++ b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_local_G03_1.log @@ -0,0 +1,239 @@ + + +# Code Review Reference - REVIEW_JENKINS_IA_DEF + +> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.** +> The task is NOT complete until every implementation-owned section below is filled in. +> Complete the `구현 체크리스트`; the final checklist item is mandatory before saving. +> Fill implementation-owned sections, then stop with active files in place and report ready for review. +> If implementation is blocked by a selected Milestone `구현 잠금 > 결정 필요` item, fill `사용자 리뷰 요청` with evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`. Environment/secret/service setup, generic scope conflicts, loop exhaustion, and evidence gaps that a follow-up agent can close are normal follow-up issues, not user-review blockers by themselves. +> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation; record only the linked Milestone lock decision in `사용자 리뷰 요청` and stop for code-review. +> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume. +> Follow the ownership table at the bottom of this file for which sections you own. + +## 개요 + +date=2026-07-03 +task=m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails, plan=1, tag=REVIEW_JENKINS_IA_DEF + +## Roadmap Targets + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Task ids: + - `definition-guardrail`: 화면정의서에 적용 가능한 Jenkins 메뉴 기준과 제외/후순위 메뉴가 명확히 남아 있고, 후속 코드 검증 label이 고정되어 있다. +- Completion mode: check-on-pass + +## Archive Evidence Snapshot + +- Archived plan: `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_cloud_G07_0.log` +- Archived review: `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_cloud_G07_0.log` +- Verdict: FAIL +- Required summary: + - `agent-ui/definition/components/console-rail/index.md:4` uses `status: 변경 필요`, which violates `agent-ops/rules/common/rules-agent-ui.md` allowed status values: `구현됨`, `계획`, `가정`, `불명확`. + - The same non-schema status wording appears in `agent-ui/definition/views/index.md:19`, `agent-ui/definition/components/index.md:30`, and `agent-ui/definition/index.md:57`. +- Affected files: + - `agent-ui/definition/index.md` + - `agent-ui/definition/views/index.md` + - `agent-ui/definition/components/index.md` + - `agent-ui/definition/components/console-rail/index.md` +- Verification evidence from failed loop: + - `git diff --check`: no output, exit=0. + - Invalid status search matched `변경 필요` status wording in the affected files. + - Milestone target labels and Jenkins IA primitives were present; the blocker is status schema compliance, not missing Jenkins IA labels. +- Allowed archive reread if needed: + - `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_cloud_G07_0.log` + - `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_cloud_G07_0.log` + +## 이 파일을 읽는 리뷰 에이전트에게 + +> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다. + +각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요. +리뷰 완료는 아래 순서까지 끝난 상태를 의미합니다. + +1. 판정을 append한다. +2. `CODE_REVIEW-local-G03.md` -> `code_review_local_G03_N.log`, `PLAN-local-G03.md` -> `plan_local_G03_M.log`로 아카이브한다. +3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/`로 이동한다. WARN/FAIL이면 user-review gate를 확인한 뒤 다음 active plan/review 파일 또는 `USER_REVIEW.md`를 작성한다. +4. PASS이고 task group이 `m-control-plane-jenkins-menu-ia-code-sync`이면 완료 이벤트 메타데이터를 보고한다. roadmap 상태 체크와 `update-roadmap` 호출은 런타임 책임이다. +5. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다. + +--- + +## 구현 항목별 완료 여부 + +| 항목 | 완료 여부 | +|------|---------| +| [REVIEW_JENKINS_IA_DEF-1] Align Agent UI Status Schema | [x] | + +## 구현 체크리스트 + +- [x] [REVIEW_JENKINS_IA_DEF-1] `agent-ui/definition`의 비허용 status 값 `변경 필요`를 허용 status인 `계획`으로 정리하고, Jenkins IA gate 미충족 의미는 설명/근거 문구에 남긴다. +- [x] `git diff --check`, 비허용 status 검색, Roadmap target label 검색을 실행한다. +- [x] CODE_REVIEW-local-G03.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. + +## 코드리뷰 전용 체크리스트 + +> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다. +> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다. + +- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. +- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다. +- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_local_G03_N.log`로 아카이브한다. +- [x] active `PLAN-*-G??.md`를 `plan_local_G03_M.log`로 아카이브한다. +- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다. +- [x] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다. +- [x] PASS이면 active task 디렉터리 `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/`를 `agent-task/archive/YYYY/MM/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다. +- [x] PASS이고 task group이 `m-`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다. +- [x] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-control-plane-jenkins-menu-ia-code-sync/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다. +- [ ] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-{build_lane}-GNN.md`와 `CODE_REVIEW-{review_lane}-GNN.md`를 작성하고 `complete.log`를 작성하지 않는다. +- [ ] USER_REVIEW이면 `agent-ops/skills/common/code-review/templates/user-review-template.md` 기준으로 `USER_REVIEW.md`를 작성하고 active `PLAN-*.md`, `CODE_REVIEW-*.md`, `complete.log`를 남기지 않는다. +- [ ] USER_REVIEW가 연결된 Milestone 결정으로 완료/PASS 해소되면 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다. + +## 계획 대비 변경 사항 + +대상 4개 파일(`agent-ui/definition/index.md`, `agent-ui/definition/views/index.md`, `agent-ui/definition/components/index.md`, `agent-ui/definition/components/console-rail/index.md`)의 `변경 필요` status가 이미 `계획`으로 변경되어 있었다. 본 세션에서 추가 변경 없이 검증 명령 실행만으로 complete.log 작성 준비를 완료했다. + +## 주요 설계 결정 + +없음. schema 정합성 복귀 외 별도 설계 결정 사항 없음. + +## 사용자 리뷰 요청 + +- 상태: 없음 +- 사유 유형: 없음 +- 연결 대상: 없음 +- 결정 필요: 없음 +- 차단 근거: 없음 +- 실행한 검증/명령: 없음 +- 자동 후속 불가 이유: 없음 +- 재개 조건: 없음 + +## 리뷰어를 위한 체크포인트 + +- `변경 필요`가 agent-ui status 값으로 더 이상 남아 있지 않은지 확인한다. +- Jenkins IA gate 미충족 의미가 `계획` status의 설명 문구로 보존되어 있는지 확인한다. +- Roadmap target label과 1차 적용/제외/후순위 menu 기준이 그대로 남았는지 확인한다. + +## 검증 결과 + +_구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다._ + +필수 규칙: +- 검증 명령은 고정된 계약이다. 임의로 대체하지 않는다. +- 대체가 필요하면 `계획 대비 변경 사항`에 이유와 대체 명령을 기록한다. +- `검증 결과`에는 실제 stdout/stderr를 붙여 넣는다. +- 사용자 리뷰 요청으로 명령을 끝까지 실행하지 못했다면 `사용자 리뷰 요청`에 실행한 명령, 실제 출력, 미실행 명령의 사유를 기록한다. +- mobile/UI hang, timeout, 또는 2분 무진행은 blind retry를 중단하고 focused rerun 명령과 screenshot/window/UI-tree evidence path를 남기며, 불가능하면 정확한 사유를 남긴다. + +### REVIEW_JENKINS_IA_DEF-1 중간 검증 +```bash +$ git diff --check +(output; no whitespace errors) + +$ rg --sort path -n 'status: 변경 필요|변경 필요 \||\| 변경 필요 |`변경 필요`|변경 필요 상태' agent-ui/definition/ +(output; no matches expected, exit=1) + +$ rg --sort path -n 'status: 계획|\| `overview` \| 계획 |\| `console-shell` \| 계획 |Jenkins IA gate 미충족|후속 구현 대기' agent-ui/definition/index.md agent-ui/definition/views/index.md agent-ui/definition/components/index.md agent-ui/definition/components/console-rail/index.md +agent-ui/definition/index.md:59:- 보안/감사 source of truth처럼 문서 계획만 있는 항목은 계속 `계획` 상태로 두며, Jenkins IA gate 미충족 항목과 섞지 않는다. +agent-ui/definition/views/index.md:19:| `overview` | 계획 | `OtoConsoleOverview` + Jenkins IA gate | Control Plane endpoint, connection, authentication reference overview. 필수: 통합 header/breadcrumb/action(`Dashboard` root)이 shell/header에 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/views/index.md:20:| `runners` | 계획 | `OtoRunnersSurface` + Jenkins IA gate | runner registry state and self-update action surface. 필수: Jenkins Nodes/Agents 목록 구조로 node 상태/현재 작업/연결 메시지를 스캔한다. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/views/index.md:21:| `pipelines` | 계획 | `OtoJobsSurface` + Jenkins IA gate | pipeline/job queue list and create job action surface. 필수: Dashboard job table density와 `New Item` 생성 entry가 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/views/index.md:22:| `executions` | 계획 | `OtoExecutionsSurface` + Jenkins IA gate | execution list, detail expansion, write actions, log/artifact preview. 필수: Pipeline Graph View 스타일 `Pipeline Overview`/`Stage Graph`, `Console Output`, `Build History`가 run detail에 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/views/index.md:25:| `settings` | 계획 | `OtoConsoleShell` fallback section + Jenkins IA gate | runtime endpoint and browser policy details. 필수: `Manage OTO`(Manage Jenkins 대응) 관리 category grouping이 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:30:| `console-shell` | 계획 | `oto_console_shell.dart` + Jenkins IA gate | overall console scaffold with rail and selected section content. 필수 primitive: 통합 header, breadcrumb, action 영역. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:31:| `console-rail` | 계획 | `oto_console_shell.dart` + Jenkins IA gate | section navigation rail. 필수 primitive: `New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO` global menu와 job/run context menu 분리. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:32:| `section-surface` | 계획 | `oto_console_shell.dart` + Jenkins IA gate | generic titled empty/detail section shell. 필수 primitive: `Manage OTO` 관리 category grouping. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:38:| `record-list` | 계획 | runners/jobs/executions/artifacts surface files + Jenkins IA gate | repeated entity list rows. 필수 primitive: Jenkins Dashboard job table / Build History / `Nodes` density의 dense row. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:42:| `execution-action-toolbar` | 계획 | `oto_executions_surface.dart` + Jenkins IA gate | cancel/report/log/artifact execution actions. 필수 primitive: run detail의 `Pipeline Overview`/`Stage Graph`, `Console Output` 연결 action. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/console-rail/index.md:4:status: 계획 +agent-ui/definition/components/console-rail/index.md:21:Status: `계획` (Jenkins IA gate 미충족: global/context menu 모델 분리가 후속 구현 대기) +agent-ui/definition/components/console-rail/index.md:96:- 현재 rail 구현은 global destination 축약(current)만 존재하고, 위 1차 적용 Global/Context menu(target)는 Jenkins IA gate 미충족 상태다. +``` + +### 최종 검증 +```bash +$ git diff --check +(output; no whitespace errors) + +$ rg --sort path -n 'status: 변경 필요|변경 필요 \||\| 변경 필요 |`변경 필요`|변경 필요 상태' agent-ui/definition/ +(output; no matches expected, exit=1) + +$ rg --sort path -n '1차 적용|제외/후순위|New Item|Build History|Manage OTO|Console Output|Pipeline Overview' agent-ui/definition/ +agent-ui/definition/components/console-rail/index.md:58:- 사용자 결정(2026-07-03): OTO의 메뉴 구조는 Jenkins 메뉴 모델 중 OTO에 바로 적용 가능한 항목만 1차 적용한다. 현재 rail의 partial mapping은 최종 목표가 아니라 구현 전 상태다. +agent-ui/definition/components/console-rail/index.md:62:### 1차 적용 Global Menu +agent-ui/definition/components/console-rail/index.md:67:| 2 | `New Item` | `New Item` | Pipelines create flow | +agent-ui/definition/components/console-rail/index.md:69:| 4 | `Build History` | `Build History` | execution history | +agent-ui/definition/components/console-rail/index.md:72:| 7 | `Manage Jenkins` | `Manage OTO` / `Settings` | Jenkins-style management categories | +agent-ui/definition/components/console-rail/index.md:75:### 1차 적용 Context Menus +agent-ui/definition/components/console-rail/index.md:80:| Job | `Build History` | `Build History` | selected job execution history | +agent-ui/definition/components/console-rail/index.md:82:| Run | `Pipeline Overview` | `Pipeline Overview` | stage graph primary region | +agent-ui/definition/components/console-rail/index.md:83:| Run | `Console Output` | `Console Output` | selected execution log | +agent-ui/definition/components/console-rail/index.md:85:| Run | `Build History` | `Build History` | nearby execution history/context | +agent-ui/definition/components/console-rail/index.md:87:### 제외/후순위 +agent-ui/definition/components/console-rail/index.md:96:- 현재 rail 구현은 global destination 축약(current)만 존재하고, 위 1차 적용 Global/Context menu(target)는 Jenkins IA gate 미충족 상태다. +agent-ui/definition/components/console-rail/index.md:97:- 후속 구현(02/03)의 widget 테스트는 global menu label `New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO`와 job/run context menu(`Status`, `Stages`, `Pipeline Overview`, `Console Output`) 분리를 고정 label로 확인한다. +agent-ui/definition/components/index.md:31:| `console-rail` | 계획 | `oto_console_shell.dart` + Jenkins IA gate | section navigation rail. 필수 primitive: `New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO` global menu와 job/run context menu 분리. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:32:| `section-surface` | 계획 | `oto_console_shell.dart` + Jenkins IA gate | generic titled empty/detail section shell. 필수 primitive: `Manage OTO` 관리 category grouping. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:38:| `record-list` | 계획 | runners/jobs/executions/artifacts surface files + Jenkins IA gate | repeated entity list rows. 필수 primitive: Jenkins Dashboard job table / Build History / `Nodes` density의 dense row. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:41:| `job-create-form` | 구현됨 | `oto_jobs_surface.dart` + Jenkins reference baseline | job create draft form. Jenkins New Item flow 정렬 반영 | +agent-ui/definition/components/index.md:42:| `execution-action-toolbar` | 계획 | `oto_executions_surface.dart` + Jenkins IA gate | cancel/report/log/artifact execution actions. 필수 primitive: run detail의 `Pipeline Overview`/`Stage Graph`, `Console Output` 연결 action. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/components/index.md:45:| `log-preview` | 구현됨 | `oto_executions_surface.dart` + Jenkins reference baseline | bounded execution log preview. Jenkins Console Output/live log pane 정렬 반영 | +agent-ui/definition/components/index.md:61:| Navigation and app context | `console-shell`, `console-rail`, `section-surface` | 통합 header, breadcrumb, global menu(`New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO`), job/run context menu 분리 | Global: `New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO` | +agent-ui/definition/components/index.md:62:| Entity status scanning | `record-list`, `status-badge`, `state-panel` | Dashboard job table / `Build History` / `Nodes` dense row와 primary id/status | Global: `Jobs`, `Build History`, `Nodes` | +agent-ui/definition/components/index.md:64:| Pipeline/run detail | `execution-action-toolbar`, `log-preview`, `artifact-list` | `Pipeline Overview`, `Stage Graph`, `Console Output`, `Artifacts` | Run: `Pipeline Overview`, `Console Output`, `Artifacts` | +agent-ui/definition/components/index.md:65:| Creation/config forms | `job-create-form`, `runner-self-update-form`, `endpoint-tile`, `auth-token-reference` | `New Item` create form, `Manage OTO` 관리 form density | Global: `New Item`, `Manage OTO` | +agent-ui/definition/components/job-create-form/index.md:49:- Jenkins New Item flow를 러프 참조로 삼되, 현재 OTO는 job id/name만 받는 얇은 create form으로 유지한다. +agent-ui/definition/components/log-preview/index.md:48:- Jenkins Console Output와 Pipeline Graph View의 live log pane을 러프 참조로 삼는다. +agent-ui/definition/components/record-list/index.md:56:- Jenkins dashboard job rows, Build History rows, Nodes/Agents rows를 공통 reference로 삼는다. +agent-ui/definition/index.md:69:| run stage graph | `executions` + `execution-action-toolbar` | Pipeline Graph View 스타일 Pipeline Overview / Stage Graph가 run detail primary region에 존재한다. | +agent-ui/definition/index.md:70:| node/manage 구조 | `runners`, `settings` | Nodes/Agents 목록과 Manage OTO(Manage Jenkins 대응) 관리 category 구조가 존재한다. | +agent-ui/definition/index.md:71:| global/context menu 모델 | `console-rail` | New Item, Build History, Nodes, Artifacts, Manage OTO global menu와 job/run context menu가 분리 구현된다. | +agent-ui/definition/views/executions/index.md:73:- Jenkins Build History, build/run detail, Console Output, Pipeline Graph View를 OTO `executions` view의 active reference로 삼는다. +agent-ui/definition/views/executions/index.md:81:- execution list와 selected run detail을 Jenkins Build History + build page처럼 list/detail 관계로 재정렬한다. +agent-ui/definition/views/index.md:21:| `pipelines` | 계획 | `OtoJobsSurface` + Jenkins IA gate | pipeline/job queue list and create job action surface. 필수: Dashboard job table density와 `New Item` 생성 entry가 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/views/index.md:22:| `executions` | 계획 | `OtoExecutionsSurface` + Jenkins IA gate | execution list, detail expansion, write actions, log/artifact preview. 필수: Pipeline Graph View 스타일 `Pipeline Overview`/`Stage Graph`, `Console Output`, `Build History`가 run detail에 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/views/index.md:25:| `settings` | 계획 | `OtoConsoleShell` fallback section + Jenkins IA gate | runtime endpoint and browser policy details. 필수: `Manage OTO`(Manage Jenkins 대응) 관리 category grouping이 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +agent-ui/definition/views/index.md:34:| `pipelines` | `New Item`, job table row, `Status` | `New Item`, `Jobs` | Job: `Status`, `Build History`, `Stages` | +agent-ui/definition/views/index.md:35:| `executions` | `Build History`, `Pipeline Overview`, `Stage Graph`, `Console Output` | `Build History` | Run: `Pipeline Overview`, `Console Output`, `Artifacts`, `Build History` | +agent-ui/definition/views/index.md:38:| `settings` | `Manage OTO` category grouping | `Manage OTO` | 없음 | +agent-ui/definition/views/index.md:55:사용자 결정(2026-07-03): OTO Control Plane은 Jenkins 메뉴 모델 중 OTO에 바로 적용 가능한 항목만 1차 적용한다. Core 계약이나 source of truth가 없는 Jenkins 항목은 메뉴 자리를 만들지 않고 `제외/후순위`로 명시한다. +agent-ui/definition/views/index.md:57:### 1차 적용 Global Menu +agent-ui/definition/views/index.md:62:| 2 | `New Item` | `pipelines` + `job-create-form` | 새 job/pipeline 생성 entry로 노출한다. | +agent-ui/definition/views/index.md:64:| 4 | `Build History` | `executions` | execution history와 selected run context로 이동한다. | +agent-ui/definition/views/index.md:67:| 7 | `Manage Jenkins` | `settings` / Manage OTO | endpoint, policy, node/runtime 관리 category로 이동한다. | +agent-ui/definition/views/index.md:70:### 1차 적용 Job Context Menu +agent-ui/definition/views/index.md:75:| 2 | `Build History` | `executions` filtered/context list | selected job의 execution history로 연결한다. | +agent-ui/definition/views/index.md:76:| 3 | `Stages` / `Full Stage View` | `executions` stage graph | selected execution의 Pipeline Overview/Stage Graph로 연결한다. | +agent-ui/definition/views/index.md:78:### 1차 적용 Run/Build Context Menu +agent-ui/definition/views/index.md:82:| 1 | `Pipeline Overview` / stage detail | `executions` stage graph | Pipeline Graph View 스타일 primary region으로 연결한다. | +agent-ui/definition/views/index.md:83:| 2 | `Console Output` | `log-preview` | selected execution log preview/full log로 연결한다. | +agent-ui/definition/views/index.md:85:| 4 | `Build History` | `executions` list | selected run 주변 history/context list로 둔다. | +agent-ui/definition/views/index.md:87:### 제외/후순위 Menu Items +agent-ui/definition/views/index.md:115:| `pipelines` | Dashboard jobs, New Item, job page | Dashboard job table density의 pipeline/job 목록, `New Item` create action, 연결된 execution 이동을 갖춘다. | +agent-ui/definition/views/index.md:116:| `executions` | Build/run detail, Build History, Console Output, Pipeline Graph View | 실행 목록에서 run detail로 확장하고 `Pipeline Overview`/`Stage Graph`, `Console Output`, `Build History`, artifact preview를 함께 갖춘다. Stage graph는 Jenkins IA gate 필수 항목이다. | +agent-ui/definition/views/index.md:118:| `settings` | Manage Jenkins | endpoint, policy, local runtime preference를 `Manage OTO` 관리 category grouping으로 둔다. | +agent-ui/definition/views/index.md:126:- Pipeline execution 상세는 Blue Ocean보다 Pipeline Graph View를 active reference로 삼으며 `Pipeline Overview`/`Stage Graph`는 필수다. +agent-ui/definition/views/pipelines/index.md:69:- Jenkins Dashboard job list와 New Item 흐름을 OTO `pipelines` view의 러프 참조로 삼는다. +agent-ui/definition/views/pipelines/index.md:71:- create form은 Jenkins New Item보다 훨씬 얇은 OTO job draft form으로 한정한다. +agent-ui/definition/views/pipelines/index.md:76:- header에는 Jenkins Dashboard/New Item처럼 job create entry point와 list context를 분리해서 배치한다. +``` + +--- + +> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?** +> If anything is blank, go back and fill it in before saving this file. +> Leave review-agent-only sections unchanged. + +## 코드리뷰 결과 + +- 종합 판정: PASS +- 차원별 평가: + - correctness: Pass + - completeness: Pass + - test coverage: Pass + - API contract: Pass + - code quality: Pass + - implementation deviation: Pass + - verification trust: Pass +- 발견된 문제: 없음 +- 다음 단계: PASS 종결. active plan/review를 로그로 아카이브하고 `complete.log`를 작성한 뒤 task 디렉터리를 `agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/`로 이동한다. diff --git a/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log new file mode 100644 index 0000000..04bcf47 --- /dev/null +++ b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log @@ -0,0 +1,42 @@ +# Complete - m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails + +## 완료 일시 + +2026-07-03 + +## 요약 + +Jenkins IA definition guardrail 후속 루프 2회차에서 agent-ui status schema 정합성을 회복했고 최종 판정 PASS로 종결했다. + +## 루프 이력 + +| Plan | Review | Verdict | 메모 | +|------|--------|---------|------| +| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | `변경 필요` status 값이 agent-ui 허용 schema와 충돌해 후속 정리가 필요했다. | +| `plan_local_G03_1.log` | `code_review_local_G03_1.log` | PASS | 비허용 status 값을 제거하고 Jenkins IA gate 미충족 의미를 `계획` 상태 설명으로 보존했다. | + +## 구현/정리 내용 + +- `agent-ui/definition/**`의 비허용 `변경 필요` status 표현을 허용 status인 `계획`으로 정리했다. +- Jenkins IA gate 미충족 의미와 후속 widget assertion label(`New Item`, `Build History`, `Manage OTO`, `Console Output`, `Pipeline Overview`)은 definition 문서에 유지했다. + +## 최종 검증 + +- `git diff --check` - PASS; 출력 없음. +- ``rg --sort path -n 'status: 변경 필요|변경 필요 \||\| 변경 필요 |`변경 필요`|변경 필요 상태' agent-ui/definition`` - PASS; no match, exit=1. +- `rg --sort path -n '1차 적용|제외/후순위|New Item|Build History|Manage OTO|Console Output|Pipeline Overview' agent-ui/definition` - PASS; Jenkins IA 기준 label과 제외/후순위 항목이 활성 definition 문서에 남아 있다. + +## Roadmap Completion + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Completed task ids: + - `definition-guardrail`: PASS; evidence=`agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_local_G03_1.log`, `agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_local_G03_1.log`; verification=`rg --sort path -n "1차 적용|제외/후순위|New Item|Build History|Manage OTO|Console Output|Pipeline Overview" agent-ui/definition` +- Not completed task ids: 없음 + +## 잔여 Nit + +- 없음 + +## 후속 작업 + +- 없음 diff --git a/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_cloud_G07_0.log b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_cloud_G07_0.log new file mode 100644 index 0000000..e0db7de --- /dev/null +++ b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_cloud_G07_0.log @@ -0,0 +1,189 @@ + + +# Plan - Jenkins IA Definition Guardrails + +## 이 파일을 읽는 구현 에이전트에게 + +`CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것이 구현의 마지막 단계다. 구현 후 active 파일을 유지하고 리뷰 준비만 보고한다. 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 리뷰 스텁의 `사용자 리뷰 요청` 섹션을 채우고 멈춘다. 구현 중 직접 사용자에게 질문하거나 선택지를 제시하거나 `request_user_input`, `USER_REVIEW.md`, `complete.log`, archive 이동을 수행하지 않는다. 환경/secret/service 차단과 증거 공백은 사용자 리뷰 요청이 아니라 검증 결과나 후속 plan으로 남긴다. + +## 배경 + +사용자가 지적한 대로 현재 Flutter UI는 `agent-ui` 검증상 통과하지만 Jenkins 정보구조와는 어긋난다. 정의서가 `rough alignment`, `60px rail 유지`, `stage graph 후속 후보`를 허용해, 실제 Jenkins `2.516+`의 통합 header/breadcrumb/action 구조와 Pipeline Graph View 중심성을 acceptance로 강제하지 못했다. 사용자 결정으로 메뉴 구조는 Jenkins 모델 중 OTO에 적용 가능한 항목만 맞추는 것으로 확정되었으므로, 이 작업은 구현 전에 정의서와 기준을 좁혀 다음 코드 작업의 실패 조건을 명확히 한다. + +## 사용자 리뷰 요청 흐름 + +사용자 리뷰 요청은 선택된 Milestone lock 결정이 구현을 막을 때만 active `CODE_REVIEW-cloud-G07.md`의 `사용자 리뷰 요청` 섹션에 기록한다. 구현 에이전트는 직접 사용자 프롬프트를 띄우지 않으며, code-review가 해당 요청을 검증하고 실제 `USER_REVIEW.md` 작성을 소유한다. + +## Roadmap Targets + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Task ids: + - `definition-guardrail`: 화면정의서에 적용 가능한 Jenkins 메뉴 기준과 제외/후순위 메뉴가 명확히 남아 있고, 후속 코드 검증 label이 고정되어 있다. +- Completion mode: check-on-pass + +## 분석 결과 + +### 읽은 파일 + +- `agent-roadmap/current.md` +- `agent-roadmap/phase/control-plane-product-surface/PHASE.md` +- `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- `agent-test/local/rules.md` +- `agent-test/local/framework-smoke.md` +- `agent-ui/definition/index.md` +- `agent-ui/definition/views/index.md` +- `agent-ui/definition/components/index.md` +- `packages/flutter/oto_console/lib/src/oto_console_shell.dart` +- `packages/flutter/oto_console/lib/src/oto_jobs_surface.dart` +- `packages/flutter/oto_console/lib/src/oto_executions_surface.dart` +- `packages/flutter/oto_console/lib/src/oto_runners_surface.dart` +- `packages/flutter/oto_console/lib/src/oto_console_overview.dart` +- `packages/flutter/oto_console/lib/src/oto_console_contract.dart` +- `packages/flutter/oto_console/lib/src/oto_console_models.dart` +- `packages/flutter/oto_console/lib/oto_console.dart` +- `packages/flutter/oto_console/pubspec.yaml` +- `packages/flutter/oto_console/test/oto_console_test.dart` +- `apps/client/lib/src/app/oto_client_app.dart` +- `apps/client/lib/src/app/bootstrap.dart` +- `apps/client/lib/main.dart` +- `apps/client/pubspec.yaml` +- `apps/client/test/widget_test.dart` + +### SDD 기준 + +Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md`. SDD: 불필요. 사유: 기존 Flutter/agent-ui IA 정렬이며 새 API/schema/proto/config/env 계약 또는 외부 provider 쓰기 경계를 만들지 않는다. + +### 테스트 환경 규칙 + +test_env는 `local`이다. `agent-test/local/rules.md`와 `agent-test/local/framework-smoke.md`를 읽었다. Flutter console/client 변경 검증에는 원격 runner 기준 `cd packages/flutter/oto_console && flutter analyze && flutter test`, `cd apps/client && flutter analyze && flutter test`를 적용한다. 정의서-only 1단계는 `git diff --check`와 deterministic `rg --sort path` 확인을 중간 검증으로 둔다. + +테스트 환경 프리플라이트: local `/config/workspace/oto`는 branch `master`, HEAD `92d2376`, Flutter `3.41.5`, Dart `3.11.3`이다. 원격 runner `ssh toki@toki-labs.com`, checkout `/Users/toki/agent-work/oto`는 branch `master`, HEAD `7e51ef9`, unrelated dirty files가 있으며 Flutter `3.44.0`, Dart `3.12.0`, port `13020`은 Python preview PID `97833`이 listen 중이다. 원격 checkout을 그대로 source로 쓰지 말고 구현 후 build artifact 또는 별도 동기화 단계로 preview를 갱신한다. + +### 테스트 커버리지 공백 + +- Jenkins IA acceptance: 기존 테스트는 header/breadcrumb/action/task 영역과 Jenkins 좌측 메뉴 모델을 단언하지 않는다. +- Pipelines dashboard: 기존 테스트는 `Build Job`, `RUNNING`, `Job ID`, execution link만 확인한다. +- Executions run detail: 기존 테스트가 `Stage summary unavailable` placeholder를 정상으로 인정한다. +- Runners/settings: 기존 테스트가 Jenkins Nodes/Agents 또는 Manage Jenkins 구조를 단언하지 않는다. + +### 심볼 참조 + +none. 이 단계는 rename/remove를 계획하지 않는다. + +### 분할 판단 + +split decision policy를 먼저 평가했다. 공유 task group은 `m-control-plane-jenkins-menu-ia-code-sync`이다. + +- `01_definition_guardrails`: 정의서 acceptance와 status 기준을 먼저 고정한다. +- `02+01_shell_jobs`: 01 완료 후 shell/header/navigation과 pipelines dashboard를 구현한다. +- `03+01_executions_ops`: 01 완료 후 executions, runners, settings를 구현하고 최종 원격 preview smoke를 수행한다. + +02와 03은 모두 01의 `complete.log`에만 의존한다. 서로 간 의존은 두지 않는다. + +### 범위 결정 근거 + +보안·감사 UI/계약, Core 권한/audit schema, runner transport, artifact storage는 제외한다. Jenkins pixel parity, 색상/spacing parity, Blue Ocean 기반 재설계도 제외한다. 이번 기준은 Jenkins `2.516+` header/breadcrumb/action, dashboard job table, Pipeline Graph View/Stage View, Nodes/Agents, Manage OTO 정보구조이다. + +### 빌드 등급 + +`cloud-G07`. 로컬 테스트만으로 통과 가능한 UI가 실제 Jenkins IA 기준을 놓칠 수 있으므로 제품/외부 reference 판단과 후속 구현 범위 조정이 필요하다. + +## 구현 체크리스트 + +- [x] [JENKINS_IA_DEF-1] `agent-ui/definition`의 Jenkins reference 기준을 rough alignment에서 structural acceptance로 강화하고, 현재 구현 status를 후속 구현 대기 상태로 정정한다. +- [x] [JENKINS_IA_DEF-2] 후속 구현자가 테스트로 검증할 Jenkins IA primitives와 Jenkins menu model primitives를 정의서에 명시한다. +- [x] `git diff --check`와 정의서 검색 검증을 실행한다. +- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. + +### [JENKINS_IA_DEF-1] Tighten Agent UI Status And Baseline + +#### 문제 + +[agent-ui/definition/index.md](/config/workspace/oto/agent-ui/definition/index.md:45)는 pixel parity가 아니라 정보 구조와 러프한 배치를 맞춘다고 하지만, [agent-ui/definition/index.md](/config/workspace/oto/agent-ui/definition/index.md:57)는 현재 Flutter 구현을 Jenkins 정렬 evidence로 선언한다. [agent-ui/definition/views/index.md](/config/workspace/oto/agent-ui/definition/views/index.md:61)는 60px rail 유지를 허용하고, [agent-ui/definition/views/index.md](/config/workspace/oto/agent-ui/definition/views/index.md:56)는 stage graph를 후속 후보로만 둔다. + +#### 해결 방법 + +`agent-ui/definition/index.md`, `views/index.md`, `components/index.md`를 수정해 Jenkins IA 기준을 structural gate로 바꾼다. 후속 구현 전까지 affected docs의 Jenkins IA alignment status는 `계획` 또는 `변경 필요`로 표현하고, 보안·감사 문서 계획 항목과 섞지 않는다. + +Before: + +```markdown +57 - 현재 Flutter 구현은 Jenkins 정렬 레이아웃 패스가 반영된 OTO console layout의 code evidence다. +64 - 현재 OTO 구현의 60px rail은 유지하며... +``` + +After: + +```markdown +- 현재 Flutter 구현은 운영 밀도 일부만 반영했으며 Jenkins IA gate는 미충족이다. +- Jenkins IA gate는 통합 header/breadcrumb/action, dashboard job table, run stage graph, node/manage 구조가 테스트로 확인될 때만 `구현됨`으로 둔다. +``` + +#### 수정 파일 및 체크리스트 + +- [x] `agent-ui/definition/index.md`: `Target Layout Status`를 Jenkins IA gate 기준으로 정정한다. +- [x] `agent-ui/definition/views/index.md`: affected views `overview`, `runners`, `pipelines`, `executions`, `settings` 설명에 structural acceptance를 추가한다. +- [x] `agent-ui/definition/components/index.md`: `console-shell`, `console-rail`, `record-list`, `execution-action-toolbar`, `section-surface` 기준을 rough reference에서 required primitive로 바꾼다. + +#### 테스트 작성 + +문서-only 변경이므로 새 widget test는 02/03에서 작성한다. 이 단계는 deterministic 검색으로 acceptance 문구 존재와 기존 loose 문구 제거를 확인한다. + +#### 중간 검증 + +```bash +git diff --check +rg --sort path -n "Jenkins IA gate|통합 header|breadcrumb|stage graph|Manage (Jenkins|OTO)" agent-ui/definition +rg --sort path -n "stage graph는 후속 조정 후보|rail은 유지" agent-ui/definition +``` + +예상: 첫 두 명령 PASS 및 structural gate 문구 출력. 마지막 명령은 legacy loose 문구가 남아 있지 않아 no matches가 기대값이다. + +### [JENKINS_IA_DEF-2] Define Testable IA Primitives + +#### 문제 + +[packages/flutter/oto_console/test/oto_console_test.dart](/config/workspace/oto/packages/flutter/oto_console/test/oto_console_test.dart:52)는 shell render만 확인하고, [packages/flutter/oto_console/test/oto_console_test.dart](/config/workspace/oto/packages/flutter/oto_console/test/oto_console_test.dart:519)는 `Stage summary unavailable`를 정상으로 인정한다. + +#### 해결 방법 + +정의서에 후속 테스트 명칭과 required labels를 명시한다. 예: `Jenkins breadcrumb`, `New Item`, `Build History`, `Manage OTO`, `Status`, `Console Output`, `Pipeline Overview`, `Stage Graph`, `Nodes`, `Artifacts`. + +#### 수정 파일 및 체크리스트 + +- [x] `agent-ui/definition/views/index.md`: view별 required visible primitives와 메뉴 매핑 target을 추가한다. +- [x] `agent-ui/definition/components/index.md`: component별 후속 widget assertion 목표와 menu target을 추가한다. +- [x] `agent-ui/definition/components/console-rail/index.md`: Jenkins Dashboard/job/run left menu target을 current/target으로 분리한다. + +#### 테스트 작성 + +새 테스트 작성은 02/03에서 수행한다. 이 단계에서는 테스트 요구사항을 정의서에 명시한다. + +#### 중간 검증 + +```bash +rg --sort path -n "New Item|Build History|Manage OTO|Status|Console Output|Pipeline Overview|Stage Graph|Nodes|Artifacts" agent-ui/definition +``` + +예상: 각 required primitive가 정의서에 최소 1회 이상 나타난다. + +## 의존 관계 및 구현 순서 + +이 작업은 02와 03의 선행 작업이다. 02/03 구현 전 `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log`가 있어야 한다. + +## 수정 파일 요약 + +| 파일 | 항목 | +|------|------| +| `agent-ui/definition/index.md` | JENKINS_IA_DEF-1 | +| `agent-ui/definition/views/index.md` | JENKINS_IA_DEF-1, JENKINS_IA_DEF-2 | +| `agent-ui/definition/components/index.md` | JENKINS_IA_DEF-1, JENKINS_IA_DEF-2 | + +## 최종 검증 + +```bash +git diff --check +rg --sort path -n "Jenkins IA gate|New Item|Build History|Manage (Jenkins|OTO)|Status|Console Output|Pipeline Overview|Stage Graph|Nodes|Artifacts" agent-ui/definition +``` + +모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다. diff --git a/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_local_G03_1.log b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_local_G03_1.log new file mode 100644 index 0000000..d4a4c55 --- /dev/null +++ b/agent-task/archive/2026/07/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_local_G03_1.log @@ -0,0 +1,112 @@ +중 + +# Plan - Review Follow-up: Jenkins IA Definition Status Schema + +## 이 파일을 읽는 구현 에이전트에게 + +`CODE_REVIEW-local-G03.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것이 구현의 마지막 단계다. 구현 후 active 파일을 유지하고 리뷰 준비만 보고한다. 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 리뷰 스텁의 `사용자 리뷰 요청` 섹션을 채우고 멈춘다. 구현 중 직접 사용자에게 질문하거나 선택지를 제시하거나 `request_user_input`, `USER_REVIEW.md`, `complete.log`, archive 이동을 수행하지 않는다. 환경/secret/service 차단과 증거 공백은 사용자 리뷰 요청이 아니라 검증 결과나 후속 plan으로 남긴다. + +## Roadmap Targets + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Task ids: + - `definition-guardrail`: 화면정의서에 적용 가능한 Jenkins 메뉴 기준과 제외/후순위 메뉴가 명확히 남아 있고, 후속 코드 검증 label이 고정되어 있다. +- Completion mode: check-on-pass + +## Archive Evidence Snapshot + +- Archived plan: `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_cloud_G07_0.log` +- Archived review: `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_cloud_G07_0.log` +- Verdict: FAIL +- Required summary: + - `agent-ui/definition/components/console-rail/index.md:4` uses `status: 변경 필요`, which violates `agent-ops/rules/common/rules-agent-ui.md` allowed status values: `구현됨`, `계획`, `가정`, `불명확`. + - The same non-schema status wording appears in `agent-ui/definition/views/index.md:19`, `agent-ui/definition/components/index.md:30`, and `agent-ui/definition/index.md:57`. +- Affected files: + - `agent-ui/definition/index.md` + - `agent-ui/definition/views/index.md` + - `agent-ui/definition/components/index.md` + - `agent-ui/definition/components/console-rail/index.md` +- Verification evidence from failed loop: + - `git diff --check`: no output, exit=0. + - Invalid status search matched `변경 필요` status wording in the affected files. + - Milestone target labels and Jenkins IA primitives were present; the blocker is status schema compliance, not missing Jenkins IA labels. +- Allowed archive reread if needed: + - `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/code_review_cloud_G07_0.log` + - `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/plan_cloud_G07_0.log` + +## 분석 결과 + +### SDD 기준 + +Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md`. SDD: 불필요. + +### 범위 결정 근거 + +이번 후속은 이전 루프에서 만든 Jenkins IA gate와 menu primitive 자체를 재설계하지 않는다. `agent-ui` 규칙의 status schema에 맞도록 비허용 `변경 필요` 상태 표현만 정리하고, gate 미충족 의미는 허용 status인 `계획`과 설명 문구로 보존한다. + +### 빌드 등급 + +`local-G03`. 범위가 문서 status schema 정합성으로 작고, deterministic `rg`와 `git diff --check`로 검증 가능하다. + +## 구현 체크리스트 + +- [x] [REVIEW_JENKINS_IA_DEF-1] `agent-ui/definition`의 비허용 status 값 `변경 필요`를 허용 status인 `계획`으로 정리하고, Jenkins IA gate 미충족 의미는 설명/근거 문구에 남긴다. +- [x] `git diff --check`, 비허용 status 검색, Roadmap target label 검색을 실행한다. +- [x] CODE_REVIEW-local-G03.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. + +### [REVIEW_JENKINS_IA_DEF-1] Align Agent UI Status Schema + +#### 문제 + +`agent-ops/rules/common/rules-agent-ui.md`는 view/component status 값을 `구현됨`, `계획`, `가정`, `불명확`으로 제한한다. 하지만 이전 구현은 Jenkins IA gate 미충족 상태를 표현하려고 `변경 필요`라는 새 상태값을 도입했다. 이 값은 `agent-ui/definition/components/console-rail/index.md` frontmatter에도 들어가므로 agent-ui source of truth가 schema와 충돌한다. + +#### 해결 방법 + +Jenkins IA gate 미충족 대상 view/component는 status를 `계획`으로 둔다. 설명에는 `Jenkins IA gate 미충족`, `후속 구현 대기`, `코드와 widget 테스트 확인 후 구현됨 승격` 같은 문구를 유지해 의도 손실 없이 schema만 맞춘다. + +Before: + +```markdown +status: 변경 필요 +Status: `변경 필요` (Jenkins IA gate 미충족...) +| `overview` | 변경 필요 | ... +``` + +After: + +```markdown +status: 계획 +Status: `계획` (Jenkins IA gate 미충족...) +| `overview` | 계획 | ... Jenkins IA gate 미충족, 후속 구현 대기 ... +``` + +#### 수정 파일 및 체크리스트 + +- [x] `agent-ui/definition/components/console-rail/index.md`: frontmatter와 본문 status를 `계획`으로 바꾼다. +- [x] `agent-ui/definition/views/index.md`: Jenkins IA gate 대상 view table status를 `계획`으로 바꾸고, 미충족 의미는 description에 남긴다. +- [x] `agent-ui/definition/components/index.md`: Jenkins IA gate 대상 component table status를 `계획`으로 바꾸고, 미충족 의미는 description에 남긴다. +- [x] `agent-ui/definition/index.md`: `변경 필요` 상태값을 지시하는 문장을 `계획` status + gate 미충족 설명으로 바꾼다. + +#### 테스트 작성 + +문서-only schema 정합 후속이므로 새 Flutter widget test는 작성하지 않는다. 대신 비허용 status 검색과 Roadmap target label 검색을 고정 검증으로 둔다. + +#### 중간 검증 + +```bash +git diff --check +rg --sort path -n 'status: 변경 필요|변경 필요 \||\| 변경 필요 |`변경 필요`|변경 필요 상태' agent-ui/definition +rg --sort path -n 'status: 계획|\| `overview` \| 계획 |\| `console-shell` \| 계획 |Jenkins IA gate 미충족|후속 구현 대기' agent-ui/definition/index.md agent-ui/definition/views/index.md agent-ui/definition/components/index.md agent-ui/definition/components/console-rail/index.md +``` + +예상: 첫 명령은 no output/exit=0. 두 번째 명령은 no matches/exit=1. 세 번째 명령은 허용 status와 gate 미충족 설명을 출력한다. + +## 최종 검증 + +```bash +git diff --check +rg --sort path -n 'status: 변경 필요|변경 필요 \||\| 변경 필요 |`변경 필요`|변경 필요 상태' agent-ui/definition +rg --sort path -n '1차 적용|제외/후순위|New Item|Build History|Manage OTO|Console Output|Pipeline Overview' agent-ui/definition +``` + +모든 변경 완료 후 반드시 `CODE_REVIEW-local-G03.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다. diff --git a/agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/CODE_REVIEW-cloud-G07.md b/agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/CODE_REVIEW-cloud-G07.md new file mode 100644 index 0000000..d1e40b1 --- /dev/null +++ b/agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/CODE_REVIEW-cloud-G07.md @@ -0,0 +1,141 @@ + + +# Code Review Reference - JENKINS_IA_SHELL + +> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.** +> The task is NOT complete until every implementation-owned section below is filled in. +> Complete the `구현 체크리스트`; the final checklist item is mandatory before saving. +> Fill implementation-owned sections, then stop with active files in place and report ready for review. +> If implementation is blocked by a selected Milestone `구현 잠금 > 결정 필요` item, fill `사용자 리뷰 요청` with linked evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`. +> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation. +> Finalization is review-agent-only. + +## 개요 + +date=2026-07-03 +task=m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs, plan=0, tag=JENKINS_IA_SHELL + +## Roadmap Targets + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Task ids: + - `shell-menu-sync`: shell/global menu와 pipelines/jobs 화면이 `New Item`, `Pipelines`, `Build History`, job `Status`, job `Build History`, `Stages` 중심으로 동기화된다. +- Completion mode: check-on-pass + +## 이 파일을 읽는 리뷰 에이전트에게 + +> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. + +각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요. + +--- + +## 구현 항목별 완료 여부 + +| 항목 | 완료 여부 | +|------|---------| +| [JENKINS_IA_SHELL-1] Shell Header And Breadcrumb IA | [ ] | +| [JENKINS_IA_SHELL-2] Jenkins Dashboard Jobs Surface | [ ] | +| [JENKINS_IA_SHELL-3] Host Regression | [ ] | + +## 구현 체크리스트 + +- [ ] [JENKINS_IA_SHELL-1] shell을 통합 header/breadcrumb/action/task navigation과 Jenkins Dashboard-level left menu 구조로 개편한다. +- [ ] [JENKINS_IA_SHELL-2] pipelines/jobs 화면을 Jenkins dashboard job table/New Item/Build History 및 적용 가능한 job-context left task menu 구조로 개편한다. +- [ ] [JENKINS_IA_SHELL-3] shell/jobs widget tests와 app host regression tests를 Jenkins IA primitive 기준으로 갱신한다. +- [ ] `cd packages/flutter/oto_console && flutter analyze && flutter test`, `cd apps/client && flutter analyze && flutter test`, `git diff --check`를 실행한다. +- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. + +## Agent UI Completion + +- Mode: review-pass-status-update +- Agent UI docs: + - `agent-ui/definition/index.md` + - `agent-ui/definition/views/index.md` + - `agent-ui/definition/components/index.md` +- Actual code evidence: + - [ ] `packages/flutter/oto_console/lib/src/oto_console_shell.dart`: + - [ ] `packages/flutter/oto_console/lib/src/oto_jobs_surface.dart`: +- Implementation verification evidence: + - [ ] `cd packages/flutter/oto_console && flutter analyze && flutter test`: + - [ ] `cd apps/client && flutter analyze && flutter test`: +- Status updates requested on PASS: + - [ ] `agent-ui/definition/index.md`: Jenkins IA shell/jobs evidence updated + - [ ] `agent-ui/definition/views/index.md`: `pipelines` shell/jobs criteria `계획` -> `구현됨` + - [ ] `agent-ui/definition/components/index.md`: shell/jobs component criteria `계획` -> `구현됨` +- Review finalization: + - [ ] Review agent updated the listed agent-ui docs and code evidence. + - [ ] Review agent ran `validate-agent-ui scope=jenkins-ia-shell-jobs` after the status/evidence update. + +## 코드리뷰 전용 체크리스트 + +> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다. + +- [ ] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. +- [ ] active review/plan 파일을 `.log`로 아카이브한다. +- [ ] PASS이면 `complete.log` 작성 후 `agent-task/archive/YYYY/MM/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/`로 이동한다. +- [ ] PASS split 작업이면 빈 active parent를 제거하거나 남은 sibling 때문에 유지했다고 확인한다. +- [ ] WARN/FAIL이면 후속 active plan/review 또는 정당한 `USER_REVIEW.md`를 작성한다. + +## 계획 대비 변경 사항 + +_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._ + +## 주요 설계 결정 + +_구현 에이전트가 주요 설계 결정 사항을 기록한다._ + +## 사용자 리뷰 요청 + +_기본값은 `없음`이다. 구현 중 새 결정이 필요해 보여도 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 이 섹션은 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 채운다. 외부 환경/secret/서비스 준비, 검증 증거 공백, 반복 실패, 일반 범위 조정은 사용자 리뷰 요청이 아니며 `검증 결과`, `계획 대비 변경 사항`, 또는 code-review의 일반 follow-up plan으로 처리한다._ + +- 상태: 없음 +- 사유 유형: 없음 +- 연결 대상: 없음 +- 결정 필요: 없음 +- 차단 근거: 없음 +- 실행한 검증/명령: 없음 +- 자동 후속 불가 이유: 없음 +- 재개 조건: 없음 + +## 리뷰어를 위한 체크포인트 + +- Shell header가 breadcrumb/action/task context와 Jenkins Dashboard-level left menu를 1차 구조로 제공하는지 확인한다. +- Pipelines가 Jenkins dashboard job table/New Item/Build History와 적용 가능한 job-context `Status`/`Build History`/`Stages` 문법을 갖는지 확인한다. +- Existing navigation callbacks, create job validation, execution tap이 유지되는지 확인한다. + +## 검증 결과 + +### JENKINS_IA_SHELL-1 중간 검증 +```bash +$ cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +(output) +``` + +### JENKINS_IA_SHELL-2 중간 검증 +```bash +$ cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +(output) +``` + +### JENKINS_IA_SHELL-3 중간 검증 +```bash +$ cd apps/client && flutter test test/widget_test.dart +(output) +``` + +### 최종 검증 +```bash +$ test -f agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log +(output) +$ cd packages/flutter/oto_console && flutter analyze && flutter test +(output) +$ cd apps/client && flutter analyze && flutter test +(output) +$ git diff --check +(output) +``` + +--- + +> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?** diff --git a/agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/PLAN-cloud-G07.md b/agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/PLAN-cloud-G07.md new file mode 100644 index 0000000..870d182 --- /dev/null +++ b/agent-task/m-control-plane-jenkins-menu-ia-code-sync/02+01_shell_jobs/PLAN-cloud-G07.md @@ -0,0 +1,257 @@ + + +# Plan - Jenkins IA Shell And Jobs + +## 이 파일을 읽는 구현 에이전트에게 + +`CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것이 구현의 마지막 단계다. 구현 후 active 파일을 유지하고 리뷰 준비만 보고한다. 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 리뷰 스텁의 `사용자 리뷰 요청` 섹션을 채우고 멈춘다. 구현 중 직접 사용자에게 질문하거나 선택지를 제시하거나 `request_user_input`, `USER_REVIEW.md`, `complete.log`, archive 이동을 수행하지 않는다. + +## 배경 + +현재 shell은 Jenkins의 통합 header/breadcrumb/action navigation보다 60px rail 중심이다. Pipelines 화면도 Jenkins dashboard job table/New Item 흐름보다 카드형 리스트와 inline create panel에 가깝다. 사용자 결정으로 메뉴 구조는 OTO에 적용 가능한 Jenkins 모델만 1차 적용하는 것으로 확정되었으므로, 01 정의서 guardrail 완료 후 shell과 jobs 화면을 적용 가능 menu model 중심으로 개편한다. + +## 사용자 리뷰 요청 흐름 + +사용자 리뷰 요청은 선택된 Milestone lock 결정이 구현을 막을 때만 active `CODE_REVIEW-cloud-G07.md`의 `사용자 리뷰 요청` 섹션에 기록한다. 구현 에이전트는 직접 사용자 프롬프트를 띄우지 않는다. + +## Roadmap Targets + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Task ids: + - `shell-menu-sync`: shell/global menu와 pipelines/jobs 화면이 `New Item`, `Pipelines`, `Build History`, job `Status`, job `Build History`, `Stages` 중심으로 동기화된다. +- Completion mode: check-on-pass + +## Agent UI Completion + +- Mode: review-pass-status-update +- Agent UI docs: + - `agent-ui/definition/index.md` + - `agent-ui/definition/views/index.md` + - `agent-ui/definition/components/index.md` +- Required code evidence: + - `packages/flutter/oto_console/lib/src/oto_console_shell.dart`: Jenkins-style header, breadcrumb, dashboard left menu, primary action/task navigation evidence + - `packages/flutter/oto_console/lib/src/oto_jobs_surface.dart`: dashboard job table/list, build queue/history/action evidence +- Required implementation verification: + - `cd packages/flutter/oto_console && flutter analyze && flutter test`: PASS expected before review + - `cd apps/client && flutter analyze && flutter test`: PASS expected before review +- Review finalization validation: + - `validate-agent-ui scope=jenkins-ia-shell-jobs`: PASS expected after status/evidence update +- Status updates on PASS: + - `agent-ui/definition/index.md`: Jenkins IA shell/jobs gate evidence updated + - `agent-ui/definition/views/index.md`: `pipelines` shell/jobs criteria `계획` -> `구현됨` + - `agent-ui/definition/components/index.md`: `console-shell`, `console-rail`, `record-list`, `job-create-form`, `status-badge` criteria `계획` -> `구현됨` + +## 분석 결과 + +### 읽은 파일 + +- `agent-roadmap/current.md` +- `agent-roadmap/phase/control-plane-product-surface/PHASE.md` +- `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- `agent-test/local/rules.md` +- `agent-test/local/framework-smoke.md` +- `agent-ui/definition/index.md` +- `agent-ui/definition/views/index.md` +- `agent-ui/definition/components/index.md` +- `packages/flutter/oto_console/lib/src/oto_console_shell.dart` +- `packages/flutter/oto_console/lib/src/oto_jobs_surface.dart` +- `packages/flutter/oto_console/lib/src/oto_console_contract.dart` +- `packages/flutter/oto_console/lib/src/oto_console_models.dart` +- `packages/flutter/oto_console/lib/oto_console.dart` +- `packages/flutter/oto_console/pubspec.yaml` +- `packages/flutter/oto_console/test/oto_console_test.dart` +- `apps/client/lib/src/app/oto_client_app.dart` +- `apps/client/pubspec.yaml` +- `apps/client/test/widget_test.dart` + +### SDD 기준 + +Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md`. SDD: 불필요. 사유: 기존 Flutter/agent-ui IA 정렬이며 새 API/schema/proto/config/env 계약 또는 외부 provider 쓰기 경계를 만들지 않는다. + +### 테스트 환경 규칙 + +test_env는 `local`이다. `agent-test/local/rules.md`, `agent-test/local/framework-smoke.md`를 적용한다. 원격 runner checkout은 dirty/HEAD mismatch 상태이므로 이 단계는 현재 checkout에서 구현하고, Flutter console/client analyze/test를 실행한 뒤 03에서 remote preview artifact deployment를 수행한다. + +### 테스트 커버리지 공백 + +- Shell: [packages/flutter/oto_console/test/oto_console_test.dart](/config/workspace/oto/packages/flutter/oto_console/test/oto_console_test.dart:52)는 `OtoConsoleShell` render와 Agent tooltip만 확인한다. +- Section navigation: [packages/flutter/oto_console/test/oto_console_test.dart](/config/workspace/oto/packages/flutter/oto_console/test/oto_console_test.dart:91)는 empty state만 순회한다. +- Jobs: [packages/flutter/oto_console/test/oto_console_test.dart](/config/workspace/oto/packages/flutter/oto_console/test/oto_console_test.dart:387)는 job name/status/id/link만 확인한다. +- Menu model: 기존 테스트는 `New Item`, `Build History`, `Manage OTO`, job-context `Status` 메뉴를 단언하지 않는다. + +### 심볼 참조 + +공개 symbol rename/remove는 계획하지 않는다. 내부 private widget 추가/교체만 수행한다. + +### 분할 판단 + +dependent subtask `02+01_shell_jobs`이며 predecessor index `01`은 `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log`로 만족되어야 한다. 이 파일 작성 시점에는 predecessor가 아직 active/pending이므로 구현 시작 전 확인한다. + +### 범위 결정 근거 + +이 단계는 `oto_console_shell.dart`, `oto_jobs_surface.dart`, 관련 console/client widget tests에 한정한다. Global menu의 `New Item`, `Pipelines`, `Build History`, job-context menu의 `Status`, selected job history/stage link까지만 02 범위로 둔다. Existing job `Build Now`, `Configure`, `People`, `Changes`, `Replay`, `Pipeline Syntax`는 1차 적용에서 제외한다. Executions run menu, runners, settings는 03에서 처리한다. Core API, view model field 확장, 권한/audit UI는 제외한다. + +### 빌드 등급 + +`cloud-G07`. Jenkins IA 외부 reference와 broad widget 구조 변경이 결합되어 local-only 코드 패턴보다 제품 구조 판단이 중요하다. + +## 구현 체크리스트 + +- [ ] [JENKINS_IA_SHELL-1] shell을 통합 header/breadcrumb/action/task navigation과 Jenkins Dashboard-level left menu 구조로 개편한다. +- [ ] [JENKINS_IA_SHELL-2] pipelines/jobs 화면을 Jenkins dashboard job table/New Item/Build History 및 적용 가능한 job-context left task menu 구조로 개편한다. +- [ ] [JENKINS_IA_SHELL-3] shell/jobs widget tests와 app host regression tests를 Jenkins IA primitive 기준으로 갱신한다. +- [ ] `cd packages/flutter/oto_console && flutter analyze && flutter test`, `cd apps/client && flutter analyze && flutter test`, `git diff --check`를 실행한다. +- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. + +### [JENKINS_IA_SHELL-1] Shell Header And Breadcrumb IA + +#### 문제 + +[packages/flutter/oto_console/lib/src/oto_console_shell.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_console_shell.dart:57)는 `SafeArea > Row`에서 rail과 page frame을 나란히 둔다. [packages/flutter/oto_console/lib/src/oto_console_shell.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_console_shell.dart:227)는 page header에 icon + label만 둔다. [packages/flutter/oto_console/lib/src/oto_console_shell.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_console_shell.dart:312)는 60px rail을 primary navigation으로 만든다. + +#### 해결 방법 + +상단 header를 primary app context로 승격한다. Header에는 `OTO /
/
` breadcrumb, section action strip, selected section status/context를 둔다. 좌측 영역은 적용 가능한 Jenkins Dashboard-level menu로 맞춰 `New Item`, `Pipelines`, `Build History`를 알아볼 수 있게 둔다. `Manage OTO`, `Nodes`, `Artifacts`는 03 범위와 함께 global menu에 합류할 수 있게 shell 구조를 열어둔다. + +Before: + +```dart +57 body: SafeArea( +58 child: Row( +61 _OtoConsoleRail(...), +67 child: _ConsolePageFrame(...), +``` + +After: + +```dart +body: SafeArea( + child: _JenkinsConsoleFrame( + descriptor: descriptor, + selected: _section, + onSelect: _select, + child: _buildContent(theme), + ), +) +``` + +#### 수정 파일 및 체크리스트 + +- [ ] `packages/flutter/oto_console/lib/src/oto_console_shell.dart`: `_PageHeader`를 breadcrumb/action-aware header로 교체한다. +- [ ] `packages/flutter/oto_console/lib/src/oto_console_shell.dart`: rail을 적용 가능한 Jenkins Dashboard-level left menu로 재배치하고 `New Item`, `Pipelines`, `Build History` entry를 노출한다. +- [ ] `packages/flutter/oto_console/lib/src/oto_console_shell.dart`: 03에서 `Nodes`, `Artifacts`, `Manage OTO` entry를 추가할 수 있도록 menu model을 확장 가능하게 둔다. + +#### 테스트 작성 + +`packages/flutter/oto_console/test/oto_console_test.dart`에 shell test를 추가/수정한다. Assertion: `OTO`, `New Item`, `Build History`, `Pipelines`, 또는 정의서에서 고정한 breadcrumb/action labels가 렌더된다. 기존 Agent navigation callback은 유지한다. + +#### 중간 검증 + +```bash +cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +``` + +예상: shell/header/jobs 관련 widget tests PASS. + +### [JENKINS_IA_SHELL-2] Jenkins Dashboard Jobs Surface + +#### 문제 + +[packages/flutter/oto_console/lib/src/oto_jobs_surface.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_jobs_surface.dart:48)는 maxWidth 820 카드형 body를 만들고, [packages/flutter/oto_console/lib/src/oto_jobs_surface.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_jobs_surface.dart:299)는 `ListView.separated` record rows로 job을 보여준다. Jenkins dashboard에서 익숙한 job row/table, build history/queue context, New Item 진입 구조가 1차 구조가 아니다. + +#### 해결 방법 + +Jobs surface를 dashboard 형식으로 바꾼다. 상단 또는 좌측 context에는 `New Item`/create action과 `Build Queue`/`Build History` context를 둔다. Job 선택/row context에는 OTO에 바로 적용 가능한 Jenkins job menu인 `Status`, job `Build History`, `Stages` link만 노출한다. Data state는 `Name`, `Status`, `Last Run`, `Updated`, `Actions`가 있는 table-like list로 구성하고 execution link는 `Last Run` 또는 row action에 둔다. + +Before: + +```dart +299 return ListView.separated( +344 return _RecordRow( +345 title: job.name, +346 subtitle: 'Job ID: ${job.jobID}', +``` + +After: + +```dart +return _JenkinsJobDashboard( + jobs: jobs, + onExecutionTap: widget.onExecutionTap, + createForm: _buildJobCreateForm(context, theme), +); +``` + +#### 수정 파일 및 체크리스트 + +- [ ] `packages/flutter/oto_console/lib/src/oto_jobs_surface.dart`: `_JenkinsJobDashboard`, `_JobTableHeader`, `_JobTableRow`, `_BuildQueuePanel`, `_JobTaskMenu` 또는 동등 구조를 추가한다. +- [ ] `_JobTaskMenu`는 `Status`, `Build History`, `Stages`만 포함하고 `Build Now`/`Configure`는 만들지 않는다. +- [ ] 기존 `onExecutionTap` callback과 create form validation/action state를 유지한다. +- [ ] empty/error/loading state를 dashboard shell 안에서 깨지지 않게 배치한다. + +#### 테스트 작성 + +`packages/flutter/oto_console/test/oto_console_test.dart` jobs test를 수정한다. Assertion: `New Item`, `Build Queue`, `Build History`, `Status`, `Stages`, table header `Name`, `Status`, `Last Run`이 보이고 execution tap callback이 유지된다. + +#### 중간 검증 + +```bash +cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +``` + +예상: jobs dashboard and callback tests PASS. + +### [JENKINS_IA_SHELL-3] Host Regression + +#### 문제 + +[apps/client/lib/src/app/oto_client_app.dart](/config/workspace/oto/apps/client/lib/src/app/oto_client_app.dart:652)는 console package surface를 mount하므로 shell/jobs label 변경이 client widget tests를 깨뜨릴 수 있다. [apps/client/test/widget_test.dart](/config/workspace/oto/apps/client/test/widget_test.dart:1712)는 old Pipelines text assumptions를 가진다. + +#### 해결 방법 + +client tests를 새 Jenkins IA label에 맞추되, data fetching/write callback assertions는 유지한다. Host app source 변경은 필요한 label adaptation이 있을 때만 수행한다. + +#### 수정 파일 및 체크리스트 + +- [ ] `apps/client/test/widget_test.dart`: shell/jobs visible labels를 갱신한다. +- [ ] `apps/client/lib/src/app/oto_client_app.dart`: 변경 필요 시에만 mount props를 조정한다. + +#### 테스트 작성 + +기존 client widget tests를 수정한다. 새 테스트 파일은 만들지 않는다. + +#### 중간 검증 + +```bash +cd apps/client && flutter test test/widget_test.dart +``` + +예상: host widget regressions PASS. + +## 의존 관계 및 구현 순서 + +구현 시작 전 `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log` 존재를 확인한다. 02는 03과 병렬 가능하다. + +## 수정 파일 요약 + +| 파일 | 항목 | +|------|------| +| `packages/flutter/oto_console/lib/src/oto_console_shell.dart` | JENKINS_IA_SHELL-1 | +| `packages/flutter/oto_console/lib/src/oto_jobs_surface.dart` | JENKINS_IA_SHELL-2 | +| `packages/flutter/oto_console/test/oto_console_test.dart` | JENKINS_IA_SHELL-1, JENKINS_IA_SHELL-2 | +| `apps/client/test/widget_test.dart` | JENKINS_IA_SHELL-3 | +| `apps/client/lib/src/app/oto_client_app.dart` | JENKINS_IA_SHELL-3, only if required | +| `agent-ui/definition/index.md` | JENKINS_IA_SHELL-1, JENKINS_IA_SHELL-2 | +| `agent-ui/definition/views/index.md` | JENKINS_IA_SHELL-1, JENKINS_IA_SHELL-2 | +| `agent-ui/definition/components/index.md` | JENKINS_IA_SHELL-1, JENKINS_IA_SHELL-2 | + +## 최종 검증 + +```bash +test -f agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log +cd packages/flutter/oto_console && flutter analyze && flutter test +cd apps/client && flutter analyze && flutter test +git diff --check +``` + +모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다. diff --git a/agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/CODE_REVIEW-cloud-G07.md b/agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/CODE_REVIEW-cloud-G07.md new file mode 100644 index 0000000..5e281e7 --- /dev/null +++ b/agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/CODE_REVIEW-cloud-G07.md @@ -0,0 +1,165 @@ + + +# Code Review Reference - JENKINS_IA_OPS + +> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.** +> The task is NOT complete until every implementation-owned section below is filled in. +> Complete the `구현 체크리스트`; the final checklist item is mandatory before saving. +> Fill implementation-owned sections, then stop with active files in place and report ready for review. +> If implementation is blocked by a selected Milestone `구현 잠금 > 결정 필요` item, fill `사용자 리뷰 요청` with linked evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`. +> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation. +> Finalization is review-agent-only. + +## 개요 + +date=2026-07-03 +task=m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops, plan=0, tag=JENKINS_IA_OPS + +## Roadmap Targets + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Task ids: + - `execution-ops-menu-sync`: executions/runners/settings 화면이 `Pipeline Overview`, `Console Output`, `Artifacts`, `Build History`, `Nodes/Agents`, `Manage OTO` 중심으로 동기화된다. + - `preview-deploy`: 동기화된 Flutter web build를 원격 preview에 배포한다. +- Completion mode: check-on-pass + +## 이 파일을 읽는 리뷰 에이전트에게 + +> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. + +각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요. + +--- + +## 구현 항목별 완료 여부 + +| 항목 | 완료 여부 | +|------|---------| +| [JENKINS_IA_OPS-1] Pipeline Graph Run Detail | [ ] | +| [JENKINS_IA_OPS-2] Nodes And Agents Runners Surface | [ ] | +| [JENKINS_IA_OPS-3] Manage OTO Settings | [ ] | +| [JENKINS_IA_OPS-4] Preview Deployment Smoke | [ ] | + +## 구현 체크리스트 + +- [ ] [JENKINS_IA_OPS-1] executions run detail을 Pipeline Graph View/Stage View 및 run-context left task menu 중심 구조로 개편한다. +- [ ] [JENKINS_IA_OPS-2] runners를 Jenkins Nodes/Agents style 운영 목록으로 개편한다. +- [ ] [JENKINS_IA_OPS-3] settings fallback을 Manage OTO category 구조로 개편한다. +- [ ] [JENKINS_IA_OPS-4] console/client tests를 갱신하고 원격 preview를 재배포한다. +- [ ] `cd packages/flutter/oto_console && flutter analyze && flutter test`, `cd apps/client && flutter analyze && flutter test`, `git diff --check`, preview `curl -I`를 실행한다. +- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. + +## Agent UI Completion + +- Mode: review-pass-status-update +- Agent UI docs: + - `agent-ui/definition/index.md` + - `agent-ui/definition/views/index.md` + - `agent-ui/definition/components/index.md` +- Actual code evidence: + - [ ] `packages/flutter/oto_console/lib/src/oto_executions_surface.dart`: + - [ ] `packages/flutter/oto_console/lib/src/oto_runners_surface.dart`: + - [ ] `packages/flutter/oto_console/lib/src/oto_console_shell.dart`: +- Implementation verification evidence: + - [ ] `cd packages/flutter/oto_console && flutter analyze && flutter test`: + - [ ] `cd apps/client && flutter analyze && flutter test`: + - [ ] `curl -I http://toki-labs.com:13020/`: +- Status updates requested on PASS: + - [ ] `agent-ui/definition/views/index.md`: `executions`, `runners`, `settings` Jenkins IA criteria `계획` -> `구현됨` + - [ ] `agent-ui/definition/components/index.md`: ops component criteria `계획` -> `구현됨` +- Review finalization: + - [ ] Review agent updated the listed agent-ui docs and code evidence. + - [ ] Review agent ran `validate-agent-ui scope=jenkins-ia-executions-ops` after the status/evidence update. + +## 코드리뷰 전용 체크리스트 + +> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다. + +- [ ] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. +- [ ] active review/plan 파일을 `.log`로 아카이브한다. +- [ ] PASS이면 `complete.log` 작성 후 `agent-task/archive/YYYY/MM/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/`로 이동한다. +- [ ] PASS split 작업이면 빈 active parent를 제거하거나 남은 sibling 때문에 유지했다고 확인한다. +- [ ] WARN/FAIL이면 후속 active plan/review 또는 정당한 `USER_REVIEW.md`를 작성한다. + +## 계획 대비 변경 사항 + +_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._ + +## 주요 설계 결정 + +_구현 에이전트가 주요 설계 결정 사항을 기록한다._ + +## 사용자 리뷰 요청 + +_기본값은 `없음`이다. 구현 중 새 결정이 필요해 보여도 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 이 섹션은 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 채운다. 외부 환경/secret/서비스 준비, 검증 증거 공백, 반복 실패, 일반 범위 조정은 사용자 리뷰 요청이 아니며 `검증 결과`, `계획 대비 변경 사항`, 또는 code-review의 일반 follow-up plan으로 처리한다._ + +- 상태: 없음 +- 사유 유형: 없음 +- 연결 대상: 없음 +- 결정 필요: 없음 +- 차단 근거: 없음 +- 실행한 검증/명령: 없음 +- 자동 후속 불가 이유: 없음 +- 재개 조건: 없음 + +## 리뷰어를 위한 체크포인트 + +- `Stage summary unavailable` 단독 placeholder가 사라지고 `Stage Graph`와 run-context left task menu가 primary run detail이 되었는지 확인한다. +- Runners가 generic card list가 아니라 Nodes/Agents operational list로 보이는지 확인한다. +- Settings fallback이 Manage OTO category menu/surface인지 확인한다. +- Preview deployment가 dirty remote checkout을 source로 사용하지 않았는지 확인한다. + +## 검증 결과 + +### JENKINS_IA_OPS-1 중간 검증 +```bash +$ cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +(output) +``` + +### JENKINS_IA_OPS-2 중간 검증 +```bash +$ cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +(output) +``` + +### JENKINS_IA_OPS-3 중간 검증 +```bash +$ cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +(output) +``` + +### JENKINS_IA_OPS-4 중간 검증 +```bash +$ cd apps/client && flutter build web --dart-define=OTO_SERVER_HTTP_URL=http://toki-labs.com:18020 +(output) +$ preview_dir="/Users/toki/agent-work/oto-ui-preview-$(date -u +%Y%m%d%H%M%S)-jenkins-ia" +$ ssh toki@toki-labs.com "mkdir -p '$preview_dir'" +(output) +$ rsync -a --delete apps/client/build/web/ "toki@toki-labs.com:$preview_dir/" +(output) +$ ssh toki@toki-labs.com "pkill -f 'python3 -m http.server 13020' || true; cd '$preview_dir' && nohup python3 -m http.server 13020 >/tmp/oto-ui-preview.log 2>&1 &" +(output) +$ curl -I http://toki-labs.com:13020/ +(output) +``` + +### 최종 검증 +```bash +$ test -f agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log +(output) +$ cd packages/flutter/oto_console && flutter analyze && flutter test +(output) +$ cd apps/client && flutter analyze && flutter test +(output) +$ git diff --check +(output) +$ cd apps/client && flutter build web --dart-define=OTO_SERVER_HTTP_URL=http://toki-labs.com:18020 +(output) +$ curl -I http://toki-labs.com:13020/ +(output) +``` + +--- + +> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?** diff --git a/agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/PLAN-cloud-G07.md b/agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/PLAN-cloud-G07.md new file mode 100644 index 0000000..5d4a52e --- /dev/null +++ b/agent-task/m-control-plane-jenkins-menu-ia-code-sync/03+01_executions_ops/PLAN-cloud-G07.md @@ -0,0 +1,255 @@ + + +# Plan - Jenkins IA Executions And Ops + +## 이 파일을 읽는 구현 에이전트에게 + +`CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것이 구현의 마지막 단계다. 구현 후 active 파일을 유지하고 리뷰 준비만 보고한다. 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 리뷰 스텁의 `사용자 리뷰 요청` 섹션을 채우고 멈춘다. 구현 중 직접 사용자에게 질문하거나 선택지를 제시하거나 `request_user_input`, `USER_REVIEW.md`, `complete.log`, archive 이동을 수행하지 않는다. + +## 배경 + +Executions 화면은 Pipeline Graph View를 기준으로 삼는다고 문서화되어 있지만 실제 구현은 list/detail과 `Stage summary unavailable` placeholder에 머문다. Runners와 Settings도 Jenkins Nodes/Agents, Manage Jenkins 구조가 아니라 일반 카드/empty fallback에 가깝다. 사용자 결정으로 메뉴 구조는 OTO에 적용 가능한 Jenkins 모델만 1차 적용하는 것으로 확정되었으므로, 01 정의서 guardrail 완료 후 운영 view와 run/settings menu를 적용 가능 항목 중심으로 맞춘다. + +## 사용자 리뷰 요청 흐름 + +사용자 리뷰 요청은 선택된 Milestone lock 결정이 구현을 막을 때만 active `CODE_REVIEW-cloud-G07.md`의 `사용자 리뷰 요청` 섹션에 기록한다. 구현 에이전트는 직접 사용자 프롬프트를 띄우지 않는다. + +## Roadmap Targets + +- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- Task ids: + - `execution-ops-menu-sync`: executions/runners/settings 화면이 `Pipeline Overview`, `Console Output`, `Artifacts`, `Build History`, `Nodes/Agents`, `Manage OTO` 중심으로 동기화된다. + - `preview-deploy`: 동기화된 Flutter web build를 원격 preview에 배포한다. +- Completion mode: check-on-pass + +## Agent UI Completion + +- Mode: review-pass-status-update +- Agent UI docs: + - `agent-ui/definition/index.md` + - `agent-ui/definition/views/index.md` + - `agent-ui/definition/components/index.md` +- Required code evidence: + - `packages/flutter/oto_console/lib/src/oto_executions_surface.dart`: run detail with stage graph/build history/log/artifact structure and run-context left task menu + - `packages/flutter/oto_console/lib/src/oto_runners_surface.dart`: nodes/agents style list with current executor/context actions + - `packages/flutter/oto_console/lib/src/oto_console_shell.dart`: Manage OTO settings fallback using Jenkins-style categories +- Required implementation verification: + - `cd packages/flutter/oto_console && flutter analyze && flutter test`: PASS expected before review + - `cd apps/client && flutter analyze && flutter test`: PASS expected before review + - `curl -I http://toki-labs.com:13020/`: 200 expected after preview deploy +- Review finalization validation: + - `validate-agent-ui scope=jenkins-ia-executions-ops`: PASS expected after status/evidence update +- Status updates on PASS: + - `agent-ui/definition/views/index.md`: `executions`, `runners`, `settings` Jenkins IA criteria `계획` -> `구현됨` + - `agent-ui/definition/components/index.md`: `execution-action-toolbar`, `log-preview`, `artifact-list`, `runner-self-update-form`, `section-surface`, `record-list` criteria `계획` -> `구현됨` + +## 분석 결과 + +### 읽은 파일 + +- `agent-roadmap/current.md` +- `agent-roadmap/phase/control-plane-product-surface/PHASE.md` +- `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md` +- `agent-test/local/rules.md` +- `agent-test/local/framework-smoke.md` +- `agent-ui/definition/index.md` +- `agent-ui/definition/views/index.md` +- `agent-ui/definition/components/index.md` +- `packages/flutter/oto_console/lib/src/oto_console_shell.dart` +- `packages/flutter/oto_console/lib/src/oto_executions_surface.dart` +- `packages/flutter/oto_console/lib/src/oto_runners_surface.dart` +- `packages/flutter/oto_console/lib/src/oto_console_contract.dart` +- `packages/flutter/oto_console/lib/oto_console.dart` +- `packages/flutter/oto_console/pubspec.yaml` +- `packages/flutter/oto_console/test/oto_console_test.dart` +- `apps/client/lib/src/app/oto_client_app.dart` +- `apps/client/lib/src/app/bootstrap.dart` +- `apps/client/lib/main.dart` +- `apps/client/pubspec.yaml` +- `apps/client/test/widget_test.dart` + +### SDD 기준 + +Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-jenkins-menu-ia-code-sync.md`. SDD: 불필요. 사유: 기존 Flutter/agent-ui IA 정렬이며 새 API/schema/proto/config/env 계약 또는 외부 provider 쓰기 경계를 만들지 않는다. + +### 테스트 환경 규칙 + +test_env는 `local`이다. `agent-test/local/rules.md`, `agent-test/local/framework-smoke.md`를 적용한다. 원격 runner preflight 결과 `/Users/toki/agent-work/oto`는 dirty/HEAD mismatch 상태이며, port `13020`에는 기존 preview가 떠 있다. 최종 preview는 local build artifact를 새 원격 preview dir로 배포하고 기존 port server를 교체하는 절차로 검증한다. + +### 테스트 커버리지 공백 + +- Executions: [packages/flutter/oto_console/lib/src/oto_executions_surface.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_executions_surface.dart:195)는 Jenkins 관계라고 주석을 달았지만 실제 UI는 list + selected detail이다. [packages/flutter/oto_console/lib/src/oto_executions_surface.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_executions_surface.dart:406)는 stage graph 대신 placeholder만 둔다. +- Runners: [packages/flutter/oto_console/lib/src/oto_runners_surface.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_runners_surface.dart:189)는 runners를 generic list rows로 렌더한다. +- Settings: [packages/flutter/oto_console/lib/src/oto_console_shell.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_console_shell.dart:127)는 settings를 fallback `OtoConsoleSectionSurface`로 처리한다. +- Tests: [apps/client/test/widget_test.dart](/config/workspace/oto/apps/client/test/widget_test.dart:1732)는 `Stage summary unavailable`를 기대한다. +- Run/settings menu: 기존 테스트는 `Console Output`, `Pipeline Overview`, `Artifacts`, `Build History`, `Manage OTO` category menu를 단언하지 않는다. + +### 심볼 참조 + +공개 symbol rename/remove는 계획하지 않는다. 내부 private widget 추가/교체만 수행한다. + +### 분할 판단 + +dependent subtask `03+01_executions_ops`이며 predecessor index `01`은 `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log`로 만족되어야 한다. 02와 직접 의존은 없다. + +### 범위 결정 근거 + +이 단계는 executions/runners/settings IA, run-context left task menu, Nodes/Agents, Artifacts, Manage OTO menu, 관련 tests, final preview deployment에 한정한다. Shell/jobs 작업은 02 범위다. Core API, stage data schema 추가, durable audit/artifact storage, 권한/audit behavior는 제외한다. Stage graph는 현재 view model 필드만으로 `Checkout/Build/Package/Publish` 같은 deterministic placeholder stages를 상태와 함께 표현하거나, 데이터가 없음을 그래프 영역 안에서 명확히 표현한다. + +### 빌드 등급 + +`cloud-G07`. Multiple UI surfaces, host tests, remote preview smoke가 결합되어 광범위한 문맥과 외부 reference 판단이 필요하다. + +## 구현 체크리스트 + +- [ ] [JENKINS_IA_OPS-1] executions run detail을 Pipeline Graph View/Stage View 및 run-context left task menu 중심 구조로 개편한다. +- [ ] [JENKINS_IA_OPS-2] runners를 Jenkins Nodes/Agents style 운영 목록으로 개편한다. +- [ ] [JENKINS_IA_OPS-3] settings fallback을 Manage OTO category 구조로 개편한다. +- [ ] [JENKINS_IA_OPS-4] console/client tests를 갱신하고 원격 preview를 재배포한다. +- [ ] `cd packages/flutter/oto_console && flutter analyze && flutter test`, `cd apps/client && flutter analyze && flutter test`, `git diff --check`, preview `curl -I`를 실행한다. +- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. + +### [JENKINS_IA_OPS-1] Pipeline Graph Run Detail + +#### 문제 + +[packages/flutter/oto_console/lib/src/oto_executions_surface.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_executions_surface.dart:330)는 run header, actions, stage placeholder, logs, artifacts를 세로로 쌓는다. [packages/flutter/oto_console/lib/src/oto_executions_surface.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_executions_surface.dart:425)는 `Stage summary unavailable`를 표시한다. + +#### 해결 방법 + +Selected run detail 상단에 `Stage Graph`를 primary region으로 둔다. Current model에 stage data가 없으므로 fixed stage skeleton을 execution state에 맞춰 표시하고, 데이터 부재 문구는 그래프 region 내부의 secondary note로 낮춘다. View-local 좌측 task menu에는 `Console Output`, `Pipeline Overview`, `Artifacts`, `Build History`를 두고 selected run graph/log/artifacts 관계를 한 화면에서 유지한다. + +#### 수정 파일 및 체크리스트 + +- [ ] `packages/flutter/oto_console/lib/src/oto_executions_surface.dart`: `_PipelineStageGraph`, `_RunTaskMenu` 또는 동등 widget 추가. +- [ ] actions/logs/artifacts pane은 graph 아래 또는 우측 context에 유지한다. +- [ ] `Stage summary unavailable` 단독 placeholder는 제거한다. + +#### 테스트 작성 + +`packages/flutter/oto_console/test/oto_console_test.dart`와 `apps/client/test/widget_test.dart`에서 `Stage Graph`, stage labels, `Console Output`, `Pipeline Overview`, `Build History`, `Artifacts`를 단언한다. `Stage summary unavailable` 기대는 제거한다. + +#### 중간 검증 + +```bash +cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +``` + +예상: executions stage graph tests PASS. + +### [JENKINS_IA_OPS-2] Nodes And Agents Runners Surface + +#### 문제 + +[packages/flutter/oto_console/lib/src/oto_runners_surface.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_runners_surface.dart:222)는 runner row를 generic `_RecordRow`로 렌더하고, current job/execution은 small metadata chip에 머문다. + +#### 해결 방법 + +Runners surface를 `Nodes`/`Agents` view로 재구성한다. Rows에는 node name, status, executors/current work, message, actions를 table-like로 보여준다. Self Update는 row action 또는 contextual management action으로 유지한다. + +#### 수정 파일 및 체크리스트 + +- [ ] `packages/flutter/oto_console/lib/src/oto_runners_surface.dart`: `Nodes`, `Executor`, `Current job`, `Current run`, `Manage` labels를 포함한 table-like layout 추가. +- [ ] self-update validation/action callback을 유지한다. + +#### 테스트 작성 + +`packages/flutter/oto_console/test/oto_console_test.dart` runner tests를 새 labels로 갱신하고 action callback tests를 유지한다. + +#### 중간 검증 + +```bash +cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +``` + +예상: runner node layout and action tests PASS. + +### [JENKINS_IA_OPS-3] Manage OTO Settings + +#### 문제 + +[packages/flutter/oto_console/lib/src/oto_console_shell.dart](/config/workspace/oto/packages/flutter/oto_console/lib/src/oto_console_shell.dart:127)는 settings를 generic fallback detailGroups로 표시한다. Jenkins-style management category grid/navigation 구조가 없다. + +#### 해결 방법 + +Settings fallback을 `Manage OTO` category surface와 menu로 바꾼다. Categories: `System`, `Security`, `Tools`, `Nodes`, `Browser policy` 등 OTO contract에 맞는 항목만 표시하고 endpoint values는 category detail로 둔다. + +#### 수정 파일 및 체크리스트 + +- [ ] `packages/flutter/oto_console/lib/src/oto_console_shell.dart`: settings fallback labels와 layout을 Manage OTO category menu/list/grid로 변경한다. +- [ ] `packages/flutter/oto_console/test/oto_console_test.dart`: settings empty/fallback expectations 갱신. + +#### 테스트 작성 + +기존 section surface test를 갱신한다. `Manage OTO`, `System`, `Security`, `Browser policy`가 보이는지 확인한다. + +#### 중간 검증 + +```bash +cd packages/flutter/oto_console && flutter test test/oto_console_test.dart +``` + +예상: settings fallback tests PASS. + +### [JENKINS_IA_OPS-4] Preview Deployment Smoke + +#### 문제 + +사용자가 원격 환경에서 UI를 확인하고 있으며, 이전 preview는 port `13020`에서 실행 중이다. 원격 checkout은 현재 local source와 HEAD/dirty state가 달라 그대로 빌드 source로 쓰기 어렵다. + +#### 해결 방법 + +local에서 `apps/client` web build를 만든 뒤 새 원격 preview directory로 업로드하고 port `13020` server를 교체한다. 기존 source checkout은 건드리지 않는다. + +#### 수정 파일 및 체크리스트 + +- [ ] `apps/client/test/widget_test.dart`: final labels 갱신. +- [ ] `apps/client/build/web`: tracked 변경으로 남기지 않는다. +- [ ] 원격 preview dir은 `/Users/toki/agent-work/oto-ui-preview--jenkins-ia` 형식으로 만든다. + +#### 테스트 작성 + +새 테스트는 1~3에서 작성한다. 이 항목은 deployment smoke다. + +#### 중간 검증 + +```bash +cd apps/client && flutter build web --dart-define=OTO_SERVER_HTTP_URL=http://toki-labs.com:18020 +preview_dir="/Users/toki/agent-work/oto-ui-preview-$(date -u +%Y%m%d%H%M%S)-jenkins-ia" +ssh toki@toki-labs.com "mkdir -p '$preview_dir'" +rsync -a --delete apps/client/build/web/ "toki@toki-labs.com:$preview_dir/" +ssh toki@toki-labs.com "pkill -f 'python3 -m http.server 13020' || true; cd '$preview_dir' && nohup python3 -m http.server 13020 >/tmp/oto-ui-preview.log 2>&1 &" +curl -I http://toki-labs.com:13020/ +``` + +예상: build succeeds and curl returns HTTP 200. + +## 의존 관계 및 구현 순서 + +구현 시작 전 `agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log` 존재를 확인한다. 03은 02와 병렬 가능하지만, 최종 preview는 둘 다 끝난 뒤 실행하면 가장 좋다. 02가 아직 미완료면 preview에는 03 범위만 반영되었다고 `계획 대비 변경 사항`에 기록한다. + +## 수정 파일 요약 + +| 파일 | 항목 | +|------|------| +| `packages/flutter/oto_console/lib/src/oto_executions_surface.dart` | JENKINS_IA_OPS-1 | +| `packages/flutter/oto_console/lib/src/oto_runners_surface.dart` | JENKINS_IA_OPS-2 | +| `packages/flutter/oto_console/lib/src/oto_console_shell.dart` | JENKINS_IA_OPS-3 | +| `packages/flutter/oto_console/test/oto_console_test.dart` | JENKINS_IA_OPS-1, JENKINS_IA_OPS-2, JENKINS_IA_OPS-3 | +| `apps/client/test/widget_test.dart` | JENKINS_IA_OPS-1, JENKINS_IA_OPS-4 | +| `agent-ui/definition/index.md` | JENKINS_IA_OPS-1..3 | +| `agent-ui/definition/views/index.md` | JENKINS_IA_OPS-1..3 | +| `agent-ui/definition/components/index.md` | JENKINS_IA_OPS-1..3 | + +## 최종 검증 + +```bash +test -f agent-task/m-control-plane-jenkins-menu-ia-code-sync/01_definition_guardrails/complete.log +cd packages/flutter/oto_console && flutter analyze && flutter test +cd apps/client && flutter analyze && flutter test +git diff --check +cd apps/client && flutter build web --dart-define=OTO_SERVER_HTTP_URL=http://toki-labs.com:18020 +curl -I http://toki-labs.com:13020/ +``` + +모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다. diff --git a/agent-ui/definition/components/console-rail/index.md b/agent-ui/definition/components/console-rail/index.md index aec5ed5..7dcb285 100644 --- a/agent-ui/definition/components/console-rail/index.md +++ b/agent-ui/definition/components/console-rail/index.md @@ -1,7 +1,7 @@ --- ui_doc_type: component component_id: console-rail -status: 구현됨 +status: 계획 source_evidence: - type: code path: packages/flutter/oto_console/lib/src/oto_console_shell.dart @@ -18,7 +18,7 @@ source_evidence: Component ID: `console-rail` -Status: `구현됨` +Status: `계획` (Jenkins IA gate 미충족: global/context menu 모델 분리가 후속 구현 대기) ## Source Evidence @@ -52,15 +52,49 @@ Status: `구현됨` ## Jenkins Reference Alignment -- Jenkins classic left task list의 빠른 destination과 Blue Ocean top navigation의 section switching을 OTO rail로 축약한다. -- Jenkins `Manage Jenkins`, `Build History`, job/run destination에 해당하는 주요 운영 화면은 rail destination으로 노출한다. -- Jenkins와 달리 breadcrumb stack은 현재 제공하지 않는다. 세부 route가 늘어나면 shell/header 쪽 후속 후보로 분리한다. +- 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 운영 destination grouping에 맞춰 main/workflow/administration grouping을 더 명확히 한다. -- selected state와 tooltip은 유지하고, 필요하면 section ordering을 overview, pipelines, executions, runners, artifacts, settings, agent 순서 후보로 재검토한다. -- 현재 rail 구현은 목표 grouping 반영이 완료되어 `구현됨` 상태다. +- 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 순서를 기준으로 검토한다. +- 현재 rail 구현은 global destination 축약(current)만 존재하고, 위 1차 적용 Global/Context menu(target)는 Jenkins IA gate 미충족 상태다. +- 후속 구현(02/03)의 widget 테스트는 global menu label `New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO`와 job/run context menu(`Status`, `Stages`, `Pipeline Overview`, `Console Output`) 분리를 고정 label로 확인한다. ## Variants diff --git a/agent-ui/definition/components/index.md b/agent-ui/definition/components/index.md index fa4ee0e..7c69183 100644 --- a/agent-ui/definition/components/index.md +++ b/agent-ui/definition/components/index.md @@ -27,19 +27,19 @@ components: | Component ID | Status | Evidence | Description | |--------------|--------|----------|-------------| -| `console-shell` | 구현됨 | `oto_console_shell.dart` + Jenkins reference baseline | overall console scaffold with rail and selected section content. Jenkins-style header/action layout 반영 | -| `console-rail` | 구현됨 | `oto_console_shell.dart` + Jenkins reference baseline | section navigation rail. Jenkins navigation grouping 반영 | -| `section-surface` | 구현됨 | `oto_console_shell.dart` + Jenkins reference baseline | generic titled empty/detail section shell. Manage Jenkins-style fallback grouping 반영 | +| `console-shell` | 계획 | `oto_console_shell.dart` + Jenkins IA gate | overall console scaffold with rail and selected section content. 필수 primitive: 통합 header, breadcrumb, action 영역. Jenkins IA gate 미충족, 후속 구현 대기. | +| `console-rail` | 계획 | `oto_console_shell.dart` + Jenkins IA gate | section navigation rail. 필수 primitive: `New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO` global menu와 job/run context menu 분리. Jenkins IA gate 미충족, 후속 구현 대기. | +| `section-surface` | 계획 | `oto_console_shell.dart` + Jenkins IA gate | generic titled empty/detail section shell. 필수 primitive: `Manage OTO` 관리 category grouping. Jenkins IA gate 미충족, 후속 구현 대기. | | `state-panel` | 구현됨 | surface files + Jenkins reference baseline | loading, empty, error state blocks. Jenkins monitor/banner-style state 반영 | | `status-badge` | 구현됨 | overview/runners/jobs/executions surface files + Jenkins reference baseline | compact status label badge. Jenkins result/severity vocabulary 정렬 반영 | | `endpoint-tile` | 구현됨 | `oto_console_overview.dart` | endpoint or config value tile | | `connection-status-grid` | 구현됨 | `oto_console_overview.dart` | health/readiness status grid | | `auth-token-reference` | 구현됨 | `oto_console_overview.dart` | display-only auth token reference | -| `record-list` | 구현됨 | runners/jobs/executions/artifacts surface files + Jenkins reference baseline | repeated entity list rows. Jenkins job/build/node row density 정렬 반영 | +| `record-list` | 계획 | runners/jobs/executions/artifacts surface files + Jenkins IA gate | repeated entity list rows. 필수 primitive: Jenkins Dashboard job table / Build History / `Nodes` density의 dense row. Jenkins IA gate 미충족, 후속 구현 대기. | | `action-feedback` | 구현됨 | runners/jobs/executions surface files + Jenkins reference baseline | success/deferred/failed action message. Jenkins action outcome 정렬 반영 | | `runner-self-update-form` | 구현됨 | `oto_runners_surface.dart` + Jenkins reference baseline | runner self-update draft form. Jenkins update action density 정렬 반영 | | `job-create-form` | 구현됨 | `oto_jobs_surface.dart` + Jenkins reference baseline | job create draft form. Jenkins New Item flow 정렬 반영 | -| `execution-action-toolbar` | 구현됨 | `oto_executions_surface.dart` + Jenkins reference baseline | cancel/report/log/artifact execution actions. Jenkins run action area 정렬 반영 | +| `execution-action-toolbar` | 계획 | `oto_executions_surface.dart` + Jenkins IA gate | cancel/report/log/artifact execution actions. 필수 primitive: run detail의 `Pipeline Overview`/`Stage Graph`, `Console Output` 연결 action. Jenkins IA gate 미충족, 후속 구현 대기. | | `authorization-state` | 계획 | security/audit SDD | operator/admin allow/deny, disabled, and error state rules for write actions | | `audit-action-summary` | 계획 | security/audit SDD | display-safe action metadata summary for audit-oriented UI exposure | | `log-preview` | 구현됨 | `oto_executions_surface.dart` + Jenkins reference baseline | bounded execution log preview. Jenkins Console Output/live log pane 정렬 반영 | @@ -52,12 +52,14 @@ components: - view별 변형이 필요하면 `/.md` 또는 하위 디렉터리를 사용한다. - 실제 구현체 이름과 다를 수 있지만, view 정의서에서 참조하는 component id는 이 목록에 있어야 한다. -## Jenkins Reference Patterns +## Jenkins IA Required Primitives -| Pattern | OTO Components | Notes | -|---------|----------------|-------| -| Navigation and app context | `console-shell`, `console-rail`, `section-surface` | Jenkins `2.516+` header/breadcrumb/action과 classic side task list를 러프 참조로 삼되, 현재 구현의 rail shell은 유지한다. | -| Entity status scanning | `record-list`, `status-badge`, `state-panel` | Jenkins dashboard job rows, build history, node status, administrative monitors처럼 상태와 primary id를 빠르게 읽게 한다. | -| Write action outcome | `action-feedback`, `authorization-state`, `audit-action-summary` | Jenkins build/abort/config action 이후 결과와 권한 실패를 display-safe message로 표현한다. | -| Pipeline/run detail | `execution-action-toolbar`, `log-preview`, `artifact-list` | Pipeline Graph View의 graph/stage/log 통합 흐름을 후속 조정 기준으로 삼는다. | -| Creation/config forms | `job-create-form`, `runner-self-update-form`, `endpoint-tile`, `auth-token-reference` | Jenkins New Item/Manage Jenkins류 form density를 참고하되 OTO runtime 계약에 맞춘다. | +아래 primitive는 러프 참조가 아니라 Jenkins IA gate 필수 항목이다. `Widget assertion target`은 후속 구현(02/03)의 widget 테스트가 고정 label로 확인해야 할 대상이고, `Menu target`은 대응하는 Jenkins 메뉴 모델 항목이다. + +| Pattern | OTO Components | Widget assertion target | Menu target | +|---------|----------------|-------------------------|-------------| +| Navigation and app context | `console-shell`, `console-rail`, `section-surface` | 통합 header, breadcrumb, global menu(`New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO`), job/run context menu 분리 | Global: `New Item`, `Build History`, `Nodes`, `Artifacts`, `Manage OTO` | +| Entity status scanning | `record-list`, `status-badge`, `state-panel` | Dashboard job table / `Build History` / `Nodes` dense row와 primary id/status | Global: `Jobs`, `Build History`, `Nodes` | +| Write action outcome | `action-feedback`, `authorization-state`, `audit-action-summary` | build/abort/config action 결과와 권한 실패 display-safe message | Run action outcome | +| Pipeline/run detail | `execution-action-toolbar`, `log-preview`, `artifact-list` | `Pipeline Overview`, `Stage Graph`, `Console Output`, `Artifacts` | Run: `Pipeline Overview`, `Console Output`, `Artifacts` | +| Creation/config forms | `job-create-form`, `runner-self-update-form`, `endpoint-tile`, `auth-token-reference` | `New Item` create form, `Manage OTO` 관리 form density | Global: `New Item`, `Manage OTO` | diff --git a/agent-ui/definition/index.md b/agent-ui/definition/index.md index d1eeb7a..a6ca0e9 100644 --- a/agent-ui/definition/index.md +++ b/agent-ui/definition/index.md @@ -42,22 +42,33 @@ OTO Control Plane Flutter 콘솔의 운영 화면, 반복 component, 상태 표 ## External Reference Baseline -이 화면정의서는 pixel parity가 아니라 정보 구조와 러프한 운영 화면 배치를 맞추는 기준으로 Jenkins 최신 UI를 참조한다. +이 화면정의서는 pixel parity가 아니라 정보 구조를 Jenkins 최신 UI 기준으로 맞추는 structural gate로 참조한다. `러프 정렬`은 충족 기준이 아니며, 아래 `Jenkins IA gate` 항목이 테스트로 확인될 때만 대상 view/component를 `구현됨`으로 둔다. | Reference | 확인일 | 적용 기준 | |-----------|--------|-----------| | Jenkins weekly `2.571` changelog | 2026-07-02 | 최신 weekly 기준. breadcrumb, System Log, task UI, dialog/apply animation 같은 운영 UI 보정이 계속 반영되는 기준으로 본다. URL: https://www.jenkins.io/changelog/ | | Jenkins LTS `2.555.3` changelog | 2026-07-02 | 안정 배포 기준. Java 21+, permission/API token/security UI 변화와 LTS 호환 범위를 확인하는 기준으로 본다. URL: https://www.jenkins.io/changelog-stable/ | | Jenkins refreshed design `2.516.1+` | 2026-07-02 | 통합 header/breadcrumb/action, 접근성 대비, 테마, responsive action 배치를 러프 레이아웃 참조로 삼는다. URL: https://www.jenkins.io/blog/2025/07/24/redesigning-jenkins-part-two/ | -| Pipeline Graph View | 2026-07-02 | Pipeline/run 상세의 active reference. stage graph, stage list, logs를 한 화면에서 다루는 구조를 executions view의 후속 조정 후보로 둔다. URL: https://plugins.jenkins.io/pipeline-graph-view/ | +| Pipeline Graph View | 2026-07-02 | Pipeline/run 상세의 active reference이자 필수 기준. stage graph, stage list, logs를 한 화면에서 다루는 구조는 executions view의 Jenkins IA gate 필수 항목이다. URL: https://plugins.jenkins.io/pipeline-graph-view/ | | Blue Ocean | 2026-07-02 | 2026년 7월 deprecation 예정이므로 신규 기준이 아니라 legacy comparison으로만 사용한다. URL: https://www.jenkins.io/doc/book/blueocean/getting-started/ | ## Target Layout Status -- 현재 Flutter 구현은 Jenkins 정렬 레이아웃 패스가 반영된 OTO console layout의 code evidence다. -- Jenkins 정렬 목표가 이번 레이아웃 패스에서 코드와 검증으로 확인된 view/component는 `구현됨` 상태로 둔다. +- 현재 Flutter 구현은 운영 밀도 일부만 반영했으며 Jenkins IA gate는 미충족이다. Jenkins 정렬 대상 view/component는 `계획` 상태로 두고 gate 미충족 설명을 함께 둔다. - 목표는 pixel parity가 아니라 header/action/status/list/detail/log/artifact의 정보 배치와 운영 밀도를 Jenkins 최신 UI 흐름에 맞추는 것이다. -- 보안/감사 source of truth처럼 문서 계획만 있는 항목은 계속 `계획` 상태로 둔다. +- 보안/감사 source of truth처럼 문서 계획만 있는 항목은 계속 `계획` 상태로 두며, Jenkins IA gate 미충족 항목과 섞지 않는다. + +### Jenkins IA gate + +Jenkins 정렬 대상 view/component는 아래 structural primitive가 코드와 widget 테스트로 확인될 때만 `구현됨`으로 승격한다. 하나라도 미충족이면 `계획`으로 둔다. + +| Gate primitive | 확인 대상 | 충족 기준 | +|----------------|-----------|-----------| +| 통합 header/breadcrumb/action | `console-shell` | Jenkins `2.516+` 통합 header, breadcrumb stack, action 영역이 shell/header에 존재한다. | +| dashboard job table | `pipelines` + `record-list` | Jenkins Dashboard job/build history 수준의 dense table/list 구조로 job과 status를 스캔한다. | +| run stage graph | `executions` + `execution-action-toolbar` | Pipeline Graph View 스타일 Pipeline Overview / Stage Graph가 run detail primary region에 존재한다. | +| node/manage 구조 | `runners`, `settings` | Nodes/Agents 목록과 Manage OTO(Manage Jenkins 대응) 관리 category 구조가 존재한다. | +| global/context menu 모델 | `console-rail` | New Item, Build History, Nodes, Artifacts, Manage OTO global menu와 job/run context menu가 분리 구현된다. | ## Structure @@ -84,3 +95,4 @@ OTO Control Plane Flutter 콘솔의 운영 화면, 반복 component, 상태 표 - 2026-06-24: Flutter 콘솔 구현을 기준으로 `code-first` agent-ui scaffold를 생성했다. - 2026-07-02: Jenkins 최신 weekly/LTS와 `2.516+` refreshed UI를 러프 레이아웃 참조 기준선으로 추가했다. - 2026-07-03: Jenkins 정렬 레이아웃 패스 구현과 검증 근거를 바탕으로 대상 view/component status를 `구현됨`으로 갱신했다. +- 2026-07-03: Jenkins reference를 러프 정렬에서 `Jenkins IA gate` structural acceptance로 강화하고, gate 미충족 대상 view/component status를 `계획`으로 정정했다. 후속 구현(02/03)이 primitive를 테스트로 확인하면 `구현됨`으로 승격한다. diff --git a/agent-ui/definition/views/index.md b/agent-ui/definition/views/index.md index a368f08..4768349 100644 --- a/agent-ui/definition/views/index.md +++ b/agent-ui/definition/views/index.md @@ -16,13 +16,26 @@ views: | View ID | Status | Evidence | Description | |---------|--------|----------|-------------| -| `overview` | 구현됨 | `OtoConsoleOverview` + Jenkins reference baseline | Control Plane endpoint, connection, authentication reference overview. Jenkins-style header/status layout 반영 | -| `runners` | 구현됨 | `OtoRunnersSurface` + Jenkins reference baseline | runner registry state and self-update action surface. Jenkins Nodes/Agents-style list 반영 | -| `pipelines` | 구현됨 | `OtoJobsSurface` + Jenkins reference baseline | pipeline/job queue list and create job action surface. Jenkins Dashboard/New Item-style flow 반영 | -| `executions` | 구현됨 | `OtoExecutionsSurface` + Jenkins reference baseline | execution list, detail expansion, write actions, log/artifact preview. Pipeline Graph View-style run detail 반영 | +| `overview` | 계획 | `OtoConsoleOverview` + Jenkins IA gate | Control Plane endpoint, connection, authentication reference overview. 필수: 통합 header/breadcrumb/action(`Dashboard` root)이 shell/header에 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +| `runners` | 계획 | `OtoRunnersSurface` + Jenkins IA gate | runner registry state and self-update action surface. 필수: Jenkins Nodes/Agents 목록 구조로 node 상태/현재 작업/연결 메시지를 스캔한다. Jenkins IA gate 미충족, 후속 구현 대기. | +| `pipelines` | 계획 | `OtoJobsSurface` + Jenkins IA gate | pipeline/job queue list and create job action surface. 필수: Dashboard job table density와 `New Item` 생성 entry가 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | +| `executions` | 계획 | `OtoExecutionsSurface` + Jenkins IA gate | execution list, detail expansion, write actions, log/artifact preview. 필수: Pipeline Graph View 스타일 `Pipeline Overview`/`Stage Graph`, `Console Output`, `Build History`가 run detail에 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | | `artifacts` | 구현됨 | `OtoArtifactsSurface` + Jenkins reference baseline | artifact event list. Jenkins artifact browser-style list 반영 | | `agent` | 구현됨 | `OtoAgentPanel` | embeddable agent-shell panel for OTO capabilities | -| `settings` | 구현됨 | `OtoConsoleShell` fallback section + Jenkins reference baseline | runtime endpoint and browser policy details. Manage Jenkins-style grouping 반영 | +| `settings` | 계획 | `OtoConsoleShell` fallback section + Jenkins IA gate | runtime endpoint and browser policy details. 필수: `Manage OTO`(Manage Jenkins 대응) 관리 category grouping이 존재한다. Jenkins IA gate 미충족, 후속 구현 대기. | + +## Required Visible Primitives + +후속 구현(02/03)이 widget 테스트로 확인해야 할 view별 required visible primitive와 메뉴 매핑 target이다. label은 후속 test assertion의 고정 기준 문자열이다. + +| View | Required visible primitives | Global menu target | Context menu target | +|------|-----------------------------|--------------------|---------------------| +| `overview` | 통합 header, breadcrumb, `Dashboard` root | `Dashboard` | 없음 | +| `pipelines` | `New Item`, job table row, `Status` | `New Item`, `Jobs` | Job: `Status`, `Build History`, `Stages` | +| `executions` | `Build History`, `Pipeline Overview`, `Stage Graph`, `Console Output` | `Build History` | Run: `Pipeline Overview`, `Console Output`, `Artifacts`, `Build History` | +| `runners` | `Nodes` 목록, node status | `Nodes` | 없음 | +| `artifacts` | `Artifacts` 목록 row | `Artifacts` | Run: `Artifacts` | +| `settings` | `Manage OTO` category grouping | `Manage OTO` | 없음 | ## Navigation @@ -35,6 +48,53 @@ views: - `pipelines` -> `executions`: job execution id tap - `executions` -> `artifacts`: "View Artifacts Tab" action +## Jenkins Left Menu Reference + +Jenkins의 좌측 메뉴는 하나의 고정 global sidebar가 아니라 화면 컨텍스트별 task/action list다. OTO의 현재 60px rail은 Jenkins Dashboard 수준의 주요 destination 일부만 축약한 것이며, job/run 페이지의 세부 좌측 task menu는 아직 별도 contextual menu로 구현되어 있지 않다. + +사용자 결정(2026-07-03): OTO Control Plane은 Jenkins 메뉴 모델 중 OTO에 바로 적용 가능한 항목만 1차 적용한다. Core 계약이나 source of truth가 없는 Jenkins 항목은 메뉴 자리를 만들지 않고 `제외/후순위`로 명시한다. + +### 1차 적용 Global Menu + +| Order | Jenkins menu model | OTO menu target | Target behavior | +|-------|--------------------|-----------------|-----------------| +| 1 | Dashboard / view root | `overview` | Control Plane dashboard/home으로 이동한다. | +| 2 | `New Item` | `pipelines` + `job-create-form` | 새 job/pipeline 생성 entry로 노출한다. | +| 3 | Jobs / item list | `pipelines` | job 목록과 selected job status/context로 이동한다. | +| 4 | `Build History` | `executions` | execution history와 selected run context로 이동한다. | +| 5 | Nodes/Agents | `runners` | OTO runner/node 목록으로 이동한다. | +| 6 | `Artifacts` | `artifacts` | 실행 산출물 목록으로 이동한다. | +| 7 | `Manage Jenkins` | `settings` / Manage OTO | endpoint, policy, node/runtime 관리 category로 이동한다. | +| 8 | OTO-specific Agent | `agent` | Jenkins parity 대상은 아니지만 OTO agent surface로 유지한다. | + +### 1차 적용 Job Context Menu + +| Order | Jenkins job menu model | OTO target | Target behavior | +|-------|------------------------|------------|-----------------| +| 1 | `Status` | `pipelines` job status/detail | selected job 상태와 최근 execution link를 보여준다. | +| 2 | `Build History` | `executions` filtered/context list | selected job의 execution history로 연결한다. | +| 3 | `Stages` / `Full Stage View` | `executions` stage graph | selected execution의 Pipeline Overview/Stage Graph로 연결한다. | + +### 1차 적용 Run/Build Context Menu + +| Order | Jenkins run menu model | OTO target | Target behavior | +|-------|------------------------|------------|-----------------| +| 1 | `Pipeline Overview` / stage detail | `executions` stage graph | Pipeline Graph View 스타일 primary region으로 연결한다. | +| 2 | `Console Output` | `log-preview` | selected execution log preview/full log로 연결한다. | +| 3 | `Artifacts` | `artifacts`, execution detail artifacts | selected execution artifacts와 global Artifacts view로 연결한다. | +| 4 | `Build History` | `executions` list | selected run 주변 history/context list로 둔다. | + +### 제외/후순위 Menu Items + +| Jenkins menu item | Decision | Reason | +|-------------------|----------|--------| +| `People` | 제외 | OTO 현재 범위에 user directory가 없다. | +| `Changes` | 제외 | SCM change set source가 없다. | +| `Build Now` | 후순위 | 기존 job 재실행/dispatch 계약이 명확해진 뒤 적용한다. | +| `Configure` | 후순위 | job configuration surface가 생긴 뒤 적용한다. | +| `Replay` | 후순위 | replay contract가 없다. | +| `Pipeline Syntax` | 후순위 | OTO YAML/runner command authoring surface와 별도다. | + ## Common States - loading @@ -48,23 +108,24 @@ views: ## Jenkins Reference Mapping -| OTO View | Jenkins Reference | Rough Alignment | -|----------|-------------------|-----------------| -| `overview` | Dashboard, controller monitors, header status | Core/API 상태와 주요 진입점을 한 화면 상단에서 스캔한다. | -| `runners` | Nodes and Clouds, agents list | runner를 Jenkins agent/node처럼 상태, 현재 작업, 연결 메시지 중심으로 목록화한다. | -| `pipelines` | Dashboard jobs, New Item, job page | pipeline/job 목록, create action, 연결된 execution 이동을 Jenkins job 흐름과 맞춘다. | -| `executions` | Build/run detail, Build History, Console Output, Pipeline Graph View | 실행 목록에서 run detail로 확장하고 action, log, artifact preview를 함께 둔다. Stage graph는 후속 조정 후보로 둔다. | +| OTO View | Jenkins Reference | Structural Acceptance | +|----------|-------------------|-----------------------| +| `overview` | Dashboard, controller monitors, header status | Core/API 상태와 주요 진입점을 통합 header/breadcrumb 아래에서 스캔한다. | +| `runners` | Nodes and Clouds, agents list | runner를 Jenkins Nodes/Agents 목록 구조로 상태, 현재 작업, 연결 메시지 중심으로 목록화한다. | +| `pipelines` | Dashboard jobs, New Item, job page | Dashboard job table density의 pipeline/job 목록, `New Item` create action, 연결된 execution 이동을 갖춘다. | +| `executions` | Build/run detail, Build History, Console Output, Pipeline Graph View | 실행 목록에서 run detail로 확장하고 `Pipeline Overview`/`Stage Graph`, `Console Output`, `Build History`, artifact preview를 함께 갖춘다. Stage graph는 Jenkins IA gate 필수 항목이다. | | `artifacts` | Build artifacts, workspace/artifact browser | artifact name/path를 빌드 산출물 목록처럼 스캔한다. 다운로드/브라우징은 후속 후보로 둔다. | -| `settings` | Manage Jenkins | endpoint, policy, local runtime preference를 운영 설정 요약으로 둔다. | +| `settings` | Manage Jenkins | endpoint, policy, local runtime preference를 `Manage OTO` 관리 category grouping으로 둔다. | | `agent` | 없음 | OTO 전용 agent-shell 확장 표면이며 Jenkins parity 대상에서 제외한다. | -## Rough Layout Rules +## Structural Layout Gate -- Jenkins `2.516+`의 통합 header/breadcrumb/action 모델은 OTO의 view header와 action 영역을 정리하는 참조로 삼는다. -- 현재 OTO 구현의 60px rail은 유지하며, Jenkins classic side task list와 Blue Ocean top navigation을 절충한 운영 콘솔 navigation으로 본다. -- Pipeline execution 상세는 Blue Ocean보다 Pipeline Graph View를 active reference로 삼는다. +- Jenkins `2.516+`의 통합 header/breadcrumb/action 모델은 OTO view header와 action 영역의 필수 구조이며, 러프 참조가 아니라 Jenkins IA gate 항목이다. +- 메뉴 구조는 Jenkins 기준 중 OTO에 적용 가능한 항목만 맞춘다. Dashboard-level left menu는 global navigation으로, job/run left task list는 page-local contextual menu로 분리해 구현한다. +- 현재 OTO 구현의 60px rail은 Jenkins Dashboard-level destination만 부분 대응하므로 Jenkins IA gate를 만족하지 못한다. 위 메뉴 계약을 만족하려면 코드 재작업이 필요하다. +- Pipeline execution 상세는 Blue Ocean보다 Pipeline Graph View를 active reference로 삼으며 `Pipeline Overview`/`Stage Graph`는 필수다. - pixel, spacing, color token, exact component parity는 이번 화면정의서 범위에서 제외한다. -- 위 레이아웃 재정렬은 코드 반영과 검증 근거가 확인된 대상 view status를 `구현됨`으로 둔다. +- Jenkins IA gate primitive가 코드와 widget 테스트로 확인된 대상 view만 status를 `구현됨`으로 승격한다. 미충족 상태에서는 `계획`으로 두고 설명에 미충족 사유를 남긴다. ## Open Questions