Load the engine, then take its pieces away and check what survives
A standalone harness, never part of the test run, that drives a real stack through the durable path — the webhook, which journals every trigger — and then stops Redis, kills the engine mid-cascade and restarts the broker under a live subscription. Latest-value-wins with concurrent cascades means counter equality is not a promise, so what it asserts is that the queue drains, that state ends on the last value sent, and that nothing reached the dead-letter stream. Every docker verb goes through one helper that checks the compose label before it acts and refuses anything outside this project, because the machines this runs on host unrelated services. Two invariants are deliberately looser than they look. The queue belongs to the whole stack, so "nothing pending" would be measuring other people's traffic; the harness waits on the age of the oldest unacknowledged entry instead, which a stuck item always dominates. And the observability tables are cleared only after the collector's flush interval has passed, since deleting a flow publishes an audit event of its own. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017MeiWk3Yq12n2pTvnQWYvt
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
# The workspace root delegates to these (see ../Makefile).
|
||||
|
||||
.PHONY: dev-utils dev dev-local up down update install dev-backend dev-frontend \
|
||||
generate-client test test-backend test-frontend lint lint-backend \
|
||||
generate-client test test-backend test-frontend soak lint lint-backend \
|
||||
lint-frontend clean help
|
||||
|
||||
COMPOSE_ROOT := $(CURDIR)
|
||||
@@ -80,6 +80,11 @@ test-backend: ## Run backend tests (pytest + coverage)
|
||||
test-frontend: ## Run frontend tests (Playwright e2e)
|
||||
cd frontend && bunx playwright test
|
||||
|
||||
# Load and chaos against a *running* stack, never part of `make test`: it
|
||||
# restarts this stack's containers. `SOAK_ARGS="--dry-run"` only looks.
|
||||
soak: ## Run the soak/chaos harness (SOAK_ARGS="--minutes 30 --scenario redis")
|
||||
cd backend && uv run python scripts/soak.py $(SOAK_ARGS)
|
||||
|
||||
# ── Linting ───────────────────────────────────────────────────────
|
||||
|
||||
lint: lint-backend lint-frontend ## Run all linters
|
||||
|
||||
Reference in New Issue
Block a user