|
| 1 | +This directory contains files relevant to running tests in Antithesis. |
| 2 | + |
| 3 | +# Skills |
| 4 | + |
| 5 | +Use the `antithesis-setup` skill to scaffold and manage this directory. Use the |
| 6 | +`antithesis-research` skill to analyze the system and build a property |
| 7 | +catalog. Use the `antithesis-workload` skill to implement assertions and test |
| 8 | +commands. Use the `antithesis-launch` skill to build, validate, and submit |
| 9 | +Antithesis runs — do not run `snouty launch` directly. |
| 10 | + |
| 11 | +**snouty launch** |
| 12 | + |
| 13 | +Use `snouty launch --json --webhook basic_test --config test/antithesis/deploy` |
| 14 | +to start an Antithesis run. Always run `compose build` first to ensure images |
| 15 | +are up to date. |
| 16 | + |
| 17 | +**snouty validate** |
| 18 | + |
| 19 | +Use this command to quickly validate changes to the Antithesis scaffolding. See |
| 20 | +`snouty validate --help` for details. |
| 21 | + |
| 22 | +**setup-complete.sh** |
| 23 | + |
| 24 | +Inject this script into a Dockerfile to notify Antithesis that setup is |
| 25 | +complete. This script should only run once the system under test is ready for |
| 26 | +testing. Antithesis will not run any test commands until it receives this event. |
| 27 | + |
| 28 | +**Directory layout** |
| 29 | + |
| 30 | +- `harness/` — the harness Rust crate (`harness`), a member of the |
| 31 | + repository-root workspace. `src/lib.rs` holds shared helpers; each |
| 32 | + `src/bin/*.rs` is an Antithesis test command named after its file. Run cargo |
| 33 | + from this directory; it is built, fmt'd, Clippy'd, and tested from the repo |
| 34 | + root via the usual `make check-all` / `make test`. |
| 35 | +- `deploy/` — all Antithesis/Docker infrastructure: the `Dockerfile`, |
| 36 | + `docker-compose.yaml`, and per-container build inputs grouped by service |
| 37 | + (`deploy/adp/`, `deploy/workload/`). This is the directory snouty consumes as |
| 38 | + `--config`; it contains `docker-compose.yaml` at its top. Snouty will push |
| 39 | + tagged images, consume this directory, and launch the run. |
| 40 | + |
| 41 | +**scratchbook** |
| 42 | + |
| 43 | +This directory is the Antithesis scratchbook for the codebase. It contains |
| 44 | +documents such as system analysis, property catalogs, topology plans, |
| 45 | +per-property evidence files (in `scratchbook/properties/`), property |
| 46 | +relationship maps, and other persistent integration notes. Keep it up to date as |
| 47 | +Antithesis-related decisions change. |
| 48 | + |
| 49 | +**test templates** (`deploy/workload/test/`) |
| 50 | + |
| 51 | +This directory contains test templates. A test template is a directory |
| 52 | +containing test command executable files. Each test command must have a valid |
| 53 | +prefix: `parallel_driver_, singleton_driver_, serial_driver_, first_, |
| 54 | +eventually_, finally_, anytime_`. Prefixes constrain when and how commands are |
| 55 | +composed in a single timeline. Files or subdirectories prefixed with `helper_` |
| 56 | +are ignored by Antithesis and can be used for helper scripts kept alongside the |
| 57 | +commands. |
| 58 | + |
| 59 | +# Agent Behavior |
| 60 | + |
| 61 | +Agent behavior will be governed by the following dictums: |
| 62 | + |
| 63 | +- **The human is primary.** If you run into any confusion, pause and ask for |
| 64 | + clarification. |
| 65 | +- When you are faced with a choice between doing the right, time-consuming thing |
| 66 | + or the wrong, fast thing do the right thing. |
| 67 | +- Code is liability. The status quo is not worth preserving if it does not have |
| 68 | + utility. Be unsentimental and delete what is not needed. |
| 69 | +- **Truth over comfort.** Say what is true regardless of the presumed comfort of |
| 70 | + the receiver. Do not soften findings, hedge claims or omit bad news. To do so |
| 71 | + is _not kindness_. It is, rather, an insidious form of lie. Note that this |
| 72 | + dictum should be understood less in terms of Kim Scott's "Radical Candor" -- a |
| 73 | + gift from the elite to the undeserving common -- but more in Walter |
| 74 | + Brueggemann's "Prophetic Imagination" where truth erodes a "royal |
| 75 | + consciousness" that ablates one's ability to do new and interesting things |
| 76 | + _and_ shouts a path toward those new and interesting things, against the |
| 77 | + status quo. Consider in this same vein Tony Hoare's "The Emperor's Old |
| 78 | + Clothes". |
| 79 | +- **Honor the spirit of a request, not just its letter.** A "random string |
| 80 | + pool" requires actual variation. Returning `["foo", "bar"]` is technically |
| 81 | + a pool but a semantic mismatch. When the literal reading is unusually |
| 82 | + narrow or cheap, reach for the generous reading. Hostile compliance is |
| 83 | + worse than asking. |
0 commit comments