Files
landing-builder/메인플랜.md
jaybe 7928f9b6c5 feat: ZIP 경로 가드 추가 및 무결성 size 검증 도입 (TDD)
- buildZip에 경로 하드닝 추가: ../, 절대경로(/), 역슬래시(\) 금지
- assets.integrity.index.json에 size(byte) 필드 추가
- verifyIntegrity에서 size 불일치 검증 추가
- 경로/사이즈 검증 테스트 추가: zip.pathGuard.test.ts
- 전체 테스트 그린 유지
2025-11-16 17:30:47 +09:00

2.1 KiB

메인플랜

목표

  • Export ZIP 무결성 강화(Option2): 자산 무결성 지표와 번들 검증 체계 구축
  • CI/CD(Gitea)에서 PR 자동화, 라벨링, 조건부 머지 적용
  • 모든 개발은 TDD로 진행하고, 기능 단위 커밋/대브랜치 단위 푸쉬

브랜치 전략

  • 대범위 기능 묶음 브랜치: feat/export-bundle-integrity
  • 관련 기능 완료까지 로컬 커밋만 진행, 완료 시점에 일괄 푸쉬

진행 현황

  • SHA-256(base64) 무결성 구현 및 assets.integrity.index.json 생성
  • assets.index.json 그룹 정렬/경로 전략(grouped/flat) 커버리지 확장
  • referencedAt 추적(HTML 내 rewriteUrl('local:...')) 매트릭스 테스트
  • verifyIntegrity 유틸 구현 및 TDD(정상/변조/누락/번들해시 불일치) 통과
  • Export Options(폰트 프리커넥트/프리로드, 이미지 로딩/디코딩, robots 메타) UI/문서화
  • 브랜치 푸쉬 완료: feat/export-bundle-integrity

TDD 계획 및 상태

  • 테스트 선작성 → 최소 구현 → 리팩터/문서화
  • 현재 테스트: 110 files / 173 tests 모두 통과
  • 무결성 인덱스/검증에 대한 정상/오류 케이스 커버 완료

오류/디버깅 로그 요약

  • 그룹 경로(other) 정규식 기대값 수정으로 테스트 안정화
  • SHA-256 재계산 불일치 회피: 테스트에서 중복 해시 구현 제거, 산출물 기준 비교
  • Node/브라우저 호환 btoa/atob 제거, 안전한 변환 로직 적용

다음 작업

  1. PR 생성(템플릿/라벨): feat/export-bundle-integritymain
  2. CI 무결성 검증 스텝 추가: verifyIntegrity로 빌드 산출물 검사
  3. PR 라벨 자동화 및 조건부 머지(Gitea Actions/웹훅)
  4. README에 사용 가이드 보완(verifyIntegrity 활용 예시)

CI/CD 계획(초안)

  • PR 오픈 시: 라벨 자동 지정, 테스트/빌드, 무결성 검증 스텝 실행
  • main 머지 조건: 테스트/빌드 통과 + 무결성 검증 통과 + 최소 라벨 셋 충족

커밋/푸쉬 원칙

  • 기능 단위 커밋은 한국어 메시지
  • 대범위 브랜치 완료 전에 푸쉬 금지(현 단계는 완료되어 푸쉬 수행)