Dot Design System Domain Contract
패키지, 문서, 에셋과 제품 코드의 책임 경계를 고정합니다.
Package boundary
- 이 저장소의 root가 유일한 publishable package다. 별도 runtime package로 나누지 않는다.
- public API는
package.json#exports를 통해서만 제공한다. - 일반 제품 UI는 character·motion asset graph와 분리된
./uisubpath를 제공한다. - 제품 도메인의 API response, backend interface, 권한 모델, 라우터와 상태 관리를 포함하지 않는다.
PermissionGuard처럼 제품 인증에 결합되는 컴포넌트는 소비 저장소가 소유한다.
Canonical inputs
docs/,tokens/tokens.json,src/styles/tokens.css,assets/catalog.json,assets/motion/manifest.json이 구현 기준이다.docs/catalog.json은 canonical 문서의 route, 종류, 상태, component source와 agent context 포함 여부를 관리한다. 문서 사이트와 snapshot은 이 catalog에서 파생한다.- 개인 로컬 경로, 외부 디자인 문서, 이전 대화가 빌드나 사용의 전제 조건이 되어서는 안 된다.
- token JSON과 CSS variable은 같은 semantic 이름과 값을 유지한다.
Agent context boundary
docs/는 agent context의 canonical source다.docs/agent-context.md와docs/catalog.json에서agent: true인 참조 문서는 package version 및 각 문서의 SHA-256과 함께 소비 저장소에 snapshot으로 고정된다.dot-ds agents init과dot-ds agents sync만 소비 저장소의 managed snapshot, Codex/Claude skill, 짧은 adapter를 생성·갱신한다. package 설치와postinstall은 소비 저장소 파일을 변경하지 않는다.- snapshot manifest는 package 이름·version과 source hash를 기록한다.
dot-ds agents check은 version 또는 hash drift를 실패로 보고하지만 파일을 수정하지 않는다. dot-ds agents prompt new-screen은 설치된 version의 self-contained 화면 설계 prompt를 출력할 뿐 소비 저장소를 수정하지 않는다.- Codex와 Claude adapter는 소비 저장소 소유 지시를 보존하고 표시된 managed section만 갱신한다. unmanaged skill 또는 managed 영역 밖의 내용을 덮어쓰지 않는다.
Asset boundary
- package에는 제품 전달용 derivative만 포함한다.
- 승인 logo SVG는 public
dotLogoUrl과 provenance source로 유지하고, 작은 제품 시그니처인DotIcon은 source hash가 고정된 192×233 lossless sRGB WebP derivative를 사용한다. uientry는dotIconUrl을 제공하되 원본 logo SVG, character와 motion asset graph를 포함하지 않는다.- 편집 원본, 대형 render master, 임시 export는 npm allowlist에 들어갈 수 없다.
quarantinedasset에는 배포 파일이 없어야 한다.- catalog path, byte size, SHA-256, dimension과 alpha는 CI에서 검증한다.
- DotIcon derivative는 Lanczos3 resize, lossless WebP effort 6, embedded sRGB ICC와 24KiB budget을 CI에서 검증한다.
- embedded motion raster는 source profile에서 sRGB로 명시적으로 변환하고 sRGB ICC profile을 배포 파일에 포함한다.
- motion manifest는 브랜드 팀이 관리하는 원본의 hash와 재생성 옵션을 기록하되 로컬 절대 경로를 포함하지 않는다.
- Lottie 최적화는 delivery field, embedded payload와 manifest에 사전 선언된 호환성 패치 외의 애니메이션 구조를 바꾸지 않는다.
- expression 호환성 패치는 정확한 원본 SHA-256, patch ID와 기대 expression 집합·개수를 가진 allowlist로 제한한다. 하나라도 일치하지 않으면 변환과 배포를 중단한다.
- 적용한 expression 패치는 manifest의
transform.compatibilityPatches와 결과물의dotTransform.expressionPatches에 ID, 적용 개수, 입력·출력 expression SHA-256으로 감사 가능하게 기록한다. - allowlist에 없는 unresolved expression reference는 fail closed하며 임의의 layer 이름 치환이나 expression 삭제로 우회하지 않는다.
- 손상된 asset을 crop, paint, 생성형 보정으로 조용히 수정하지 않는다.
Compatibility
- 배포 형식은 browser bundler가 소비하는 ESM으로 고정한다.
- root,
ui,motionentry는 React client module boundary를 배포 파일에도 보존하며,tokens와tailwind-preset은 server-safe entry로 유지한다. - React 18.3과 19를 peer 범위로 지원한다.
- package component CSS는 Tailwind content scan 없이 동작한다.
- token, reset, utility와 animation keyframe은
.dot-theme경계 밖의 소비 앱에 영향을 주지 않는다. - compiled utility의 theme selector는
:where()로 specificity를 추가하지 않아 소비 앱의 responsive·상태 utility를 덮어쓰지 않는다. - 디자인 시스템 overlay는
DotTheme내부 portal root를 사용해 theme 경계를 벗어나지 않는다. - Tailwind preset은 제품 코드의 semantic utility 사용을 위한 선택 기능이다.
- Sidebar의 cookie 저장과 전역 keyboard shortcut은 소비 제품이 명시적으로 설정할 때만 활성화한다.
- interactive target은 40px 이상, 정보 텍스트는 12px 이상을 기본 계약으로 삼는다.
- 모션은 reduced-motion fallback과 텍스트 상태를 제공한다.
- active motion은 배포 전 실제
lottie-webSVG renderer smoke에서data_failed, Lottie error와 runtime console error 없이 frame을 렌더해야 한다.
Documentation surface
website/는 publishable npm package와 분리된 private documentation surface다.- 사이트는 canonical Markdown, catalog와 실제 package public API를 읽고 별도 설계 원칙 사본을 유지하지 않는다.
- 모든 stable public component는 목적, 선택 기준, 구조, 변형·크기, 상태·동작, 콘텐츠, 접근성, 좁은 화면·긴 콘텐츠, 공개 API, 실행 가능한 예제와 금지 사례를 제공한다.
- package build가 끝난 뒤 site typecheck와 production build가 통과해야 한다.
Release
- package version과 tag가 일치해야 한다.
- 발행 전 format, lint, typecheck, test, build, asset verification, Lottie renderer smoke, tarball audit를 모두 통과한다.
- tarball은 12MiB unpacked budget을 넘지 않고 비배포 원본을 포함하지 않는다.
- agent snapshot source, manifest schema, Codex/Claude skill과 adapter는 같은 package version으로 배포하고 version·hash drift 검사를 통과한다.