UX 웹 배포 결과와 운영 검증 경계 기록

This commit is contained in:
Yun Chan 2026-09-12 18:08:39 +09:00
parent e8b770e4d9
commit 77f8421818
4 changed files with 72 additions and 4 deletions

View file

@ -1,7 +1,7 @@
# 배포 파이프라인 (Deployment Pipeline)
> 작성: 2026-08-31 · 2026-09-09 현행화 · 문서 소유: docs/ops
> 상태: **2026-09-09 NAS Production & Cloudflare Pages 실배포 완료 (SHA `1306c524`)**. API·engine 동시 기동 중 공백 관찰이 있어 무중단 배포 증거는 아니다.
> 작성: 2026-08-31 · 2026-09-12 현행화 · 문서 소유: docs/ops
> 상태: **2026-09-12 UX SHA `e8b770e4d9023238bf210b412de75dcb98bfc08e`의 Cloudflare Pages와 NAS web 전용 배포는 완료**했다. 운영 인증 세션이 401로 만료돼 내부 UI 검증은 마지막 열린 게이트이며, 이를 전체 운영 검증 완료로 선언하지 않는다.
## 목표 아키텍처 (소유자 지시)
@ -134,6 +134,16 @@ docker compose -f docker-compose.nas.yml --env-file private/env.nas up -d --no-d
- 배포 후 관리자가 `/admin/ai` 제공자 연결 패널에서 claude·codex·agy·openrouter 토큰을 연결하면 실행 중인 engine 컨테이너에 즉시 push 적용된다(재배포 불필요).
- 이후 수정(`e3a9fc71`, `cb4d4557`): 앱 DB 계정엔 스키마 CREATE 권한이 없어 런타임 DDL이 권한 거부로 실패 → 소유자로 테이블 선생성(DDL은 `05_runtime_auth.sql`에 정식 반영) + `to_regclass` 존재 검사 선행(r2), OAuth 로그인 버튼(claude·openrouter PKCE 코드 교환) 추가(r3). 교체는 각각 api만 `--no-deps`로 수행, engine은 코드 변경이 없어 유지했다.
## 5.4 UX 웹 배포와 NAS web 전용 교체 (2026-09-12 배포 시작 17:55:31 KST · NAS 교체/로컬 HTTP 확인 18:06 KST, SHA `e8b770e4d9023238bf210b412de75dcb98bfc08e`)
- Forgejo `master` push는 완료했다. Pages preview `https://1b115047.vignette-b1q.pages.dev` 배포도 완료했다.
- 공개 `https://vignette.chanpaca.net`은 HTTP 200이고 `/assets/index-BA_Q0J7Y.js`가 새 번들과 일치한다. 이전 세대 자산 175개를 보존했다.
- 공개 로그인 390px·1440px 원본을 직접 시각 검수해 수용했다. 각 확인에서 overflow, page error, failed request는 0건이었고 공개 health는 `db: true`, `engine: true`다.
- NAS는 **web만** `vignette-nas-web:e8b770e4` (`sha256:487e745aa08c113de4994d7d4770737539b1bc49494f5cbb802e6dc0f8c535f9`)로 교체했고 로컬 HTTP 확인은 exit 0이다. `.devlogs/deploy-20260912-nas-before.txt``nas-after.txt` 첫 3줄 대조에서 API·engine·DB 컨테이너 ID와 이미지는 동일했다.
- DB dump `backups/pre-deploy-e8b770e4-20260912.dump`(11,783,464 bytes)는 `pg_restore --list`를 통과했고 `private/env.nas.before-deploy-e8b770e4`를 보존했다. 공개 health도 다시 `status: ok`, `db: true`, `engine: true`를 확인했다.
- 공개 Pages의 현재 JS/CSS asset 의존 그래프는 로컬 `dist`와 비교해 52/52 HTTP 200이며 SHA-256이 일치한다. NAS web은 `/api` 빌드의 `index-Ccefqm_F.js`·`index-B1latakI.css`를 쓰며, 이는 `nginx -t`와 로컬 HTTP exit 0으로 별도 검증했다.
- 따라서 Pages와 NAS web 전용 배포 반영은 완료했다. 다만 운영 인증 세션 만료로 내부 UI는 401이라 검증하지 못했으므로, 이 절은 전체 운영 내부 화면 GREEN이나 전체 기능 출시 완료를 의미하지 않는다. 구조화 증거: [`ux-web-deploy-2026-09-12.json`](./evidence/ux-web-deploy-2026-09-12.json).
## 6. 남은 구성 작업 (TODO)
- [ ] Forgejo master 기준 NAS 자동배포 후크(수동 절차는 §5, §5.1로 실증 완료)

