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

# Antigravity Config Docs Smoke 전환

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

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

## 배경

task 01과 02가 코드의 execution/status 기반을 Antigravity로 바꾸면, 개발 기본 설정과 사용자-facing 문서/보조 smoke도 같은 target으로 맞춰야 한다. 현재 `configs/edge.yaml`의 `gemini` profile은 `gemini --approval-mode yolo --output-format stream-json -m gemini-2.5-flash -p`를 사용한다. Antigravity CLI local help 기준 one-shot 실행은 `agy --dangerously-skip-permissions --print <prompt>`이며 현재 `--output-format`/`--model` flag는 확인되지 않았다.

## 분석 결과

### 읽은 파일/

- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/project/domain/node/rules.md`
- `agent-ops/rules/project/domain/edge/rules.md`
- `agent-ops/rules/project/domain/platform-common/rules.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-ops/skills/project/e2e-smoke/SKILL.md`
- `configs/edge.yaml`
- `scripts/e2e-smoke.sh`
- `README.md`
- `apps/node/README.md`
- `apps/edge/README.md`
- `apps/edge/internal/service/service_test.go`
- `apps/edge/internal/transport/server_test.go`
- `apps/node/internal/adapters/factory_internal_test.go`
- `apps/edge/internal/node/mapper.go`
- `apps/edge/internal/node/mapper_test.go`
- `packages/config/config.go`
- `packages/config/config_test.go`
- `apps/node/internal/adapters/cli/cli.go`
- `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/events_test.go`

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

- YAML sample profile: `packages/config`에는 real `configs/edge.yaml` load regression이 없다. 기존 profile parsing tests는 inline YAML만 다룬다. Antigravity profile shape는 `TestLoadEdge_AntigravityProfile` 같은 inline YAML test가 필요하다.
- e2e status support detection: `scripts/e2e-smoke.sh:121`는 `gemini|claude|codex` grep이다. Antigravity/`agy` profile status 지원 여부는 테스트가 없다. shellcheck와 real profile smoke가 검증해야 한다.
- Docs/rules consistency: README와 project e2e skill/rules는 테스트로 검증되지 않는다. deterministic `rg --sort path` 잔여 검색으로 검증한다.

### 심볼 참조

- `configs/edge.yaml:87-100`: `gemini` profile block.
- `scripts/e2e-smoke.sh:121`: status 지원 grep `gemini|claude|codex`.
- `apps/edge/README.md:31,39,41`: Gemini profile 예시와 headless command.
- `apps/node/README.md:20,86,147,151`: CLI profile 목록과 Gemini command.
- `README.md:190`: Automation Domain CLI 목록의 Gemini CLI.
- `agent-ops/skills/project/e2e-smoke/SKILL.md:24,121`: real CLI profile baseline list.
- `agent-ops/rules/project/domain/node/rules.md:48`: status parser 목록.
- `agent-ops/rules/project/domain/testing/rules.md:39`: real external CLI profile 목록.
- `apps/edge/internal/service/service_test.go:65`: usage status target `gemini`.
- `apps/edge/internal/transport/server_test.go:56`: capabilities fixture `codex,gemini`.

### 분할 판단

분할 정책을 먼저 평가했다. 이 task는 directory name의 `+01,02`가 source of truth인 dependent rollout task다.

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

### 범위 결정 근거

- `agent-ops/skills/common/**`, `agent-ops/bin/entry-files.sh`, `GEMINI.md`, `.geminiignore`는 제외한다. Antigravity migration docs가 `GEMINI.md` 지원과 Gemini global context import를 명시하므로 common agent-ops bootstrap 정책 변경은 별도 작업이다.
- `apps/node/internal/adapters/cli/status/**`와 `apps/node/internal/adapters/cli/emitters.go`는 선행 task 소유다. 여기서는 선행 task 결과에 맞춰 call-site/docs/config만 갱신한다.
- 실제 external CLI 성공 여부와 full bin transcript는 task 04 소유다. 이 task는 deterministic unit/smoke 준비와 문서 정합성까지 수행한다.
- 새 dependency는 추가하지 않는다.

### 빌드 등급

build=`cloud-G07`, review=`cloud-G07`. Config rollout, shell smoke, docs/rules consistency가 포함되며 사용자 실행 파이프라인에 직접 닿는다.

## 의존 관계 및 구현 순서

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

- `agent-task/01_antigravity_cli_execution/complete.log`
- `agent-task/02_antigravity_usage_status/complete.log`

## 구현 체크리스트

- [ ] [ANTIGRAVITY-1] `configs/edge.yaml`의 Gemini profile을 Antigravity `agy --print` profile로 완전 교체한다.
- [ ] [ANTIGRAVITY-2] smoke script와 Go tests의 Gemini target fixtures를 Antigravity 기준으로 바꾼다.
- [ ] [ANTIGRAVITY-3] README와 project-local rules/skills의 Gemini CLI 문구를 Antigravity 기준으로 갱신한다.
- [ ] 중간 검증과 최종 검증 명령을 실행하고 결과를 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [ANTIGRAVITY-1] edge config profile 교체

### 문제

`configs/edge.yaml:87-100`의 `gemini` profile은 전환 대상 CLI와 flag를 사용한다.

현재:

```yaml
gemini:
  command: "gemini"
  args:
    - "--approval-mode"
    - "yolo"
    - "--output-format"
    - "stream-json"
    - "-m"
    - "gemini-2.5-flash"
    - "-p"
  output_format: "stream-json"
```

### 해결 방법

profile key를 `antigravity`로 바꾸고 command를 `agy`로 바꾼다. Antigravity CLI local help에 있는 flags만 사용한다. `executeOneShot`이 마지막에 prompt를 append하므로 `--print`는 args 마지막에 둔다. `output_format`은 비우거나 제거해 plain stdout streaming path를 사용한다.

예상:

```yaml
antigravity:
  command: "agy"
  args:
    - "--dangerously-skip-permissions"
    - "--print-timeout"
    - "10m"
    - "--print"
  env: []
  persistent: false
  terminal: false
```

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

- [ ] `configs/edge.yaml`에서 `gemini:` block을 `antigravity:` block으로 교체한다.
- [ ] `--approval-mode`, `yolo`, `--output-format`, `stream-json`, `-m`, `gemini-2.5-flash`, `-p`를 Antigravity profile에서 제거한다.
- [ ] `output_format: "stream-json"`를 제거하거나 빈 값으로 두어 `emitStdoutChunks` path를 사용하게 한다.
- [ ] `packages/config/config_test.go`에 Antigravity profile inline YAML load test를 추가한다.

### 테스트 작성

- 작성: `packages/config/config_test.go`, `TestLoadEdge_AntigravityProfile`
  - assertion: profile key `antigravity`, command `agy`, args `--dangerously-skip-permissions`, `--print-timeout`, `10m`, `--print`, output format empty.

### 중간 검증

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

기대: config package fresh test 통과.

### [ANTIGRAVITY-2] smoke와 tests fixture 교체

### 문제

`scripts/e2e-smoke.sh:121`는 status 지원 target을 `gemini|claude|codex`로 판별한다. 여러 Go tests도 usage target/capability sample에 Gemini를 쓴다.

현재:

```bash
# scripts/e2e-smoke.sh:120
# Simple check for status support based on command name
if echo "$PROFILE_BLOCK" | grep -i -E "gemini|claude|codex" >/dev/null; then
    HAS_STATUS=1
fi
```

### 해결 방법

status support grep을 `antigravity|agy|claude|codex`로 바꾼다. Go fixture는 runtime behavior와 무관한 sample string이면 `antigravity`로 바꾼다.

예상:

```bash
if echo "$PROFILE_BLOCK" | grep -i -E "antigravity|agy|claude|codex" >/dev/null; then
    HAS_STATUS=1
fi
```

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

- [ ] `scripts/e2e-smoke.sh`의 status support grep을 Antigravity/agy 기준으로 바꾼다.
- [ ] `apps/edge/internal/service/service_test.go`의 usage status target fixture를 `antigravity`로 바꾼다.
- [ ] `apps/edge/internal/transport/server_test.go`의 capabilities fixture를 `codex,antigravity`로 바꾼다.
- [ ] 필요한 경우 `apps/node/internal/adapters/factory_internal_test.go` 잔여 Gemini fixture가 task 01에서 제거됐는지 확인한다.

### 테스트 작성

- 신규 Go test는 추가하지 않는다. 기존 service/transport tests의 fixture 교체로 regression을 유지한다.
- shell script 변경은 `bash -n`과 가능하면 `shellcheck`로 검증한다.

### 중간 검증

```bash
bash -n scripts/e2e-smoke.sh
```

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

기대: shell syntax와 관련 Go tests 통과.

### [ANTIGRAVITY-3] 문서와 project-local rule 갱신

### 문제

사용자-facing 문서와 project-local testing skill/rules가 Gemini profile을 기준 profile로 설명한다.

현재:

```md
<!-- apps/edge/README.md:31 -->
실제 외부 프로필(예: `gemini`)을 보조 smoke로 테스트하려면 `IOP_E2E_PROFILE=gemini make test-e2e`
```

```md
<!-- apps/node/README.md:151 -->
`claude`, `gemini`, `codex`, `opencode`, `cline`처럼 기본이 interactive TUI인 CLI는 ...
```

### 해결 방법

Gemini CLI runtime/profile 문구를 Antigravity CLI로 교체한다. `GEMINI.md` 호환이나 `.geminiignore` 같은 agent-ops common entry-file 언급은 제외한다.

예상:

```md
실제 외부 프로필(예: `antigravity`)을 보조 smoke로 테스트하려면 `IOP_E2E_PROFILE=antigravity make test-e2e`
```

```md
`claude`, `antigravity`, `codex`, `opencode`, `cline`처럼 ...
```

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

- [ ] `README.md`의 Automation Domain CLI 목록에서 Gemini CLI를 Antigravity CLI로 바꾼다.
- [ ] `apps/node/README.md`의 adapter profile 목록과 command 예시를 Antigravity로 바꾼다.
- [ ] `apps/edge/README.md`의 e2e 예시와 profile 목록/command 예시를 Antigravity로 바꾼다.
- [ ] `agent-ops/rules/project/domain/node/rules.md`의 status parser 목록을 Antigravity로 바꾼다.
- [ ] `agent-ops/rules/project/domain/testing/rules.md`의 real external CLI profile 목록을 Antigravity로 바꾼다.
- [ ] `agent-ops/skills/project/e2e-smoke/SKILL.md`의 profile baseline list를 Antigravity로 바꾼다.

### 테스트 작성

- 문서/rule 변경 자체는 unit test가 없다. 최종 `rg --sort path` 잔여 검색으로 검증한다.

### 중간 검증

```bash
rg --sort path -n "Gemini CLI|gemini --|IOP_E2E_PROFILE=gemini|target=gemini|profiles.*gemini|claude`, `gemini" README.md apps/node/README.md apps/edge/README.md agent-ops/rules/project agent-ops/skills/project
```

기대: 결과가 없어야 한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `configs/edge.yaml` | ANTIGRAVITY-1 |
| `packages/config/config_test.go` | ANTIGRAVITY-1 |
| `scripts/e2e-smoke.sh` | ANTIGRAVITY-2 |
| `apps/edge/internal/service/service_test.go` | ANTIGRAVITY-2 |
| `apps/edge/internal/transport/server_test.go` | ANTIGRAVITY-2 |
| `README.md` | ANTIGRAVITY-3 |
| `apps/node/README.md` | ANTIGRAVITY-3 |
| `apps/edge/README.md` | ANTIGRAVITY-3 |
| `agent-ops/rules/project/domain/node/rules.md` | ANTIGRAVITY-3 |
| `agent-ops/rules/project/domain/testing/rules.md` | ANTIGRAVITY-3 |
| `agent-ops/skills/project/e2e-smoke/SKILL.md` | ANTIGRAVITY-3 |

## 최종 검증

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

```bash
bash -n scripts/e2e-smoke.sh
```

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

```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/**'
```

기대: 선행 complete.log 확인 통과, shell syntax 통과, Go tests fresh 통과. 마지막 검색은 결과가 없어야 한다. Google model id 문자열(`openrouter/google/gemini-*`)이나 `GEMINI.md` 호환 정책은 위 pattern에 포함하지 않는다.

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