chore(roadmap): OTO 제거 마일스톤을 마무리한다

IOP 활성 코드와 문서에서 OTO 전용 잔여 fixture를 제거했고, 해당 마일스톤을 완료 후보 상태로 동기화한다.
This commit is contained in:
toki 2026-06-06 06:23:56 +09:00
parent 4b58256208
commit f836c91dd7
4 changed files with 19 additions and 35 deletions

View file

@ -46,6 +46,10 @@ CLI 실행, specialized agent 등록, bootstrap/enrollment, 원격 터미널 브
- 경로: `agent-roadmap/archive/phase/automation-runtime-bridge/milestones/oto-agent-message-boundary.md`
- 요약: OTO 독립형 실행 전환으로 Edge 직접 OTO domain payload boundary 정리가 현재 범위에서 필요 없어져 폐기한다.
- [검토중] IOP OTO 전용 경로 제거
- 경로: `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-specific-iop-removal.md`
- 요약: OTO 독립 Control Plane 전환에 맞춰 IOP 활성 코드와 문서에서 OTO 전용 agent kind, bootstrap, smoke, 운영 문구를 제거했고 사용자 완료 확인과 archive 승인을 기다린다.
- [계획] 원격 터미널 브리지 POC
- 경로: `agent-roadmap/phase/automation-runtime-bridge/milestones/remote-terminal-bridge-poc.md`
- 요약: Agent를 설치하기 어려운 host/device를 위해 Edge broker와 Node terminal transport 기반 원격 터미널 브리지 POC를 만든다.

View file

@ -12,7 +12,7 @@ IOP에는 OTO 전용 agent kind, bootstrap config, smoke target, test fixture,
## 상태
[진행중]
[검토중]
## 구현 잠금
@ -30,22 +30,23 @@ IOP에는 OTO 전용 agent kind, bootstrap config, smoke target, test fixture,
### Epic: [decommission] OTO-Specific IOP Decommission
- [ ] [inventory] 활성 파일 기준으로 OTO 전용 잔여 지점을 목록화하고 archive 스냅샷과 무관한 제거 대상을 확정한다.
- [ ] [config-cleanup] `packages/go/config`, `configs/edge.yaml`, Edge command에서 OTO 전용 agent kind와 bootstrap/release config를 제거한다.
- [ ] [runtime-cleanup] Edge registry, transport, service snapshot, Control Plane/Client fixture에서 OTO 전용 조건 분기와 표시 문구를 제거하거나 generic 표현으로 바꾼다.
- [ ] [smoke-cleanup] `Makefile`의 OTO registration smoke와 OTO repository 의존 실행 경로를 제거한다.
- [ ] [docs-cleanup] README, agent-ops project rules, 활성 로드맵 문서에서 OTO를 IOP-managed specialized agent로 설명하는 최신 문구를 제거하고 독립 경계로 정리한다.
- [ ] [verification] active code/docs 검색과 변경 영향 테스트로 OTO 전용 경로 제거를 검증한다. 검증: `rg -n --hidden -S "\bOTO\b|\boto\b|oto-agent|OTOAgent|OTOBootstrap|oto_bootstrap|oto_release" -g '!agent-roadmap/archive/**' -g '!agent-task/archive/**' -g '!.git/**' -g '!build/**'` 결과가 archive/역사 보존 외 제거 대상 없음으로 정리되고, 변경 범위에 맞는 Go/Flutter 테스트가 통과한다.
- [x] [inventory] 활성 파일 기준으로 OTO 전용 잔여 지점을 목록화하고 archive 스냅샷과 무관한 제거 대상을 확정한다.
- [x] [config-cleanup] `packages/go/config`, `configs/edge.yaml`, Edge command에서 OTO 전용 agent kind와 bootstrap/release config를 제거한다.
- [x] [runtime-cleanup] Edge registry, transport, service snapshot, Control Plane/Client fixture에서 OTO 전용 조건 분기와 표시 문구를 제거하거나 generic 표현으로 바꾼다.
- [x] [smoke-cleanup] `Makefile`의 OTO registration smoke와 OTO repository 의존 실행 경로를 제거한다.
- [x] [docs-cleanup] README, agent-ops project rules, 활성 로드맵 문서에서 OTO를 IOP-managed specialized agent로 설명하는 최신 문구를 제거하고 독립 경계로 정리한다.
- [x] [verification] active code/docs 검색과 변경 영향 테스트로 OTO 전용 경로 제거를 검증한다. 검증: `rg -n --hidden -S "\bOTO\b|\boto\b|oto-agent|OTOAgent|OTOBootstrap|oto_bootstrap|oto_release" -g '!agent-roadmap/archive/**' -g '!agent-task/archive/**' -g '!.git/**' -g '!build/**'` 결과가 archive/역사 보존 외 제거 대상 없음으로 정리되고, 변경 범위에 맞는 Go/Flutter 테스트가 통과한다.
## 완료 리뷰
- 상태: 없음
- 요청일: 없음
- 완료 근거: 모든 기능 Task와 Task 안에 명시된 검증이 아직 충족되지 않았다.
- 상태: 요청됨
- 요청일: 2026-06-06
- 완료 근거: `packages/go/config/config_test.go`의 OTO 전용 negative fixture와 `apps/edge/cmd/edge/main_test.go`의 legacy help unwanted list를 정리했고, 비-roadmap 활성 코드/문서 검색에서 OTO 전용 잔여가 없음을 확인했다.
- 완료 근거: `go test ./packages/go/config`, `go test ./apps/edge/cmd/edge`, `go test ./packages/go/... ./apps/edge/...`가 통과했다. Flutter 변경은 없어 Flutter 테스트는 범위 밖으로 보았다.
- 리뷰 필요:
- [ ] 사용자가 완료 결과를 확인했다
- [ ] archive 이동을 승인했다
- 리뷰 코멘트: 없음
- 리뷰 코멘트: 작은 잔여 작업은 즉시 처리했고, 별도 plan이 필요한 큰 작업은 발견되지 않았다.
## 범위 제외
@ -59,3 +60,5 @@ IOP에는 OTO 전용 agent kind, bootstrap config, smoke target, test fixture,
- 표준선: IOP는 OTO를 직접 등록/부트스트랩/상태 관리하는 책임을 갖지 않는다. 필요한 generic 확장 지점은 OTO 이름 없이 external/domain agent 또는 adapter-neutral 표현으로 남긴다.
- 선행 작업: OTO 독립형 실행 전환 결정, Edge 직접 OTO registration 관련 Milestone 폐기
- 후속 작업: 제거 후 필요하면 generic external agent 경계를 별도 Milestone으로 재정의한다.
- 현재 동기화 상태: 작은 잔여 작업은 직접 처리했다. 비-archive `agent-task`에는 별도 plan이 필요한 `m-oto-specific-iop-removal` 작업 산출물이 없다.
- 현재 inventory: 비-roadmap 활성 코드/문서에서는 OTO 전용 문자열 검색 결과가 없다. 활성 Phase/Milestone의 OTO 언급은 과거 링크 또는 현재 제거 작업 문맥으로 본다.

