"""用内存快照说明版本切换与权限；不实现向量数据库事务或分布式缓存。"""
from dataclasses import dataclass

@dataclass(frozen=True)
class Context:
    # 这些字段来自后端认证和版本选择，不能由模型填写。
    tenant: str
    acl_revision: int
    policy_version: str

# 新旧资料独立保存，不在同一内容集合里逐条覆盖。
snapshots = {
    "index-v1": [{"id": "quality-v1", "tenant": "shop-a", "version": "v1", "text": "教学旧条款"}],
    "index-v2": [{"id": "quality-v2", "tenant": "shop-a", "version": "v2", "text": "教学新条款"}],
}
active = "index-v2"
context = Context("shop-a", 7, "v2")
# 查询先固定一次快照；后续相关阶段应沿用同一版本。
request_snapshot = active
visible = [row for row in snapshots[request_snapshot]
           if row["tenant"] == context.tenant and row["version"] == context.policy_version]
cache_key = ("运费谁承担", context.tenant, context.acl_revision,
             context.policy_version, request_snapshot)
print("授权资料：", visible)
print("缓存身份：", cache_key)
# 这个键仍是示例：正式缓存还需任务配置、模型版本、个人事实或用户身份等维度。
# 权限撤回必须让旧缓存不可用，不能仅依赖资料内容版本。
