75 lines
9.5 KiB
Markdown
75 lines
9.5 KiB
Markdown
# 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는 최종 응답에서 기록한다.
|