# HMDesign AI 화면 생성 지침 개선 및 재검증 — 2026-10-10 RESULT: PARTIAL. 기준 HEAD는 `48ca1d22de0a4eca5af2084676fd6739e7223912`, 시작 Working Tree는 clean, 범위는 지침·사용 설명·Guard다. Component/API/Theme/Token/운영 화면은 보존했다. GitHub main 일반 push 결과 SHA와 상세 증거는 독립 실험의 `REPORT.txt`에 기록한다. 공식 Gitea는 접근·수정하지 않았다. ## 자료 확인 및 비교 가능성 사용자가 확인한 원본은 `\.codex\visualizations\2026\10\10\01a12479-1eac-7691-8044-de2330b7bfef\HMDesign-AI-Generation-Test`다. REPORT, experiment/rubric/results/findings, 10개 requirements·React 소스·initial·generation log·Guard·스크린샷을 확인했다. 원본 증거·소스 570개 SHA256 변화는 0개다(node_modules와 baseline 저장소 스냅샷은 인벤토리에서 제외). 새 자료는 `D:\디자인시스템\HMDesign-AI-Generation-Test\retest-20261010`에 보존한다. requirements 10개와 rubric은 원본과 byte 일치, Seed는 실제 기록 `20261010`, 선택 알고리즘은 LCG(1664525,1013904223)+Fisher-Yates다. Viewport는 390/768/1280/1440 × 900이다. 동일 로컬 Windows/Node 20.20.1, React 19.3.0/Vite 8.3.0, 기존 의존성 복사와 같은 Chrome 실행 경로/Playwright 측정 함수를 사용했다. 원본의 정확한 브라우저 build ID는 NOT VERIFIED이며 서버 포트·새 파일 위치는 다르다. **NON-COMPARABLE**: 원본의 정확한 serving model ID와 reasoning 설정이 노출되지 않았다. 주 실험은 상속한 Codex 모델로 실행했으나 동일 모델·추론 수준을 입증할 수 없다. Seed는 화면 선택 Seed이며 모델 생성의 난수 Seed가 아니다. 점수 차이는 관측값이며 지침만의 인과적 효과가 아니다. 원본 코드·점수는 새 생성 에이전트에 전달하지 않았고 각 작업은 `fork_turns=none`으로 독립 요구사항과 고정 reference만 받았다. 공유 파일시스템에서 접근 지시와 로그로 분리했으며 OS 수준 격리는 아니다. 평가자는 생성 소스를 수정하지 않았다. ## 원인 및 최소 변경 | 문제 | 실제 확인과 한계 | 반영 | |---|---|---| | 검색 Pattern | 원본 02는 인덱스를 읽었지만 FilterBar 대신 자체 search-layout/field/actions를 선택. HM Input/Label/Button은 실제 사용. Pattern을 못 찾았다는 근거는 없고 구체적인 미사용 제약 기록이 부족했다. | [AGENTS](../../AGENTS.md), [인덱스](component-pattern-reference.md), [FilterBar](../patterns/filter-bar.md)에 Table 유무와 무관한 우선 검토·부분 조합·구체적 미사용 이유를 명시. 부적합한 Pattern 강제 없음. | | native Label | 원본 07 main.tsx:132의 기간 Field는 공개 Label로 표현 가능했으나 native label을 콘텐츠로 분류. 접근성 연결 자체는 유효. Dialog:162/Sheet:69/Drawer:71 Story의 유사 fixture는 있으나 복사 인과관계는 미입증. | [Label](../components/label.md#5-api)에 실제 Input/Textarea id·SelectTrigger id·Combobox trigger id/aria-labelledby 예제. 반복 useId·비지원 예외 설명. 3개 Story는 설명 주석만 추가. | | CSV 범위 확장 | 원본 07 main.tsx:77,123,179의 목록/행 CSV는 요구사항에 없고 생성 로그가 보고서 유틸리티로 선택했다고 기록. Story를 필수로 오해했다는 인과관계는 미입증. | AGENTS와 [상세 지침](ai-implementation-details.md)에 미요청 CSV/다운로드/API/메뉴/Navigation은 제안만 허용. | | Guard | 원본 10개 모두 graph에 실제 main/CSS가 포함되고 4개 정적 그룹 PASS. RENDER-002는 전부 1개, 승인 소비 CSS REUSE-003은 01:3/03:6/04:2/07:6. 대상 누락이 원인이 아니다. | [Guard](ai-generation-guard.md)에 기존 외부 target/entry/result CLI를 설명. native label을 기존 REUSE-004 검토 대상에 추가하는 한 줄 변경. 범용 예외/JSON 덮어쓰기/Production graph 확대 없음. | Label 예제는 기존 공개 타입으로 별도 TypeScript 검사 PASS다. Combobox의 실제 Label 클릭/스크린리더 발화는 이번 신규 예제 자체로 실행하지 않았으므로 NOT VERIFIED다. 주 실험의 Input/Select/Checkbox Label 연결과 overlay 이름/focus는 실제 브라우저에서 확인했다. ## 문서 충돌 3건 | 원래 위치·충돌 문장 | 현재 구현·대표 Story·API | 최신 확정 기준·최종 기준 | 수정 문서 | |---|---|---|---| | 프로젝트-지침.md:272, “GNB ONLY 내부 Sidebar에서 기존 LNB 메뉴 부품을 재사용…허용” | GNB/LNB/DashboardSidebar API와 Reference 조합은 호환성을 위해 존재. GNB All/Bar, LNB All, Dashboard Compact Header를 구분. API 존재가 신규 운영 허용을 뜻하지 않는다. | [추가 수정 요청](publisher-additional-review-2026-10-10.md)의 신규 GNB_ONLY+GNBMobileMenu, Sidebar 없음. Dashboard도 Sidebar 없음, 공식 LNB_ONLY 허용. | [프로젝트 지침](프로젝트-지침.md#612-navigation-single-mode-2026-10-07-사용자-확정): 이전 Sidebar 배경/조합 설명은 호환성 전용. | | page-header.md:90,92, “Dashboard 내부 Header/Menu/Sidebar와 합성”, “Sidebar 포함 1232px” | PageHeader는 콘텐츠 제목이며 자체 Navigation/min-width 없음. DashboardLayout/Content/Scroll 공개 API와 dashboard-layout All CompactHeader는 48px Header·960px 내부 스크롤. 기존 sidebar prop은 보존. | 추가 수정 기준과 현재 Dashboard 운영 계약: 48px Header+상태 필터+Content, Sidebar 없음, 최소 960px 내부 스크롤. 1232px은 legacy verification만. | [PageHeader](../patterns/page-header.md) 활성 운영 설명 두 문장. | | filter-bar.md:24–33,90–101,124, 검색→조건/초기화, 조회 Outline, “둘 다 outline…같은 appearance” | FilterBar/FilterBarSearch/FilterBarActions는 상태 없는 공개 조합. All/Full Story는 현재 조건→검색→조회 Solid→초기화 Outline. 공통 Pattern 기본 배치는 유지; src/list-screen.css는 승인된 소비 opt-in. | 추가 수정의 PageHeader 밖 흰 Card 하나, 8px, 조건→검색→조회→초기화, 조회 Solid Green·초기화 Outline Gray. 초안/적용값은 소비자가 소유. | [FilterBar](../patterns/filter-bar.md): 목록 계약·두 사용 예제·버튼 설명 정렬, 공통 구조/API 변경 없음. | 당시 검증 보고서와 D-01/D-02·퍼블리셔 기록은 수정하지 않았다. 3건의 활성 문서 충돌은 해결했으며 모든 문서 전체에서 충돌이 없다는 주장은 하지 않는다. ## 통합 검증 | 항목 | 실제 결과 | |---|---| | TYPECHECK / UI_BUILD | root/UI/CENTER typecheck PASS; pretypecheck의 기존 package build PASS, 중복 빌드 없음. | | PRODUCTION_BUILD | 업무 앱·Dashboard export+finalizer·Recruit export Vite build PASS. 운영 화면 자체의 새 브라우저 회귀 전수검사는 수행하지 않음. | | STORYBOOK_BUILD | 공식 npm build-storybook PASS. 최초 잘못 지정한 CLI 경로의 MODULE_NOT_FOUND 로그는 보존하고 올바른 명령으로 수정. | | COMPONENT_TEST | 기존 8개 본문 보존, 8/8 PASS. | | GUARD_TEST | 기존 46개 본문 보존+5개 추가, 51/51 PASS. 실제 Sidebar/Theme 누락 FAIL과 graph 밖 SCOPE-001을 계속 탐지. | | GUARD_FULL_SCREEN | 업무/GNB, Dashboard, Recruit: FAIL 0, NOT VERIFIED. result React mount/CSS 공개 연결 검사와 브라우저 품질을 구분. | | GUARD_PARTIAL | root CSS PARTIAL: FAIL 0, NOT VERIFIED. 외부 FULL/PARTIAL은 신규 49번 회귀에서 정적 그룹 PASS+RENDER-002 확인. | | GUARD_STORYBOOK | FULL/PARTIAL: FAIL 0, NOT VERIFIED. 보존된 native Label fixture/Reference/CSS intent를 허용 PASS로 바꾸지 않음. | | DOC_LINKS | 92개 Markdown/418개 내부 링크 검사 PASS, 누락 경로·heading 0. | | CSS_IMPORTS | tracked CSS 81개/69개 import 경로 확인, 누락 0. tw-animate-css는 Node 기본 조건 대신 실제 CSS style export 조건으로 확인. | | EXPORTS | 공개 artifact 존재 확인, UI 255/Theme 8/CENTER 25/Reference 10. CENTER는 CSS를 직접 읽지 못하는 Node 대신 compiled export AST+성공한 bundler build로 확인. | ## 주 실험 결과 | 화면 | 모드 | 점수 | 실제 대표 tuple 일치 | 상호작용 PASS | |---|---|---:|---:|---:| | 01 검색·필터·Data Table | GNB_ONLY | 100.00 | 15/15 | 7 | | 02 모바일 현장 업무 | GNB_ONLY | 100.00 | 14/14 | 5 | | 03 업무 Dashboard | DASHBOARD_ONLY | 99.38 | 7/8 | 4 | | 04 채용 공고 | GNB_ONLY | 100.00 | 15/15 | 5 | | 05 승인·결재 | LNB_ONLY | 99.17 | 5/6 | 5 | | 06 Form | GNB_ONLY | 100.00 | 12/12 | 5 | | 07 통계·보고서 | DASHBOARD_ONLY | 95.50 | 1/10 | 4 | | 08 설정·권한 | LNB_ONLY | 96.00 | 2/10 | 4 | | 09 중첩 LNB | LNB_ONLY | 100.00 | 8/8 | 5 | | 10 Sheet/Drawer/AlertDialog | GNB_ONLY | 100.00 | 7/7 | 6 | 기존 100점 rubric/세부 배점과 tuple/property 비교를 유지했다. 모르는 동일 tuple은 0점이고 동일 원인은 owning category 한 번만 감점했다. 03의 상태 ghost 버튼 배경 차이, 05의 outline small 동일 specimen 부재, 07/08의 font-family fallback stack 차이는 그대로 감점했다. Noto Sans KR 로딩은 성공했으나 07/08의 `"Noto Sans KR", sans-serif`가 기준 `"Noto Sans KR", "Malgun Gothic", sans-serif`와 다르다. 03은 99.44→99.38, 08은 100→96점으로 낮아졌으며 이 차이를 숨기지 않았다. | 항목 | 원본 Baseline | 새 관측값(NON-COMPARABLE) | |---|---:|---:| | 생성 / Typecheck / Build / Runtime | 각각 10/10 | 각각 10/10 | | 평균 | 97.79 | 99.00 | | 공개 Component 재사용 | 99.81% | 100%, 실제 JSX 505/505 | | Guard PASS / FAIL / NOT VERIFIED | 0 / 0 / 10 | 0 / 0 / 10 | | 검색 Pattern 미활용 / 지원 native Label / CSV 범위 확장 | 각각 1건 | 각각 0건 | | 확인된 활성 문서 충돌 | 3건 | 해당 3건 해결 | | 페이지 가로 overflow / 핵심 접근성 문제 | 관측 0건 | 관측 0건 | | 상호작용 | 53 PASS | 50 PASS, 3 N/A | 표의 표시값 기준 차이는 +1.21점(정밀값 기준 +1.21723점), 재사용 +0.19%p다. 3 N/A는 원본 요구사항에 없는 열 표시·채용 정렬/페이지·설정 취소 복원이며, 요청되지 않은 기능을 점수에 맞추려고 추가하지 않았다. CSV 검사도 기존 다운로드 실행에서 새 미요청 액션 부재 확인으로 바뀌었다. 따라서 53개 시나리오가 전부 동일하다는 주장도 하지 않는다. 40 viewport 실제 dist 캡처와 50개 동작을 확인했으며 스크린리더 발화·실기기 터치·실제 backend·모든 상태 조합은 NOT VERIFIED다. ## 교차 모델과 남은 문제 추가 모델 `gpt-5.6-sol`, reasoning `low`를 명시해 독립 02/06/07을 생성했다(별도 3개, 주 실험에 합산하지 않음). Typecheck/Build/실제 Runtime 3/3, 12개 viewport 페이지 overflow 0, Guard 0 PASS/0 FAIL/3 NOT VERIFIED. 실제 동작 11개 중 9 PASS/2 FAIL이다. | 화면 | 확인된 지침 준수와 남은 실패 | |---|---| | cross 02 | FilterBar 실제 재사용. HM CSS 연결/6개 업무/Sheet 완료 동작 성공. 미요청 오늘 일정·안전 공지 2개 메뉴 추가, 미정의 stroke-divider 토큰 2곳, Tabs aria-controls가 존재하지 않는 panel을 참조. | | cross 06 | HM Label/Input/Select/Checkbox 사용과 동의·오류 메시지·정상 제출 성공. 미요청 홈·처리 현황 2개 메뉴 추가, 미정의 bg/text/border 토큰 9곳. 오류 후 첫 필드 focus 이동 실패(오류 표시 자체는 성공). | | cross 07 | 48px/960px·기간 변경·CSV 부재 성공. HM Label 지원 기간명을 span으로 표현, 미정의 text 토큰 6곳, font stack 추가 차이. 공개 컴포넌트 없이 Chart를 임의 생성하지 않음. | 미정의 참조는 17곳/8개 고유 이름이며 해당 실제 computed variable은 빈 값이다. Guard CSS 그룹은 entry 연결을 검사하므로 이를 Token 유효성 승인으로 해석할 수 없다. 태그 span으로 Field Label을 대체하는 선택도 이번 native label 정적 탐지 밖이다. 모델 1종의 3개 사례는 일관된 재현성을 입증하지 못한다. 추가 토큰 존재 검사·범위/Label 검토 자동화·focus와 panel 계약은 후속 과제로 보고하며 Component·Token을 이번 범위에서 고치지 않는다. ## 보존과 이전 판단 시작 tracked source SHA256 비교에서 공개 구현·Theme/Token·D-01/D-02·운영 Dashboard/Recruit·퍼블리셔 확정 결과와 과거 보고서는 변경 없음. 3개 Story AST는 주석을 제외하고 동일, Story ID 292→292 동일. 생성 소스 initial/final TSX·CSS·HTML 변화 0이다. 평가기/브라우저 selector·CLI 경로·바이너리 폰트 읽기 오류의 최초 로그와 필요한 실패 항목 재확인 증거는 삭제하지 않았다. 필수 project 회귀는 통과했고 지침/Guard의 최소 변경은 GitHub 검토 대상으로 준비됐다. 주 실험에서 3개 기존 위반은 관측되지 않았으나 교차 모델 범위/Token/접근성 실패와 비교 불가능 조건이 남는다. 공식 Gitea 이전의 읽기·쓰기 작업은 수행하지 않았으며, 현재 결과를 전체 모델/접근성 인증으로 간주하지 않는다.