test: 钉住 deep_merge 的 None 替换与列表替换语义 + 只读约定注释
- characterization:显式 None 整体替换且兄弟键保留默认(Task 9 回退契约依赖);列表整体替换不与默认拼接 - DEFAULT_CONFIG 与 TenantConfig.data/Site.brand 补只读约定注释 - platform 包依赖章程改明确:defaults/tenant_config 为叶子模块供 engine 反向消费,registry 组装层可 import app/engine Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
"""平台层(多租户):出厂默认、配置合并、租户/站点模型、注册表等。
|
||||
Phase 1 逐步迁入;本包不得反向依赖 app/engine 之外的假设。"""
|
||||
Phase 1 逐步迁入。依赖章程:defaults 与 tenant_config 保持叶子模块(不依赖
|
||||
app/engine),供 engine 侧反向消费;registry 等组装层可以 import app/engine。"""
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
"""出厂默认配置。结构 = spec §5.1 的 9 个配置组。
|
||||
本阶段 brand/wall 的默认值由 Task 4 从 jc 代码提取填充。"""
|
||||
本阶段 brand/wall 的默认值由 Task 4 从 jc 代码提取填充。
|
||||
只读约定:消费者不得修改本 dict,需要定制走 deep_merge 拷贝。"""
|
||||
import copy
|
||||
|
||||
DEFAULT_CONFIG: dict = {
|
||||
|
||||
@@ -14,7 +14,8 @@ class Site:
|
||||
slug: str
|
||||
name: str
|
||||
domains: tuple[str, ...]
|
||||
brand: dict # 站点门面覆盖层 ⊕ 租户默认 brand(已深合并)
|
||||
brand: dict # 站点门面覆盖层 ⊕ 租户默认 brand(已深合并)。
|
||||
# 只读约定:构造后不得修改
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@@ -22,7 +23,8 @@ class TenantConfig:
|
||||
slug: str
|
||||
name: str
|
||||
status: str # active | disabled
|
||||
data: dict # deep_merge(DEFAULT_CONFIG, snapshot)
|
||||
data: dict # deep_merge(DEFAULT_CONFIG, snapshot)。
|
||||
# 只读约定:构造后不得修改
|
||||
sites: tuple[Site, ...] = ()
|
||||
|
||||
@classmethod
|
||||
|
||||
Reference in New Issue
Block a user