<!-- task=cli_terminal_cycle plan=4 tag=REVIEW_REVIEW_API_FOLLOWUP_2 -->

# Persistent CLI mutex/session cleanup follow-up

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

각 항목의 체크리스트를 완료하면 즉시 체크 표시한다. 중간/최종 검증 명령을 실제로 실행하고 출력을 `CODE_REVIEW.md`의 검증 결과 섹션에 붙여 넣는다. 계획과 다르게 구현해야 하는 부분이 생기면 이유를 `CODE_REVIEW.md`의 `계획 대비 변경 사항`에 남긴다.

## 배경

`REVIEW_REVIEW_API_FOLLOWUP` 구현은 timeout cleanup과 registry stop continuation을 시도했지만, persistent session mutex unlock 누락과 sessions map locking 불일치가 남았다. persistent terminal은 같은 profile에 여러 입력을 반복 전달해야 하므로 반복 실행 경로를 우선 복구한다.

---

### [REVIEW_REVIEW_API_FOLLOWUP_2-1] Persistent Execute 모든 반환 경로에서 session mutex 해제

#### 체크리스트

- [ ] `apps/node/internal/adapters/cli/cli.go` - `executePersistent`에서 `sess.mu`를 `defer` 또는 명확한 helper로 모든 반환 경로에서 unlock한다.
- [ ] `apps/node/internal/adapters/cli/cli.go` - timeout/cancel 경로에서도 double unlock이나 locked 상태 반환이 없게 정리한다.
- [ ] `apps/node/internal/adapters/cli/cli_test.go` - 같은 persistent profile에 대해 `Execute`를 두 번 연속 호출하고 두 번째 응답까지 complete되는 테스트를 추가한다.

---

### [REVIEW_REVIEW_API_FOLLOWUP_2-2] Timeout/cancel cleanup 범위와 sessions map locking 정리

#### 체크리스트

- [ ] `apps/node/internal/adapters/cli/cli.go` - `c.sessions` lookup/insert/delete/reset을 `c.mu`로 일관되게 보호한다.
- [ ] `apps/node/internal/adapters/cli/cli.go` - 한 run timeout/cancel 시 해당 profile session만 close/kill/remove하거나, 전체 adapter invalidation을 명시적으로 구현하고 테스트한다.
- [ ] `apps/node/internal/adapters/cli/cli_test.go` - 한 profile timeout이 다른 persistent profile session을 불필요하게 종료하지 않는지 또는 의도한 fail-fast 동작을 검증한다.

---

### [REVIEW_REVIEW_API_FOLLOWUP_2-3] Partial rollback 테스트와 formatting 정리

#### 체크리스트

- [ ] `apps/node/internal/adapters/cli/cli.go` - persistent profile start 순서가 필요하면 deterministic하게 만든다.
- [ ] `apps/node/internal/adapters/cli/cli_test.go` - 시작 marker와 exit marker로 partial-start cleanup을 검증한다.
- [ ] `apps/node/internal/adapters/registry.go`, `apps/node/internal/adapters/*_test.go` - `gofmt`를 적용한다.
- [ ] `apps/node/internal/adapters/registry.go` - `Registry.Stop` 주석과 실제 error 반환 정책을 일치시킨다.

## 최종 검증

```bash
gofmt -w apps/node/internal/adapters/cli/cli.go apps/node/internal/adapters/cli/cli_test.go apps/node/internal/adapters/registry.go apps/node/internal/adapters/registry_test.go
go test ./apps/node/internal/adapters ./apps/node/internal/adapters/cli
go test ./apps/node/internal/bootstrap ./apps/node/...
go test ./...
```
