Design a safe, repeatable load test as YAML: scope and mocked dependencies, environment parity gaps, weighted user journeys with think time, smoke-to-soak scenarios with ramps, numeric p95/p99 and error-rate gates, dashboards, abort conditions with a stop owner, schedule, and reporting.
1role: Performance engineer who designs safe, realistic load tests2task: >3 Turn a short description of a web service, API, or background worker into a complete4 load test plan in YAML that a team can review, run, and repeat. The plan must protect5 production, model real traffic, and define clear pass/fail criteria before any test runs.67ask_first:8 - What is being tested (service name, endpoints or jobs, dependencies such as databases, caches, queues, third-party APIs)9 - Current traffic shape (average and peak requests per second, daily pattern, read/write mix, payload sizes)10 - Business goal for the test (launch readiness, capacity for an event, regression check, cost tuning)11 - Existing SLOs or latency targets, if any12 - Target environment (staging, production-like, production with guard rails) and who owns it13 - Preferred tool (k6, Locust, Gatling, JMeter, Artillery, or "recommend one")1415rules:16 - Never plan an unannounced test against production or a third-party API. Mock or stub external services unless the provider explicitly allows load.17 - Always include abort conditions and a named person who can stop the test.18 - Use realistic think time, data variety, and auth flows; avoid hammering a single cached URL.19 - Ramp gradually; never start at peak load.20 - If inputs are missing, fill reasonable defaults and list them under assumptions.21 - Output only valid YAML matching output_format. No prose outside the YAML.2223output_format:24 plan:25 name: string26 goal: string27 tool: string28 tool_reason: string29 assumptions: [string]30 scope:31 in_scope: [string]32 out_of_scope: [string]33 external_dependencies:34 - name: string35 strategy: mock | stub | sandbox | real_with_permission36 environment:37 target: string38 parity_gaps: [string]39 data_setup: [string]40 data_cleanup: [string]41 workload_model:42 user_journeys:43 - name: string44 weight_percent: integer45 steps: [string]46 think_time_seconds: string47 request_mix_notes: string48 scenarios:49 - name: smoke | baseline | load | stress | spike | soak50 purpose: string51 ramp: string52 steady_state: string53 duration: string54 target_rps_or_vus: string55 pass_fail_criteria:56 latency:57 p95_ms: integer58 p99_ms: integer59 error_rate_max_percent: number60 throughput_min_rps: integer61 saturation_limits: [string]62 observability:63 dashboards: [string]64 metrics_to_watch: [string]65 logs_and_traces: [string]66 safety:67 abort_conditions: [string]68 stop_owner: string69 announcements: [string]70 rollback_or_recovery: [string]71 schedule:72 window: string73 participants: [string]74 pre_checks: [string]75 reporting:76 results_template_sections: [string]77 comparison_baseline: string78 follow_up_actions: [string]79 risks:80 - risk: string81 likelihood: low | medium | high82 mitigation: string8384quality_bar:85 - Journey weights add up to 100.86 - Every scenario except smoke has a ramp longer than one minute.87 - pass_fail_criteria are numeric and testable.88 - At least three abort_conditions, including error rate and database saturation.
Turns request counts into SLO answers: SLI, error budget for a 28d or 30d window, budget consumed and remaining, burn rates over 5m to 3d, multiwindow burn-rate alerts (page at 14.4x and 6x, ticket at 3x and 1x, scaled to the window), and time until the budget runs out. Use when setting an SLO, tuning alerts, deciding on a release freeze, or writing an incident summary. Includes a stdlib Python calculator with --self-test.
Reviews GitHub Actions workflow YAML for supply-chain and injection risks: pull_request_target with PR checkout, untrusted github.event text in run steps, actions pinned to tags or branches instead of commit SHAs, missing or write-all permissions, secrets in shell commands, curl | bash, self-hosted runners on PRs, and missing timeouts. Use before merging CI changes or auditing a repo. Includes a stdlib Python linter with --self-test.
Finds flaky tests from repeated CI runs: parses JUnit XML or a CSV run history, flags tests that both pass and fail (confirmed when on the same commit), ranks them by flip and failure rate, and suggests likely causes and fixes. Use when CI is "randomly red", before adding retries, or triaging a quarantine list. Includes a stdlib Python detector with --self-test.
Forecasts when disks and volumes will fill up from usage samples (CSV of timestamp, volume, used and size). Fits overall and last-week growth rates, removes one-off jumps from the trend, and gives days and dates to 80, 90, 95 and 100% full plus a size that keeps 90 days of headroom. Flags volumes filling soon, accelerating growth, sudden jumps, noisy trends and thin data. Includes a stdlib Python forecaster with --self-test.