<!-- task=05_cli_persistent_explicit_complete plan=1 tag=REVIEW_REFACTOR -->

# completion_marker edge-node 전달 경로 보강

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

아래 체크리스트를 순서대로 완료하고, 각 항목의 중간 검증과 최종 검증을 실제로 실행하세요. 구현이 끝나면 `agent-task/05_cli_persistent_explicit_complete/CODE_REVIEW-cloud-G06.md`의 모든 섹션을 실제 구현 내용과 명령 출력으로 채우세요. `CODE_REVIEW-cloud-G06.md`의 아카이브와 `complete.log` 작성은 구현 에이전트가 수행하면 안 됩니다.

## 배경

직전 리뷰에서 `completion_marker`가 `packages/config`와 persistent 어댑터에는 추가됐지만, 실제 운영 경로인 `edge -> google.protobuf.Struct settings -> node` 매핑에는 반영되지 않은 것이 확인됐다. 현재 상태에서는 edge가 node에 내려주는 CLI profile settings에서 `completion_marker`가 유실되고, node도 해당 필드를 다시 읽지 못해 persistent 세션이 항상 `idle-timeout` fallback만 사용한다.

이번 루프는 새 설정 필드를 edge/node 경계에서 끝까지 보존하고, 이를 검증하는 테스트를 추가하는 데 한정한다.

## 구현 항목

### [REVIEW_REFACTOR-1] CLI completion_marker settings Struct round-trip 복구

#### 문제

- `apps/edge/internal/transport/server.go`는 CLI profile payload를 만들 때 `completion_marker`를 직렬화하지 않는다.
- `apps/node/internal/adapters/factory.go`는 settings Struct를 `CLIProfileConf`로 변환할 때 `completion_marker`를 역직렬화하지 않는다.

#### 해결 방법

- edge payload 생성 시 profile별 settings map에 다음 구조를 포함한다.

```go
"completion_marker": map[string]any{
    "line":  p.CompletionMarker.Line,
    "regex": p.CompletionMarker.Regex,
}
```

- node settings 파서에서 nested map을 읽어 `prof.CompletionMarker.Line` / `Regex`를 채운다.
- 빈 값만 있는 경우 기존 동작을 유지하되, 필드가 존재하면 line/regex 둘 다 보존한다.

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

- [ ] `apps/edge/internal/transport/server.go`에 `completion_marker` 직렬화를 추가한다.
- [ ] `apps/node/internal/adapters/factory.go`에 `completion_marker` 역직렬화를 추가한다.
- [ ] `apps/edge/internal/transport/server_test.go`에 payload가 `completion_marker`를 포함하는 테스트를 추가/갱신한다.
- [ ] `apps/node/internal/adapters/factory_internal_test.go`에 `completion_marker`가 `cliConfFromStruct`를 통과해 보존되는 테스트를 추가한다.

#### 테스트 작성

- `TestBuildNodePayload_CLICompletionMarker`: `completion_marker.line` / `regex`가 settings payload에 포함되는지 단언.
- `TestCLIConfFromStruct_ProfileCompletionMarker`: settings Struct에서 `CompletionMarkerConf`가 복원되는지 단언.

#### 중간 검증

```bash
go test ./apps/edge/internal/transport ./apps/node/internal/adapters -count=1
```

예상 결과: 신규 round-trip 테스트 포함 PASS.

## 리뷰어를 위한 체크포인트

- edge payload에 `completion_marker`가 실제 nested struct 형태로 포함되는가
- node `cliConfFromStruct`가 `line`과 `regex`를 모두 읽는가
- 새 테스트가 단순 존재 확인이 아니라 값 보존을 실제로 단언하는가
- 이번 루프가 리뷰에서 지적된 경계 문제만 해결하고 범위를 넘지 않는가

## 최종 검증

```bash
go test ./packages/config/... ./apps/edge/internal/transport ./apps/node/internal/adapters ./apps/node/internal/adapters/cli/... -count=1
```

예상 결과: 관련 패키지 테스트 PASS, `completion_marker`가 로컬 설정과 edge-node settings 경로 모두에서 동작.
