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 |
| 포털 접근권한·탐색 capability | PortalConsole |
검증 정책
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를 덮어쓰는 선택자는 허용하지 않는다.