Repository navigation
Changelog
Features
- 2c6731b feat(action): add a composite GitHub Action and exercise it in CI
- 61a947d feat(agent): add stampede agent for fault injection
- 671d0b2 feat(ai): add pluggable LLM providers for Anthropic, OpenAI, Gemini, Ollama and compatible servers
- ea96e8e feat(ai): build a dependency map and traffic mix from OpenAPI, HAR and access logs
- b77cf9e feat(ai): dry-run executor that traces each journey once with one user
- ac2d529 feat(ai): generate grpc journeys from .proto files and dry-run gRPC steps
- 4c8c3e7 feat(ai): generate journeys from a GraphQL schema
- 3719fc6 feat(ai): generate journeys from a headless browser crawl
- a6e38b8 feat(ai): generation pipeline with draft, static check, dry run and repair
- 9965721 feat(ai): redact secrets and personal data, and guard against third-party hosts
- b202d58 feat(ai): static check against the spec, YAML rendering and diffs
- dcc0548 feat(ai): write report narratives whose claims cite the figures
- 5d9e460 feat(api): add AI journey generation endpoints under a new ai tag
- 35b2531 feat(api): add schedule endpoints with cron preview
- 5f89647 feat(api): define the public REST API in OpenAPI and generate server stubs
- b9a3f90 feat(api): include organisation and project caps in the effective limits
- 0d08c1e feat(api): live worker health, packs, scenario coverage and drift, server settings
- a27367e feat(auth): add argon2id passwords, hashed tokens, roles and login throttling
- cb6da70 feat(bench): add accuracy benchmark against calibrated ground truth
- 20a05f8 feat(bench): add calibrated echo server with exact ground-truth percentiles
- e809f70 feat(bench): compare Stampede, k6 and wrk2 against the echo server's ground truth
- 747c834 feat(bench): measure one process's sustainable request rate
- 0b98f3b feat(brand): switch to the block-art bull in teal
- 2789f45 feat(breakpoint): confirmation holds bisect the gap after the first failing step
- 514e5db feat(cli): --ha active, and workers that connect to several servers or dns:host:port
- a08ba52 feat(cli): --pdf, --csv and --timeline-csv on stampede run and stampede report
- c1805bb feat(cli): --region on stampede start and run --cluster
- e60a957 feat(cli): accept workers on a gRPC port from stampede server
- 659cefa feat(cli): add Go module, stampede binary skeleton and Makefile
- 130a870 feat(cli): add compare and report commands and run --repeat
- 7c39d2d feat(cli): add login, start, push, runs, stop, kill, workers, up, down and doctor
- 8ddc2c4 feat(cli): add run, validate and target verify commands
- 0c1b7f4 feat(cli): add server --worker-mtls and worker --mtls --ca-fingerprint
- 286b13f feat(cli): add server and keygen commands
- 9e4ab75 feat(cli): add stampede coverage and stampede drift
- d0f8313 feat(cli): add stampede generate for AI journey generation
- 2039746 feat(cli): add stampede init and pack list, install and test
- ee12fbe feat(cli): add stampede plugin list, show, install and remove
- 34fa94d feat(cli): add stampede schedules list, create, enable, disable, delete and run
- 3fdd59b feat(cli): add stampede worker command
- a83bb31 feat(cli): chart target metrics and link traces from the observe block in stampede run
- 70a778d feat(cli): drift schedules, --spec-url and --region on stampede schedules create
- eb5f98f feat(cli): init and pack test ask for a pack's other variables
- e9ec79a feat(cli): plugins column in stampede workers
- 3e84577 feat(cli): retry the database on start and add a container healthcheck command
- 62c08aa feat(cli): run scenarios without a base URL against private hosts
- e69be19 feat(cli): stampede ai providers and ai jobs (create, show --wait, approve), and stampede narrative
- a1f4067 feat(cli): stampede audit (--limit, --since, --before, --action) and stampede settings sso and limits
- b64fc7e feat(cli): stampede backup and restore wrap pg_dump and pg_restore
- f4a6d14 feat(cli): stampede drift results, show and repair for scheduled checks; coverage and drift check server scenarios with --scenario
- 53e0393 feat(cli): stampede gen as an alias of stampede generate
- ff61bc9 feat(cli): stampede integrations and stampede notify (channels list, create, delete and test; deliveries)
- f1523ed feat(cli): stampede pack create scaffolds a new pack folder
- 8ad581a feat(cli): stampede plugin create scaffolds a plugin module with a conformance test
- 7b6d3c1 feat(cli): stampede projects (with settings, roles and a default project) and stampede caps
- c5b38dd feat(cli): stampede report and compare take server run ids as well as files
- 87c8d69 feat(cli): stampede run --cluster runs a scenario on the server's workers
- 5d5b3ba feat(cli): stampede runs follow and stampede version --server
- 9b1f56d feat(cli): stampede runs list, show, events, timeline and workers; --json on runs and workers
- 258cee3 feat(cli): stampede scenarios list, show (--yaml, --version), versions, delete and validate
- 13119ba feat(cli): stampede schedules update (every field, the drift spec URL included), show and preview; --json on schedules list
- 9129753 feat(cli): stampede secrets; values come from stdin, a prompt or --from-env and are never printed
- cf7a0c3 feat(cli): stampede setup, logout, whoami and password; login reads STAMPEDE_PASSWORD
- 1e5c1ca feat(cli): stampede targets list, create, show, update, delete and verify; stampede target verify keeps checking URLs
- cc4847f feat(cli): stampede up without a clone, from the released images of this version
- a4d9fab feat(cli): stampede users and tokens; a token's secret is printed once
- d20bc4c feat(cli): stampede validate --dry-run runs each journey once against the target
- 647ee90 feat(client): add a REST API client with live run streaming
- 5fdd55a feat(client): finders for users, tokens, AI providers and jobs, drift results, integrations and channels; a default project; setup and password tokens
- db7eea6 feat(compose): browser and observability profiles
- a3b00f3 feat(coordinator): add capacity sharding, clock offset estimation and snapshot merging
- b19e951 feat(coordinator): an idle worker takes over a lost worker's share
- 843c752 feat(coordinator): enroll workers for certificates and require them with mTLS
- 3e86fd4 feat(coordinator): register workers over gRPC and run synchronised distributed tests
- 2580ee0 feat(cron): parse five-field cron expressions with time zones
- f6c9e6f feat(deploy): add a Grafana dashboard for the server's own metrics
- c15c0a3 feat(deploy): add container image and one-command Compose stack
- 5a4980a feat(deploy): build and install an offline bundle for air-gapped networks
- 675281a feat(deploy): use worker mutual TLS by default in Compose and Helm
- b3d30b2 feat(engine): TLS session caches per user, and journey and step in trace baggage
- 8da0c33 feat(engine): a failed browser step keeps a screenshot, console errors and a HAR
- e7857ae feat(engine): add closed, open and iteration executors with exact arrival schedule
- 9ea2bb6 feat(engine): add data feeders with unique rows partitioned across workers
- ef7fb46 feat(engine): drive real browser pages with browser steps
- beb757b feat(engine): evaluate schema checks; the dry run names the first mismatch
- 124e64e feat(engine): generated and SQL test data, with database hosts vetted by the run's host policy
- 1d17287 feat(engine): keep three redacted request/response examples per step and error
- 63cd49d feat(engine): replay access logs and HAR files at their recorded times
- 1e564a3 feat(engine): run journeys as virtual users with checks, extractors and trace context
- 103a9b3 feat(engine): run plugin steps
- d44d13a feat(engine): run script steps; the dry run runs them too
- daca6b4 feat(engine): start part-way through a plan, and keep generated data unique across takeovers
- 0120bf0 feat(feed): generated fake data and rows from a SQL query
- 31e2c6a feat(graphql): add graphql steps with automatic persisted queries
- bbdc81e feat(grpc): add unary and server-streaming gRPC steps
- 84f4d29 feat(health): ephemeral ports and network throughput against link speed (Linux)
- 52cce91 feat(helm): add a chart for the server, workers and their secrets
- 5208b7f feat(helm): add ingress, worker autoscaling, disruption budgets and a ServiceMonitor
- 862df6f feat(helm): bundle an optional single-node TimescaleDB
- f8935c9 feat(helm): server.ha=active with a headless service for worker discovery
- aed5e57 feat(http): add HTTP driver with per-phase timing and error classification
- c73c788 feat(http): add h2c, record the negotiated protocol, prove h2 is used
- 96bbc92 feat(http): tlsResumption per-vu, shared or off; per user by default with per-user connections
- d327abb feat(keyring): encrypt secrets with AES-256-GCM envelope encryption
- 8080c73 feat(keyring): generate the master key file on first start when asked
- 25edb54 feat(keyring): read the master key from a command, for cloud KMS and secret managers
- 6b8a67d feat(metrics): add per-interval snapshots and lock-striped sample collector
- 543070f feat(metrics): add sparse HDR-style latency histogram with lossless merge
- 2cf952d feat(metrics): keep the five slowest requests per step with their trace IDs
- 5e141dc feat(metrics): record stream events, time to first event and protocol
- a9aa858 feat(netem): emulate jitter and packet loss
- d8e61c8 feat(netem): emulate slower networks per virtual user
- 2fdedc1 feat(notify): deliver signed webhooks, Slack and Discord messages with retries and an SSRF guard
- 046e029 feat(observe): query Prometheus over a run's time range for the report
- f580293 feat(operator): add StampedeCluster and StampedeRun CRDs
- 6dd84b5 feat(operator): add a client for the Stampede REST API
- ee898b9 feat(operator): reconcile StampedeCluster into a server, workers and keys
- 3017e89 feat(operator): restart a run with twice the workers when they saturate during ramp-up
- 5f94cb0 feat(operator): run StampedeCluster workers with mutual TLS
- 0915df8 feat(operator): run load tests declared as StampedeRun objects
- 6d08a93 feat(pack): detect identity providers by OpenID Connect discovery, match bare header presence
- 8ec0402 feat(pack): load, detect, install and dry-run product packs
- 7a665dd feat(packlab): DBLab, PostgreSQL tables and a Redis cache
- 9621f8d feat(packlab): GameLab, matchmaking, a UDP game server and a leaderboard
- caee7ff feat(packlab): IoTLab, an MQTT device platform
- 9bb6fc5 feat(packlab): PipelineLab, a Kafka event pipeline
- 5c1ebc2 feat(packlab): add APILab, a public API with keys, rate limits and webhooks
- 356b8fb feat(packlab): add AuthLab, an OAuth 2.0 and OpenID Connect token service
- 6f91437 feat(packlab): add ChatLab, chat rooms over WebSocket
- d1d2c67 feat(packlab): add PackLab reference apps, starting with LLMLab
- 1d901a4 feat(packlab): add SaaSLab, a multi-tenant app with REST and GraphQL APIs
- 044510f feat(packlab): add TicketLab, seat holds, orders and a WebSocket waiting room
- b64a1f5 feat(packlab): apps with a second listener, and packs that use plugins
- 69f7154 feat(packs): add the e-commerce pack and the catalogue of all 20 product types
- a53e1d3 feat(packs): ship the chat pack, tested against ChatLab
- 5225860 feat(packs): ship the content pack with NewsLab as its reference app
- ab47744 feat(packs): ship the databases pack
- b8b72d1 feat(packs): ship the delivery pack with RideLab as its reference app
- 77aeb6d feat(packs): ship the edtech pack with ExamLab as its reference app
- 7d8f5f1 feat(packs): ship the event-pipelines pack
- 3c59610 feat(packs): ship the fintech pack with BankLab as its reference app
- d34b29b feat(packs): ship the gaming pack
- 990ef89 feat(packs): ship the government pack with GovLab as its reference app
- f4b4a7b feat(packs): ship the identity pack, tested against AuthLab
- 0fe0ce9 feat(packs): ship the iot pack
- a4f47c4 feat(packs): ship the llm-apps pack, tested against LLMLab
- a047ed4 feat(packs): ship the mobile-backends pack with MobileLab as its reference app
- 8b7756d feat(packs): ship the public-apis pack, tested against APILab
- 62887e3 feat(packs): ship the saas pack, tested against SaaSLab
- cc5b7ff feat(packs): ship the serverless pack with EdgeLab as its reference app
- f0f96b4 feat(packs): ship the social pack with SocialLab as its reference app
- c1a8fdb feat(packs): ship the streaming pack with StreamLab as its reference app
- 99141bb feat(packs): ship the ticketing pack, tested against TicketLab
- dd59d75 feat(pki): add a worker CA derived from the master key
- ea51be3 feat(plugin): define the plugin protocol
- 7a6b3ba feat(pluginhost): find, start and check plugins
- b1ec502 feat(pluginhost): treat SQLite file: DSNs as local targets
- 64b4452 feat(plugins): add the Kafka plugin
- 6a6344f feat(plugins): add the MQTT plugin
- 45268e4 feat(plugins): add the Redis plugin
- ed35638 feat(plugins): add the SQL plugin
- 1c10bda feat(plugins): add the UDP plugin
- 484837e feat(pluginsdk): add a conformance suite for plugin authors
- 870b6e0 feat(pluginsdk): add the public SDK for writing protocol plugins
- c372e61 feat(proto): add worker protocol with a single bidirectional stream
- db44dd1 feat(proto): protocol v1.4, resumable StartRun for takeovers
- 7ce2da1 feat(proto): protocol v1.5, error examples in step snapshots
- 4b1a752 feat(proto): screenshots, console lines and HAR in error examples
- a4dd8c7 feat(report): PDF export through headless Chrome and per-step and timeline CSV
- 26ea6c8 feat(report): add an optional per-worker table for distributed runs
- 1abd0d5 feat(report): add verdicts, target evaluation and HTML, JSON, JUnit and Markdown exports
- 69a8612 feat(report): compare each step's p95 and error rate and write infinite changes as null
- d6ae634 feat(report): compare releases with bootstrap intervals and a measured noise floor
- 3d1645a feat(report): error examples in the report
- 1ca1410 feat(report): explain takeovers in the notes and name the replaced worker
- d44682a feat(report): find the knee of the throughput-against-load curve
- f1ee8f6 feat(report): list the slowest requests per step with trace links and chart target metrics
- 9be0e29 feat(report): recovery time after overload for spike and recovery runs
- 24c7292 feat(report): shade saturated and lost worker windows on the HTML charts
- 1dbb3bf feat(report): show browser failure artifacts
- 5c7e4b0 feat(report): show time to first event and events per second for streams
- 2d7501d feat(runner): abort runs whose errors or p95 stay above a limit
- 6c7a2d0 feat(runner): drive a coordinator run and build its report
- e238d4d feat(runner): inject a scenario's fault timeline during stampede run
- 0d6724b feat(runner): run scenarios in-process with breakpoint detection
- df820ff feat(runner): saturation checks and generator-limited verdicts for stampede run and server-local runs
- 5e7dfa3 feat(runner): the self-monitor keeps its latest health sample
- 8828401 feat(safety): classify targets, verify ownership and cap unverified public hosts
- 063cbc5 feat(safety): third-party guard in stampede validate and at server run start
- 86b4c6b feat(scenario): JSON Schema response checks, inline or from a file
- b48e104 feat(scenario): add CEL templating with ${} expressions and JSONPath support
- 6600d63 feat(scenario): add load.abort to stop runs on sustained errors or latency
- f6b6951 feat(scenario): add plugin steps
- f1f6e81 feat(scenario): add target.network to shape every user's connections
- 4e229f1 feat(scenario): add the observe block for Prometheus queries and trace links
- 99d0740 feat(scenario): compile and validate scenarios with variable-flow checks
- e298e0c feat(scenario): define scenario types, units and compact step syntax
- 9e5a954 feat(scenario): describe fault timelines for the stampede agent
- 4823586 feat(scenario): generate and sql feeders
- 511acb4 feat(scenario): load.regions splits a distributed run by worker region
- 91472c7 feat(scenario): parse targets and resolve load shapes into executor plans
- 141b902 feat(scenario): script steps with declared outputs
- 521a0d4 feat(schema): publish the scenario JSON Schema and test it against examples
- e08cd27 feat(script): JavaScript runner for scenario script steps (goja, sandboxed, time-limited)
- c4d0f69 feat(server): HTTPS for the API and web UI from a certificate or Let's Encrypt, with an HTTP redirect
- f198a54 feat(server): active replicas
- 65e670f feat(server): add HTTP server, error mapping, auth, CSRF and trusted-proxy middleware
- 85f923a feat(server): add POST /compare to compare finished runs of two versions
- 9b65028 feat(server): add integrations and notification channels under the integrations API tag
- 4caefe6 feat(server): add projects, targets with ownership checks and encrypted secrets
- ae66731 feat(server): add run manager, live streaming, reports and kill switch
- 651d2e0 feat(server): add setup, login, users, API tokens and audit endpoints
- 8c53d6c feat(server): add versioned scenarios with validation and plan summaries
- e2fa95a feat(server): apply a default abort floor to every run
- 89d74d3 feat(server): csv and timeline-csv report formats
- 1a2dfa2 feat(server): elect one active replica with a Postgres advisory lock
- 6f0ece8 feat(server): fire due schedules on the active replica
- bcc6ae9 feat(server): inject fault timelines in server and distributed runs
- b3ca4e4 feat(server): list workers' protocols and plugins
- d2199f5 feat(server): optional dry-run gate before load and GET /runs/{runId}/events
- ec2920e feat(server): organisation and project caps, project settings and per-project role overrides
- 6e7b4fa feat(server): run AI generation jobs and approve their proposals
- d7bab9c feat(server): run load on connected workers, falling back to in-process
- 4a4eb23 feat(server): scheduled drift checks with spec diff, drift.detected notifications and AI repair proposals
- 372a6d0 feat(server): sign in with OpenID Connect single sign-on
- 09bc3aa feat(server): split runs by worker region from load.regions or a run override
- cc6de2a feat(server): trace the API and each run with OpenTelemetry over OTLP and add API latency metrics
- 237a1df feat(server): write report narratives with POST /runs/{runId}/narrative
- 9a32e9a feat(shoplab): add HTTP API with auth, cart, checkout and admin routes
- cd0a6c4 feat(shoplab): add Postgres store with N+1 listing and oversell race
- b01a693 feat(shoplab): add Redis carts and cache backend
- 169e99b feat(shoplab): add Stampede scenarios for the shop mix and each planted bottleneck
- 02a6c9c feat(shoplab): add deterministic seeder and users.csv data feeder
- da9d667 feat(shoplab): add domain types and Prometheus metrics
- f3cbf77 feat(shoplab): add in-memory session store with planted leak
- c639a94 feat(shoplab): add module, env config and embedded migrations
- f014af8 feat(shoplab): add product cache with planted stampede
- ad59ac6 feat(shoplab): add shoplab binary with serve, seed and migrate commands
- 3f135c4 feat(site): add the website and docs site with Astro and Starlight
- 50cbf9b feat(site): copy buttons for commands, the master plan's fonts, tidy status pills
- f9ae1aa feat(site): dark, light and auto themes shared with the docs; readable nav button
- cb986d0 feat(sse): add server-sent event steps with time to first event
- 9de68c7 feat(store): 10s and 1m metrics rollups (continuous aggregates on TimescaleDB) and --metrics-retention
- 7a56078 feat(store): add PostgreSQL/TimescaleDB schema, migrations and typed queries
- 66c3d49 feat(store): add ai_providers and ai_jobs tables and queries
- 2891047 feat(store): add integrations, notification channels and a delivery log
- 2911ac2 feat(store): add locked transactions and tidy lint findings
- 9adc9f2 feat(store): add schedules table and claim queries
- 9518f5a feat(store): replicas table, run and AI job owners, LISTEN/NOTIFY helpers
- 36d1cca feat(terraform): add AWS and GCP examples for workers in several regions
- c57c4d3 feat(terraform): enroll workers with mutual TLS by default
- 0e2e179 feat(tui): /init runs stampede init, /run takes a duration and /run replay replays a recording
- 2a71f6f feat(tui): add the interactive terminal console
- 6055a49 feat(web): AI jobs are read-only; generate and approve with stampede ai jobs; routes drop the scenario editor
- 7cc048b feat(web): API coverage and drift for a saved scenario
- 6a81558 feat(web): API hooks and mock server for worker health, packs, coverage, drift and settings
- d2a3e84 feat(web): CSV downloads and a PDF button that prints the report
- 824fb32 feat(web): MSW mock mode with realistic fixtures
- b0504f4 feat(web): SSO and Limits settings tabs
- 3112180 feat(web): a copyable CLI hint and one map of the stampede commands the read-only UI points to
- 173472d feat(web): a highlighted, read-only YAML view with line numbers and copy
- c2d9f2d feat(web): account, tokens and users settings are read-only and point to stampede login, tokens and users
- 92d58c0 feat(web): add API hooks, types and formatting for the AI studio and run comparison
- 1b50a77 feat(web): add Integrations and Notifications settings for admins
- 7c76ae5 feat(web): add a Schedules page with cron preview, run now and enable toggle
- 935b62d feat(web): add the AI studio to generate, review and approve journeys
- ca2c258 feat(web): adopt the teal bull theme
- ca01ea6 feat(web): coverage and drift checks only read; the drift dry run points to stampede drift --target
- 5e463eb feat(web): create and edit drift schedules, and open their checks from the Schedules page
- 6fed233 feat(web): design tokens and UI primitives
- 7f85e61 feat(web): drift check results with traces, spec changes and a Propose a fix action
- e91e932 feat(web): edit the journey graph
- bb53a58 feat(web): edit the organisation's caps and show project caps in Settings → Limits
- 5d903e5 feat(web): first-time setup page tells you to run stampede setup instead of showing a form
- 0cd5e2f feat(web): formatting helpers and role permissions
- ca8e2cc feat(web): integrations, notification channels and AI providers are listed read-only
- a01db66 feat(web): library is browse-only; copy stampede pack install and push instead of saving a scenario
- 54ab32a feat(web): library page for the built-in packs
- 9eb434d feat(web): live run view over SSE and the run report
- 24e30f8 feat(web): load the OpenAPI document for coverage and drift from a file
- 17ee48c feat(web): manage AI providers in Settings
- b57d470 feat(web): mock caps, the dry-run gate, project roles, run events and drift checks
- 27d72f9 feat(web): mock integrations, notification channels and observed reports
- 0ad797e feat(web): new run dialog
- 7e6291f feat(web): organisation and project caps, the dry-run gate and role overrides are shown, set with stampede caps and projects
- 5cbe4a0 feat(web): plugins column on the Workers page
- 990b0da feat(web): project overview and runs list drop New run, edit and delete; show stampede start instead
- 7920b2f feat(web): project settings page with caps, the dry-run gate and per-project roles
- 69bbca7 feat(web): projects list is read-only; stampede projects create adds one
- 507d384 feat(web): projects, project overview and runs list
- 92c4576 feat(web): query hooks for caps, project settings and roles, run events and drift results
- 1868a5d feat(web): regenerate the API client
- 9c218c3 feat(web): region split in the New Run dialog; drift schedules on the Schedules page
- 4e5e894 feat(web): report types for the curve, knee, recovery, workers and error examples
- 8312111 feat(web): report view shows the load curve, recovery, workers and error examples
- fec7054 feat(web): routing, first-run setup, sign-in and app shell with kill switch
- cec48e7 feat(web): run events on the run page, with the dry-run gate's per-journey results
- 302dd6f feat(web): run page groups Stop and Kill as safety controls; AI summary is display-only with stampede narrative
- ee187ec feat(web): scenario list and editor with schema-aware YAML and journey graph
- 434c9c7 feat(web): scenarios are viewed, not edited; stampede push saves new versions
- 82c23f8 feat(web): schedules and drift results are read-only; create, run, update and repair from the CLI
- 85dca13 feat(web): select finished runs and compare them side by side
- a5b86d6 feat(web): show target metrics and the slowest requests with trace links in reports
- f4d3ddb feat(web): structural edits to scenario YAML that keep the file as written
- 364d13e feat(web): targets and secrets are read-only; create, verify and set from the CLI
- 7998072 feat(web): targets with ownership verification, and secrets
- fb0376f feat(web): the journey graph is read-only; selecting a step shows its details
- a1a02c2 feat(web): the sidebar says the UI is read-only; the kill switch is labelled as a safety control
- 650e4a8 feat(web): typed API client generated from the OpenAPI spec
- 1503949 feat(web): worker health grid in the live run view
- a72311f feat(web): workers and settings
- 4c124d9 feat(web): write and show AI report summaries with cited figures
- 2b5442c feat(wire): carry the slowest requests and their trace IDs from workers (protocol v1.2)
- 618a31a feat(wire): convert snapshots, phases and health to protocol messages
- 40eee0f feat(worker): advertise installed plugins and refuse runs that need missing ones
- c3fb0ac feat(worker): connect out to the server and run assigned load slices
- 533f670 feat(worker): share one machine between several server replicas
- f187059 feat(ws): add WebSocket blocks with send and expect steps
- 65416a2 feat: one-line installers for Linux, macOS and Windows
- c1b97cb feat: report Web Vitals for browser steps and ship a browser worker image
- be06858 feat: serve the embedded web UI from stampede server
- a0a8957 feat: stampede generate --proto and .proto inputs for server AI jobs
- b4be49b feat: theme the HTML report and terminal console with the teal bull
Bug fixes
- 462f745 fix(ai): keep only the two most natural producers per dependency
- efdbc57 fix(api): name the new enums' constants so existing ones keep theirs
- c3afa05 fix(api): use double precision for numeric fields
- 4afac06 fix(bench): wrap the echo server build error
- 5bb2717 fix(cli): point init's next step at the installed pack's own journey
- 1809b1a fix(client): decode responses into a zero value, so fields a response leaves out do not survive from the request
- 4ecf62f fix(engine): send open-model arrivals due before the planned end even when dispatched late
- cf26b6a fix(grpcx): read the stream's real status when Send ends early, so reflection falls back to v1alpha
- 4570bbd fix(health): read ports, interfaces and descriptors outside the monitor's lock, once a second per process
- 063fe01 fix(httpx): ignore trace callbacks from dials the request did not use
- bd8f180 fix(install): accept checksum lines in sha256sum binary-mode format; regenerate the CLI reference
- e8e4d5f fix(notify): use a tagged switch and an escaped zero-width space
- b202c8f fix(packlab): satisfy errcheck and gosec; keep the session id in the request context
- ef2f963 fix(packlab): satisfy golangci-lint in the new reference apps
- 44e67f3 fix(pki): check the server certificate in VerifyConnection
- 7382b30 fix(plugins/redis): report a dropped pooled connection as a connection error
- 604c93e fix(report): keep the timeline to the planned load phase and add report tests
- 0f7452e fix(scenario): keep scaled shape durations exact and show iterations in validate
- 673a4ed fix(scenario): refuse NaN, infinite, negative and overflowing durations, rates and percentages
- 6c234da fix(scenario): refuse replays that span more than 7 days
- 687c358 fix(scenario): reject unknown keys inside check blocks
- 6914c93 fix(schema): accept target scopes that contain spaces
- fafa89e fix(security): confine CSV and JSON feeders on the server to a data directory
- 7290c83 fix(security): upgrade gRPC past GO-2026-6443 and go-archive past GO-2026-6253
- d16bfea fix(server): allow the UI's inline scripts by hash in the content security policy
- 9137d70 fix(server): never start a notification delivery after shutdown began
- 1e2f458 fix(server): record how many workers actually ran a run
- 3efc7a4 fix(server): retry a finished run's report and status through a database outage
- 84fb811 fix(server): wrap the dry-run gate's error
- bcc767e fix(shoplab): cast shared stock params, UTC timestamps, covering review index
- 3d74b29 fix(store): name the continuous aggregate literally when refreshing
- 892d903 fix(web): full-width header in the AI providers table and the right check name in the mock trace
- f530474 fix(web): give tooltips their own provider so the theme toggle works on sign-in pages
- fe02ae6 fix(web): once the polled run has ended, a stale live stream no longer keeps the run page live after Stop or Kill
- dd3a12c fix(web): readable chart axes, AA contrast on danger buttons, wider kill dialog
- 8be9710 fix(web): the journey graph hint says what graph edits change
- e2df1cf fix(worker): build file descriptor sampling on the BSDs
- f3f2c30 fix(worker): replay the whole unacknowledged backlog on reconnect
- 5e90b18 fix(worker): require two intervals of scheduling lag before reporting saturation
- 7d19d1d fix: gofmt the report and test the current protocol version in the major check
- 9ad9404 fix: lint findings in pack test's error and IoTLab's test
- 9e41599 fix: real-time rollups on TimescaleDB, and the crawler waits for the page's network to go quiet
- b0a879c fix: track the coverage sources the gitignore hid, and tidy every module
Performance
- a42e2fa perf(engine): dispatch open-model arrivals with an adaptive precise waiter
- 65f7cb8 perf(http): share a DNS cache across virtual users
Refactoring
- 73981ab refactor(cli): setDefaultProject returns only an error
- f2ff09f refactor(cli): split starting and following a server run out of stampede start
- 1feb9a2 refactor(cli): stampede init and pack test as functions of a context and a writer
- f54aa7b refactor(report): drop the unused lineChart helper
- 687c2e6 refactor(runner): export the breakpoint tracker for the control plane
- 18a6e7e refactor(scenario): share run-time load overrides between CLI and API
- 590e212 refactor(server): split run creation into prepare and start helpers
- c00d25f refactor(web): keep caps form helpers apart from the caps fields component
- 94eaae4 refactor(web): keep only read hooks plus sign-in, stop and kill in the API client
- 001b86b refactor(web): permissions cover only what the read-only UI shows
- aad964a refactor(web): remove the New run dialog and its form helpers
- 571b3d0 refactor(web): share the overrides and environment fields between dialogs
- b8dc20e refactor: address golangci-lint findings
- d88ccef refactor: the generator health monitor becomes its own package
Build and CI
- 0504917 build(operator): add the operator image, kustomize manifests and samples
- 38735a3 build(release): add GoReleaser config for binaries, images, SBOMs and signatures
- 27e877c build(release): publish the operator image with each release
- 16c44bd build(shoplab): add distroless Dockerfile and standalone compose stack
- d1b4693 build(web): drop Monaco and monaco-yaml now that nothing edits YAML
- 546de05 build(web): embed the built UI in the Go module and commit dist
- 85ea205 build(web): keep vendor chunks free of app imports and the build reproducible
- c1cfb3f build(web): rebuild dist
- e44849a build(web): rebuild dist
- 461fb39 build(web): rebuild dist for the read-only UI (1.5 MB, down from 6.4 MB without Monaco)
- f217b61 build(web): rebuild the UI for the current scenario schema
- 224ce0e build(web): rebuild the UI for the plugin step in the scenario schema
- c36ff36 build(web): rebuild the embedded UI
- e1fd91f build(web): rebuild the embedded bundle
- 2996e9f build(web): rebuild the embedded bundle with the Schedules page
- d47925e build(web): rebuild with the feeder schema
- 28793b7 build: a make update target for dependencies, documented
- c8de514 build: tagged switch in the API docs generator (staticcheck)
- 7d7ba15 build: tidy the plugin modules for the feed package's dependencies
- b2de1f5 build: update dependencies by hand instead of with Dependabot; bump every GitHub Action to its current major (off Node 20)
- 4841b2e ci(install): wait for the local servers and report the failing command
- eeff3d3 ci(release): publish releases with GoReleaser on v* tags
- 0a6afc0 ci: CodeQL analysis for Go and TypeScript
- 39b9b44 ci: a longer test timeout for the pack tests on macOS; tolerate one late live interval among 200 workers
- 568116c ci: add lint, test, cross-compile, accuracy and govulncheck workflows
- d3c448d ci: buf lint and breaking-change checks for the protobuf definitions
- 11d0573 ci: build, lint and test every plugin module
- f922a32 ci: build, lint and test the web UI and ShopLab, and reject a stale web/dist
- 16ffe4b ci: check the Compose file parses with every profile
- 8e19da8 ci: dry-run every shipped pack against its reference app
- f74d8cb ci: fail when the generated CLI or API reference is stale
- 16156c4 ci: fix invalid YAML in the web job
- 07cb519 ci: fuzz the scenario parsers nightly
- 7f085ea ci: make the operator smoke script executable
- 31db6ec ci: name the differing files when web/dist is stale
- 664b038 ci: report failing test names as an annotation
- 496159a ci: run each PackLab-backed pack against its reference app
- 814a349 ci: run the GitHub Action with the latest release as well as the local build
- 327578d ci: run the iot, event-pipelines, databases and gaming packs in packlab
- 66dbb67 ci: run the web end-to-end tests in Chromium
- d92b5ad ci: show failing tests' messages in the error annotation
- 8c0720f ci: start the Compose stack with the browser and observability profiles, and back up and restore TimescaleDB with a PostgreSQL 17 client
- 623f616 ci: test the chart, operator and Terraform examples, and run both on kind
- 99a447f ci: test the installers, the installed CLI and stampede up on every commit
Other changes
- 6763e5b bench: a time limit on wrk2 and on the compare job; wrk2 at three requests a second per connection
- 43ea6f2 bench: give wrk2 one connection per request per second so a slow reply does not queue the next
- cc799d3 bench: read wrk2's p95 from its percentile spectrum; the nightly fails if a tool does not run
- baba94e changelog: 1.0.0
- 4279b63 changelog: what came after 1.1.0 is unreleased
- 298ef1d console: keep the newest lines in view when the live panel opens; coloured run summaries
- 5f3bcb1 console: saved sessions (stampede --continue, /resume), every CLI command as /command, a welcome, exit and two-press Ctrl-C, the bull drawn in and a working indicator
- e4fdccd docker: cross-compile in the build stage so arm64 images are not compiled under emulation
- 73d9bc0 features: describe the web UI as read-only analysis
- c8c9fa2 features: graph editing, live worker health, pack library, coverage in the UI, shaded windows
- 8932786 features: the GitHub Action ships (from main until the first release tag)
- 23c2e42 nightly: install wrk2's build libraries only when missing, under a time limit
- ededcbb readme: screenshots and the released status; changelog: the rest of 1.1.0
- cfeaa61 release: commit the Homebrew cask and Scoop manifest as IvanB
- eb4d542 release: keep the test log outside the checkout so GoReleaser sees a clean tree
- c01629a release: pin cosign-installer to v4.1.2; it has no v4 tag
- a6f637a release: publish the Helm chart to ghcr.io; docs: kind-verified operator, pending air-gap run
- f07a9b9 release: run the tests with CI's settings and name any failure
- 544dc5b release: start only for full version tags, not the moving v1 tag
- cc07539 run: --max-vus raises the user pool in rate mode; the dropped-iterations note names it
- fdc6562 run: a coloured summary in terminals (verdict badge, target marks, error rates); progress says finishing after the plan and shows no latency for an empty second
- 0b2bbc6 site: changelog page built from CHANGELOG.md, linked in the footer
- 1a55b4b site: one process's measured throughput on the benchmarks page
- ec75ce8 site: publish the nightly k6 comparison; the air-gapped bundle ships
- 6ae1877 site: screenshots of the console, a run, the reports and the web UI on the home page; the nav bar fits on a phone
- 398798e site: wrk2 in the benchmark comparison, published as measured
- ee14719 ticketlab: an empty waiting room admits the next visitor at once; changelog: 1.1.0
- 9695ea8 web: label the knee and the last level that scaled on either side of their lines so they never overlap
Verify
cosign verify-blob --bundle stampede_1.2.0_checksums.txt.sigstore.json \
--certificate-identity-regexp 'https://github.com/Ivan825/Stampede/.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
stampede_1.2.0_checksums.txt
cosign verify ghcr.io/ivan825/stampede:1.2.0 \
--certificate-identity-regexp 'https://github.com/Ivan825/Stampede/.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.comContainer image: ghcr.io/ivan825/stampede:1.2.0