哪些缓存能命中,哪些必须失效?
缓存身份、权限域和事实版本不可忽略。
合成教学数据 · 未运行真实模型静态推演与完整规格
I21 哪些缓存能命中,哪些必须失效?
关联章节:M10 · 交互类型:cache-key-audit · 状态:提供纯逻辑参考函数,UI待实现
教学目标
缓存身份、权限域和事实版本不可忽略。
初始状态
{
"stored": {
"tenant": "shop-a",
"user": "u-alice",
"order": "A100",
"order_version": 1,
"policy_version": "v2",
"scope": "refund-proposal"
},
"request": {
"tenant": "shop-a",
"user": "u-alice",
"order": "A100",
"order_version": 1,
"policy_version": "v2",
"scope": "refund-proposal"
}
}
操作控件
逐项修改租户/用户/订单版本/政策版本/范围
切换缺失键字段的错误实现
比较命中结果
查看缓存分类
状态变化规则
正确演示按全部所需字段比较;只读公共工件可另设明确共享域。
一项版本变化使旧业务派生结果失效;不能将模型前缀缓存与业务授权缓存等同。
黄金案例与反馈
same
输入:
{
"changed_field": null
}
期望:
{
"safe_hit": true
}
仅表示键匹配,仍需有效期与权限未撤回。
tenant
输入:
{
"changed_field": "tenant"
}
期望:
{
"safe_hit": false
}
同订单号可能属于不同租户。
version
输入:
{
"changed_field": "order_version"
}
期望:
{
"safe_hit": false
}
旧金额或资格不能继续复用。
完成条件
演示跨租户键碰撞
解释共享只读底座不等于共享可变业务缓存
反馈层次
提交预测后显示结果;允许跳过预测但记录跳过,不阻止阅读
结果同时显示状态变化、原因与被拒绝动作;不是只给红绿灯
第一次错误给边界提示,第二次提供最小反例;参考推导始终可主动打开
重置恢复固定初始状态并保留历史尝试供用户手动清除
无障碍与静态替代
全部操作有原生button/input/select替代,不依赖拖拽
图与动画提供同步文字状态表;支持prefers-reduced-motion
状态改变用aria-live=polite摘要,不逐字朗读长日志
焦点不跳走;错误提示关联输入;颜色不是唯一编码
无JavaScript时直接展示初始输入、规则和黄金案例表,读者仍能完成纸面推演。状态动画仅作解释,不能成为获取答案的唯一途径。
持久化与重置
使用版本化键agent-course:1:I21,仅保存本地学习状态。支持单卡重置和全站清除;存储失败时以内存模式继续,不阻断阅读。
必须避免的误导
哈希键不提供权限本身;真实实现还需授权与失效。
执行边界
纯本地教学状态机;不执行任意代码,不连接真实资金/模型/宿主Shell。
逻辑参考
web/reference/engines.mjs中的sameCacheScope;对应测试在web/reference/engines.test.mjs。UI可复用或等价移植,但不得改变黄金结果。