antithesis-workload
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAntithesis Workload
Antithesis Workload
Purpose and Goal
目的与目标
Implement or improve the Antithesis workload. Success means:
- Properties from the skill are mapped to concrete assertions, using both the property catalog and per-property evidence files
antithesis-research - Test commands exist under and exercise the right behaviors
antithesis/test/ - The first real test templates are created after setup, or existing ones are expanded
- Triage findings turn into workload or property updates instead of staying implicit
Use the skill first to build the property catalog. Use the skill to scaffold the infrastructure. Use the skill to review runs, then return here to improve the workload.
antithesis-researchantithesis-setupantithesis-triage实现或改进Antithesis工作负载。成功的标准包括:
- 将技能中的属性映射为具体的断言,同时使用属性目录和每个属性的证据文件
antithesis-research - 在目录下存在测试命令,且能验证正确的行为
antithesis/test/ - 完成设置后创建首个真实测试模板,或扩展现有模板
- 分类审查的结果转化为工作负载或属性更新,而非仅停留在隐含状态
首先使用技能构建属性目录。使用技能搭建基础设施。使用技能审查运行结果,然后回到此处改进工作负载。
antithesis-researchantithesis-setupantithesis-triagePrerequisites
前提条件
- DO NOT PROCEED if the Antithesis scratchbook (usually at ) doesn't exist. Use the
antithesis/scratchbook/skill to create it.antithesis-research - DO NOT PROCEED if there is no for Antithesis present. Use the
docker-compose.yamlskill to create it.antithesis-setup - DO NOT PROCEED if is not installed. See
snoutyfor installation options.https://raw.githubusercontent.com/antithesishq/snouty/refs/heads/main/README.md
- 如果Antithesis临时手册(通常位于)不存在,请不要继续。使用
antithesis/scratchbook/技能创建它。antithesis-research - 如果没有用于Antithesis的文件,请不要继续。使用
docker-compose.yaml技能创建它。antithesis-setup - 如果未安装,请不要继续。查看
snouty获取安装选项。https://raw.githubusercontent.com/antithesishq/snouty/refs/heads/main/README.md
Scoping
范围界定
Each invocation of the "Implement next property" workflow below focuses on one property to keep context manageable and quality high. (Post-triage iteration follows its own scoping based on triage findings.)
If the user asks for multiple properties, recommend doing one at a time — explain that implementation quality degrades as context accumulates, and each property's effort is unpredictable. Ask which one they'd like to start with. If they insist on multiple, proceed — but warn them first.
If the user specifies which property to work on, skip the full catalog scan — but still assess that property's status against its evidence file before proceeding. If it's already fully implemented, tell the user rather than redoing work.
If the user does not specify a property, run the full detection and recommendation flow below.
每次调用下面的“实现下一个属性”工作流时,仅聚焦一个属性,以保持上下文可控并确保高质量。(分类审查后的迭代将根据审查结果采用自身的范围界定方式。)
如果用户要求处理多个属性,建议逐个进行——解释随着上下文累积,实现质量会下降,且每个属性的工作量不可预测。询问用户想先从哪个开始。如果用户坚持要处理多个,可继续操作,但需先发出警告。
如果用户指定了要处理的属性,跳过完整的目录扫描——但仍需根据其证据文件评估该属性的状态。如果该属性已完全实现,告知用户而非重复工作。
如果用户未指定属性,运行以下完整的检测与推荐流程。
Detect implementation status
检测实现状态
The detection work below is context-heavy (reading every evidence file, scanning the codebase for assertions). If your agent supports sub-agents, delegate it to a sub-agent that returns a per-property summary (status + brief rationale). This keeps the main implementation agent's context clean.
The detection task: for each property in the catalog, search the existing test and SUT code for Antithesis SDK assertion calls and cross-reference them with the property's evidence file at . Assess whether the existing assertions cover the code paths, failure scenarios, and instrumentation points the evidence file describes. Classify each property as:
antithesis/scratchbook/properties/{slug}.md- Implemented — assertions cover what the evidence file describes
- Partially implemented — some assertions exist but coverage is incomplete
- Not implemented — no related assertions found
以下检测工作涉及大量上下文(读取所有证据文件、扫描代码库查找断言)。如果你的Agent支持子Agent,可将此任务委托给子Agent,由其返回每个属性的摘要(状态+简要理由)。这样可保持主实现Agent的上下文简洁。
检测任务:针对目录中的每个属性,在现有测试和SUT代码中搜索Antithesis SDK断言调用,并与中的属性证据文件进行交叉引用。评估现有断言是否覆盖了证据文件中描述的代码路径、故障场景和插装点。将每个属性分类为:
antithesis/scratchbook/properties/{slug}.md- 已实现——断言覆盖了证据文件描述的内容
- 部分实现——存在一些断言但覆盖不完整
- 未实现——未找到相关断言
Present and recommend
展示与推荐
Note the catalog's provenance frontmatter ( and fields) and include it when presenting status — e.g., "The property catalog is up-to-date as of ()." This lets the user judge whether the catalog reflects the current codebase or needs re-research.
commitupdated<commit short hash><date>Show the user the status of each property, then recommend one to implement next. Prefer partially-implemented properties that need completion, then unimplemented properties that cluster with recently implemented ones (see ), then other high-priority unimplemented properties. Wait for the user to confirm or choose differently before proceeding.
antithesis/scratchbook/property-relationships.mdFor the chosen property, read both the catalog entry and its evidence file.
注意目录的来源前置信息(和字段),展示状态时需包含这些信息——例如:“属性目录截至()是最新的。”这样用户可以判断目录是否反映了当前代码库状态,或是需要重新研究。
commitupdated<commit短哈希><日期>向用户展示每个属性的状态,然后推荐下一个要实现的属性。优先选择需要完成的部分实现属性,其次是与最近实现的属性相关联的未实现属性(查看),最后是其他高优先级未实现属性。等待用户确认或选择其他属性后再继续。
antithesis/scratchbook/property-relationships.md对于选定的属性,阅读其目录条目和证据文件。
Other scoping questions
其他范围界定问题
Ask the user only for blockers or scoping decisions you cannot infer safely, such as:
- The property catalog location, if it is not the standard
antithesis/scratchbook/property-catalog.md - The project language or SDK choice, if the repo does not make it obvious
- Triage findings or known gaps, if iterating on an existing workload
仅向用户询问你无法安全推断的障碍或范围界定决策,例如:
- 如果属性目录不在标准路径,询问其位置
antithesis/scratchbook/property-catalog.md - 如果代码库未明确显示,询问项目语言或SDK选择
- 如果是迭代现有工作负载,询问分类审查结果或已知的缺口
Definitions and Concepts
定义与概念
- SUT: System under test.
- Test template: A directory of test commands at . Each timeline runs commands from one test template. Files or subdirectories prefixed with
/opt/antithesis/test/v1/{name}/are ignored by Test Composer, so use that prefix for helper scripts kept alongside commands.helper_ - Test command: An executable in a test template with a valid prefix: ,
parallel_driver_,singleton_driver_,serial_driver_,first_,eventually_,finally_.anytime_ - Timeline: One linear execution of the SUT and workload. Antithesis runs many timelines in parallel and branches them to search for interesting behaviors.
- /
Always: Assertions for safety and correctness properties.AlwaysOrUnreachable - : Assertions for liveness or non-trivial semantic states that should occur at least once.
Sometimes(cond) - /
Reachable: Assertions about whether meaningful outcomes or forbidden paths are exercised.Unreachable
- SUT: 被测系统(System under test)。
- 测试模板: 位于的测试命令目录。每个时间线都会运行一个测试模板中的命令。以
/opt/antithesis/test/v1/{name}/为前缀的文件或子目录会被Test Composer忽略,因此可将辅助脚本以此前缀命名并与命令放在一起。helper_ - 测试命令: 测试模板中的可执行文件,需带有有效前缀:、
parallel_driver_、singleton_driver_、serial_driver_、first_、eventually_、finally_。anytime_ - 时间线: SUT和工作负载的一次线性执行。Antithesis会并行运行多条时间线,并对其进行分支以查找有价值的行为。
- /
Always: 用于安全和正确性属性的断言。AlwaysOrUnreachable - : 用于活性或非平凡语义状态的断言,这类状态至少应出现一次。
Sometimes(cond) - /
Reachable: 关于有意义的结果或被禁止的路径是否被执行的断言。Unreachable
Documentation Grounding
文档依据
Use the skill to access these pages. Prefer .
antithesis-documentationsnouty docs- Test templates reference:
https://antithesis.com/docs/test_templates/test_composer_reference.md - SDK reference:
https://antithesis.com/docs/using_antithesis/sdk.md - Properties and assertions:
https://antithesis.com/docs/properties_assertions/assertions.md - Fault injection:
https://antithesis.com/docs/environment/fault_injection.md
使用技能访问以下页面。优先使用。
antithesis-documentationsnouty docs- 测试模板参考:
https://antithesis.com/docs/test_templates/test_composer_reference.md - SDK参考:
https://antithesis.com/docs/using_antithesis/sdk.md - 属性与断言:
https://antithesis.com/docs/properties_assertions/assertions.md - 故障注入:
https://antithesis.com/docs/environment/fault_injection.md
Reference Files
参考文件
| Reference | When to read |
|---|---|
| Implementing workload-side components or wrappers |
| Turning properties into SDK assertions |
| Writing commands and organizing test templates |
| Improving coverage and assertions after triage |
| 参考文件 | 阅读时机 |
|---|---|
| 实现工作负载端组件或包装器时 |
| 将属性转换为SDK断言时 |
| 编写命令和组织测试模板时 |
| 分类审查后优化覆盖范围和断言时 |
Recommended Workflows
推荐工作流
Implement next property
实现下一个属性
- Detect implementation status and present to user (see Scoping above)
- Get user confirmation on which property to implement
- Read
references/component-implementation.md - Read
references/assertions.md - Read
references/test-commands.md - Implement the chosen property: assertions, test commands, and supporting code
- 检测实现状态并向用户展示(见上方“范围界定”部分)
- 获取用户对要实现的属性的确认
- 阅读
references/component-implementation.md - 阅读
references/assertions.md - 阅读
references/test-commands.md - 实现选定的属性:断言、测试命令和支持代码
Post-triage iteration
分类审查后迭代
- Read
references/iteration.md - Read if assertions need to change
references/assertions.md - Read if command coverage needs to change
references/test-commands.md - Update the workload and the relevant Antithesis scratchbook artifacts together
- 阅读
references/iteration.md - 如果需要修改断言,阅读
references/assertions.md - 如果需要修改命令覆盖范围,阅读
references/test-commands.md - 同时更新工作负载和相关的Antithesis临时手册工件
General Guidance
通用指导
- Keep Antithesis-only code out of production paths. If you must touch shared code, make the change surgical and easy to wall off.
- Prefer simple workload code over highly configurable abstractions.
- Assume has already made the system runnable in a mostly idle state; this skill owns what the workload does once the system is up.
antithesis-setup - Assume has already installed the relevant SDK and added one minimal bootstrap assertion in the SUT. This skill owns the broader property catalog beyond that initial integration check.
antithesis-setup - Write test commands in the project's language, not Bash, so they can reuse the project's clients, helpers, and libraries.
- 将仅用于Antithesis的代码排除在生产路径之外。如果必须修改共享代码,需确保修改精准且易于隔离。
- 优先选择简单的工作负载代码,而非高度可配置的抽象。
- 假设已使系统能在基本空闲状态下运行;本技能负责系统启动后工作负载的行为。
antithesis-setup - 假设已安装相关SDK,并在SUT中添加了一个最小的引导断言。本技能负责初始集成检查之外的更广泛属性目录。
antithesis-setup - 使用项目的语言编写测试命令,而非Bash,以便复用项目的客户端、辅助工具和库。
Output
输出
- Assertions for every property in scope, in workload code or carefully chosen SUT locations
- Test commands and supporting workload code under
antithesis/test/ - Updates to when the implemented properties change
antithesis/scratchbook/property-catalog.md
- 针对所有范围内属性的断言,位于工作负载代码或精心选择的SUT位置
- 位于下的测试命令和支持工作负载代码
antithesis/test/ - 当已实现的属性发生变化时,更新
antithesis/scratchbook/property-catalog.md
Self-Review
自我审查
Before declaring this skill complete, review your work against the criteria below. If your agent supports spawning sub-agents, create a new agent with fresh context to perform this review — give it the path to this skill file and have it read all output artifacts. A fresh-context reviewer catches blind spots that in-context review misses. If your agent does not support sub-agents, perform the review yourself: re-read the success criteria at the top of this file, then systematically check each item below against your actual output.
Review criteria:
- For every property in scope, the implementation covers the code paths, failure scenarios, and instrumentation points described in its evidence file — not just "an assertion exists" but "the assertions cover what the evidence says needs to be covered"
- Each assertion uses the correct SDK assertion type for its property's semantics (/
Alwaysfor safety,AlwaysOrUnreachablefor liveness or meaningful semantic state,Sometimes(cond)/Reachablefor path and outcome checks)Unreachable - assertions should be rewritten as
Sometimes(true, ...).Reachable(...) - Assertion messages are unique across the touched code; no broad property is implemented by reusing one message at multiple unrelated callsites
- Workload-only instrumentation was not used where surgical SUT-side assertions would provide materially better search guidance for rare, dangerous, or timing-sensitive internal states
- markers are attached to distinct outcomes or branch results, not redundant early path-entry locations on the same straight-line flow
Reachable(...) - Test commands exist under and use valid prefixes (
antithesis/test/,parallel_driver_,singleton_driver_,serial_driver_,first_,eventually_,finally_)anytime_ - Test commands are written in the project's language, not Bash, and reuse the project's clients and libraries where possible
- No test command is responsible for Antithesis lifecycle signaling; is emitted before test commands begin
setup_complete - Test templates are structured correctly at the path that will map to in the container
/opt/antithesis/test/v1/{name}/ - Helper files or directories are prefixed with so Test Composer ignores them
helper_ - is updated to reflect the implementation status of every property in scope, with provenance frontmatter (
antithesis/scratchbook/property-catalog.mdandcommit) reflecting the current codebase stateupdated - Assertions are in workload code or surgical SUT locations — not scattered across production paths
- Use on
snouty validateto ensure that the compose setup can reach setup complete and any configured test-templates work. Make sure to build the latest images before running validate.antithesis/config
在宣布本技能完成之前,根据以下标准审查你的工作。如果你的Agent支持生成子Agent,可创建一个具有全新上下文的新Agent来执行此审查——为其提供本技能文件的路径,并让它读取所有输出工件。具有全新上下文的审查者能发现上下文内审查遗漏的盲点。如果你的Agent不支持子Agent,请自行执行审查:重新阅读文件顶部的成功标准,然后系统地对照实际输出检查以下每一项。
审查标准:
- 对于所有范围内的属性,实现覆盖了其证据文件中描述的代码路径、故障场景和插装点——不仅是“存在断言”,而是“断言覆盖了证据中说明需要覆盖的内容”
- 每个断言都使用了与其属性语义匹配的正确SDK断言类型(/
Always用于安全属性,AlwaysOrUnreachable用于活性或有意义的语义状态,Sometimes(cond)/Reachable用于路径和结果检查)Unreachable - 断言应重写为
Sometimes(true, ...)Reachable(...) - 被修改代码中的断言消息是唯一的;不会在多个不相关的调用点复用同一个消息来实现宽泛的属性
- 对于罕见、危险或对时间敏感的内部状态,若精准的SUT端断言能提供更好的搜索指导,则不应使用仅工作负载端的插装
- 标记应附加到不同的结果或分支结果上,而非同一线性流程中冗余的早期路径入口位置
Reachable(...) - 下存在测试命令,且使用了有效前缀(
antithesis/test/、parallel_driver_、singleton_driver_、serial_driver_、first_、eventually_、finally_)anytime_ - 测试命令使用项目的语言编写,而非Bash,并尽可能复用项目的客户端和库
- 没有测试命令负责Antithesis生命周期信号;测试命令开始前会发出信号
setup_complete - 测试模板的结构正确,其路径在容器中会映射到
/opt/antithesis/test/v1/{name}/ - 辅助文件或目录以为前缀,以便Test Composer忽略它们
helper_ - 已更新,以反映所有范围内属性的实现状态,且来源前置信息(
antithesis/scratchbook/property-catalog.md和commit)反映了当前代码库状态updated - 断言位于工作负载代码或精准的SUT位置——而非分散在生产路径中
- 在上运行
antithesis/config,确保compose设置能完成初始化,且所有配置的测试模板都能正常工作。运行验证前请确保构建了最新的镜像。snouty validate