<!-- task=04+01,02,03_antigravity_full_verification plan=0 tag=ANTIGRAVITY -->

# Antigravity Full Verification

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

> **구현의 마지막 단계는 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 실제 내용으로 채우는 것입니다.**
> 이 파일의 구현 체크리스트와 리뷰 스텁의 구현 체크리스트를 모두 완료하고, 중간/최종 검증을 실행한 뒤, 실제 구현 내용과 명령 출력(stdout/stderr)을 리뷰 파일에 기록하세요.
> 리뷰 파일의 `이 파일을 읽는 리뷰 에이전트에게` 섹션에 있는 아카이브 지시는 실행하지 말고, `코드리뷰 전용 체크리스트`도 수정하거나 체크하지 마세요.

## 배경

Antigravity 전환은 unit test만으로 완료 처리할 수 없다. project testing rule은 CLI adapter 실행/stream/status/config 변경이 사용자 실행 파이프라인에 닿으면 `bin/edge.sh`와 `bin/node.sh` 기반 bin shell 사용자 흐름, 보조 smoke, 실제 외부 CLI profile 검증을 분리해 보고하라고 요구한다. 이 task는 선행 구현을 실제 `agy` 설치/도움말, 전체 Go test, mock e2e, Antigravity real profile e2e, 수동 bin flow로 닫는다.

## 분석 결과

### 읽은 파일

- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-ops/skills/project/e2e-smoke/SKILL.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `scripts/e2e-smoke.sh`
- `bin/edge.sh`
- `bin/node.sh`
- `configs/edge.yaml`
- `configs/node.yaml`
- `apps/edge/README.md`
- `apps/node/README.md`
- `apps/node/internal/adapters/cli/oneshot.go`
- `apps/node/internal/adapters/cli/status/status.go`
- `apps/node/internal/adapters/cli/status/parser.go`
- `apps/edge/internal/opsconsole/status.go`

### 테스트 커버리지 공백

- Full repo regression: 선행 tasks는 focused packages만 돌린다. 이 task에서 `go test -count=1 ./...`를 fresh로 실행해야 한다.
- Real CLI availability: unit/fake PTY tests는 `agy`가 실제 설치되어 있고 flags가 동작하는지 확인하지 않는다. `command -v agy`, `agy --help`, `agy plugin --help`를 기록해야 한다.
- Real profile e2e: `IOP_E2E_PROFILE=antigravity make test-e2e`는 auth/login/network blocker가 가능하다. 실패해도 누락하지 말고 blocker/failed로 기록한다.
- Bin shell 사용자 흐름: `make test-e2e`는 보조 smoke이므로 수동 또는 transcript 기반 `bin/edge.sh` + `bin/node.sh` 흐름을 별도 기록해야 한다.

### 심볼 참조

- 이 task는 rename을 계획하지 않는다. 검증 실패로 수정이 필요하면 선행 task 범위 파일만 최소 수정하고, 수정한 심볼/파일을 `CODE_REVIEW`의 `계획 대비 변경 사항`에 기록한다.

### 분할 판단

분할 정책을 먼저 평가했다. 이 task는 directory name `04+01,02,03_antigravity_full_verification`에 따라 세 선행 task 모두의 `complete.log`가 필요하다.

- 선행 필요: `agent-task/01_antigravity_cli_execution/complete.log`
- 선행 필요: `agent-task/02_antigravity_usage_status/complete.log`
- 선행 필요: `agent-task/03+01,02_antigravity_config_docs_smoke/complete.log`

### 범위 결정 근거

- 기본 목적은 검증과 검증 결과 기록이다. 코드 수정은 검증에서 발견된 Antigravity 전환 회귀를 고치는 최소 범위로 제한한다.
- 새 기능, 별도 provider 설정, auth credential 변경, agent-ops common entry-file 정책 변경은 제외한다.
- 기본 `configs/*.yaml`을 임시 테스트 값으로 오염시키지 않는다. 실제 bin flow는 임시 config 또는 환경 변수 override를 사용한다.

### 빌드 등급

build=`cloud-G08`, review=`cloud-G08`. 실제 외부 CLI, shell/bin orchestration, long-running e2e, PTY/status 검증이 포함된다.

## 의존 관계 및 구현 순서

이 task는 directory name `04+01,02,03_antigravity_full_verification`에 따라 아래 셋 모두 `complete.log`가 있어야 시작한다.