View file

@ -1114,7 +1114,7 @@ func TestHelpDiscoversEdgeLocalDevFlow(t *testing.T) {
}
// 2. Assert absence of non-official/legacy paths (verify they aren't recommended)
for _, unwanted := range []string{"scripts/dev/edge.sh", "scripts/dev/node.sh", "dev-deploy", "agent register", "oto-agent"} {
for _, unwanted := range []string{"scripts/dev/edge.sh", "scripts/dev/node.sh", "dev-deploy", "agent register"} {
if strings.Contains(got, unwanted) {
t.Errorf("root help contains legacy path reference: %q", unwanted)
}

View file

@ -722,29 +722,6 @@ logging:
}
}
func TestLoadEdge_NodeAgentKindRejectsOTO(t *testing.T) {
dir := t.TempDir()
f := filepath.Join(dir, "edge.yaml")
yaml := `
server:
listen: "0.0.0.0:9090"
nodes:
- alias: "agent-local"
token: "token-agent"
agent_kind: "oto-agent"
`
if err := os.WriteFile(f, []byte(yaml), 0o600); err != nil {
t.Fatalf("write yaml: %v", err)
}
_, err := config.LoadEdge(f)
if err == nil {
t.Fatal("expected invalid agent_kind error")
}
if !strings.Contains(err.Error(), "agent_kind") {
t.Fatalf("expected error to mention agent_kind, got %v", err)
}
}
func TestLoadEdge_A2ADefaults(t *testing.T) {
dir := t.TempDir()
f := filepath.Join(dir, "edge.yaml")