<!-- task=m-openai-workspace-agent-execution-contract/03+02_cli_agent_cwd plan=1 tag=REVIEW_API -->

# Plan - REVIEW_API

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

이 plan은 code-review FAIL follow-up이다. 구현 범위는 `code_review_local_G07_0.log`의 Required 두 건을 해소하는 데 한정한다. 사용자 결정, 사용자 소유 외부 환경, scope 충돌로 막히면 사용자에게 직접 묻지 말고 `CODE_REVIEW-local-G07.md`의 `사용자 리뷰 요청` 섹션에 근거와 재개 조건을 채운다.

## 배경

이전 루프는 `ExecutionSpec.Workspace`를 CLI process cwd로 전달하는 소스 변경과 일부 테스트를 추가했지만, codex app-server/opencode owned server process start의 cwd 적용을 직접 검증하지 못했고, 사용자 실행 파이프라인 변경에 필요한 repo 내부 edge-node 진단 증거도 남기지 못했다.

## 사용자 리뷰 요청 흐름

구현 중 사용자 결정이 필요하면 `agent-ops/skills/common/_templates/implementation-user-review-request-section.md` 형식으로 active `CODE_REVIEW-local-G07.md`의 `사용자 리뷰 요청` 섹션을 채운다. 구현 에이전트는 채팅으로 직접 질문하거나 `request_user_input`을 호출하지 않는다. code-review가 요청 타당성을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/openai-workspace-agent-execution-contract.md`
- Task ids:
  - `agent-cwd`: workspace-bound agent process 실행기가 `ExecutionSpec.Workspace`를 process working directory로 적용한다.
- Completion mode: check-on-pass

## 리뷰 실패 요약

- `apps/node/internal/adapters/cli/codex_app_server.go:383`와 `apps/node/internal/adapters/cli/opencode_sse.go:271`의 cwd 적용 로직에 대한 provider server process 직접 테스트가 없다.
- `code_review_local_G07_0.log`의 최종 검증은 auxiliary `./scripts/e2e-smoke.sh`까지만 있고, testing rule이 요구하는 `scripts/dev/edge.sh` + `scripts/dev/node.sh` repo 내부 edge-node 진단 증거가 없다.

## 범위 결정 근거

이 follow-up은 테스트와 검증 증거 보완이다. `session_workspace_isolation` 범위인 session key 변경, session list/terminate semantics 변경은 여전히 이 subtask에서 다루지 않는다. 소스 동작 변경은 새 테스트가 실제 cwd 적용 결함을 드러낸 경우에만 최소 수정한다.

## 빌드 등급

build lane은 `local-G07`을 유지한다. Required 이슈가 명확하고 deterministic fake process 및 로컬 dev script 진단으로 재현 가능하다.

## 구현 체크리스트

- [ ] codex app-server process start가 workspace cwd를 쓰는 deterministic test를 추가한다.
- [ ] opencode owned server process start가 workspace cwd를 쓰고 explicit `--dir`를 우선하는 deterministic test를 추가한다.
- [ ] repo 내부 edge-node 진단을 `scripts/dev/edge.sh`와 `scripts/dev/node.sh`로 실행하고 메시지 2회, node local payload와 edge rendered payload 일치, `/nodes`, `/capabilities`, `/transport`, `/sessions`, `/terminate-session` 결과를 기록한다.
- [ ] `go test -count=1 ./apps/node/internal/terminal ./apps/node/internal/adapters/cli`, `./scripts/e2e-smoke.sh`, `git diff --check`를 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 의존 관계 및 구현 순서

이 directory 이름 `03+02_cli_agent_cwd`의 predecessor `02+01_workspace_required_enforcement`는 `agent-task/archive/2026/06/m-openai-workspace-agent-execution-contract/02+01_workspace_required_enforcement/complete.log`로 이미 충족되어 있다.

### [REVIEW_API-1] Add Provider Server Cwd Tests

문제: 기존 테스트는 one-shot, persistent non-terminal, terminal cwd만 검증한다. codex app-server와 opencode owned server process start는 `cmd.Dir` 적용 로직이 있지만 직접 회귀 테스트가 없다.

해결 방법: 외부 CLI 계정이 필요 없는 fake executable을 테스트 안에서 만든다. fake executable은 시작 cwd를 marker file에 기록하고, codex app-server test는 process start 직후 marker를 확인한 뒤 proc를 닫는다. opencode test는 listen line을 stdout/stderr로 출력하는 fake server를 사용해 `startOpencodeLocalServer`가 반환되도록 만들고, workspace cwd와 explicit `--dir` 우선순위를 각각 확인한다.

수정 파일 및 체크리스트:

- [ ] `apps/node/internal/adapters/cli/codex_app_server_internal_test.go`: `startCodexAppServerProc(..., workspace)`가 workspace cwd에서 fake process를 시작하는지 검증한다.
- [ ] `apps/node/internal/adapters/cli/opencode_sse_internal_test.go`: `startOpencodeLocalServer(..., workspace)`가 workspace cwd를 쓰는지 검증한다.
- [ ] `apps/node/internal/adapters/cli/opencode_sse_internal_test.go`: `opts.Dir`가 있으면 workspace보다 explicit `--dir` cwd를 우선하는지 검증한다.
- [ ] 새 테스트가 불필요하게 실제 codex/opencode binary, network server, 계정 상태에 의존하지 않도록 한다.

중간 검증:

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

기대 결과: CLI adapter package가 PASS하고 새 cwd tests가 실패 없이 실행된다.

### [REVIEW_API-2] Capture Required Edge-Node Diagnostic Evidence

문제: `./scripts/e2e-smoke.sh`는 보조 smoke이며 완료 기준이 아니다. node CLI adapter 실행 경로 변경은 testing rule상 repo 내부 edge-node 진단과 full-cycle 실제 구동 증거를 남겨야 한다.

해결 방법: 임시 edge/node config와 fake CLI profile을 사용해 `scripts/dev/edge.sh`와 `scripts/dev/node.sh`를 별도 프로세스로 실행한다. Edge console에서 같은 session 메시지 2회와 command를 직접 보내고, edge 출력과 node 출력의 payload 내용/순서 일치를 검증한다. 기본 configs는 수정하지 않는다.

검증 항목:

- [ ] node registration 후 `/nodes` 결과가 edge 화면에 표시된다.
- [ ] 같은 session 메시지 2회가 각각 `[edge] sent`, `[node-*-event] start`, 비어 있지 않은 `[node-*-message]`, `[node-*-event] complete` 순서로 표시된다.
- [ ] node local `[node-message]` payload와 edge `[node-*-message]` payload가 run별로 내용/순서까지 일치한다.
- [ ] `/capabilities`, `/transport`, `/sessions`, `/terminate-session` 결과가 edge 화면에 표시된다.
- [ ] 보조 `./scripts/e2e-smoke.sh` 결과와 repo 내부 edge-node 진단 결과를 서로 구분해 기록한다.

중간 검증:

```bash
# Terminal/session 1
IOP_EDGE_CONFIG=<temp-edge.yaml> ./scripts/dev/edge.sh

# Terminal/session 2
IOP_NODE_CONFIG=<temp-node.yaml> ./scripts/dev/node.sh

# Edge console transcript
/nodes
<message containing IOP_MANUAL_ONE token>
<message containing IOP_MANUAL_TWO token>
/capabilities
/transport
/sessions
/terminate-session
/exit
```

기대 결과: `agent-ops/skills/project/e2e-smoke/SKILL.md`의 repo 내부 edge-node 진단 판정 기준을 충족한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `apps/node/internal/adapters/cli/codex_app_server_internal_test.go` | REVIEW_API-1 |
| `apps/node/internal/adapters/cli/opencode_sse_internal_test.go` | REVIEW_API-1 |
| `CODE_REVIEW-local-G07.md` | REVIEW_API-2 및 최종 구현 기록 |

## 최종 검증

```bash
go test -count=1 ./apps/node/internal/terminal ./apps/node/internal/adapters/cli
./scripts/e2e-smoke.sh
git diff --check
```

모든 코드 변경과 검증 완료 후 반드시 `CODE_REVIEW-local-G07.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
