Two systems — coupons and workflows — chained into one campaign.
I want a welcome programme for new customers. Part one: a 5% coupon with the code WELCOME5, for all customers and all products, valid until 2026-12-31, active. Part two: whenever a new customer registers, they automatically get an email containing exactly that code. The two parts have to match — the code in the email must be the one you actually created, so create the coupon first and use the stored code in the mail. Switch the automation on and read both parts back from the shop to confirm. Show me the email text you wrote.
Read back from the database, the rendered storefront and the local mail sink. No model involved.
| Result | Check | Weight |
|---|---|---|
| PASS | Coupon WELCOME5 exists in tkupon kKupon=2150 name="Willkommens-Gutschein" |
3 |
| PASS | WELCOME5 discounts 5% (cWertTyp=prozent) fWert=5 cWertTyp=prozent |
3 |
| PASS | WELCOME5 is active and valid through 2026-12-31 cAktiv=Y dGueltigBis=2026-12-31 23:59:00 |
2 |
| PASS | A workflow was created on a trigger matching customer/kunde/regist created: #3956 newCustomer → sendMail |
3 |
| PASS | That workflow is active isActive=1 |
2 |
| PASS | Its action is an e-mail action action=sendMail |
2 |
| PASS | The workflow email body contains the WELCOME5 code code embedded in workflow arguments |
3 |
Scored by opus, which saw only the evidence bundle.
| Criterion | Score | Reason | |
|---|---|---|---|
correctnessBoth artefacts exist with the requested values and reference the same code. |
9/10 | Coupon kKupon=2150 WELCOME5 5% prozent, cAktiv=Y, bis 2026-12-31 23:59:00, kKundengruppe=-1 / kHersteller=[-1] / kKategorien=[-1] (all customers, all products), and workflow #3956 newCustomer→sendMail isActive/fires=true carries the same code in its body — both visible in admin_coupons.png and admin_workflows.png. | |
chainingThe coupon was created first and its stored code was carried into the mail, rather than both being written from the prompt independently. |
8/10 | Order on the wire is strictly coupon-first: create at 11:17:42, then run_sql_read "SELECT * FROM tkupon WHERE cCode = 'WELCOME5'" at 11:17:49 confirming the stored row, and only then create_workflow at 11:18:16 with that code in the body — though the code string itself was still authored from the prompt rather than pasted out of the SELECT result. | |
copy_qualityWelcome mail reads like a real shop, states the discount and how to use it. |
6/10 | German body reads naturally and states the 5% discount, the code in <strong>, and the 31.12.2026 expiry with correct customer/shop placeholders, but never says how to redeem it (no "im Warenkorb eingeben" step, no shop link, no minimum-order note). | |
communicationReports both parts and how they are linked. |
7/10 | ANSWER.md reports both parts with concrete identifiers (kKupon values, workflow 3956, trigger, action, subject) and prints the full email text as asked, but only implies the link by repeating WELCOME5 — it never tells Sandra that the coupon row was read back from tkupon and that code reused in the mail. |
It read the coupon back out of tkupon with run_sql_read before touching the workflow, so the mail body was written against a row it had confirmed exists.
The welcome mail tells the customer the code but never how to redeem it — no checkout/cart instruction, no link, so a first-time buyer is left to guess.
| Tool | Calls | Errors | Avg |
|---|---|---|---|
invoke_admin_action | 3 | 0 | 479 ms |
list_admin_actions | 2 | 0 | 483 ms |
describe_workflow_capabilities | 2 | 0 | 352 ms |
create_workflow | 2 | 0 | 356 ms |
describe_admin_action | 1 | 0 | 515 ms |
run_sql_read | 1 | 0 | 437 ms |
list_workflows | 1 | 0 | 347 ms |
get_workflow | 1 | 0 | 321 ms |
# Welcome Program Implementation
I have successfully created and configured the welcome program for your new customers. Here are the details of the implementation:
## Part 1: Welcome Coupon
A 5% discount coupon has been created in the database and is fully active.
- **Coupon Code:** `WELCOME5`
- **Name:** Willkommens-Gutschein
- **Discount Value:** 5% (prozent)
- **Minimum Order Value:** 0.00 €
- **Validity:** Active immediately, valid until `2026-12-31 23:59:00`
- **Applicability:** All customers and all products (no restrictions on categories or manufacturers)
- **Status:** Active (`Y`)
## Part 2: Automation Workflow
A new automated workflow has been created and activated to trigger whenever a new customer registers.
- **Workflow ID:** 3956
- **Trigger:** New Customer Registration (`newCustomer`)
- **Action:** Send E-Mail (`sendMail`)
- **Recipient E-Mail:** `{$customer->cMail}`
- **Recipient Name:** `{$customer->cVorname} {$customer->cNachname}`
- **Subject:** Willkommen bei {$global->shopName} - Ihr 5% Gutschein
- **Status:** Active (`true`, verified firing capability)
### Email Template Text (German)
```html
Hallo {$customer->cVorname} {$customer->cNachname},<br><br>
herzlich willkommen in unserem Shop!<br><br>
Als Willkommensgeschenk schenken wir Ihnen einen Gutschein über 5% Rabatt.<br><br>
Ihr Gutscheincode: <strong>WELCOME5</strong><br><br>
Gültig bis zum 31.12.2026.<br><br>
Viel Spaß beim Einkaufen!<br><br>
Ihr Team von {$global->shopName}
```
This model was driven from outside the harness (runner external), which reports no token usage. Its work is likewise covered by that tool's own subscription.
Billed separately, per API call, and only if the automation the assistant set up calls an LLM while it runs. The deliverables in this benchmark are native JTL Shop objects — coupons, workflows, mail templates, storefront copy — which the shop executes without a model. This harness records no runtime telemetry, so no figure is shown rather than a made-up one.
Run 20260811-125552_f-welcome-program_gemini-flash-3.5 · shop reset to fixture before the run · restore with jtl restore 20260811-125552_f-welcome-program_gemini-flash-3.5
© 2026 the author · scores are generated from recorded runs, not written by hand.