7928f9b6c5
- buildZip에 경로 하드닝 추가: ../, 절대경로(/), 역슬래시(\) 금지 - assets.integrity.index.json에 size(byte) 필드 추가 - verifyIntegrity에서 size 불일치 검증 추가 - 경로/사이즈 검증 테스트 추가: zip.pathGuard.test.ts - 전체 테스트 그린 유지
2.1 KiB
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 제거, 안전한 변환 로직 적용
다음 작업
- PR 생성(템플릿/라벨):
feat/export-bundle-integrity→main - CI 무결성 검증 스텝 추가:
verifyIntegrity로 빌드 산출물 검사 - PR 라벨 자동화 및 조건부 머지(Gitea Actions/웹훅)
- README에 사용 가이드 보완(verifyIntegrity 활용 예시)
CI/CD 계획(초안)
- PR 오픈 시: 라벨 자동 지정, 테스트/빌드, 무결성 검증 스텝 실행
- main 머지 조건: 테스트/빌드 통과 + 무결성 검증 통과 + 최소 라벨 셋 충족
커밋/푸쉬 원칙
- 기능 단위 커밋은 한국어 메시지
- 대범위 브랜치 완료 전에 푸쉬 금지(현 단계는 완료되어 푸쉬 수행)