Repository navigation
Releases: litmuschaos/litmus-lite
Release list
v0.2.0
litmus-lite v0.2.0
The first release meant for people who did not write it, and the first from the litmuschaos organisation. It makes a green run mean something, closes several ways an agent or a stray scenario could do more than its author intended, and turns the project into one a stranger can install and try in five minutes.
It changes behaviour in ways that can turn a run that passed on v0.1.x red, or make a command refuse something it used to do. The list is below; read "Upgrading" first.
Quick start: README. Install: download the archive for your system below, check it against checksums.txt.
Upgrading from v0.1.x
| Before | Now | What to do |
|---|---|---|
A hypothesis value that could not be read (800 for a latency, lots) became 0 or was ignored |
It is an error when the file is loaded. Units are strict: error_rate and availability are percentages (5 or 5%), p50/p95/p99 are durations (a bare number is milliseconds), recovery is a duration (a bare number is seconds), rps is a number |
Run litmus-lite validate FILE on your scenarios |
| A hypothesis over a window with no samples passed | It fails with observed: "no data" |
Fix the probe, or set allowNoData: true on a hypothesis that is expected to have no samples |
recovery <= 30s passed if the run ended before the service recovered |
It fails with observed: "not recovered" |
Lengthen recover, or fix the service |
on-chaos probes ran all the time; an unknown mode was ignored |
on-chaos samples only while the faults are armed; an unknown mode is an error; SOT in probes runs once before the faults and stops the run if it fails |
Check your mode values |
Misspelled keys (dealy: 800ms) were ignored |
They produce a warning, with the closest valid name. -strict turns warnings into errors |
Add -strict to validate in CI |
An agent (MCP) could pass yes, allow-target and allow-pid |
MCP refuses them unless a person enabled them in LITMUS_LITE_MCP_ALLOW of the server entry |
litmus-lite init -env LITMUS_LITE_MCP_ALLOW=allow-pid, then restart the server |
| The live view was on by default | It does nothing until a service is configured (live enable URL, -live-url, or LITMUS_LITE_LIVE_URL). Nothing is sent and no browser opens otherwise |
Configure it if you use one. init -live-dir is replaced by init -env KEY=VALUE |
| Ctrl-C or SIGTERM could leave faults in place | Faults are rolled back on SIGINT and SIGTERM; the exit code is 130 and there is no report | None |
A Kubernetes service host (*.svc) was refused even with -allow-target |
It needs -allow-target HOST and -yes |
Pass both |
export job used an image that does not exist |
-image IMAGE is required; the output is a ConfigMap and a Job; the Job passes -yes and -allow-target only when you did; a scenario the Job would refuse is refused at export. The project publishes no image |
Build or mirror an image with litmus-lite on its PATH. Still experimental |
ci github wrote a workflow that only worked in this repository |
It writes a workflow that installs a release (checked against checksums.txt) and runs validate -strict on every *.chaos.yaml. -version TAG pins a release; -force overwrites an existing file |
Re-run litmus-lite ci github -force. Because it runs validate -strict, a scenario with no hypotheses or a proxy fault no probe calls now fails that job until fixed |
move-to -adapter harness |
Removed (it was a stub). ir and litmus remain |
None |
A scenario with no hypotheses ran green whatever the probes saw |
validate and run warn "no hypotheses: this run cannot fail", and -strict makes it an error. The cpu.hog, memory.hog and disk.fill templates now ship with hypotheses |
Add at least one hypothesis (error_rate or recovery) |
An HTTP fault (http.latency, http.status-inject, http.timeout) whose listen address no probe called passed, because nothing went through the proxy |
validate warns when no probe calls the listen address, -strict makes it an error, and run warns when the proxy saw no request while armed |
Point the probes, the load generator or your client at listen, not at the upstream |
The code lived at github.com/ksatchit/litmus-lite |
It lives at github.com/litmuschaos/litmus-lite, and the Go module path changed with it. GitHub redirects the old URLs |
Update go install, clone and release links. A Homebrew install is not published for v0.2.0; use the release archive |
report.json had no version |
schemaVersion: 2, and noData and allowNoData on each hypothesis. Older reports are read as version 1; a report from a newer version is refused |
None |
New
- HTTP body assertions.
expect.body.contains,notContainsandmatcheson an HTTP probe, each a string or a list. The first 1 MiB is judged; the failing assertion is recorded in the sample without quoting the body. An assertion that cannot work (a bad regular expression, a number) is an error when the file loads. - A notice when a scenario runs commands.
validateandrunlist everycmdprobe andload.tool: commandcommand before anything runs;validate -output jsonreturns them asrunsCommands. - README quick start with one green and one red run using only
examples/cashier(charge.chaos.yaml, and the newcharge-must-survive.chaos.yaml). SECURITY.mdwith what is checked, what is not, and how to report;CONTRIBUTING.md(DCO),CODE_OF_CONDUCT.md,GOVERNANCE.md,MAINTAINERS.md, issue and pull request templates.- A steady-state failure says where and why. A probe that fails before any fault starts reports its name, method, URL (without credentials or query) and the reason, with a hint when the connection was refused.
- Strict checking (
-strict) onvalidateandrun, and MCPstrict. init -env KEY=VALUEwrites environment variables into the MCP server entry;live enable|disable.- The report and the HTML name the load generator that ran (tool and version), and
doctorwarns when an older copy shadows a newer one. - A run is judged and reported the same in
report.jsonand in the streamedrun.finishedevent (startup warnings are in both).
Fixed
- An interrupted run rolls everything back (
process.pause,docker.pause,disk.fill). export joband the hub import closed against injection through a scenario name or a template.- An older
vegaloadwithout-stream-fileno longer leaves a stray report or opens a browser tab. - The Linux and Windows tests that blocked the v0.1.2 release; every release path is tested in CI, and the tests run before the release job, not inside it.
Known limitations
Listed in full in SECURITY.md and the README: docker.pause has no allowlist; a command probe or a load.tool: command runs with your permissions; SIGKILL of litmus-lite during process.pause leaves the process stopped; HTTP probes follow redirects; a failing EOT probe is recorded but does not change the verdict; command probes need sh; release binaries are not signed. The HTTP fault proxy speaks HTTP/1.1 on plain TCP: gRPC and cleartext HTTP/2 are not supported, an https-only upstream and long-lived connections (WebSockets, SSE) are untested, and a fault applies to a long-lived connection only when it is opened. A failed probe sample can carry the probe URL, with its query string, in the report: keep secrets out of probe URLs.
Checksums
checksums.txt is attached to the release. Verify with sha256sum --check --ignore-missing checksums.txt (shasum -a 256 -c on macOS).
v0.1.1
Changelog
- 9456c2b Advertise MCP tool input schemas, forward hub_import name, and report the real version at initialize
v0.1.0
Changelog
- 7bde6a0 Add a Go failpoint SDK and the cashier sample so a named hook stays dark until a scenario arms it for the inject window
- f586029 Add a Litmus 4.0 move-to file adapter and an optional git-pinned ChaosHub so a scenario can leave the laptop without ChaosEngine CRDs or a required network.
- 47c5510 Add docker.pause, cpu/memory hog, and capped disk.fill (kill/fill still need -yes), plus JUnit output, a Windows HTTP CI job, richer hub import, a clearer overlay HTML report, and terminal/Cursor/VegaLoad LaunchPad playbooks.
- f5246da Add litmus-lite: agent-native chaos CLI, hub faults, and self-contained overlay reports.
- 1626cce Add process.kill with SIGTERM-then-SIGKILL so a local process can be terminated only when the operator passes -yes.
- 5176d7d Fail closed on destructive faults: signal only an allowlisted PID, and refuse to let disk.fill overwrite an existing file.
- 5d6e50d Generalize load: so VegaLoad stays the default and k6 or an internal command can merge into the same overlay.
- 20e44aa Initial commit
- cbeb73a Make mcp eval run versioned CLI-backed fixtures so a tool without a CLI equivalent fails before an agent can rely on it.
- d71a66a Merge VegaLoad time series into the overlay and keep the HTTP proxy up across steady/inject/recover.
- 5ccbfe8 Serve now skips any message without an id, and removed the fake reply for initialized
- 8489fcc add homebrew based install support
- 2d55227 add newer todo and other notes as comments
- 7b812e4 add todo and other notes as comments
- a283edc fix the launchpad probe path
- 39aec49 fix windows ci build