# Complete - inflight-accounting-recovery/02+01_edge_openai_cancel_recovery

## 완료 일시

2026-07-01

## 요약

Edge OpenAI-compatible cancellation propagation과 provider in-flight recovery bug fix를 1개 리뷰 루프로 완료했다. 최종 판정은 PASS이며 Roadmap Targets는 없음이다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_local_G07_0.log` | `code_review_local_G07_0.log` | PASS | HTTP caller cancellation/timeout에서 `CancelRun` 전파, 정상 terminal 중복 cancel 방지, cancelled terminal provider in-flight recovery 검증이 충족됨 |

## 구현/정리 내용

- OpenAI-compatible chat/responses non-streaming, direct streaming, buffered streaming 경로에서 request cancellation 또는 run timeout 시 dispatch metadata 기반 `CancelRun`을 전송한다.
- `RunHandle.Close()`는 subscription cleanup으로 유지하고, 실행 취소는 `cancelRunOnHTTPGiveUp` helper에서만 수행하도록 분리했다.
- terminal `complete`, `error`, `cancelled`, stream close, node disconnect는 cancel-worthy가 아니도록 `isCancelWorthyRunError` 판별을 중앙화했다.
- `cancelled` terminal `RunEvent`가 provider queue의 in-flight accounting을 0으로 회복하는 regression test를 추가했다.
- 리뷰 중 `apps/edge/internal/service/model_queue_test.go`의 기존 gofmt 주석 정렬 drift를 formatting-only로 정리했다.

## 최종 검증

- `go test -count=1 ./apps/edge/internal/openai ./apps/edge/internal/service` - PASS; `ok iop/apps/edge/internal/openai 1.571s`, `ok iop/apps/edge/internal/service 0.441s`
- `go test -count=1 ./apps/edge/... ./apps/node/...` - PASS; Edge 전체와 Node 전체 패키지 통과
- `go build ./...` - PASS; 빈 출력
- `go vet ./apps/edge/...` - PASS; 빈 출력
- `gofmt -l apps/edge/internal/openai/server.go apps/edge/internal/openai/chat_handler.go apps/edge/internal/openai/responses_handler.go apps/edge/internal/openai/stream.go apps/edge/internal/openai/run_result.go apps/edge/internal/openai/server_test.go apps/edge/internal/service/model_queue_test.go` - PASS; 빈 출력
- `git diff --check` - PASS; 빈 출력
- `go test -count=1 ./apps/edge/internal/service` - PASS; formatting-only 정리 후 `ok iop/apps/edge/internal/service 0.444s`

## 잔여 Nit

- 없음

## 후속 작업

- local PASS 이후 dev-runtime에서 실제 provider request cancellation을 재현하고 Control Plane status의 provider snapshot이 `in_flight=0`, `queued=0`으로 회복되는지 확인하는 field 재확인은 별도 runtime 검증 단계로 남긴다.
