Skip to content

v1.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 07 Oct 21:25

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.com

Container image: ghcr.io/ivan825/stampede:1.2.0