Skip to content

PortalThemeManifest 계약 ​

UiPlatform에서 추가·검증·승인·배포하는 테마는 portal-foundation의 PortalThemeManifest 형식으로 표현한다. Manifest는 공통 UI 런타임이 안전하게 적용할 수 있는 테마 산출물이며, 릴리스의 생명주기 상태는 UiPlatform가 별도로 소유한다.

최소 형식 ​

json
{
  "manifestVersion": "1",
  "themeKey": "cobalt-clarity",
  "displayName": "Cobalt Clarity",
  "version": "1.0.0",
  "foundationRange": "^0.6.0",
  "preference": {
    "accent": "cobalt",
    "background": "sky",
    "mode": "light",
    "heroVisible": true
  },
  "tokens": {
    "--pf-accent": "#2164a4",
    "--pf-radius-sm": "8px"
  },
  "componentVariants": {
    "button": "solid",
    "panel": "quiet"
  },
  "metadata": {
    "description": "A calm enterprise theme",
    "author": "UiPlatform"
  }
}

소유권 ​

내용소유자
테마 Manifest 스키마와 런타임 적용 규칙portal-foundation
테마 초안·미리보기·검증·승인·배포 상태UiPlatform
포털별 UI 구독·배포 이력UiPlatform
포털 접근권한·탐색 capabilityPortalConsole

검증 정책 ​

UiPlatform는 저장·승인 전에 manifestVersion, themeKey, semver, foundationRange, preference enum, 토큰 prefix와 값을 검증한다. 커스텀 토큰은 --pf- prefix만 허용하고 HTML·스크립트 조각과 angle bracket을 거부한다. preview image는 HTTPS URL만 허용한다.

테마 릴리스는 다음 상태를 따른다.

text
DRAFT → APPROVED → RETIRED

승인되지 않은 Manifest는 포털에 배포하지 않는다. 포털의 portal-foundation 버전이 foundationRange와 호환되지 않으면 배포 대상에서 제외하고, 적용 이후 오류가 보고되면 직전 승인 릴리스로 롤백할 수 있어야 한다.

적용 원칙 ​

Manifest는 포털 업무 데이터를 포함하지 않는다. 조직·사용자·권한·검색·RAG·파일 설정을 넣지 않으며, 테마 토큰과 공통 UI 변형만 표현한다. tokens는 공통 --pf-* namespace 안에서만 확장하고, 각 포털의 업무 화면 전용 CSS를 덮어쓰는 선택자는 허용하지 않는다.