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