Inkless 文档

主题契约(v1)

主题契约(v1)

工程契约摘要。权威全文:仓库 docs/theme-contract.mddocs/adr/0002-theme-host-boundary.md。契约状态:Locked v1

版本锁

常量位置当前
THEME_CONTRACT_VERSION@inkless/theme-host"1"
THEME_CONTRACT_SUPPORTED同左["1"]
主题声明ThemePlugin.contractVersion + inkless.theme.json必须受支持
  1. 主题声明 contractVersion;Host register 时 assert 兼容。
  2. 缺省 contractVersion 仅在 Host 仍支持 "1" 时按 "1"(legacy UMD 宽限)。
  3. 破坏性 facade 变更 → bump 主版本并更新 SUPPORTED。
  4. 加法 export 可留在同主版本,仍更新 inventory。

分层铁律

  1. 主题不得拥有写入 DB 的业务模型(文章、用户、权限…)。
  2. Host 不得把某一种站点类型的叙事/固定 IA 当作平台默认。
  3. 实例数据不得写死在主题源码(禁止定稿营销长文当唯一数据源)。

判定树:换主题后数据是否仍在?→ Host。换站点类型是否必须变?→ 主题。多主题复用?→ Host 原语。

路由归属

模式所有者
/、主题声明 slugTheme pages[]
/blog、分类/标签Host
/admin/*/setup/authHost
/p/*Host + sections
Docs / GitHub 外链theme settings / site config

冲突优先级(高→低):Host system → blog/taxonomy → theme pages[] → /p/:slug → 外链。

Host facade 白名单

主题只能依赖 @inkless/theme-host + public API,禁止 deep-import @/…

Export用途
BaseSiteHeader / BrandMark / HeaderUtilitiesChrome 壳
useBranding / useThemeSettings / useThemePages品牌与配置
useGlobalConfig / useLocaleMode / useSEODefaults站点与 SEO
SeoHead / BlogPageShell / ArticleList页面原语
getPublicArticles / pickLocaleValue数据与 i18n
THEME_CONTRACT_* / assertThemeContractCompatible契约

完整 inventory:frontend/src/theme-host/exports.inventory.ts

Tokens

使用 Host CSS 变量(ThemeProvider 注入),组件内勿硬编码品牌色(装饰 monogram 除外,可 fallback var(--color-on-surface))。必填组:colors、fonts、layout。Host 用站点已发布主题配置覆盖主题默认。

切换主题

保留变化
文章、媒体、identity/brand主题 pages 结构与默认 nav
用户已有 page contentseed 新主题页不覆盖用户内容
旧主题专用 sectionfallback 展示,不删配置

Non-goals

检查清单(作者)

相关:主题开发指南 · 主题与 Host · 内容类型