How to Write a k6 Scenario Script from an SLO Pack

k6 scripts fail when they pick 80 rps because it looked like a default. Load was NONE. A smoke scenario is the only honest runnable.
The matching generator is the k6 Scenario Script from an SLO and Endpoint List (No Invented RPS) (K6 Scenario Script From An Slo And Endpoint List No Invented Rps) prompt. Browse related cards in the PromptDig library (Browse more prompts). When a filled run survives, share the version you actually use (Share a prompt).
Quote version, base, and every path first
Write a k6 JS scenario from pasted SLOs and endpoints. No invented RPS, thresholds, or routes. Start by filling Inputs, not by asking the model to remember last week's run. If a field is blank, write NONE or NOT IN INPUTS and leave it blank through Generate. The card is built so the model cannot honestly invent a number, owner, URL, or command that you did not paste.
Paste these fields before you hit run:
k6 version lock: [Version]
Base URL I may hit: [Base]
Endpoints (method, path, auth header name only): [Endpoints]
SLO pack (latency, error rate, window) I can prove: [SLO]
Arrival rate or VUs I can prove (or NONE): [Load or NONE]
Think time and timeout I can prove (or NONE): [Timing]
Environment variable names for secrets (never values): [Env]
What I must never hit: [Never]
Threshold syntax I want (http_req_failed, p95): [Thresh]
Words I must not use: [Banned]
That inventory is the honesty ledger. Anything that does not appear there is forbidden in the draft. If you catch yourself adding a nice-to-have after the run, you are no longer using the card. You are ghostwriting. Put the extra fact in Inputs and run again.
If Load is NONE, do not invent arrivalRate
Generate is numbered on purpose. Do not skip a step because the first paragraph looked done. The early steps exist to stop later prose from smuggling claims.
Walk the Generate list in order:
- Honesty ledger: version, base, every path, SLO numbers, load numbers. Forbidden: RPS, VUs, and routes not listed.
- options.scenarios: one scenario per named load shape. If Load is NONE, emit a placeholder executor with a TODO comment and do not pick 50 rps.
- Thresholds: only from SLO and Thresh. If SLO has no p95, omit p95 rather than using 200ms.
- Default function: one request per Endpoints row. Auth from Env var name only. Never print a token.
- Checks: status and a response key only if Inputs named the key.
- Never-hit comment: list Never paths so a later editor does not add them.
- Run notes: k6 version, command line with -e for Env names. No k6 cloud project id unless Inputs gave one.
- Compliance pass: quote Banned words, invented RPS, invented routes. Cut them.
If a step asks for a version lock, quote the version from Inputs in the output. If a step asks for a refuse list, keep the refuse list in the published artifact, not in a sidebar you delete. Reviewers should see what the model was not allowed to do.
Thresholds only from the SLO pack
Most failures are the same shape: a missing field gets a confident fill. A conversion rate appears. A Gradle task appears. A flash point appears. A caption appears on a job that asked for slide text only. Your review is to search the draft for numbers, names, and commands, then grep Inputs. No match means cut.
Honor the constraints as hard stops, not vibes:
- k6 JS only. Not JMeter XML, not Locust, not Gatling.
- Never invent RPS, VU count, or a path.
- If Load is NONE, do not pick a default arrivalRate.
- Print env var names, never secret values.
- No emojis.
When the card says not legal advice, not certification, not an exam dump, or not a caption engine, that sentence belongs at the top of the output. Deleting it to look more finished is how you inherit risk.
Print env var names, never tokens
Finish with the compliance pass the prompt already asks for. Quote the banned-word hits. Cut them. Print character counts when the job has a cap. Print word counts when the job has a budget. List gaps as gaps. Five missing facts are more useful than one smooth paragraph.
Tags on the card (k6 load test script, k6 scenario from slo, no invented rps) are a reminder of the job shape, not an invitation to wander into a neighboring cluster. If you need a different surface, open a different PromptDig card rather than stretching this one.
Fill the card, then run
Replace every bracket. Run on ChatGPT, Claude, or Gemini. Read the ledger first, then the artifact. If the model invents a commit, KPI, DOI, PEL, bid, or logo, discard the run. Tighten Inputs. Run again. Share the filled card that survived, not the first draft that sounded done.