- `agent-task/01_antigravity_cli_execution/complete.log`
- `agent-task/02_antigravity_usage_status/complete.log`
- `agent-task/03+01,02_antigravity_config_docs_smoke/complete.log`

## 구현 체크리스트

- [ ] [ANTIGRAVITY-1] 선행 task 완료와 local Antigravity CLI 설치/flag surface를 확인한다.
- [ ] [ANTIGRAVITY-2] 전체 Go test, mock e2e, Antigravity real profile e2e를 실행하고 실패/blocker를 구분한다.
- [ ] [ANTIGRAVITY-3] `bin/edge.sh` + `bin/node.sh` 사용자 흐름에서 Antigravity target의 메시지 2회와 commands를 실제 transcript로 검증한다.
- [ ] [ANTIGRAVITY-4] 검증에서 발견한 전환 회귀만 최소 수정하고 관련 검증을 재실행한다.
- [ ] 중간 검증과 최종 검증 명령을 실행하고 결과를 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [ANTIGRAVITY-1] 선행 완료와 CLI surface 확인

### 문제

전환 구현이 아직 review/archive loop를 통과하지 않았으면 full verification 결과가 흔들린다. 실제 `agy` flag surface도 local 설치 상태와 버전에 의존한다.

### 해결 방법

선행 `complete.log` 셋을 먼저 확인한다. 이후 local `agy` 명령 존재와 help output을 기록한다.

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

- [ ] 선행 `complete.log` 셋을 확인한다.
- [ ] `command -v agy` 결과를 기록한다.
- [ ] `agy --help` 결과를 기록한다.
- [ ] `agy plugin --help` 결과를 기록한다.

### 테스트 작성

- 테스트 파일 변경 없음. 이 항목은 environment verification이다.

### 중간 검증

```bash
test -f agent-task/01_antigravity_cli_execution/complete.log && test -f agent-task/02_antigravity_usage_status/complete.log && test -f agent-task/03+01,02_antigravity_config_docs_smoke/complete.log
```

```bash
command -v agy
```

```bash
agy --help
```

```bash
agy plugin --help
```

기대: complete.log checks 통과, `agy` path 출력, help에 `--print`, `--dangerously-skip-permissions`, `--print-timeout`이 보인다.

### [ANTIGRAVITY-2] 전체 테스트와 smoke

### 문제

Focused tests만으로 edge-node 전체 regression과 smoke script 변경을 확인할 수 없다.

### 해결 방법

전체 Go tests, mock e2e, Antigravity real profile e2e를 실행한다. Real profile은 external auth/network blocker가 가능하므로 stdout/stderr를 그대로 기록하고 `PASSED`, `FAILED`, `BLOCKED`로 분류한다.

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

- [ ] `go test -count=1 ./...`를 실행한다.
- [ ] `make test-e2e`를 실행한다.
- [ ] `IOP_E2E_PROFILE=antigravity IOP_E2E_RUN_TIMEOUT=300 IOP_E2E_STATUS_TIMEOUT=180 make test-e2e`를 실행한다.
- [ ] 실패 시 Antigravity 전환 코드 회귀인지 외부 CLI/auth/network blocker인지 분류한다.

### 테스트 작성

- 테스트 파일 변경 없음. 검증 실패로 회귀가 확인되면 ANTIGRAVITY-4에서 최소 수정한다.

### 중간 검증

```bash
go test -count=1 ./...
```

```bash
make test-e2e
```

```bash
IOP_E2E_PROFILE=antigravity IOP_E2E_RUN_TIMEOUT=300 IOP_E2E_STATUS_TIMEOUT=180 make test-e2e
```

기대: Go tests와 mock e2e 통과. Real profile은 통과가 목표이나 external auth/network 문제는 blocker로 기록한다.

### [ANTIGRAVITY-3] Bin shell 사용자 흐름 검증

### 문제

project testing rule은 보조 e2e가 bin shell 사용자 흐름을 대체하지 못한다고 명시한다. 실제 사용자는 `bin/edge.sh`와 `bin/node.sh`를 띄운 뒤 edge console에서 message/command를 입력한다.

### 해결 방법

임시 config 또는 환경 변수 override로 포트 충돌을 피하고, `console.target=antigravity`를 사용한다. Edge console transcript에 `/nodes`, 메시지 2회, `/capabilities`, `/transport`, `/sessions`, `/status`, `/exit` 결과를 기록한다. Antigravity real response가 auth/login blocker로 실패하면 그 상태를 transcript와 함께 blocker로 기록한다.

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

