사용자 결정 2026-10-14 — 데모 크롬은 로그인 화면으로(starter#1259)
커널 PR #48의 기존 「한 줄 안내 띠 + 데모 도구 시트」 설계를 대체한다. 모든 소비 앱의 PRD에서 상단 띠·초기화·역할 전환·언어/테마·시계를 상단 바 요소로 요구하던 AC는 아래 위치로 정정할 후보이며, 원본 PRD를 임의로 수정하지 않는다.
| 설계 | 제거/이동 | 이번 커널 적용 |
|---|---|---|
| 1 앱 크롬 | 데모 띠·도구 버튼/시트·초기화·미리보기·역할/계정 칩·계정 바꾸기·언어/테마·시각 → 앱 화면에서 제거 | DemoToolsStrip/DemoPanelNavigator 삭제, 상태 화면 안내 문단 제거. 브랜드·본래 내비·일반 계정 메뉴만 남는다 |
| 2 로그인 | S-13 안내 1회 + PRD 계정 선택 + 초기화 확인 + 언어/테마 | DemoLoginPanel 인라인. 템플릿은 인증/PRD가 없는 참조 셸이므로 co_faker로 만든 표본 계정 하나를 보여 주는 DemoEntryExample 사용 |
| 3 계정 전환 | 계정 메뉴 로그아웃 → 로그인 | 방문 중 표본 선택만 해제. 세계 데이터와 AppPresentation은 보존 |
| 4 언어·테마 | 로그인 + 계정 메뉴 설정 본문 | DemoPresentationControls가 기존 AppPresentation을 사용. URL/포털 상태와 단일 출처. 설정을 닫아도 라우트 위젯 보존 |
| 5 제외 capability | 상시 띠 → 해당 동작 화면의 PRD 안내 | 커널에는 송금·출금·결제·발송 화면이 없다. covered라고 표시하지 않는다. 소비 기능은 실제 실행 직전 문맥 안내를 소유 |
| 6 미리보기 | 앱 UI → Widgetbook use-case/골든 | 기존 콘솔 Widgetbook·상태 골든 유지. 로그인 패널/진입 회귀 추가. 공개 스모크는 실제 로그인 선택 후 기존 상태 화면 확인 |
| 7 기준시각 | 상시 표시 → 내부 결정성 | DemoWorld.projectConfig/AppClock 유지. 패널·앱에 시각 컨트롤 없음 |
| 8 딥링크 | 세션 없으면 로그인 | 원래 경로를 ShellRoute 아래에서 보존하며 로그인으로 가린다. ?role=로 로그인 없이 UI에 들어가지 않는다 |
공용 계약
DemoLoginPanel(
notice: prdNotice, // 필수. S-13 문구를 생략/말줄임하지 않는다.
sections: [
DemoPanelSection(title: accountLabel, controls: [
DemoChoiceControl<String>(
selected: null,
onSelected: loginWithExistingSession,
choices: prdAccounts,
),
]),
DemoPanelSection(controls: [DemoCustomControl(builder: buildPresentationSettings)]),
DemoPanelSection(controls: [
DemoActionControl(label: resetLabel, destructive: true,
confirm: DemoConfirm(message: resetMessage), onPressed: resetExistingWorld),
]),
],
)
루트 Key는 DemoPanelKeys.panel, 안내는 notice. 컨트롤 Key는 호스트가 지정한다. closesPanel은 없다. DemoChoice·DemoPanelSection·sealed Choice/Action/Value/Custom은 값으로 전달하며 같은 트리에서 갱신된다. 선택지의 String ValueKey는 공개 접근성 식별자로도 노출된다. 패널 자체는 스크롤하지 않으며 호스트 로그인 화면이 스크롤을 소유한다. 터치 영역은 최소 48dp × theme.scaling, 안내는 줄바꿈한다. 시트/오버레이 호스트 래퍼는 없다. 초기화 확인 대화상자만 기존 Navigator를 사용하므로 로그인 라우트 안에 둔다. 기본 확인/취소 Key 또는 DemoConfirm.confirmKey/cancelKey를 쓸 수 있다.
tapDemoControl은 로그인 본문의 컨트롤을 스크롤해 누른다. confirmDemoReset은 확인과 취소를 검증한다. 이전의 openDemoPanel/closeDemoPanel은 삭제한다. 상태 미리보기를 통해 오류/로딩을 만드는 BDD는 실제 원인 입력을 주거나 해당 Widgetbook/골든 상태로 옮긴다.
템플릿 진입 예시는 업무 인증 모듈이 아니다. 제품 조립 시 기존 PRD 계정·세션·세계의 초기화 콜백으로 배선한다. 커널 앱 초기화는 상태 표본 컬렉션을 비우고 기존 시드를 실행한다. 빈 커널 콘솔은 초기화할 업무 데이터가 없다. 원격/production 부트스트랩의 라우트·서버 동작은 그대로다.
검증 범위
패널 37개(폭 360/719/720/1024 × RTL/LTR × scaling 1.25 × textScaler 1/1.15/1.3/2, 48dp, 모서리 탭, 선택/갱신/확인/취소/스크림), 진입 3개(로그인·크롬 부재, 로그아웃 데이터 유지, 설정 상태 유지) + 중첩 라우터의 계정 메뉴 접근성 회귀 1개. 기존 셸/언어 시험의 상시 안내 단언을 제거로 변경하고 app/console Patrol에 로그인·로그아웃·크롬 부재 여정을 추가한다. 커널에는 tool/fr/coverage.json/PRD 스냅샷이 없으므로 FR 대조는 적용할 수 없고 가짜 매핑을 만들지 않는다.
11개 언어의 kernel.demo_panel은 공용 확인/취소, kernel.demo_login은 진입·설정 문구다. 공식 slang으로 재생성했다. 폴백은 fonttools 4.66.1 공식 생성기로 갱신하고 2717개 필요 글자가 번들에 있음을 검사한다. 새 패널은 아이콘을 사용하지 않는다.
앱·콘솔 각각 Patrol 3회(매회 시나리오 3/3, 실패·스킵·재시도 0)의 요약은 patrol-three-rounds.json이다. release 공개 접근성·실제 포인터 검사 4건(390/1440 × app/console)이 계정 선택·설정·로그아웃·데모 상단 점유 0px를 확인했다. 중첩 Navigator가 앞서 그린 헤더 접근성을 가리는 문제를 헤더를 마지막에 그리는 배치로 해결했다(콘텐츠 높이로 위쪽 배치, 고정 높이 예산 없음).
골든 변경 분류는 golden-classification.csv, 전후 스크린샷은 screenshots/에 둔다. 이전 커널에는 로그인 화면이 없으므로 전 스크린샷은 기존 앱·콘솔 첫 화면이다. 앱 첫 화면의 데모 상단 점유는 변경 후 0px이며, 일반 브랜드/계정 메뉴 높이는 여기에 포함하지 않는다.