<!-- task=edge_multi_point_routing plan=2 tag=REVIEW_REVIEW_API -->

# Edge Multi-Point Routing Follow-up Plan

## 이 파일을 읽는 구현 에이전트에게

아래 체크리스트를 순서대로 완료하고, 각 항목의 중간 검증과 최종 검증을 실제로 실행하세요. 구현이 끝나면 `agent-task/edge_multi_point_routing/CODE_REVIEW.md`의 모든 섹션을 실제 구현 내용과 명령 출력으로 채우세요. `CODE_REVIEW.md`의 `이 파일을 읽는 리뷰 에이전트에게` 섹션에 있는 아카이브 지시(`*.log`로 이름 변경, `complete.log` 작성)는 구현 에이전트가 수행하면 안 되며, 리뷰 스킬 전용입니다.

## 배경

`/terminate-session` 성공 메시지 자체는 이제 node label을 포함하지만, 직전 후속 구현은 helper 반환값만 검증하고 실제 콘솔 출력 포맷 회귀를 막는 테스트를 추가하지 않았습니다. 이번 루프는 계획서의 필수 테스트 요구를 정확히 충족하는 데만 집중합니다.

## 의존 관계 및 구현 순서

1. `REVIEW_REVIEW_API-1`에서 `/terminate-session` 성공 경로의 실제 출력 문자열을 검증하는 테스트를 추가한다.

### [REVIEW_REVIEW_API-1] `/terminate-session` 성공 메시지의 실제 출력 포맷을 회귀 테스트로 고정

#### 문제

현재 `apps/edge/cmd/edge/console_test.go`의 `TestSendTerminateSession_ReturnsNodeLabel`은 helper가 어떤 label을 반환하는지만 검증합니다. 그러나 사용자에게 보이는 계약은 `runConsole`의 성공 출력인 `terminated session <id> node=<alias|id>`이며, 이 포맷은 아직 테스트로 고정되지 않았습니다.

#### 해결 방법

console 루프 전체를 돌리거나, 최소한 성공 출력 분기를 직접 호출할 수 있는 구조를 사용해 실제 `io.Writer`에 기록된 문자열을 검증합니다. alias 우선 케이스를 최소 1개 포함하고, 가능하면 node_id fallback도 같은 테스트군에서 다룹니다.

#### 수정 파일 및 체크리스트

- [ ] `apps/edge/cmd/edge/console_test.go` - `/terminate-session` 성공 시 출력 문자열에 `terminated session <id> node=<label>`이 포함되는지 검증
- [ ] 필요 시 `apps/edge/cmd/edge/console.go` - 테스트 가능한 작은 helper로 출력 조립을 분리하되, 동작 변경은 최소화

#### 테스트 작성

테스트를 작성합니다.

- `apps/edge/cmd/edge/console_test.go` - terminate-session 성공 경로가 실제 writer 출력에 session과 node label을 함께 남기는지 검증

#### 중간 검증

```bash
go test ./apps/edge/cmd/edge/...
```

기대 결과: console 테스트가 통과하고, 성공 출력 포맷이 회귀 테스트로 고정됩니다.

### 최종 검증

```bash
go test ./apps/edge/cmd/edge/... ./apps/edge/internal/node/...
```

기대 결과: console 변경과 기존 registry 선택 규칙 테스트가 함께 통과합니다.