- [ ] 기본 `configs/*.yaml`을 오염시키지 않는 임시 config 전략을 기록한다.
- [ ] `bin/edge.sh`를 실행하고 edge prompt/서버 bind를 확인한다.
- [ ] `bin/node.sh`를 실행하고 node registration을 확인한다.
- [ ] 같은 session에서 Antigravity target 메시지 2회를 보낸다.
- [ ] `/capabilities`, `/transport`, `/sessions`, `/status`를 실행한다.
- [ ] node local `[node-message]` payload가 edge `[node*-msg]`로 렌더링됐는지 확인한다.

### 테스트 작성

- 테스트 파일 변경 없음. 이 항목은 full-cycle 실제 구동 transcript다.

### 중간 검증

```text
bin shell transcript:
1. IOP_EDGE_CONFIG=<temp-edge.yaml> ./bin/edge.sh
2. IOP_NODE_CONFIG=<temp-node.yaml> ./bin/node.sh
3. edge> /nodes
4. edge> Convert this token to uppercase and reply with only the converted token: iop_antigravity_one
5. edge> Convert this token to uppercase and reply with only the converted token: iop_antigravity_two
6. edge> /capabilities
7. edge> /transport
8. edge> /sessions
9. edge> /status
10. edge> /exit
```

기대: node registration, sent/start/non-empty message-or-clear-blocker/complete, command responses가 edge 화면에 표시된다.

### [ANTIGRAVITY-4] 검증 회귀 최소 수정

### 문제

실제 `agy` 출력/timeout/status behavior가 fake tests와 다르면 전환이 사용 환경에서 실패할 수 있다.

### 해결 방법

검증 실패가 외부 blocker가 아니라 코드 회귀이면 선행 task 범위 파일만 최소 수정한다. 수정 후 해당 focused test와 실패한 최종 검증 명령을 재실행한다. 임의 리팩터링이나 추가 feature는 하지 않는다.

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

- [ ] 회귀 원인을 코드 회귀와 외부 blocker로 분류한다.
- [ ] 코드 회귀이면 관련 파일만 최소 수정한다.
- [ ] 수정 파일과 사유를 `CODE_REVIEW`의 `계획 대비 변경 사항`에 기록한다.
- [ ] 수정에 해당하는 focused test와 실패했던 검증 명령을 재실행한다.

### 테스트 작성

- 회귀 수정이 bug fix이면 regression test를 추가한다. 예: real output fixture가 parser에 필요하면 `apps/node/internal/adapters/cli/status/parser_test.go`에 fixture test를 추가한다.

### 중간 검증

```bash
rg --sort path -n "Gemini CLI|gemini --|IOP_E2E_PROFILE=gemini|target=gemini|NewGeminiChecker|GeminiChecker|parseGemini|formatGemini|geminiTool|--approval-mode|^[[:space:]]*gemini:" -g '!agent-task/archive/**' -g '!agent-ops/skills/common/**'
```

기대: 결과 없음. 회귀 수정이 있었다면 관련 focused `go test -count=1 ...`도 추가 실행하고 기록한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| 없음(기본) | ANTIGRAVITY-1, ANTIGRAVITY-2, ANTIGRAVITY-3 |
| 선행 task 범위 파일 중 회귀 관련 파일만 | ANTIGRAVITY-4 |

## 최종 검증

```bash
test -f agent-task/01_antigravity_cli_execution/complete.log && test -f agent-task/02_antigravity_usage_status/complete.log && test -f agent-task/03+01,02_antigravity_config_docs_smoke/complete.log
```

```bash
command -v agy
```

```bash
agy --help
```

```bash
agy plugin --help
```

```bash
go test -count=1 ./...
```

```bash
make test-e2e
```

```bash
IOP_E2E_PROFILE=antigravity IOP_E2E_RUN_TIMEOUT=300 IOP_E2E_STATUS_TIMEOUT=180 make test-e2e
```

```bash
rg --sort path -n "Gemini CLI|gemini --|IOP_E2E_PROFILE=gemini|target=gemini|NewGeminiChecker|GeminiChecker|parseGemini|formatGemini|geminiTool|--approval-mode|^[[:space:]]*gemini:" -g '!agent-task/archive/**' -g '!agent-ops/skills/common/**'
```

그리고 `bin/edge.sh` + `bin/node.sh` transcript를 `검증 결과`에 붙인다. Go test cache output은 허용하지 않는다. Real profile 실패는 누락하지 말고 `PASSED`/`FAILED`/`BLOCKED`로 분류한다.

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