mcpField
F
fable-simulator

fable-simulator

github.com/immamdouhaboammar测试与质量353 次安装1 周前更新
代码仓库

关于 fable-simulator

fable-simulator 是用于构建独立行为模型并与候选实现比较的测试 Skill,适合需要验证隐含契约、状态转换或罕见故障的开发工作。它强调模拟证据不等同于真实运行环境的验证。

主要功能

  1. 01建立独立预期行为模型
  2. 02构造边界与故障测试语料
  3. 03分别运行候选实现和预言机
  4. 04按契约比较结果与状态变化
  5. 05区分模拟证据和运行验证

适用场景

  1. 01为算法改写建立独立参考预言机
  2. 02检查 UI 或 Agent 流程中的状态转换
  3. 03安全模拟难复现的故障条件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/immamdouhaboammar/get-fable --skill fable-simulator

安装后在 Claude Code 中输入/fable-simulator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

skill.package.json
agents/
openai.yaml
evals/
scenarios.json
examples/
independent-oracle-verification.md
references/
oracle-derivation-guide.md
oracle-independence-and-simulation-boundaries.md
templates/
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

评论

支持 Markdown