355 lines
24 KiB
Markdown
355 lines
24 KiB
Markdown
# trustworthy-showcases — 실제처럼 보이되 거짓말하지 않는 쇼케이스
|
||
|
||
다음 중 하나라도 해당하면 **1·2·4·5단계**에서 읽는다. 1단계에서 시장과 위험 경계를 잠그고, 2단계에서 정보 구조를 나누고, 4단계에서 구현하며, 5단계에서 실제 상태를 검증한다.
|
||
|
||
- 가상 브랜드·가상 매물·예시 가격·예시 매장을 실제 서비스처럼 설계한다
|
||
- AI 분석·추천·점수·예측을 화면에 싣는다
|
||
- 부동산·금융·의료처럼 규제되거나 오해 비용이 큰 주제를 다룬다
|
||
- 고객용 랜딩과 관리자·가맹·운영 화면을 한 브랜드로 함께 만든다
|
||
- 생성 이미지를 실제 상품·공간·사람의 증거처럼 오인할 수 있다
|
||
|
||
목표는 경고문을 많이 붙이는 것이 아니다. **주장의 구조가 정직하고, 그 정직함이 디자인을 약하게 만들지 않게 하는 것**이다.
|
||
|
||
---
|
||
|
||
## 1. 기존 근본 규칙과의 충돌 해결
|
||
|
||
이 문서는 기존 규칙을 느슨하게 만들지 않는다. 충돌하면 다음 순서로 해석한다.
|
||
|
||
1. 접근성·사실성·사용자 안전이 언제나 이긴다.
|
||
2. 브리프와 목표 시장이 레퍼런스의 멋을 이긴다.
|
||
3. 하나의 브랜드 방향은 유지하되, 서로 다른 과업의 표면 밀도까지 같게 만들지는 않는다.
|
||
4. 게이트의 기본값은 유지한다. 예외가 필요하면 페이지 계약으로 좁게 선언하고 더 넓은 매트릭스로 검증한다.
|
||
5. 생성 이미지는 분위기와 재질을 맡고, 가격·상태·근거·판정은 DOM이 맡는다.
|
||
|
||
예: 마케팅 h1에 2줄이 필요하면 범용 1줄 규칙을 삭제하지 않는다. 그 페이지만 `h1MaxLines: 2`로 선언하고 375·390px × 글꼴 확대에서도 2줄 이하인지 잰다.
|
||
|
||
---
|
||
|
||
## 2. 목표 시장을 먼저 잠근다
|
||
|
||
`R1/R2/R3`보다 먼저 **시장 계약** 한 줄을 쓴다.
|
||
|
||
```md
|
||
시장: 한국 / 서울 생활권 / 모바일 우선
|
||
행동 관습: 원·만원·억, ㎡와 평 병기, 동네·역·도보 기준, 국내형 문의 순서
|
||
금지: 서구 럭셔리 부동산 문법, 미국 다이너 문법, 번역투 카피, 이국화 장식
|
||
```
|
||
|
||
- R1은 같은 업종·목적이면서 가능하면 **같은 목표 시장**에서 고른다. 구조에는 단위·용어·연락 방식·신뢰 표지가 들어 있기 때문이다.
|
||
- R2는 다른 업종이어야 한다는 근본 규칙을 유지한다. 다만 목표 시장의 미감이 중요하면 **같은 문화권의 다른 업종**을 우선한다.
|
||
- R3가 다른 문화권에서 왔다면 가져올 것은 구현 기법 하나뿐이다. 색·카피·상징까지 따라오면 시장 계약을 어긴다.
|
||
- 국내화는 태극 문양이나 한옥 장식을 붙이는 일이 아니다. **단위·정보 순서·검색 축·사진의 조도·문의 단계**를 현지 관습에 맞추는 일이다.
|
||
|
||
---
|
||
|
||
## 3. 한 방향, 여러 표면
|
||
|
||
고객용 랜딩·관리자·가맹 페이지가 함께 있을 때 전부 같은 표현 강도로 만들면 둘 중 하나가 망가진다. 공통 토큰을 공유하고 표면 다이얼을 따로 적는다.
|
||
|
||
| 다이얼 | 0 | 1 | 2 | 3 |
|
||
|---|---|---|---|---|
|
||
| 표현성 | 문서 | 조용한 제품 | 캠페인 | 실험적 |
|
||
| 정보 밀도 | 넉넉함 | 표준 | 조밀함 | 운영 콘솔 |
|
||
| 모션 | 없음 | 피드백만 | 절제된 전환 | 브랜드 연출 |
|
||
| 증거 노출 | 요약 | 근거 링크 | 근거 병기 | 감사 기록 |
|
||
|
||
예시:
|
||
|
||
```md
|
||
공통: Pretendard, 8px 리듬, 먹색, 강조색 1개, 직설형 카피
|
||
고객 랜딩: 표현 2 / 밀도 1 / 모션 1 / 증거 2
|
||
관리자: 표현 0 / 밀도 3 / 모션 0 / 증거 3
|
||
```
|
||
|
||
이렇게 해야 랜딩은 설득하고 관리자는 판정한다. 프리셋을 두 개 쓰는 것이 아니라 **같은 브랜드가 과업에 맞춰 목소리 크기를 바꾸는 것**이다.
|
||
|
||
---
|
||
|
||
## 4. 먼저 진실 계약을 만든다
|
||
|
||
화면을 그리기 전에 모든 주장과 행동을 네 종류로 분류한다. 이 **진실 상태**와 값이 어디서 왔는지 나타내는 **출처 계층**을 섞지 않는다.
|
||
|
||
| 종류 | 예 | 화면 규칙 |
|
||
|---|---|---|
|
||
| 사실 | 검증 가능한 문장: `사용자가 40억을 입력했다`, `공식 원문에 전용 118㎡로 적혔다` | 무엇이 사실인지 주어·출처·기준일을 가까이에 둔다 |
|
||
| 예시 | 가상 매물, 예시 가격, 합성 매장 | 주장·가격·카드·행동 근처에 `예시`를 붙인다 |
|
||
| 추론 | AI 추천, 위험 신호, 적합도 | 근거·불확실성·수정 경로를 함께 둔다 |
|
||
| 미정 | 가맹비, 수익, 실제 주소처럼 검증 안 된 값 | `미정`으로 남기고 숫자를 만들지 않는다 |
|
||
|
||
같은 값이라도 출처가 다르면 화면의 말투와 가능한 행동이 달라진다.
|
||
|
||
| 출처 계층 | 뜻 | 허용 표현 |
|
||
|---|---|---|
|
||
| `USER_SELF_REPORT` | 사용자가 직접 입력·진술했지만 외부 검증은 안 됨 | `입력한 조건`, `사용자 진술` |
|
||
| `VERIFIED_SOURCE` | 기준일과 원문을 확인한 외부·공식 출처 | `확인된 정보` + 출처·기준일 |
|
||
| `SYSTEM_STATE` | 현재 제품이 직접 계산·관측한 상태 | 계산 규칙·측정 시점 병기 |
|
||
| `SYNTHETIC_FIXTURE` | 쇼케이스 동작 확인용 합성 값 | `예시`, 실제 행동 차단 |
|
||
|
||
사용자 진술의 값 자체를 곧바로 도메인 사실로 승격하지 않는다. `사용자가 붉음을 선택했다`는 사실일 수 있지만 `피부가 실제로 붉다`는 임상 상태는 검증 전 미정이다. 합성 픽스처도 시스템 관측처럼 표현하지 않는다. 승격에는 출처·기준일·검증 이벤트가 필요하다. AI·모델 출력은 제품이 생성했다는 의미에서 시스템 상태일 수 있어도, 내용의 진실 상태는 여전히 **추론**이다.
|
||
|
||
### 4-a. 같은 진실 범위는 가장 가까운 공통 부모가 소유한다
|
||
|
||
`오해 지점 가까이에 라벨`은 같은 경고를 모든 자식에 복제하라는 뜻이 아니다.
|
||
|
||
- 그룹의 모든 자식이 같은 진실 상태·출처·행동 가능성을 공유하면, 제목과 시각 경계가 분명한 **가장 가까운 공통 부모**에 라벨을 한 번 둔다.
|
||
- 자식 하나라도 상태·출처·행동 가능성이 다르면 그 자식에 예외 라벨을 둔다.
|
||
- 공통 부모의 범위가 화면과 보조기술에서 명확하지 않으면 묶지 않는다. 폼은 `fieldset/legend`, 표는 `caption`, 카드 집합은 제목·설명과 `aria-describedby` 같은 프로그램적 연결을 쓴다.
|
||
- 전역 띠는 사이트 전체의 가상 브랜드 상태를 맡을 수 있지만, 특정 가격·이미지·제출 행동의 서로 다른 경계까지 대신하지 않는다.
|
||
|
||
구현 전에 진실 라벨의 `문구 / 소유 컨테이너 / 예외 자식`을 표로 만들고, 같은 문구의 반복 횟수가 아니라 의미 범위가 닫혔는지 감사한다.
|
||
|
||
전역 데모 띠 하나만으로는 부족하다. 사용자는 스크롤 중 그 띠를 보지 못한다. **라벨은 오해가 발생하는 지점에 붙인다.**
|
||
|
||
- 후보 전체가 같은 상태인 카드 집합: 부모 설명 `아래 세 후보는 예시 · 거래 불가`; 실제·예시가 섞이면 각 카드에 예외 라벨
|
||
- 생성 사진: 각 이미지 캡션 `연출 이미지 · 실제 증빙 아님`
|
||
- 가격 집합이 모두 같은 상태면 표 `caption`이나 열 제목 `예시 가격`; 상태가 다른 값만 개별 표시
|
||
- 매장 상태: `화면 동작 확인용 예시`
|
||
- 폼: `실제 접수되지 않음 · 개인정보 입력 금지`
|
||
|
||
라벨은 작은 회색 각주로 숨기지 않는다. 본문 대비를 지키고 해당 주장과 같은 시각 그룹에 둔다.
|
||
|
||
---
|
||
|
||
## 5. 성공 행동이 다르면 경로를 나눈다
|
||
|
||
한 페이지에서 소비자와 운영자, 구매자와 중개 관리자를 동시에 설득하지 않는다.
|
||
|
||
- 소비자 성공: 메뉴·가격·가까운 매장·조합 확인
|
||
- 가맹 성공: 운영 조건·상권·점포·문의 검토
|
||
- 고객 성공: 조건 입력·근거 확인·사람 상담
|
||
- 관리자 성공: 검수·보류 사유·게시 채널 판정
|
||
|
||
성공 행동이 다르면 URL과 IA를 나눈다. 공통 헤더에서 경로는 연결하되, 각 페이지의 첫 화면 메시지와 CTA는 하나의 성공 행동만 말한다. 별도 경로는 중복이 아니라 **우선순위 충돌을 제거하는 구조**다.
|
||
|
||
### 5-a. 공개 해석과 내부 검수의 소유권을 나눈다
|
||
|
||
URL을 나눠도 관리자 언어를 공개 페이지에 복제하면 경로 분리가 끝난 것이 아니다.
|
||
|
||
| 공개 화면이 소유 | 관리자 화면이 소유 |
|
||
|---|---|
|
||
| 사용자가 결정을 해석하는 데 필요한 근거·한계·다음 행동 | 내부 ID·원문 출처 원장·검증 이벤트·모델/규칙 버전 |
|
||
| 사용자 행동을 막거나 바꾸는 제한과 그 이유 | 규제 채널 판정 상세·역할 권한·감사 로그 |
|
||
| 정정·사람 확인 경로 | 승인·보류·변경 이력과 운영 실패 로그 |
|
||
|
||
내부 상수와 감사 원장은 관리자에 두되, 제한이 사용자의 행동을 막는다는 사실과 사용자가 이해해야 할 이유까지 숨기지 않는다. 공개는 **해석 가능한 요약**, 관리자는 **재현 가능한 증거**를 소유한다. 구현 전에 각 콘텐츠 블록에 `public / admin / both-summary` 소유자를 표시한다.
|
||
|
||
### 5-b. 고위험 데모의 데이터 경계
|
||
|
||
의료·금융·법률·주거 상담처럼 입력 자체가 민감할 수 있는 쇼케이스는 폼이 예뻐 보이는 것보다 **수집하지 않는 증거**가 먼저다.
|
||
|
||
- 과업 시연에 필요한 최소 필드만 둔다. 이름·연락처·정확한 주소·증상 원문처럼 없어도 되는 자유 입력은 빼거나 로컬 예시 선택지로 바꾼다.
|
||
- 합성 픽스처가 아닌 **민감 입력과 그 파생값**은 기본적으로 새로고침 후 남기지 않는다. 해당 값의 영속 저장·쿠키 기록·분석 이벤트 포함·네트워크 전송이 0회인지 E2E로 단언한다. 정적 이미지·폰트 요청과 일반 페이지 조회 자체는 이 0회 계약의 대상이 아니다.
|
||
- `실제 접수되지 않음` 문구만으로는 부족하다. 제출 성공 UI가 있어도 실제 요청·저장 부작용이 없어야 GREEN이다.
|
||
- 실제 운영 연결이 생기면 동의·보관 기간·삭제·전송 대상을 별도 제품 계약으로 설계한다. 쇼케이스 계약을 조용히 확장하지 않는다.
|
||
|
||
---
|
||
|
||
## 6. 이미지 바이블은 슬롯 단위로 만든다
|
||
|
||
이미지 한 장을 만든 뒤 여기저기 크롭하지 않는다. 생성 전에 슬롯 표를 만든다.
|
||
|
||
| 슬롯 | 역할 | 피사체 | 비율 | 구도 안전영역 | 진실 라벨 | 폴백 |
|
||
|---|---|---|---|---|---|---|
|
||
| 데스크톱 히어로 | 첫 인상 | 손+제품 | 16:9 | 우측 55% | 연출 이미지 | 단색+제품명 |
|
||
| 모바일 히어로 | 첫 화면 행동 | 제품+손 | 4:5 | 하단 중심 | 연출 이미지 | 같은 톤 정지컷 |
|
||
| 증거 컷 | 재질·동선 | 공간 일부 | 3:2 | 중앙 | 합성 예시 | DOM 도식 |
|
||
|
||
**모바일 전용 생성은 데스크톱 크롭의 사치 버전이 아니다.** 첫 화면에서 보여야 할 주체가 달라지면 별도 원본이 필요하다. 얼굴이 먼저 나오고 제품이 폴드 아래로 밀리면 비율이 맞아도 실패다.
|
||
|
||
- 같은 톤 접두사를 공유해 색온도·광원·재질을 잠근다.
|
||
- 장면별로 피사체·행동·카메라 높이만 바꾼다.
|
||
- 음식은 손가락·포장 접힘·재료 층, 공간은 문·난간·가구 접합부를 확대해 본다.
|
||
- 이미지 안에 가격·주소·지도·점수·차트를 굽지 않는다. 그 정보는 DOM으로 만든다.
|
||
- 이미지 파일이 존재한다는 것과 채택 가능하다는 것은 다르다. 원본을 눈으로 보고 조건부 채택 사유를 기록한다.
|
||
|
||
고위험 업종은 공통 이미지 규칙 위에 **도메인 금지 오버레이**를 한 장 더 만든다.
|
||
|
||
| 도메인 | 생성 이미지로 만들지 않는 증거 |
|
||
|---|---|
|
||
| 의료·미용 | 전후 비교, 병변·치료 효과, 가짜 의료진·자격·기관 로고 |
|
||
| 금융·투자 | 수익 인증, 잔고·체결 내역, 보장 수익 그래프 |
|
||
| 부동산 | 실제 매물 인증, 권리 서류, 조망·주소·중개 자격 증명 |
|
||
| 음식·가맹 | 실제 매출표, 실재 점포 운영 인증, 검증하지 않은 원산지 표식 |
|
||
|
||
생성 이미지는 분위기·재질·사용 장면까지만 맡긴다. 자격·효과·소유·수익을 증명하는 장면은 DOM 라벨로도 합법화되지 않는다.
|
||
|
||
---
|
||
|
||
## 7. AI는 답이 아니라 검토 가능한 기록이다
|
||
|
||
AI 화면에는 최소 다섯 블록이 필요하다.
|
||
|
||
1. **입력 조건** — 사용자가 무엇을 말했는지
|
||
2. **출처가 붙은 입력·검증 사실** — 사용자가 무엇을 진술했는지와 외부·공식 자료로 무엇을 확인했는지 분리
|
||
3. **추론** — 사실에서 어떻게 결론으로 갔는지
|
||
4. **불확실·누락** — 모르는 것과 데이터 기준일
|
||
5. **사람 검토·수정** — 틀린 조건을 고치고 담당자에게 넘기는 경로
|
||
|
||
단일 점수와 반짝이는 링만 보여 주지 않는다. 점수는 정밀해 보이지만 근거가 없으면 장식이다. 추천 카드마다 `왜`, `무엇이 부족`, `다음 확인`을 붙인다.
|
||
|
||
모델 출력은 제품 내부에서 생성됐다는 이유만으로 `SYSTEM_STATE`의 관측 사실이 되지 않는다. 출력 내용은 `추론`, 실행·모델 버전·생성 시각만 `SYSTEM_STATE`다.
|
||
|
||
AI 결과를 바꿀 수 있는 입력을 하나 이상 제공하고, E2E에서 입력을 바꿨을 때 근거·결과·불확실성도 함께 바뀌는지 단언한다.
|
||
|
||
### 7-a. 보이는 입력과 판정 의존성은 하나의 계약이다
|
||
|
||
맞춤 분석이 참조하는 조건을 UI와 코드가 따로 관리하지 않는다. 구현 전에 `입력 필드 / 출처 / 판정 사용처 / 출력 주장` 표를 만들고 하나의 스키마·데이터 객체에서 폼과 판정을 함께 만든다.
|
||
|
||
- 사용자가 입력하지 않은 숨은 기본값을 `희망 조건`처럼 결과에 쓰지 않는다.
|
||
- 화면에 받은 조건을 판정에서 무시한 채 맞춤 결과라고 부르지 않는다.
|
||
- 분석 실행 전에는 완료 수치·추천·충돌을 보여 주지 않는다. `아직 분석하지 않음` 상태가 정직한 초기값이다.
|
||
- 보증금+월 납부액처럼 단일 축으로 비교할 수 없는 복합 비용은 일부 값만으로 `예산 안쪽`이라 판정하지 않고 `별도 확인`으로 남긴다.
|
||
- E2E에서 보이는 입력 이름 집합과 판정 함수의 사용자 조건 의존성 집합이 일치하는지, 입력 변경 뒤 근거·결과·불확실성이 함께 변하는지 단언한다.
|
||
|
||
---
|
||
|
||
## 8. 규제된 행동은 실패 폐쇄형으로
|
||
|
||
게시만 규제되는 것이 아니다. 진단·개인화 추천·예약·상담 전송·거래·문서 내보내기처럼 실제 사람이나 시장에 영향을 주는 행동을 쇼케이스 성공 상태와 같은 버튼으로 다루지 않는다. 행동·채널별 판정 함수를 둔다.
|
||
|
||
```js
|
||
// 예시 구조다. 실제 필수 요건은 목표 시장·업종의 공식 기준으로 다시 잠근다.
|
||
const requiredByAction = {
|
||
DIAGNOSE: ["requiredConsent", "verifiedClinicalData", "licensedReviewer", "humanReview"],
|
||
BOOK_APPOINTMENT: ["requiredConsent", "verifiedProvider", "availableSlot"],
|
||
EXPORT_RECORD: ["requiredConsent", "verifiedRecord", "accessControl", "auditLog"],
|
||
PUBLISH_LISTING: ["verifiedBroker", "verifiedAddress", "sourceFiles", "humanReview"],
|
||
};
|
||
|
||
function regulatedActionDecision(record, action) {
|
||
if (action === "SHOWCASE_PREVIEW") {
|
||
return record.syntheticLabelled
|
||
? { allowed: true, reason: "예시 범위가 명확한 미리보기" }
|
||
: { allowed: false, reason: "예시 범위 표지 누락" };
|
||
}
|
||
|
||
const required = requiredByAction[action];
|
||
if (!required) return { allowed: false, reason: "등록되지 않은 행동" };
|
||
if (record.syntheticFixture) return { allowed: false, reason: "합성 자료로 실제 행동 불가" };
|
||
|
||
const missing = required.filter((field) => !record[field]);
|
||
if (missing.length) return { allowed: false, reason: `필수 검증 누락: ${missing.join(", ")}` };
|
||
return { allowed: true, reason: "필수 검증 완료" };
|
||
}
|
||
```
|
||
|
||
- 화면에서 비활성 버튼만 두지 말고 **왜 막혔는지**를 말한다.
|
||
- 알 수 없는 행동은 기본 거절한다. 행동마다 필수 검증 목록이 다르며, 한 묶음의 불리언으로 모든 규제 행동을 열지 않는다.
|
||
- 관리자 검수 큐에는 `사실 / 추론 / 미정 / 위험` 상태와 출처 계층을 분리한다.
|
||
- 보류·거절은 사유를 필수로 받고, 닫기·Esc·포커스 복귀를 검증한다.
|
||
- 가상 데이터만 있는 쇼케이스라면 실제 진단·추천·예약·전송·거래·게시·내보내기 경로가 끝까지 막힌 상태가 정상 GREEN이다.
|
||
|
||
---
|
||
|
||
## 9. 시각화에는 읽을 수 있는 쌍둥이를 둔다
|
||
|
||
지도·차트·도식은 시선을 모으지만 사실을 완전히 전달하지 못한다. 같은 정보를 DOM 목록·표·설명으로도 제공한다.
|
||
|
||
- 지도 핀 ↔ 매장 목록
|
||
- 적합도 그래프 ↔ 조건별 근거 목록
|
||
- 재료 도식 ↔ 알레르기·구성 텍스트
|
||
- 운영 흐름 그림 ↔ 단계별 제목·설명
|
||
|
||
이미지나 SVG가 실패해도 과업을 끝낼 수 있어야 한다. 두 표현의 값이 어긋나지 않도록 데이터 원천은 하나로 둔다.
|
||
|
||
---
|
||
|
||
## 10. 시각 E2E는 캡처가 아니라 계약이다
|
||
|
||
정적·기하 게이트와 눈 검사는 역할이 다르다.
|
||
|
||
1. HTML/CSS/JS 정적 검사
|
||
2. 320·390·768·1024·1440 기하·대비·터치·h1 계약
|
||
3. 사용자 여정 E2E와 기대값 단언
|
||
4. 기본 화면 + 중요한 상호작용 상태 캡처
|
||
5. 캡처를 실제로 열어 목표 시장 적합성·시선 위계·크롭·반복을 판정
|
||
|
||
최소 캡처 계약:
|
||
|
||
- 각 URL의 390px·1440px 기본 화면
|
||
- 결과가 바뀌는 입력 상태 1개
|
||
- 관리자 보류·게시 차단 상태 1개
|
||
- 폼 검토 또는 오류 상태 1개
|
||
|
||
폭을 숫자 목록으로만 쓰지 말고 각 폭이 잡아야 하는 실패를 적는다.
|
||
|
||
| 폭 | 검증 목적 |
|
||
|---|---|
|
||
| 320 | 긴 한국어 라벨·최소 터치 영역·긴급 수축 스트레스 |
|
||
| 375 + 글꼴 확대 | 페이지별 `h1MaxLines`·한국어 어절 줄바꿈·보조 행동 수축 |
|
||
| 390 | 실제 모바일 첫 화면의 주체·CTA·고정 요소 |
|
||
| 768 | 카드 재배치와 중간 폭 공백·절대 배치 기준 |
|
||
| 1024 | 태블릿·관리자 분할면의 트랙 회수와 표 오버플로 |
|
||
| 1440 | 데스크톱 시선 위계·콘텐츠 최대폭·과도한 빈 면 |
|
||
|
||
하니스는 캡처의 **개수·가로세로·0바이트 여부·해시 중복**을 단언한다. 모델은 그 뒤에 `국내 감각인가`, `제품이 첫 화면에 보이는가`, `운영 화면이 과장됐는가` 같은 지점을 평가한다.
|
||
|
||
실측 사고: 기하 게이트 8/8을 통과한 모바일 페이지에서 `position: static`으로 바뀐 지도 부모 때문에 절대 배치 자식의 기준이 `BODY`가 됐다. 격자와 핀이 히어로 전체를 덮고 실제 지도는 빈 판이 됐다. **시각 캡처를 열지 않았다면 GREEN으로 오판했다.**
|
||
|
||
---
|
||
|
||
## 11. 시나리오·단언 수를 잠근다
|
||
|
||
대규모 E2E가 중간 리팩터링에서 조용히 줄어드는 것을 막는다.
|
||
|
||
```js
|
||
const EXPECTED_SCENARIOS = 90;
|
||
const EXPECTED_ASSERTIONS = 350;
|
||
|
||
if (scenarios.length !== EXPECTED_SCENARIOS) throw new Error("scenario count drift");
|
||
if (assertionCount < EXPECTED_ASSERTIONS) throw new Error("assertion count drift");
|
||
```
|
||
|
||
숫자를 채우려고 같은 검사를 복제하지 않는다. 공통·고객·관리자·오류·접근성·시각 상태로 분류하고, 각 시나리오는 `행동 → 기대 DOM/상태 → 부작용 없음`을 단언한다.
|
||
|
||
정적 파일도 재귀 glob으로 잡는다. 새 서브페이지가 생겼는데 `public/work/*/index.html`만 검사하면 관리자·가맹 화면이 검증 밖으로 빠진다.
|
||
|
||
---
|
||
|
||
## 12. 구현과 사용자 게이트에서 검증된 교훈 21개
|
||
|
||
| # | 교훈 | 스킬에 반영하는 규칙 |
|
||
|---|---|---|
|
||
| 1 | 서구 레퍼런스는 국내 행동 관습을 자동으로 주지 않는다 | R1을 목표 시장에서 우선 탐색 |
|
||
| 2 | 국내 감각은 장식보다 단위·용어·정보 순서에서 생긴다 | 시장 계약을 R1/R2/R3보다 먼저 작성 |
|
||
| 3 | 다른 업종 R2는 유지해야 카테고리 평균을 피한다 | 같은 문화권의 다른 업종을 우선 |
|
||
| 4 | 랜딩과 관리자는 같은 표현 밀도를 쓰면 둘 다 약해진다 | 표면 다이얼 4종을 별도 선언 |
|
||
| 5 | 강조색은 비율만으로 통제되지 않는다 | 허용 역할과 최대 면적을 함께 적음 |
|
||
| 6 | 생성 이미지는 데이터 증거가 아니다 | 이미지=재질, DOM=가격·상태·근거 |
|
||
| 7 | 데스크톱 크롭은 모바일 핵심 피사체를 보장하지 않는다 | 의미가 바뀌면 모바일 원본 별도 생성 |
|
||
| 8 | 성공 행동이 다른 두 청중은 한 히어로에서 경쟁한다 | URL·IA를 분리하고 공통 브랜드만 공유 |
|
||
| 9 | AI 점수만 있으면 신뢰가 아니라 정밀함의 연출이다 | 사실·추론·불확실·수정·사람 검토를 병기 |
|
||
| 10 | 가상 데이터로 실제 규제 행동이 성공하면 버그다 | 행동별 요구 조건·미등록 기본 거절·합성 자료 차단 |
|
||
| 11 | 지도·도식만으로는 접근성과 사실 확인이 닫히지 않는다 | DOM 목록·표 쌍둥이를 의무화 |
|
||
| 12 | 전역 데모 띠는 스크롤 후 오해를 막지 못한다 | 주장·가격·행동 가까이에 진실 라벨 |
|
||
| 13 | 자동 승인은 검증 면제가 아니다 | 사용자 게이트 상태와 기계/시각 게이트를 분리 |
|
||
| 14 | 구조 PASS는 시각 PASS가 아니다 | 상태 캡처를 열어 직접 판정하고 재촬영 |
|
||
| 15 | 테스트 수는 리팩터링 중 조용히 줄어든다 | 시나리오·단언·캡처 수를 hard-lock |
|
||
| 16 | 채운 버튼과 텍스트 링크는 `align-items:center`여도 시각 중심이 어긋난다 | 실제 hitbox 44px·중심 y 차이 ≤2px를 단언 |
|
||
| 17 | 역할이 다른 섹션도 같은 5:7 제목+목록을 반복하면 구조가 복제돼 보인다 | 장소=도식, 비용=원장, 판정=흐름처럼 의미에 맞는 토폴로지를 배정 |
|
||
| 18 | 인스펙터만 숨기고 그리드 트랙을 남기면 빈 면이 고장처럼 보인다 | 닫힘 상태에서 주 표면이 전체 폭을 회수하고 재선택 때 분할을 복원 |
|
||
| 19 | 같은 `예시` 경고를 모든 자식에 반복하면 가치와 경고가 함께 묻힌다 | 같은 진실 범위는 가장 가까운 명확한 공통 부모가 한 번 소유 |
|
||
| 20 | 공개 페이지에 내부 ID·게시 채널·감사 원장을 복제하면 제품 설명서가 된다 | 공개는 해석·제한·다음 행동, 관리자는 재현 가능한 내부 증거를 소유 |
|
||
| 21 | 보이는 입력과 계산 조건이 다르면 맞춤 분석은 임의 결과가 된다 | 입력 필드·판정 의존성·출력 주장을 한 SSOT 표로 잠그고 초기 미실행 상태를 검증 |
|
||
|
||
---
|
||
|
||
## 13. 통과 조건
|
||
|
||
- [ ] 시장 계약과 금지 문법이 적혀 있다
|
||
- [ ] R1은 목표 시장의 정보 관습을 설명하고, R2는 다른 업종이다
|
||
- [ ] 각 표면의 표현·밀도·모션·증거 다이얼이 적혀 있다
|
||
- [ ] 모든 숫자·주소·상태·AI 결과가 사실/예시/추론/미정 중 하나이고 출처 계층이 추적된다
|
||
- [ ] 진실 라벨이 전역 공지뿐 아니라 오해 지점 가까이에 있고, 같은 범위는 명확한 공통 부모가 한 번 소유하며 다른 자식만 예외 표시된다
|
||
- [ ] 데스크톱·모바일 이미지 슬롯과 폴백이 따로 정의됐다
|
||
- [ ] 고위험 업종의 생성 이미지 금지 증거와 민감 입력·저장·전송 경계가 검증됐다
|
||
- [ ] 보이는 입력과 판정 의존성이 한 SSOT이고, 분석 전 완료 결과가 없으며 복합 비용 일부로 적합을 확정하지 않는다
|
||
- [ ] AI 결과에 출처가 붙은 입력/검증 사실·추론·불확실성과 수정·사람 검토 경로가 있다
|
||
- [ ] 규제 행동은 필수 검증이 없을 때 실패 폐쇄형이다
|
||
- [ ] 공개는 사용자 해석·제한·다음 행동을, 관리자는 재현 가능한 내부 증거를 소유한다
|
||
- [ ] 지도·차트·도식의 DOM 쌍둥이가 있다
|
||
- [ ] URL별 390·1440 기본 캡처와 핵심 상태 캡처를 실제로 열어 봤다
|
||
- [ ] E2E 시나리오·단언·캡처 수가 잠겨 있고 재귀 정적 검사가 새 서브페이지를 포함한다
|
||
|
||
하나라도 빠지면 4단계로 돌아간다. 정직함을 각주로 미루지 말고 구조로 해결한다.
|