chore(api-docs, sirsoft-ecommerce): 공개 release 누출 검사 위반 정리
공개 release 빌드의 파일 본문 누출 검사에서 검출된 항목을 정리한다. api-documentation.md 는 릴리즈에 포함되지 않는 내부 지침 파일명을 참조하고 있었다. 공개본 독자에게는 존재하지 않는 파일을 가리키므로 공개 진입점 문서(AGENTS.md)로 교체했다. 이커머스 배송국가 테스트 2종의 주석에서 내부 역할 호칭을 제거했다. 판단 근거 서술은 그대로 두고 호칭만 걷어냈으므로 어서션·실행 경로는 불변이다. 검증: check-public-release-leakage error 0 / warn 0, PruneEmptyShippingCountryNameLocalesTest 10/10 통과.
This commit is contained in:
@@ -76,14 +76,14 @@ G7 의 REST API 는 라우트 `->name()` 규약은 있으나 엔드포인트별
|
||||
확장 API 문서의 발견성은 이 목차를 통해 확보한다. `api:docgen` 과 코어 인덱스 생성기
|
||||
(`generate-docs-index.cjs`) 는 확장명을 하드코딩하지 않고
|
||||
`{modules,plugins}/_bundled/*/docs/api/README.md` 를 **패턴 스캔**해, 코어 README 의 "확장 API 레퍼런스"
|
||||
표와 CLAUDE.md·AGENTS.md·docs-index 에 자동 편입한다(동적 로딩 원칙 — 코어는 규약과 스캔 패턴만, 확장
|
||||
표와 AGENTS.md·docs-index 에 자동 편입한다(동적 로딩 원칙 — 코어는 규약과 스캔 패턴만, 확장
|
||||
이름은 파일 시스템에서 발견). 문서 수·엔드포인트 수는 각 README 의 집계 라인
|
||||
(`**문서 수**: N · **엔드포인트 수**: M`)에서 읽으므로, 이 라인 형식을 바꾸면 두 스캐너를 함께 갱신한다.
|
||||
|
||||
처음 진입하는 개발자/AI 의 도달 경로:
|
||||
|
||||
```text
|
||||
README.md "API 레퍼런스" 또는 CLAUDE.md "API 레퍼런스 진입점" 표
|
||||
README.md "API 레퍼런스" 또는 AGENTS.md "API 레퍼런스 진입점" 표
|
||||
→ docs/backend/api/README.md (공통 규약 + 코어 목차 + 확장 목차)
|
||||
→ {도메인}.md 또는 {확장}/docs/api/README.md
|
||||
→ 엔드포인트별 파라미터·응답·예시
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@
|
||||
* - **국가명 문자열을 하드코딩하지 않는다**("South Korea" 등). 시드 데이터가 바뀌면
|
||||
* 거짓 실패하고, 무엇보다 "ko 가 아닌 무언가"를 렌더한다는 사실만으로는 회귀를 못 잡는다.
|
||||
* API 응답에서 그 로케일의 기대값을 **런타임에 도출**해 화면과 대조한다.
|
||||
* - **로케일 목록을 하드코딩하지 않는다**. 언어는 계속 추가된다(PO 지시). 설치된 언어는
|
||||
* - **로케일 목록을 하드코딩하지 않는다**. 언어는 계속 추가된다. 설치된 언어는
|
||||
* `$locales` 에서 읽는다.
|
||||
* - 회귀(= ko 고정) 판정은 "en 값과 같다" 로는 부족하다. ko 와 en 이 같은 국가(예: 코드
|
||||
* 폴백)만 골라 보면 통과해 버린다. **ko 값과 다른 국가가 하나라도 있는지** 먼저 확인한
|
||||
@@ -54,7 +54,7 @@ async function derivedHeaderNames(page: Page): Promise<string[]> {
|
||||
}
|
||||
|
||||
/**
|
||||
* 설치된 언어의 `{ 코드: 표시명 }` 맵. 하드코딩 금지 — 언어는 계속 추가된다(PO 지시).
|
||||
* 설치된 언어의 `{ 코드: 표시명 }` 맵. 하드코딩 금지 — 언어는 계속 추가된다.
|
||||
* 레이아웃의 이름 입력칸 라벨이 쓰는 것과 동일한 출처(`appConfig.localeNames`)를 읽는다.
|
||||
*/
|
||||
async function localeDisplayNames(page: Page): Promise<Record<string, string>> {
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ use Modules\Sirsoft\Ecommerce\Tests\ModuleTestCase;
|
||||
* (settings.countries.{code}.name)이 읽기 시점에 보강하고, 운영자가 직접 추가한 국가는
|
||||
* 운영자가 채운다. 따라서 빈 문자열 키는 제거해 "부재" 로 정규화한다.
|
||||
*
|
||||
* 이름을 새로 채우지는 않는다(PO 결정) — 청소만 한다.
|
||||
* 이름을 새로 채우지는 않는다 — 청소만 한다.
|
||||
*/
|
||||
class PruneEmptyShippingCountryNameLocalesTest extends ModuleTestCase
|
||||
{
|
||||
@@ -142,7 +142,7 @@ class PruneEmptyShippingCountryNameLocalesTest extends ModuleTestCase
|
||||
|
||||
public function test_country_names_are_never_filled_in(): void
|
||||
{
|
||||
// PO 결정: 이름을 새로 채우지 않는다. 부재 로케일은 언어팩이 읽기 시점에 보강한다.
|
||||
// 이름을 새로 채우지 않는다. 부재 로케일은 언어팩이 읽기 시점에 보강한다.
|
||||
$this->writeSettings([
|
||||
'default_country' => 'KR',
|
||||
'available_countries' => [
|
||||
|
||||
Reference in New Issue
Block a user