fix(release): 7.0.7 릴리즈 검증 발견 결함 전수 처리 및 출시일 8/18 정렬

7.0.7 페이로드 전수 검증에서 발견된 error 4건·warn 14건을 릴리즈 전에
처리했다. 미출시 분량의 자체 결함(회원 통합검색 500, 관리자 스코프 403 의
500 위장 등)이므로 페이로드에 합류시키고, 출시 대상 26개 CHANGELOG 의
버전 섹션 날짜를 2026-08-18 로 정렬했다.

- 통합검색 import 복원 + 이커머스 관리자 typed 403 catch 대칭(테스트 동반)
- admin 판정 스니핑 사설 사본 전수 수렴(BoardResource) + 조건 스캔 테스트
- 스케줄 인터프리터 변형 표기(확장자·버전 접미사) 정규화 차단
- ckeditor5 참조 판정 배치화·fail-safe, 결제 플러그인 진단 페이로드 대칭
- 템플릿 다크 대비·상태 Select value-제어 + --production 재빌드
- Upgrade_7_0_7 잔존 중복 색인 정리 스텝, API 문서·i18n(ko/en/ja) 동기
This commit is contained in:
HeuJung
2026-08-18 08:12:55 +09:00
parent ed985dd175
commit b3d0da9355
110 changed files with 1104 additions and 369 deletions
@@ -4,7 +4,7 @@
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
## [1.0.5] - 2026-08-17
## [1.0.5] - 2026-08-18
### Added
@@ -25,6 +25,8 @@
### Fixed
- 회원 등록 화면의 상태 선택란이 기본값(활성) 없이 빈 칸으로 표시되던 문제를 수정했습니다. 표시만 비어 있었을 뿐 저장 시에는 '활성' 으로 등록되어, 화면 표시와 실제 저장값이 어긋나 보였습니다.
- 파일 업로더 썸네일의 업로드 진행률 막대와 오류 표시가 다크 모드에서 대비가 낮아 잘 보이지 않던 부분을 보완했습니다.
- 언어팩 재활성화 안내 창의 아이콘이 의도한 크기와 다르게 보이던 문제를 수정했습니다.
- 표 하단 합계 영역의 값이 계산되지 않고 표현식 원문 그대로 표시되던 문제를 다시 수정했습니다. 1.0.4 에 수록 예정이던 수정이 빌드 산출물에 반영되지 않은 채 배포되어, 주문 상세의 합계 행에서 수량·적립금·배송비 자리에 값 대신 알 수 없는 문자열이 보였습니다. (#98 @hwaryeon1234 님께서 제보해주셨습니다.)
- 회원 정보 수정 화면에서 회원 정보가 화면에 채워지기 전에 저장을 누르면 "이름은 필수입니다" 같은 오류로 저장이 거절되던 문제를 수정했습니다. 이제 회원 정보를 불러오는 동안에는 저장 버튼이 잠시 비활성화됩니다.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -80,7 +80,7 @@
"handler": "toast",
"params": {
"type": "error",
"message": "{{error.message}}"
"message": "{{error.message ?? '$t:common.error_occurred'}}"
}
}
},
@@ -851,14 +851,25 @@
"text": "$t:admin.users.form.fields.status"
},
{
"comment": "커스텀 Select 는 value-제어 전용 — defaultValue 는 렌더되지 않아 create 모드 표시가 비었다. 미전송 시 서버(CreateUserRequest)가 active 로 보정하므로 표시 기본값과 서버 기본값이 일치한다.",
"type": "composite",
"name": "Select",
"props": {
"name": "status",
"className": "w-full",
"defaultValue": "active",
"value": "{{_local.form?.status ?? 'active'}}",
"options": "{{route?.id ? [{label: '$t:admin.users.form.status_options.active', value: 'active'}, {label: '$t:admin.users.form.status_options.inactive', value: 'inactive'}, {label: '$t:admin.users.form.status_options.blocked', value: 'blocked'}, {label: '$t:admin.users.form.status_options.withdrawn', value: 'withdrawn'}] : [{label: '$t:admin.users.form.status_options.active', value: 'active'}, {label: '$t:admin.users.form.status_options.inactive', value: 'inactive'}, {label: '$t:admin.users.form.status_options.blocked', value: 'blocked'}] ?? []}}"
}
},
"actions": [
{
"type": "change",
"handler": "setState",
"params": {
"target": "local",
"form.status": "{{$event.target.value}}"
}
}
]
}
]
}
@@ -1551,7 +1562,7 @@
"handler": "toast",
"params": {
"type": "error",
"message": "{{error.message}}"
"message": "{{error.message ?? '$t:common.error_occurred'}}"
}
}
]
@@ -1571,7 +1582,7 @@
"handler": "toast",
"params": {
"type": "error",
"message": "{{error.message}}"
"message": "{{error.message ?? '$t:common.error_occurred'}}"
}
}
]
@@ -1862,7 +1873,7 @@
"handler": "toast",
"params": {
"type": "error",
"message": "{{error.message}}"
"message": "{{error.message ?? '$t:common.error_occurred'}}"
}
}
]
@@ -1882,7 +1893,7 @@
"handler": "toast",
"params": {
"type": "error",
"message": "{{error.message}}"
"message": "{{error.message ?? '$t:common.error_occurred'}}"
}
}
]
@@ -166,9 +166,9 @@ export const SortableThumbnailItem: React.FC<SortableThumbnailItemProps> = ({
{/* 업로드/압축 진행률 오버레이 */}
{(isUploading || isCompressing) && (
<Div className="absolute inset-0 bg-black/50 flex flex-col items-center justify-center">
<Div className="w-3/4 h-2 bg-gray-700 rounded-full overflow-hidden">
<Div className="w-3/4 h-2 bg-gray-700 dark:bg-gray-600 rounded-full overflow-hidden">
<Div
className="h-full bg-blue-500 transition-all"
className="h-full bg-blue-500 dark:bg-blue-400 transition-all"
style={{ width: `${progress}%` }}
/>
</Div>
@@ -178,7 +178,7 @@ export const SortableThumbnailItem: React.FC<SortableThumbnailItemProps> = ({
{/* 에러 오버레이 */}
{hasError && (
<Div className="absolute inset-0 bg-red-500/50 flex items-center justify-center">
<Div className="absolute inset-0 bg-red-500/50 dark:bg-red-600/50 flex items-center justify-center">
<I className="fa-solid fa-exclamation-triangle text-2xl text-white" />
</Div>
)}
File diff suppressed because one or more lines are too long
@@ -4,7 +4,7 @@
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
## [1.1.1] - 2026-08-17
## [1.1.1] - 2026-08-18
### Added
@@ -13,6 +13,7 @@
### Fixed
- 파일 업로더 썸네일의 업로드 진행률 막대와 오류 표시가 다크 모드에서 대비가 낮아 잘 보이지 않던 부분을 보완했습니다.
- 장바구니를 처음 열었을 때 "전체 선택" 옆 개수가 `(/27)` 처럼 선택 개수 없이 표시되던 문제를 수정했습니다. 이제 진입·새로고침·다른 화면에서 돌아온 경우 모두 `(27/27)` 로 바로 표시되며, 체크박스 상태 및 주문 요약의 "선택 상품 N / M개" 와 항상 같은 값을 가리킵니다. (#92 @koojunho 님께서 제보해주셨습니다.)
- 장바구니 옵션변경 모달의 재고 안내와 마이페이지 프로필의 입력 오류 메시지가, 표시할 값이 아직 준비되지 않은 순간에도 빈칸으로 남지 않도록 보완했습니다. 값이 준비된 뒤의 표시는 종전과 동일합니다.
- 마이페이지 게시판 알림 수신 설정(댓글·답글 등 4개 항목)의 체크 상태가 저장값과 어긋날 수 있던 가능성을 차단했습니다. 저장된 값이 어떤 형태든 화면의 체크 표시와 저장 결과가 항상 일치합니다.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -58,5 +58,5 @@ export interface AvatarUploaderProps {
/** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */
editorAttrs?: EditorAttrs;
}
export declare function AvatarUploader({ src, fallbackText, size, uploadEndpoint, deleteEndpoint, onUploadSuccess, onUploadError, onDeleteSuccess, onDeleteError, showDeleteButton, accept, maxSize, className, uploadButtonText, deleteButtonText, readOnly, confirmDelete, deleteConfirmMessage, confirmUpload, uploadConfirmMessage, uploadSuccessActions, uploadErrorActions, deleteSuccessActions, deleteErrorActions, id, editorAttrs, }: AvatarUploaderProps): import("react").JSX.Element;
export declare function AvatarUploader({ src, fallbackText, size, uploadEndpoint, deleteEndpoint, onUploadSuccess, onUploadError, onDeleteSuccess, onDeleteError, showDeleteButton, accept, maxSize, className, uploadButtonText, deleteButtonText, readOnly, confirmDelete, deleteConfirmMessage, confirmUpload, uploadConfirmMessage, uploadSuccessActions, uploadErrorActions, deleteSuccessActions, deleteErrorActions, id, editorAttrs, }: AvatarUploaderProps): import("react/jsx-runtime").JSX.Element;
export default AvatarUploader;
@@ -156,9 +156,9 @@ export const SortableThumbnailItem: React.FC<SortableThumbnailItemProps> = ({
{/* 업로드/압축 진행률 오버레이 */}
{(isUploading || isCompressing) && (
<Div className="absolute inset-0 bg-black/50 flex flex-col items-center justify-center">
<Div className="w-3/4 h-2 bg-gray-700 rounded-full overflow-hidden">
<Div className="w-3/4 h-2 bg-gray-700 dark:bg-gray-600 rounded-full overflow-hidden">
<Div
className="h-full bg-blue-500 transition-all"
className="h-full bg-blue-500 dark:bg-blue-400 transition-all"
style={{ width: `${progress}%` }}
/>
</Div>
@@ -168,7 +168,7 @@ export const SortableThumbnailItem: React.FC<SortableThumbnailItemProps> = ({
{/* 에러 오버레이 */}
{hasError && (
<Div className="absolute inset-0 bg-red-500/50 flex items-center justify-center">
<Div className="absolute inset-0 bg-red-500/50 dark:bg-red-600/50 flex items-center justify-center">
<I className="fa-solid fa-exclamation-triangle text-2xl text-white" />
</Div>
)}