I04 · 互动推演
格式通过了,权限呢?
观察Schema、身份、对象授权和审批四道独立检查。
合成教学数据 · 未运行真实模型静态推演与完整规格
I04 格式通过了,权限呢?
关联章节:M02 · 交互类型:gate-pipeline · 状态:提供完整状态/验收规格,UI待实现
教学目标
观察Schema、身份、对象授权和审批四道独立检查。
初始状态
{
"principal": {
"tenant_id": "shop-a",
"user_id": "u-alice"
},
"arguments": {
"order_id": "A100"
}
}
操作控件
选择当前主体
编辑白名单参数
选择查询/退款
运行检查
查看拒绝层
状态变化规则
身份选择只切换预设测试主体,不允许工具参数修改认证身份。
逐层显示PASS/REJECT/NOT_REACHED;一层失败则后续不执行。
黄金案例与反馈
extra-tenant
输入:
{
"order_id": "A100",
"tenant_id": "shop-b"
}
期望:
{
"reject_at": "schema",
"code": "INVALID_ARGUMENTS"
}
模型不能选择租户。
other-owner
输入:
{
"order_id": "A111"
}
期望:
{
"reject_at": "authorization",
"code": "NOT_FOUND"
}
格式合法但对象不属于Alice。
unapproved
输入:
{
"action": "refund",
"order_id": "A100",
"approved": false
}
期望:
{
"reject_at": "approval",
"code": "APPROVAL_REQUIRED"
}
知道订单事实不是取得退款授权。
完成条件
- 分别构造Schema通过但授权失败、资格通过但审批失败的案例
反馈层次
提交预测后显示结果;允许跳过预测但记录跳过,不阻止阅读
结果同时显示状态变化、原因与被拒绝动作;不是只给红绿灯
第一次错误给边界提示,第二次提供最小反例;参考推导始终可主动打开
重置恢复固定初始状态并保留历史尝试供用户手动清除
无障碍与静态替代
全部操作有原生button/input/select替代,不依赖拖拽
图与动画提供同步文字状态表;支持prefers-reduced-motion
状态改变用aria-live=polite摘要,不逐字朗读长日志
焦点不跳走;错误提示关联输入;颜色不是唯一编码
无JavaScript时直接展示初始输入、规则和黄金案例表,读者仍能完成纸面推演。状态动画仅作解释,不能成为获取答案的唯一途径。
持久化与重置
使用版本化键agent-course:1:I04,仅保存本地学习状态。支持单卡重置和全站清除;存储失败时以内存模式继续,不阻断阅读。
必须避免的误导
使用统一NOT_FOUND时UI不能泄漏“其实订单存在”的提示。
执行边界
纯本地教学状态机;不执行任意代码,不连接真实资金/模型/宿主Shell。