From 81dd6259649fc1091e85c648d6e52c77abd21607 Mon Sep 17 00:00:00 2001 From: HardcoreMonk Date: Thu, 13 Aug 2026 03:58:31 +0900 Subject: [PATCH] docs: finalize release gate evidence --- ...roject-process-status-review-2026-08-13.md | 21 +++++----- .../2026-08-13-allow-hosts-removal-handoff.md | 12 +++--- ...2026-08-13-release-gate-closure-handoff.md | 35 ++++++++--------- ...13-release-governance-hardening-handoff.md | 38 +++++++++++++------ ...-13-vm-deletion-failure-cleanup-handoff.md | 14 +++---- 5 files changed, 66 insertions(+), 54 deletions(-) diff --git a/docs/analysis/12-anvil-project-process-status-review-2026-08-13.md b/docs/analysis/12-anvil-project-process-status-review-2026-08-13.md index 29caabd..7bc49a7 100644 --- a/docs/analysis/12-anvil-project-process-status-review-2026-08-13.md +++ b/docs/analysis/12-anvil-project-process-status-review-2026-08-13.md @@ -529,10 +529,10 @@ tag authorization: hold | PR #110 review/merge | 완료 | exact head `c394f7d...`의 Go CI green, unresolved thread 0에서 merge commit `794d0ae...`로 `main` 병합. CodeRabbit 완료 리뷰는 merge 직후 회수 | | strict secret gate | 완료 | tracked tree PASS, scanner allowlist/regex 완화 없음 | | KVM release-candidate gate | 완료 | full E2E `All test steps passed`, lifecycle/semantic/flock smoke는 선행 handoff에서 통과 | -| `allow_hosts` 제거 | 구현·local/remote 검증 완료, PR #111 merge 대기 | field/validation/iptables string matcher 제거, non-empty/empty/`null`/mixed-case key loud rejection, unrelated unknown metadata 호환 | -| VM 삭제 실패 cleanup | 구현·local/remote 검증 완료, PR #111 merge 대기 | CodeRabbit 사후 Major finding. forced dm failure 뒤 양 loop/store/TAP-IP cleanup continuation test, KVM resource inventory clean | +| `allow_hosts` 제거 | 완료·`main` 병합 | field/validation/iptables string matcher 제거, non-empty/empty/`null`/mixed-case key loud rejection, unrelated unknown metadata 호환 | +| VM 삭제 실패 cleanup | 완료·`main` 병합 | CodeRabbit 사후 Major finding. forced dm failure 뒤 양 loop/store/TAP-IP cleanup continuation test, KVM resource inventory clean | | npm audit | 폐쇄 | High 2/Moderate 2 → 0, clean install/check/build 통과 | -| Web/secret CI | 구현 완료, PR 대기 | `web-and-security`, `secret-scan` 독립 job, `contents: read` | +| Web/secret CI | 완료·`main` 강제 표면 편입 | `web-and-security`, `secret-scan` 독립 job, `contents: read`, merge commit CI green | | version policy | 결정 규칙 확정 | upstream 첫 post-`v0.7.0` tag `vX.Y.Z` → `anvil-vX.Y.Z`; downstream-only 번호 금지 | ### 14.2 PR #110 사후 review disposition @@ -554,17 +554,20 @@ CodeRabbit가 merge 완료 직후 4개 actionable comment를 게시했다. password rotation, key rollout, permission remediation을 실행할 인증 경로가 없다. 2. **Next version number:** upstream latest/main이 계속 `v0.7.0`이라 결정 규칙의 입력이 없다. 번호는 의도적으로 미할당이다. -3. **Remote integration:** PR #111 code-bearing SHA의 Go/Web/secret CI는 green이다. - CodeRabbit는 rate limit로 실제 review를 수행하지 못했으며 PR merge가 남았다. -4. **Branch protection:** 새 CI context가 `main`에 병합된 뒤 적용해야 한다. collaborator가 - owner 1명뿐이라 admin-enforced approval 1 설정 후 두 번째 reviewer가 필요하다. +3. **Remote integration:** PR #111은 merge commit `60ce239ce68555a419994f37c431dcb377825e1f`로 + 병합됐다. 해당 merge commit의 CI run `31630049807`에서 Go/Web/secret 3개 job이 + 모두 green이다. CodeRabbit는 rate limit로 실제 review를 수행하지 못해 approval로 + 세지 않았고 별도 manual actual-diff review에서 blocking/Important finding은 없었다. +4. **Branch protection bootstrap:** 이 최종 증적 commit 직후 strict status checks, + approval 1, conversation resolution, admin enforcement를 적용·read-back한다. collaborator가 + owner 1명뿐이라 적용 후 두 번째 eligible reviewer가 추가될 때까지 새 PR merge는 차단된다. ### 14.4 갱신 판정 ```text released baseline: anvil-v0.7.0 = operate -main after PR #110: release-gate evidence merged -next-gates branch: code-review -> remote CI/merge +main after PR #111: implementation + release-gate CI merged +governance bootstrap: protection apply/read-back pending host security gate: blocked (access unavailable) next version number: blocked (no post-v0.7.0 upstream tag) tag authorization: hold diff --git a/docs/operations/2026-08-13-allow-hosts-removal-handoff.md b/docs/operations/2026-08-13-allow-hosts-removal-handoff.md index 1b27615..99eb256 100644 --- a/docs/operations/2026-08-13-allow-hosts-removal-handoff.md +++ b/docs/operations/2026-08-13-allow-hosts-removal-handoff.md @@ -7,6 +7,7 @@ - branch: `agent/next-release-gates` - PR: [#111](https://github.com/HardcoreMonk/anvil/pull/111) - code-bearing commit: `0aec994089459a64d7bf9e8584f59f4bf6243e4e` +- merge commit: `60ce239ce68555a419994f37c431dcb377825e1f` - 설계: [`2026-08-13-allow-hosts-removal-design.md`](../superpowers/specs/2026-08-13-allow-hosts-removal-design.md) - 계획: @@ -50,6 +51,7 @@ legacy apply contract가 실제로 살아 있음을 보였다. - `git diff --check`: PASS - full KVM `e2e_test.sh`: `All test steps passed` - PR #111 exact code-bearing SHA CI: Go/Web/secret 3 jobs green +- `main` merge commit CI run `31630049807`: Go/Web/secret 3 jobs green ## Audit @@ -62,7 +64,6 @@ legacy apply contract가 실제로 살아 있음을 보였다. ## Blockers -- PR #111 merge가 아직 남아 있다. - 다음 public version number는 upstream post-`v0.7.0` tag 부재로 미할당이다. - deployment host credential/key/permission remediation이 외부 접근 부재로 미완료다. @@ -79,15 +80,14 @@ legacy apply contract가 실제로 살아 있음을 보였다. ## Current Lifecycle Stage -local implement, verification, code review, exact code-bearing SHA remote CI와 release -handoff 작성이 끝났다. PR merge 전이므로 `operate`에는 진입하지 않았다. +implement, verification, code review, exact code-bearing SHA remote CI와 `main` 병합이 +끝났다. public tag/deployment는 host/version blocker 때문에 `operate`에 진입하지 않았다. ## Next Action -PR #111의 final head CI를 확인하고 병합한다. +배포 전 외부 profile에서 제거된 key가 없는지 확인하고 host/version blocker를 해소한다. ## Follow-Up Tasks 1. 외부 profile에서 `allow_hosts` key 제거 여부를 배포 전 확인 -2. 통합 PR review/merge -3. host security blocker와 upstream-derived version blocker 해소 전 tag 금지 +2. host security blocker와 upstream-derived version blocker 해소 전 tag 금지 diff --git a/docs/operations/2026-08-13-release-gate-closure-handoff.md b/docs/operations/2026-08-13-release-gate-closure-handoff.md index 0eea4b4..eb16b17 100644 --- a/docs/operations/2026-08-13-release-gate-closure-handoff.md +++ b/docs/operations/2026-08-13-release-gate-closure-handoff.md @@ -150,17 +150,15 @@ flock prove-broken은 daemon authorship guard가 실제로 roster 밖 author를 ## Blockers -1. 다음 anvil version이 확정되지 않음. 현 정책은 upstream ephemera version 정렬이고 - upstream latest는 여전히 `v0.7.0`이다. -2. `allow_hosts`는 “다음 tagged anvil release에서 제거” 계약이지만 제거 lifecycle이 - 아직 실행되지 않음. -3. deployment host credential/key/permission remediation이 완료되지 않음. -4. npm audit High 2건과 production Moderate 2건의 release disposition이 없음. +1. 다음 anvil version은 post-`v0.7.0` upstream tag가 없어 의도적으로 미할당이다. +2. deployment host credential/key/permission remediation은 인증·도달 경로 부재로 + 완료되지 않았다. ## Warnings -- `main` branch protection/required review가 없음. -- CI가 Web check/build/audit와 secret scan을 강제하지 않음. +- strict `main` branch protection은 최종 bootstrap 증적 직후 외부 설정으로 적용한다. +- owner가 한 명뿐이므로 approval 1/admin enforcement 적용 뒤 두 번째 eligible reviewer가 + 추가될 때까지 새 PR merge가 차단된다. - PR #109 merge 당시 actionable documentation review comment 2개가 미해결이었다. - `CONTEXT.md` 마지막 문장 절단, `RELEASE_NOTES.md` release workflow 이력 drift, Svelte migration spec의 끊어진 ADR 링크가 남아 있다. @@ -199,21 +197,18 @@ full lifecycle/TDD로 수정·검증했다. ## Current Lifecycle Stage -local `code-review`와 code-bearing exact SHA remote CI가 완료됐다. version, deprecated -contract, security operations와 dependency blocker가 남아 있어 `release` 또는 `operate`에 -진입하지 않았다. +후속 PR #111에서 deprecated contract 제거, dependency/CI 보강, cleanup failure-path 수정이 +`main`에 병합됐고 merge commit CI까지 통과했다. host와 upstream version input blocker가 +남아 있어 public `release` 또는 `operate`에는 진입하지 않았다. ## Next Action -1. draft PR #110에서 human review를 받고 Important finding을 처리 -2. merge 권한이 확인되면 PR을 ready 상태로 전환해 병합 -3. 아래 Follow-Up blocker가 남아 있으므로 merge와 별개로 tag는 생성하지 않음 +1. strict `main` protection을 적용하고 read-back +2. host와 upstream version input blocker가 남아 있으므로 tag는 생성하지 않음 ## Follow-Up Tasks -1. `allow_hosts` 제거를 별도 full lifecycle/TDD로 수행 -2. upstream/version 정책 근거가 생긴 뒤 다음 anvil version 확정 -3. deployment host security operations 종료 -4. npm audit disposition 및 Web/secret CI 편입 -5. branch protection/required review 설정 -6. PR #109 documentation comment와 canonical document drift 정리 +1. upstream에 post-`v0.7.0` tag가 생긴 뒤 다음 anvil version 확정 +2. deployment host security operations 종료 +3. branch protection/required review 설정 +4. 두 번째 eligible reviewer 추가 diff --git a/docs/operations/2026-08-13-release-governance-hardening-handoff.md b/docs/operations/2026-08-13-release-governance-hardening-handoff.md index 826ace5..8d7b629 100644 --- a/docs/operations/2026-08-13-release-governance-hardening-handoff.md +++ b/docs/operations/2026-08-13-release-governance-hardening-handoff.md @@ -7,6 +7,8 @@ - branch: `agent/next-release-gates` - PR: [#111](https://github.com/HardcoreMonk/anvil/pull/111) - code-bearing commit: `0aec994089459a64d7bf9e8584f59f4bf6243e4e` +- evidence commit: `72f721331274101f2ea276f84caebe62f5c147ae` +- merge commit: `60ce239ce68555a419994f37c431dcb377825e1f` - 설계: [`2026-08-13-release-governance-hardening-design.md`](../superpowers/specs/2026-08-13-release-governance-hardening-design.md) - 계획: @@ -52,10 +54,21 @@ patched graph: - Go full/race/named builds/vet/gofmt/govulncheck: 통과 - Markdown relative links 155건, `git diff --check`: PASS -PR #111 code-bearing exact SHA의 `build-and-test`, `web-and-security`, `secret-scan`은 모두 -green이다. CodeRabbit status는 service review-rate-limit으로 pass됐지만 실제 review는 -수행되지 않았다. 이를 approval로 세지 않았고 manual actual-diff review에서 blocking -finding은 없었다. branch-protection read-back은 merge 후 추가한다. +PR #111 final head `72f721331274101f2ea276f84caebe62f5c147ae`의 +`build-and-test`, `web-and-security`, `secret-scan`은 모두 green이다. CodeRabbit status는 +service review-rate-limit으로 pass됐지만 실제 review는 수행되지 않았다. 이를 approval로 +세지 않았고 manual actual-diff review에서 blocking/Important finding은 없었다. PR은 merge +commit `60ce239ce68555a419994f37c431dcb377825e1f`로 병합됐다. + +merge commit의 GitHub Actions run `31630049807`에서도 다음 세 job이 모두 통과했다. + +- `build-and-test` +- `web-and-security` +- `secret-scan` + +이 문서 갱신은 관리자까지 강제하는 보호 규칙을 활성화하기 직전의 마지막 bootstrap +commit이다. 최종 외부 설정의 진실 기준은 이 commit 직후 수행하는 GitHub branch +protection API read-back이다. ## Audit @@ -70,7 +83,7 @@ finding은 없었다. branch-protection read-back은 merge 후 추가한다. 1. next public version number는 post-`v0.7.0` upstream tag 부재로 미할당이다. 2. deployment host A1/A2는 인증/도달 경로 부재로 미완료다. -3. PR #111 merge와 merge 후 branch protection 적용이 남았다. +3. strict branch protection 적용과 read-back이 남았다. ## Warnings @@ -87,16 +100,17 @@ finding은 없었다. branch-protection read-back은 merge 후 추가한다. ## Current Lifecycle Stage -local implement/verification/code review와 code-bearing exact-SHA remote CI 완료. PR merge와 -external protection이 남아 있어 `operate` 미진입이다. +implement/verification/code review, exact-SHA remote CI, PR merge, merge-commit CI가 +완료됐다. external protection 적용 직전이며 host/version blocker 때문에 public release +`operate`에는 진입하지 않았다. ## Next Action -PR #111 final head CI를 확인해 병합한 뒤 branch protection을 적용한다. +이 bootstrap 문서를 병합한 뒤 `main`에 strict status check, approval 1, +conversation-resolution, admin enforcement를 적용하고 API로 read-back한다. ## Follow-Up Tasks -1. exact-SHA remote CI와 review/merge -2. `main` protection 적용/read-back -3. 두 번째 eligible reviewer 추가 -4. host A1/A2와 upstream version input 전 tag 금지 +1. `main` protection 적용/read-back +2. 두 번째 eligible reviewer 추가 +3. host A1/A2와 upstream version input 전 tag 금지 diff --git a/docs/operations/2026-08-13-vm-deletion-failure-cleanup-handoff.md b/docs/operations/2026-08-13-vm-deletion-failure-cleanup-handoff.md index 602b021..c72d79d 100644 --- a/docs/operations/2026-08-13-vm-deletion-failure-cleanup-handoff.md +++ b/docs/operations/2026-08-13-vm-deletion-failure-cleanup-handoff.md @@ -7,6 +7,7 @@ - branch: `agent/next-release-gates` - PR: [#111](https://github.com/HardcoreMonk/anvil/pull/111) - code-bearing commit: `0aec994089459a64d7bf9e8584f59f4bf6243e4e` +- merge commit: `60ce239ce68555a419994f37c431dcb377825e1f` - trigger: merged PR #110에 대한 CodeRabbit 사후 Major review - 설계: [`2026-08-13-vm-deletion-failure-cleanup-design.md`](../superpowers/specs/2026-08-13-vm-deletion-failure-cleanup-design.md) @@ -70,6 +71,7 @@ E2E가 남긴 root-owned Town Wall log 8개와 0-byte rootfs placeholder 7개는 - govulncheck reachable 0, tracked secret scan PASS - full KVM E2E: 통과 - PR #111 exact code-bearing SHA Go/Web/secret CI: 통과 +- `main` merge commit CI run `31630049807`: Go/Web/secret 3 jobs 통과 - `git diff --check`: 통과 ## Audit @@ -82,7 +84,6 @@ E2E가 남긴 root-owned Town Wall log 8개와 0-byte rootfs placeholder 7개는 ## Blockers -- PR #111 merge가 남아 있다. - 실제 kernel이 resource를 계속 busy로 유지하면 후속 detach도 실패할 수 있다. 이 경우 error와 metric이 남으며 release gate는 host inventory clean 전까지 열려 있다. - deployment host security operations가 미완료다. @@ -99,15 +100,14 @@ E2E가 남긴 root-owned Town Wall log 8개와 0-byte rootfs placeholder 7개는 ## Current Lifecycle Stage -implement, local/KVM verification, code review, exact code-bearing SHA remote CI, release -handoff 완료. PR merge 전이므로 `operate` 미진입이다. +implement, local/KVM verification, code review, exact code-bearing SHA remote CI와 `main` +병합 완료. 실제 배포는 host/version blocker 때문에 `operate` 미진입이다. ## Next Action -PR #111 final head CI를 확인하고 병합한다. +배포 전 host resource inventory를 재확인하고 host/version blocker를 해소한다. ## Follow-Up Tasks -1. branch exact-SHA CI/CodeRabbit review -2. 배포 전 host resource inventory 재확인 -3. host/security/version blockers 전 tag 금지 +1. 배포 전 host resource inventory 재확인 +2. host/security/version blockers 전 tag 금지