<!-- task=cli_real_e2e_failures/02_opencode_second_run plan=1 tag=REVIEW_OCODE -->

# PLAN-cloud-G07 - review follow-up for opencode real e2e verification

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

이 follow-up은 `code_review_cloud_G07_0.log`의 FAIL 항목을 닫기 위한 최소 작업이다. 기존 unit/blackbox 변경은 유지하되, 실제 `bin/edge.sh` + `bin/node.sh` opencode 사용자 흐름 2회 메시지를 재검증하고 review 파일 계약을 복구한다.

실제 e2e가 다시 실패하면 새 trace 로그를 근거로 `opencode-sse` parser/filter를 최소 수정하고, 관련 테스트를 함께 보강한다. 외부 opencode 서버나 계정 문제로 실행 자체가 불가능하면 체크리스트를 완료 처리하지 말고 blocker stdout/stderr와 환경 조건을 `CODE_REVIEW-cloud-G07.md`에 기록한다.

## 배경

- 이전 plan log: `plan_cloud_G07_0.log`
- 이전 review log: `code_review_cloud_G07_0.log`
- 리뷰 판정: FAIL
- 확인된 통과 테스트:
  - `go test ./apps/node/internal/adapters/cli -run 'OpencodeSSE|Opencode'`
  - `go test ./apps/node/internal/adapters/cli`
- FAIL 사유:
  - 실제 `bin/edge.sh` + `bin/node.sh` opencode 동일 session 2회 메시지 검증이 미완이다.
  - active review 파일의 구현 체크리스트가 plan과 일치하지 않았고, 실제 stdout/stderr 검증 출력이 없다.

## 구현 체크리스트

- [ ] 실제 `bin/edge.sh` + `bin/node.sh` 흐름으로 `opencode` 메시지 2회를 재검증하고 로그 경로와 핵심 stdout/stderr를 남긴다.
- [ ] `CODE_REVIEW-cloud-G07.md`를 plan과 동일한 구현 체크리스트 및 실제 검증 출력 기준으로 갱신한다.

## 구현 계획

### [REVIEW_OCODE-1] 실제 opencode e2e 2회 메시지를 재검증한다

문제:

- 원래 실패는 unit test가 아니라 실제 `bin/edge.sh` + `bin/node.sh` 사용자 흐름에서 동일 session의 두 번째 opencode 메시지가 timeout/cancelled로 끝난 현상이다.
- 이전 구현은 blackbox/unit test를 보강했지만 실제 opencode profile 재검증을 완료하지 못했다.

수정 방향:

- 기본 `configs/*.yaml`을 오염시키지 말고 임시 config 또는 환경 변수 override로 실제 opencode profile을 실행한다.
- `bin/node.sh --config <temp-config>`와 `bin/edge.sh --config <temp-config>`를 별도 프로세스로 기동한다.
- edge console에서 최소 `/nodes`, `/capabilities node0`, `/transport node0`를 확인한다.
- 같은 session에서 `IOP_E2E_OPENCODE_ONE`, `IOP_E2E_OPENCODE_TWO`를 정확히 응답하도록 두 번 요청한다.
- 두 run 모두 non-empty `[node0-msg]`와 complete event가 edge 화면에 나타나는지 확인한다.
- 실패하면 node/edge 로그의 `opencode sse run cancelled without completion` trace를 보고 event shape에 맞는 최소 parser/filter 수정과 관련 unit/blackbox test를 추가한다.

예상 수정 파일:

- 필요 시 `apps/node/internal/adapters/cli/opencode_sse.go`
- 필요 시 `apps/node/internal/adapters/cli/opencode_sse_blackbox_test.go`
- 필요 시 `apps/node/internal/adapters/cli/opencode_sse_internal_test.go`
- `agent-task/cli_real_e2e_failures/02_opencode_second_run/CODE_REVIEW-cloud-G07.md`

검증:

- `go test ./apps/node/internal/adapters/cli -run 'OpencodeSSE|Opencode'`
- `go test ./apps/node/internal/adapters/cli`
- 실제 `bin/edge.sh` + `bin/node.sh` opencode 동일 session 2회 메시지 흐름

### [REVIEW_OCODE-2] review 파일 계약을 복구한다

문제:

- 이전 `CODE_REVIEW-cloud-G07.md`는 plan의 구현 체크리스트와 항목/순서가 맞지 않았고, 마지막 `CODE_REVIEW-cloud-G07.md` 갱신 항목이 빠져 있었다.
- 검증 결과에 실제 stdout/stderr가 없어 verification trust를 회복할 수 없었다.

수정 방향:

- 새 `CODE_REVIEW-cloud-G07.md`의 `구현 체크리스트`를 이 plan의 체크리스트와 정확히 같은 텍스트/순서로 유지한다.
- 실제 실행한 명령의 stdout/stderr 핵심 출력, edge/node 로그 위치, 실제 e2e 성공 또는 blocker 사유를 기록한다.
- 구현 에이전트는 review-agent-only 섹션을 실행하지 않고, 구현-owned 섹션을 채운 뒤 active 파일을 남긴다.

예상 수정 파일:

- `agent-task/cli_real_e2e_failures/02_opencode_second_run/CODE_REVIEW-cloud-G07.md`

검증:

- `rg --sort path -n "실제 .*opencode|IOP_E2E_OPENCODE_ONE|IOP_E2E_OPENCODE_TWO|구현 체크리스트|검증 결과" agent-task/cli_real_e2e_failures/02_opencode_second_run/CODE_REVIEW-cloud-G07.md`

## 수정 파일 요약

| 파일 | 수정 의도 |
| --- | --- |
| `apps/node/internal/adapters/cli/opencode_sse.go` | 실제 e2e가 실패할 경우 event shape에 맞춘 최소 보정 |
| `apps/node/internal/adapters/cli/opencode_sse_blackbox_test.go` | 실제 실패 shape가 확인될 경우 회귀 테스트 보강 |
| `apps/node/internal/adapters/cli/opencode_sse_internal_test.go` | parser/filter 보강 시 단위 테스트 |
| `agent-task/cli_real_e2e_failures/02_opencode_second_run/CODE_REVIEW-cloud-G07.md` | 구현 결과와 실제 검증 출력 기록 |

## 최종 검증

- `go test ./apps/node/internal/adapters/cli -run 'OpencodeSSE|Opencode'`
- `go test ./apps/node/internal/adapters/cli`
- 실제 `bin/edge.sh` + `bin/node.sh` opencode 동일 session 2회 메시지 통과 로그 첨부

최종 응답에는 실제 e2e 로그 위치, 테스트 명령, 수정 파일, 남은 위험을 요약한다.