View file

@ -0,0 +1,58 @@
{
"schema": "vignette.ux_web_deploy_evidence.v1",
"deploymentStartedAt": "2026-09-12T17:55:31+09:00",
"recordedAt": "2026-09-12T18:06:00+09:00",
"source": {
"sha": "e8b770e4d9023238bf210b412de75dcb98bfc08e",
"forgejoMasterPush": "completed"
},
"cloudflarePages": {
"status": "completed",
"previewUrl": "https://1b115047.vignette-b1q.pages.dev",
"publicUrl": "https://vignette.chanpaca.net",
"publicHttpStatus": 200,
"entryAsset": "/assets/index-BA_Q0J7Y.js",
"entryAssetMatchesNewBundle": true,
"preservedPreviousAssets": 175
},
"publicVerification": {
"loginViewports": [390, 1440],
"visualReview": "accepted",
"overflowCount": 0,
"pageErrorCount": 0,
"requestFailedCount": 0,
"health": {
"db": true,
"engine": true
}
},
"nas": {
"status": "web-replaced-and-local-http-verified",
"scope": "web-only",
"webImage": "vignette-nas-web:e8b770e4",
"webImageSha256": "487e745aa08c113de4994d7d4770737539b1bc49494f5cbb802e6dc0f8c535f9",
"api": "retained",
"engine": "retained",
"database": "retained",
"apiEngineDatabaseBeforeAfterMatch": true,
"containerReplacementVerified": true,
"localHttpExitCode": 0,
"databaseBackup": {
"path": "backups/pre-deploy-e8b770e4-20260912.dump",
"bytes": 11783464,
"pgRestoreListPassed": true
},
"environmentBackup": "private/env.nas.before-deploy-e8b770e4"
},
"assetDependencyGraph": {
"scope": "public-pages-vs-local-dist",
"checked": 52,
"http200": 52,
"sha256MatchesLocalBuild": true
},
"authenticatedInternalUi": {
"verified": false,
"reason": "operational authentication session expired; received 401"
},
"conclusion": "Cloudflare Pages and NAS web-only deployment are complete. Authenticated internal UI verification remains open, so this is not a full operational or feature-release completion claim."
}

View file

@ -30,4 +30,4 @@
카드가 겹친 첫 목록 수정, 반투명 메뉴, 시작 버튼 가림, 초기 로딩 화면을 완료 화면으로 찍던 캡처는 반려했다. 캡처 도구의 stale owner ID와 native 스크롤 끝점 오차도 수정했다. 빈 회기 fixture는 정확한 API 빈 상태 계약으로 보강했으며 실제 API 증거와 구분한다. `practice-real-api-final`의 후속 전체 화면 캡처는 로딩 중이어서 무효로 보존했다. 해당 배치의 수용 근거는 안정된 긴 목록 fixture 원본과 동작 검사다.
로컬 AI 게이트웨이는 비가용이고 제공자 조회 API는 500을 반환한다. 이번 감사는 이 상태를 숨기지 않고 실패·재시도 화면을 검수했다. 운영 서버 정상성, 실제 모델 생성·음성 연결, 전체 기능 출시 판정과 배포는 이 디자인 감사의 완료 범위에 포함하지 않는다. 소스 변경은 커밋·push·배포하지 않았다.
로컬 AI 게이트웨이는 비가용이고 제공자 조회 API는 500을 반환한다. 이번 감사는 이 상태를 숨기지 않고 실패·재시도 화면을 검수했다. 운영 서버 정상성, 실제 모델 생성·음성 연결과 전체 기능 출시 판정은 이 디자인 감사의 완료 범위에 포함하지 않는다. 감사 수용 뒤 UX 소스 SHA `e8b770e4d9023238bf210b412de75dcb98bfc08e`를 Forgejo `master`에 push했고, 배포는 2026-09-12 17:55:31 KST에 시작했다. Pages 공개 배포와 NAS web 전용 교체는 18:06 KST까지 완료됐으며 API·engine·DB는 유지했다. 운영 인증 세션이 401로 만료돼 내부 UI는 검증하지 못했으므로 전체 운영 내부 화면 GREEN이나 전체 기능 출시 완료를 선언하지 않는다. 현행 배포 상태와 구조화 증거는 [`deployment-pipeline.md`](./deployment-pipeline.md) 및 [`ux-web-deploy-2026-09-12.json`](./evidence/ux-web-deploy-2026-09-12.json)을 따른다.