Files
HMDesign/docs/reports/brown-orange-background-gradients-2026-10-11.md
T

75 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Brown·Orange 공통 Background Gradient 및 Gitea 작성자 정합성 — 2026-10-11
RESULT: PARTIAL. 승인된 두 Gradient의 구현·빌드·브라우저 검증은 PASS다. Guard의 패키지 범위 및 동적 스타일 NOT VERIFIED는 보존한다. Git Commit/Push 결과와 최종 SHA는 작업 최종 응답에서 기록한다.
> 이 문서는 Gradient 추가 당시의 검증 기록이다. 이후 최종 표시 요청으로 Foundation Color의 Gradients 섹션 전체를 제거했다. 실제 공통 Background·Button·Dashboard Gradient와 당시 검증 결과는 보존한다. [현재 표시 계약](../guidelines/brand-color-steps.md#호환성과-storybook)과 [표시 정리 보고서](foundation-color-display-cleanup-2026-10-11.md)를 따른다. 현재 문서의 개인 식별 정보 정리는 과거 Git 객체나 Commit Author/Committer를 삭제하지 않는다.
## 기준과 범위
- 공식 경로 `D:\디자인시스템\HMDesign-Gitea-Transfer`, `main`, origin `https://gitea.hmac.kr/b25027/HMDesign.git`.
- 시작 Local/Remote HEAD `220973cf89d3f9ae66cb96dab6a66b7859026849`, Working Tree 깨끗함. 시작 시각 2026-10-11 13:19:32 KST, 최초 예상 30~45분.
- 범위: Theme 공개 Stop 입력 + 기존 Foundation Color Story. Runtime: React / Public Runtime Theme v1. 새 업무 화면·Navigation·Control은 없다. Pattern 선택과 키보드/focus/Label 동작 검증은 해당 없음.
- 이전 [Foundation Color 기록](foundation-color-storybook-2026-10-11.md)과 [Generic Status Error 기록](generic-status-error-token-2026-10-11.md)은 당시 상태를 기록한 이력으로 보존한다.
## Gradient와 공개 계약
| Stop | Palette 단계 | Brown | Orange |
|---|---|---|---|
| 0% | Dark 1 | #352D1D | #BC4C00 |
| 12% | Dark 2 | #2F281C | #883700 |
| 42% | Default | #3E3523 | #CC5200 |
| 78% | Light 2 | #897445 | #F87725 |
| 100% | Light 1 | #604F32 | #EB5F00 |
- 방향: 두 Background 모두 `to bottom`, Green과 동일한 5-stop 위치.
- Brown 입력 `color.bg.brown.stop.{0|12|42|78|100}` → `--hm-sem-brown-bg-stop-*` → Derived `--hm-sem-bg-brown`.
- Orange 입력 `color.bg.orange.stop.{0|12|42|78|100}` → `--hm-sem-orange-bg-stop-*` → Derived `--hm-sem-bg-orange`.
- [확정 Palette](../guidelines/brand-color-steps.md)와 모든 HEX가 일치한다. CSS-only 기본값은 대응 Semantic Palette를 참조하며 명시적 Runtime Stop 값이 우선한다. 새 HEX나 전체 Gradient 문자열 입력은 추가하지 않았다.
- 각 브랜드의 5개 Stop은 그룹 전체 또는 미지정만 허용한다. 특정 Stop만 바꾸려면 나머지 네 값도 함께 전달한다. 기존 Green·Primary 면·Primary border의 그룹과 순서를 보존하고 독립 그룹 두 개를 추가했다.
- [공개 계약](../../packages/ui/src/theme/contract.ts), [Default JSON](../../themes/default.json), [CSS Template](../../scripts/theme-templates/default.css)에서 기존 스크립트로 CSS와 TypeScript 기본값을 생성했다. 94개 Runtime 입력 / 92개 Default 컬러 / 기존 radius 2개. [Runtime 계약 문서](../guidelines/runtime-theme-contract.md).
- [Foundation Color](../../src/foundation/color.stories.tsx)의 `foundation-color--all` ID를 유지한다. 실제 공통 Background와 기존 Button 전용 미리보기, Stop 위치·HEX·Token·CSS Variable 및 요소의 computed `background-image`를 표시한다. 새 Stop 카드에만 폭을 보강하여 네 검증 폭에서 Token/변수가 한 줄로 식별된다.
브라우저의 실제 `background-image`는 다음과 같다. 브라우저는 기본 방향 `to bottom`을 직렬화에서 생략하며 방향은 CSS Variable에서도 확인했다.
```css
/* Brown */
linear-gradient(rgb(53, 45, 29) 0%, rgb(47, 40, 28) 12%, rgb(62, 53, 35) 42%, rgb(137, 116, 69) 78%, rgb(96, 79, 50) 100%)
/* Orange */
linear-gradient(rgb(188, 76, 0) 0%, rgb(136, 55, 0) 12%, rgb(204, 82, 0) 42%, rgb(248, 119, 37) 78%, rgb(235, 95, 0) 100%)
```
## 보존과 검증
- 기존 JSON 컬러 82개, Default CSS 선언 141개, UI 소스 123개 보존. 기존 전체 JSON과 service partial JSON 유효성 PASS. 기존 Storybook ID 292개 보존. Foundation Color와 해당 신규 카드용 CSS 외 앱·Story·Storybook 설정 변경 없음.
- 이전 정적 Storybook 빌드와 비교해 기존 HM 계산 변수 1,153개의 값 변화 0. Green Background, Brown/Orange Button, Dashboard Header/Compact 배경·Component API·3종 Palette × 8단계·Generic Status Error `#B3261E`·Destructive `#D32F2F`·Disabled Input Label 60% 보존.
- `npm run generate:theme-defaults`, `npm run build:themes` PASS. 생성 stale 검사, root/UI/CENTER typecheck, UI/CENTER package build PASS. 마지막 Story/CSS 변경 후 root typecheck와 Storybook build만 다시 확인했다.
- 최종 Storybook static build PASS. 기존 큰 chunk 및 bundler callback 성능 경고는 코드 오류가 아니다. 기존 전체 Component 테스트는 반복하지 않았다.
- 브라우저 Foundation Color 실제 React 렌더 PASS. Brown/Orange Stop 순서·HEX·Palette·Canonical/CSS 변수·Swatch·표시 computed 값과 실제 요소 값 일치 PASS. 기존 Green 및 Button 전용 미리보기 유지.
- Runtime: 완전 그룹 적용, 단일 Stop/invalid 값 거부, Brown/Orange 독립성, Theme 전환, invalid fallback, Scoped 적용, Global 불변, 기존 host inline 값/priority 복원, Palette alias 변경, Reset PASS.
- 390 / 768 / 1280 / 1440px에서 문서 및 Gradient panel 가로 overflow 0, 새 Stop ID 줄바꿈 0. 각 문서/panel의 scrollWidth/clientWidth 및 scrollHeight/clientHeight 측정 보관. Foundation은 정상 문서 세로 스크롤이며 신규 숨김 알림·Navigation 없음. 브라우저 console/page error 0.
- Git diff whitespace 검사 PASS. MD 링크 검사 결과는 최종 응답에 기록한다. 실제 스크린리더·실기기 검증 NOT VERIFIED.
## Guard 원본과 실행 증거
변경 범위 STORYBOOK / PARTIAL Guard를 실행했다. 이후 브라우저에서 발견한 Stop ID 줄바꿈을 수정하면서 Story/CSS 소스 해시가 변경되어 최종 상태에 대해 다시 검사했다. 정상 Component 검사 반복이나 Guard 규칙 완화는 하지 않았다.
```sh
node scripts/ai-generation-guard.mjs --target . --profile STORYBOOK --scope PARTIAL --files src/foundation/color.stories.tsx,src/foundation/foundation.css,packages/ui/src/theme/contract.ts,packages/ui/src/theme/default.css,packages/ui/src/theme/default-values.generated.ts,scripts/theme-templates/default.css,themes/default.json --json
```
원본 status / staticStatus: NOT VERIFIED, FAIL 0. CSS styleEvidence: STATIC PASS / RUNTIME NOT VERIFIED / DESIGN_INTENT PASS / FINAL NOT VERIFIED. 원본에 Runtime 증거가 자동 결합되지 않았으므로 결합 styleVerification은 NOT VERIFIED다.
SCOPE-001은 package 계약·생성값·Template이 증명된 소비 Storybook graph 밖이라는 경계이며 별도 package build/API/브라우저 검사로 확인했다. TOKEN-002는 동적 style/property/template 및 StoryPage className의 정적 해석 한계다. 새 Gradient·Stop의 실제 위치·색상·계산값은 별도 실행 증거로 확인했으며 다른 미실행 동적 위치까지 PASS로 확장하지 않았다. 사용자 승인 범위는 두 독립 Background와 Foundation 표시다. 원본 Guard를 덮어쓰지 않았다.
로컬 실행 원본·JSON·스크린샷은 `_local/background-gradients-20261011/` 및 관련 `_local/background-*.log`에 보관한다. 이 디렉터리는 Git 배포 범위 밖이며 Clone 후 확인할 계약과 검증 요약은 이 문서에 남긴다.
## Git Identity와 인증
- 기존 전역 `user.name`과 이전 Commit의 Author/Committer는 Windows PC 이름을 포함했다. 기존 이메일은 PC 호스트명으로 구성된 주소는 아니지만 공식 Gitea 기본 이메일과 달랐다. 기존 이력과 전역 설정을 보존했다.
- 기존 Credential Manager의 HTTPS credential로 공식 Gitea `/api/v1/user` 및 `/api/v1/user/emails`를 읽기 전용 조회했다. 공식 계정의 프로필과 기본 이메일 primary/verified 상태 일치를 확인했다. 인증된 Push 사용자와 Commit 작성자는 별도로 확인하며 개인 이름·이메일은 문서에 중복 기재하지 않는다.
- `/api/v1/user/settings`의 `hide_email=false` 확인. 이메일 숨김 옵션은 존재하지만 현재 활성화되지 않았다. 서버의 정확한 noreply 주소는 확인하지 않았으며 임의 생성하지 않았다. 현재 확인된 공개 기본 이메일을 사용한다. Git Commit의 Author/Committer 이메일은 저장소 이력에 기록된다.
- 현재 저장소 Local Git 작성자 설정만 공식 계정에 맞춰 적용했고 `git var GIT_AUTHOR_IDENT`와 `GIT_COMMITTER_IDENT`도 해당 설정으로 해석됨을 확인했다. 실제 이름·이메일은 Git 설정과 Gitea 계정에서 관리한다.
- 작업 프로세스의 Author/Committer 및 Git config 환경 Override는 없었다. 별도 core.hooksPath/사용자 정의 Git hook도 없었다. 현재 생성하는 Commit의 실제 메타데이터를 Commit 후 다시 확인한다.
- 원격 URL·기존 Credential Manager·인증 방식·전역 config를 변경하지 않았고 재로그인·Token 재발급·GitHub Push·이력 재작성도 하지 않았다. 인증 비밀값은 출력·파일 저장하지 않았다.
- 관련 12개 파일만 Stage, Staged Diff 검토 후 요청된 `feat(theme): add brown and orange background gradients`로 일반 Commit/Push한다. Commit/Push 직전 원격 main이 시작 SHA에서 변경되면 중단한다. 신규 Commit의 Gitea 계정 attribution 및 Local/Remote SHA·Working Tree는 최종 응답에서 기록한다.