diff --git a/.gitignore b/.gitignore index 96c1dba..f56bad5 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ docs/assets/floorplans/cad/ # graphify / screenshot generated outputs (local only) graphify-out/ screenshot/ +.claude/settings.local.json diff --git a/deploy/restore_kintex_block.sh b/deploy/restore_kintex_block.sh new file mode 100644 index 0000000..b7d9c17 --- /dev/null +++ b/deploy/restore_kintex_block.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# deploy_server.py kintex 블록 복원 원샷 (소유자 승인 2026-07-24) +# 실행: bash deploy/restore_kintex_block.sh +# 동작: 서버 내부에서 백업 → repo 정본 블록 추출 → 앵커 앞 삽입 → py_compile → 서비스 재시작 → 실패 시 롤백 +set -euo pipefail +KEY="$HOME/.ssh/guardia_server" +ssh -i "$KEY" -o IdentitiesOnly=yes -o BatchMode=yes root@101.79.17.164 python3 - <<'PYEOF' +import re, subprocess, shutil, sys, py_compile + +TARGET = "/opt/zioinfo/deploy_server.py" +BLOCK_SRC = "/opt/kintex/src/deploy/deploy_server_kintex_block.py" +BACKUP = TARGET + ".bak_kintexfix" +ANCHOR = 'logging.info(f"=== {repo} 배포 완료 ===")' + +body = open(TARGET, encoding="utf-8").read() +if 'elif repo == "kintex"' in body: + print("SKIP: kintex 블록이 이미 존재"); sys.exit(0) + +raw = open(BLOCK_SRC, encoding="utf-8").read() +m = re.search(r"'''\n(.*?)'''", raw, re.S) +if not m: + print("FAIL: 블록 추출 실패"); sys.exit(1) +block = m.group(1) + +if ANCHOR not in body: + print("FAIL: 앵커 미발견"); sys.exit(1) + +shutil.copy2(TARGET, BACKUP) +idx = body.index(ANCHOR) +line_start = body.rfind("\n", 0, idx) + 1 +indent = body[line_start:idx] +new_body = body[:line_start] + block + indent + ANCHOR + body[idx + len(ANCHOR):] +open(TARGET, "w", encoding="utf-8").write(new_body) + +try: + py_compile.compile(TARGET, doraise=True) +except Exception as e: + shutil.copy2(BACKUP, TARGET) + print(f"FAIL: py_compile 실패 → 백업 롤백 완료: {e}"); sys.exit(1) + +r = subprocess.run(["systemctl", "restart", "zioinfo-deploy"]) +if r.returncode != 0: + shutil.copy2(BACKUP, TARGET) + subprocess.run(["systemctl", "restart", "zioinfo-deploy"]) + print("FAIL: 재시작 실패 → 백업 롤백 후 재기동"); sys.exit(1) + +act = subprocess.run(["systemctl", "is-active", "zioinfo-deploy"], capture_output=True, text=True) +print(f"OK: kintex 블록 삽입 + py_compile 통과 + zioinfo-deploy {act.stdout.strip()}") +PYEOF diff --git a/docs/OWNER_FEEDBACK.md b/docs/OWNER_FEEDBACK.md index 39ae531..03fc419 100644 --- a/docs/OWNER_FEEDBACK.md +++ b/docs/OWNER_FEEDBACK.md @@ -408,3 +408,5 @@ K2(H6~H10) 트렌치 실측 완료 — 65채널·941포인트(H6 9채널·H7/H8/ **추가 지시(2026-07-23):** "개발은 헤르메스 에이전트 사용" — 배포/전달 단계(commit·push→CI/CD→배포 검증→릴리즈 노트→알림)는 zioinfo:hermes(전령) 에이전트 경유로 수행. **세션 6 결과(2026-07-24):** 시연 15항목·공개사이트 7항목·백로그 웨이브 전체 구현 완료(상세: UNDEVELOPED_BACKLOG 결과표·_workspace/impl_* 요약 12종). 로고 CI_01 확정·전수 통일(웹 BrandLogo 규격 header28/auth32/footer22/print38·모바일 로그인/스플래시). 게이트: 백엔드 전체 테스트·프론트 tsc/build·i18n 4로케일 대조 0 누락·마이그레이션 V68~V106 중복 0. 잔여: 커스텀 그리드 22 PDF 배선(마감 중)→통합 게이트→헤르메스 push/배포→모바일 v0.2.2 빌드·QR. + +**배포 최종(2026-07-24):** push 2328418(6그룹) → ★deploy_server.py kintex 블록 유실 발견(7/22 타 프로젝트 작업 회귀, webhook 10ms no-op) → deploy_kintex.sh 수동 배포로 릴리즈 완료(Flyway V68~V106 클린 적용, dev/운영 health UP, 신규 API 200) → 소유자 승인으로 블록 복원(deploy/restore_kintex_block.sh, py_compile·재시작) → **webhook E2E 통과(dfb5423 자동배포·health 200) — 자동배포 체인 정상화**. 모바일 v0.2.2(versionCode 4) EAS 빌드→APK 교체→매니페스트 갱신, 개발·운영 다운로드 200·크기 일치. 교훈: 공유 인프라(deploy_server.py) 수정은 권한 게이트 — 승인 스크립트(deploy/restore_kintex_block.sh) + settings.local.json 허용 규칙 경로 확립.