# Complete - m-cross-os-runner-bootstrap/03+01_windows_bootstrap

## 완료 일시

2026-06-15

## 요약

Windows PowerShell bootstrap 추가와 리뷰 후속 보강을 2회 리뷰 루프로 완료했으며 최종 판정은 PASS다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | PowerShell background log redirect와 token-bearing config ACL hardening 보강 필요 |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | PASS | stdout/stderr redirect 분리, Windows config ACL hardening, PS1 content regression 및 drift 검증 완료 |

## 구현/정리 내용

- Windows PowerShell bootstrap asset과 Core embedded PS1 route/provider를 추가했다.
- Windows bootstrap command가 `/bootstrap/oto-agent.ps1` URL을 사용하고 기존 shell command 계약을 유지한다.
- PowerShell bootstrap에서 Windows x64/arm64 zip asset 선택, HTTPS release URL 검증, config 생성, background 실행을 구현했다.
- background 실행 로그를 `oto-agent.out.log`와 `oto-agent.err.log`로 분리했다.
- enrollment token이 포함된 config 파일에 Windows ACL hardening을 적용했다.
- runner PS1 asset과 Core embedded copy가 byte-identical한지 Go drift test로 고정했다.

## 최종 검증

- `git diff --check` - PASS; whitespace error 없음.
- `cd apps/runner && dart test test/oto_agent_bootstrap_ps1_test.dart` - PASS; `+11: All tests passed!`.
- `cd apps/runner && dart test test/oto_agent_bootstrap_script_test.dart` - PASS; `+19: All tests passed!`.
- `cd apps/runner && dart analyze` - PASS; `No issues found!`.
- `cd services/core && go test -count=1 ./...` - PASS; core 전체 Go package 통과.
- `rg --sort path -n "RedirectStandardOutput|RedirectStandardError|SetAccessRuleProtection|FileSystemAccessRule|Set-Acl|oto-agent\\.out\\.log|oto-agent\\.err\\.log" apps/runner/assets/script/powershell/oto_agent_bootstrap.ps1 services/core/internal/httpserver/oto_agent_bootstrap.ps1 apps/runner/test/oto_agent_bootstrap_ps1_test.dart` - PASS; expected PowerShell redirect/ACL/test anchors 확인.

## Roadmap Completion

- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/cross-os-runner-bootstrap.md`
- Completed task ids:
  - `[windows-bootstrap]`: PASS; evidence=`plan_cloud_G07_1.log`, `code_review_cloud_G07_1.log`; verification=`cd apps/runner && dart test test/oto_agent_bootstrap_ps1_test.dart`, `cd apps/runner && dart test test/oto_agent_bootstrap_script_test.dart`, `cd apps/runner && dart analyze`, `cd services/core && go test -count=1 ./...`
- Not completed task ids: 없음

## 잔여 Nit

- PowerShell background 시작 안내가 stdout log path만 출력한다. stderr도 별도 파일로 분리됐으므로 향후 안내 문구를 두 경로 모두 보여주게 다듬으면 운영 편의가 좋아진다.

## 후속 작업

- 없음
