# Code review stub: bootstrap script distribution boundary

## Review target

- Plan: `PLAN-local-G05.md`
- Status: pending implementation

## Reviewer focus

- Confirm the bootstrap endpoint no longer depends on source checkout-relative paths.
- Confirm the chosen script source cannot silently drift without a test or explicit sync command.
- Confirm response headers and error behavior remain suitable for shell bootstrap usage.
- Confirm packaging/runtime assumptions are documented in code or tests, not tribal knowledge.

## Required checks

- `cd services/core && go test -count=1 ./...`

## Notes

This item should stay focused on distribution mechanics, not bootstrap script feature changes.

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Pass
  - completeness: Fail
  - test coverage: Fail
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Fail
  - verification trust: Fail
- 발견된 문제:
  - Required: `services/core/internal/httpserver/server_test.go:536`의 `TestEmbeddedBootstrapScriptMatchesRunnerAsset`는 이름과 주석상 runner asset과 embedded copy의 drift check를 주장하지만, 실제로는 embedded content가 비어 있지 않은지만 검사한다. 따라서 `apps/runner/assets/script/shell/oto_agent_bootstrap.sh`와 `services/core/internal/httpserver/oto_agent_bootstrap.sh`가 달라져도 테스트가 통과하며, 계획의 "chosen script source cannot silently drift" 요구를 충족하지 못한다. 테스트에서 runner asset 파일을 읽어 embedded provider bytes 또는 core copy와 동일함을 직접 비교해야 한다.
  - Required: `CODE_REVIEW-local-G05.md:1`이 구현 체크리스트, 구현 항목별 완료 여부, 검증 결과, 사용자 리뷰 요청을 채우지 않은 pending stub 상태다. 이번 리뷰는 소스와 로컬 재실행으로 판단했지만, 후속 구현은 active review stub에 실제 완료 항목과 `cd services/core && go test -count=1 ./...` 결과를 기록해야 한다.
- 검증:
  - `cd services/core && go test -count=1 ./...` 통과
  - `cmp -s apps/runner/assets/script/shell/oto_agent_bootstrap.sh services/core/internal/httpserver/oto_agent_bootstrap.sh` 현재 통과, 하지만 Go 테스트에 동등 비교가 포함되어 있지 않음
- 다음 단계:
  - WARN/FAIL 후속: drift 비교 테스트와 구현 증거 기록을 보강하는 후속 `PLAN-local-G06.md` / `CODE_REVIEW-local-G06.md`를 작성한다.
