# Complete - m-macos-distribution

## 완료 일시

2026-06-17

## 요약

Jenkins certified job SCM URL secret/XML hardening follow-up, 2 review loops, final verdict PASS.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_local_G06_0.log` | `code_review_local_G06_0.log` | FAIL | `Process.run` async misuse made the new focused regression tests fail to compile. |
| `plan_local_G07_1.log` | `code_review_local_G07_1.log` | PASS | Regression tests now use `Process.runSync`; focused local and remote tests passed. |

## 구현/정리 내용

- Hardened `scripts/upsert-jenkins-certified-job.sh` by allowing `APPSOK_SCM_URL`, rejecting HTTP(S) SCM URLs with userinfo, and XML-escaping the SCM URL before writing Jenkins job XML.
- Added dry-run regression coverage for SCM URL XML escaping and HTTP(S) userinfo rejection.
- Fixed the regression tests to use synchronous process results and repaired a stale XML escaping comment during review.

## 최종 검증

- `bash -n scripts/setup-appsok-ci-secrets.sh scripts/build-certified-macos.sh scripts/upsert-jenkins-certified-job.sh` - PASS; exit 0.
- `APPSOK_SCM_URL='https://example.com/toki/appsok.git?foo=1&bar=<tag>' bash scripts/upsert-jenkins-certified-job.sh --dry-run | grep '<url>'` - PASS; output contained escaped URL: `<url>https://example.com/toki/appsok.git?foo=1&amp;bar=&lt;tag&gt;</url>`.
- `APPSOK_SCM_URL='https://user:token@example.com/org/repo.git' bash scripts/upsert-jenkins-certified-job.sh --dry-run` - PASS; exit 1, `credential-free` error, token not present in stdout/stderr.
- `flutter pub get && flutter test test/certified_macos_scripts_test.dart` - PASS; `+8: All tests passed!`.
- `ssh -o BatchMode=yes -o ConnectTimeout=10 toki@toki-labs.com 'zsh -lc "cd \"$HOME/docker/services/code-server/data/volume/workspace/appsok\" && flutter test test/certified_macos_scripts_test.dart"'` - PASS; remote runner `+8: All tests passed!`.
- `git diff --check` - PASS; no whitespace errors.

## 잔여 Nit

- 없음

## 후속 작업

- 없음
