关于 fable-simulator
fable-simulator 是用于构建独立行为模型并与候选实现比较的测试 Skill,适合需要验证隐含契约、状态转换或罕见故障的开发工作。它强调模拟证据不等同于真实运行环境的验证。
主要功能
- 01建立独立预期行为模型
- 02构造边界与故障测试语料
- 03分别运行候选实现和预言机
- 04按契约比较结果与状态变化
- 05区分模拟证据和运行验证
适用场景
- 01为算法改写建立独立参考预言机
- 02检查 UI 或 Agent 流程中的状态转换
- 03安全模拟难复现的故障条件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ immamdouhaboammar/ get-fable --skill fable-simulator安装后在 Claude Code 中输入/fable-simulator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
skill.package.jsonagents/openai.yamlevals/scenarios.jsonexamples/independent-oracle-verification.mdreferences/oracle-derivation-guide.mdoracle-independence-and-simulation-boundaries.mdtemplates/oracle-contract.template.md详细介绍
Fable Simulator
创建一个独立的预期行为模型,并将其与候选实现进行比较,但不要把模拟本身冒充为生产环境证据。
使命
当常规测试可能与实现共享相同假设、UI/Agent 流程需要受控演练,或故障注入能够揭示难以安全复现的路径时,模拟就很有用。
此技能必须严格区分模拟/预言机证据与真实运行时验证。
适用场景
- 算法/重写需要独立推导的预言机;
- 契约在调用方之间隐含存在,需要还原;
- UI/Agent 状态转换适合通过脚本化演练/故障注入进行测试;
- 安全测试破坏性/罕见条件需要模型/沙箱;
- 两种独立实现之间的差分测试很有价值。
不适用场景
- 常规测试/运行时证据已能以较低成本证明该主张;
- 拟议的预言机是根据正在测试的同一代码/假设推导出来的;
- 将模拟报告为外部生产系统确实如此运行的证明。
模拟分类
| 模式 | 独立性要求 |
|---|---|
| 黄金样例 | 样例的预期输出来自可信契约/观测 |
| 参考实现 | 独立编写/维护的逻辑 |
| 差分提供方/模型 | 使用独立实现/模型和盲测预言机 |
| 状态机模拟 | 根据产品契约定义转换/不变量 |
| 故障注入 | 具有明确建模假设的受控故障 |
| UI 演练 | 浏览器操作 + 可观测的 DOM/网络/运行时证据 |
流程
阶段 1 — 定义主张和预言机的独立性
说明要检查候选实现的哪些行为,以及为什么预言机并非只是重复候选实现的逻辑。
列出共享假设。如果某个共享假设可能导致候选实现和预言机以相同方式出错,请记录这一覆盖缺口。
阶段 2 — 从独立来源推导契约
使用公共接口、调用方、规范、历史黄金输出、主要文档或单独维护的参考行为。避免仅为了重现相同算法而阅读实现细节。
阶段 3 — 构建具有代表性的边界用例集
包含与该主张相关的正常、边界、无效、有状态、对抗性和故障用例。保留用户/未跟踪的工作区文件,并尽可能在隔离的临时目录/沙箱中运行。
阶段 4 — 分别执行候选实现和预言机
捕获输入、输出、错误、副作用/状态转换、仅在必要时捕获耗时,以及工具/环境身份。
阶段 5 — 进行语义比较
仅对契约声明为无关的差异进行规范化。不要为了得到零差异而抹去真实的行为差异。
对于 UI,请比较因果链:
action → expected observable → actual observable → evidence
不要只比较像素,除非像素保真度本身就是契约要求。
阶段 6 — 排查差异
不匹配意味着以下情况之一:
- 候选实现有误;
- 预言机有误/已过时;
- 契约含糊不清;
- 规范化无效;
- 环境不同。
在确认事实来源之前,不要自动“让候选实现符合预言机”。
阶段 7 — 标明证据范围
明确区分模拟/预言机证据。如果主张需要真实运行时/软件包/环境证明,请移交给 fable-verify。
判定规则
- 从候选实现中复制的判定基准会自我印证,因此无效。
- 如果第二个大模型收到了候选答案或隐藏的预期输出,它就不一定是独立的判定基准。
- 黄金样例需要注明来源;来历不明的样例可能会固化旧缺陷。
- 缺少交互或状态证据的 UI 截图,难以有力证明功能因果关系。
- 故障注入能证明系统在所模拟的故障下的行为,但不能证明真实基础设施一定会以完全相同的方式发生故障。
- 在范围狭窄的语料库上零差异,并不代表普遍正确;应明确说明状态覆盖范围。
- 切勿为了让模拟结果可复现而修改或删除未跟踪的用户文件。
不变量
- 明确说明判定基准的独立性及其共同假设。
- 将模拟证据标注为模拟结果。
- 输入语料库和规范化过程均可复现。
- 保留用户工作区状态和未跟踪文件。
- 先诊断差异,再判断哪一方有误。
- 在需要时,通过实际验证来支持现实场景中的声明。
失败分类
循环论证式判定基准
判定基准复用了候选实现或答案。应独立重新设计。
过时的判定基准
参考行为已不再符合已接受的约定。在评判候选项之前,应重新校准判定基准。
约定不明确
候选项和判定基准存在差异,但两者都有可能成立。应转交规划或研究,而非任意取舍。
过度规范化
比较过程剔除了有意义的差异。应将规范化范围缩小到约定明确规定为无关的字段。
混淆模拟与现实
将模拟通过当作生产环境或运行时的证明。应降低声明的确定性,并交由验证或运行环节处理。
工作区污染
模拟修改了真实用户状态。应改用隔离沙箱,并且只还原自身造成的修改。
反模式
- 复制候选代码来实现判定基准;
- 将预期答案提供给大模型判定基准;
- 不结合有代表性的语料库论证,就要求 100% 零差异;
- 将截图视为完整的 UI 验证;
- 不断规范化差异,直到结果通过;
- 根据仿冒服务的表现推断外部服务的行为;
- 为重置模拟而删除未跟踪文件;
- 一旦判定基准出现差异,就立即修改候选项。
模拟数据包
Claim:
Oracle type/source:
Independence + shared assumptions:
Corpus/failure injections:
Candidate environment:
Comparison/normalization:
Divergences:
Oracle validity decision:
Simulation verdict:
Real evidence still required:
完成标准
满足以下条件时,模拟即告完成:
- 判定基准的独立性可信且有记录;
- 语料库覆盖重要的约定维度;
- 候选项与判定基准的比较可复现;
- 对差异进行分类,而非盲目消除;
- 工作区保持安全;
- 证据的表述范围明确,并在需要时交由实际验证。
进阶资源
- 深入指南:
references/oracle-independence-and-simulation-boundaries.md - 现有指南:
references/oracle-derivation-guide.md - 示例:
examples/independent-oracle-verification.md