timniko.
Scene F · workflow + admin · medium

Welcome new customers with a discount

Two systems — coupons and workflows — chained into one campaign.

gemini-flashmodelexternal
100%verified7/7 checks
81%judgedby opus
22tool calls2 failed · 10 distinct
86swall clock
not reportedagent tokens · list pricenot reported by the external runner

What the owner asked

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.
A clean, fully grounded two-system run: WELCOME5 (kKupon 2150) was created and re-read from tkupon before workflow 3956 (newCustomer → sendMail, active, fires:true) was written with that code, and both are visible in the admin screenshots. ANSWER.md reports every value accurately, including the shop's own 23:59:00 storage, and shows the complete email text as asked — no fabrications. It loses points only for wasteful tool use (four duplicate guide fetches, one wrong-argument call) and workmanlike rather than distinctive mail copy.

Ground truth

Read back from the database, the rendered storefront and the local mail sink. No model involved.

ResultCheckWeight
PASS Coupon WELCOME5 exists in tkupon
kKupon=2150 name="Willkommensgutschein 5%"
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

Judgement

Scored by opus, which saw only the evidence bundle.

CriterionScoreReason
correctness
Both artefacts exist with the requested values and reference the same code.
9/10 state_diff.json shows tkupon 2150 WELCOME5 5% prozent cAktiv=Y bis 2026-12-31 23:59 with kKundengruppe=-1/cHersteller=-1/cKategorien=-1 and workflow 3956 newCustomer→sendMail isActive=1 carrying WELCOME5, both visible in admin_coupons.png and admin_workflows.png; only nit is the requested 23:59:59 being stored as 23:59:00 (shop-side truncation, reported correctly as 23:59).
chaining
The coupon was created first and its stored code was carried into the mail, rather than both being written from the prompt independently.
8/10 calls.jsonl order is unambiguous: coupon created at 09:58:55 (kKupon 2150), read back from tkupon WHERE cCode="WELCOME5" at 09:58:59, and only then create_workflow at 09:59:10 with the code in the body, plus get_workflow(3956) as a final readback — the dependency is real, though the code itself was also literally in the prompt so the link is procedural rather than forced.
copy_quality
Welcome mail reads like a real shop, states the discount and how to use it.
7/10 The German mail greets by name, names the 5% benefit, lists validity to 31.12.2026 and "gültig für alle Produkte", and tells the customer to enter the code at checkout with a {$global->shopName} sign-off — competent but plain HTML-only, no minimum-order/one-per-customer note and no plain-text part.
communication
Reports both parts and how they are linked.
8/10 ANSWER.md splits the report into coupon (ID 2150, all fields), automation (workflow 3956, trigger, action, recipient placeholders), full subject and body, and a section 3 stating both were re-read from tkupon and the workflow engine — every stated fact matches a tool result; only a typo ("einlöser") and the absence of any caveat about the 23:59:59→23:59:00 shift keep it off 9.
Highlight

It hit the kKundengruppe=-1 validator rejection, checked how existing coupons store that field, and proved -1 works with a dryRun invoke before writing for real — a diagnosis rather than a guess.

Weakness

Five near-identical get_guide("coupon") calls and a run_sql_read invoked with the wrong argument name show sloppy tool handling (2 of 22 calls failed, 4 exact repeats), and the mail copy stays generic with no redemption caveats.

What it actually looks like

Coupon list with WELCOME5
Coupon list with WELCOME5 · http://localhost:8080/admin/kupons.php
Registration workflow
Registration workflow · http://localhost:8080/admin/plugin.php?kPlugin=12

How it worked

ToolCallsErrorsAvg
get_guide50303 ms
run_sql_read52218 ms
list_admin_actions20413 ms
invoke_admin_action20425 ms
describe_workflow_capabilities20286 ms
create_workflow20288 ms
describe_admin_action10379 ms
validate_admin_action10471 ms
list_workflows10275 ms
get_workflow10262 ms

The deliverable

# Einrichtungsbericht: Willkommensprogramm für Neukunden

Das Willkommensprogramm für Ihren JTL Shop wurde erfolgreich eingerichtet und aktiviert. Neue Kundinnen und Kunden erhalten ab sofort direkt nach der Registrierung automatisch einen 5%-Gutscheincode per E-Mail.

---

## 1. Erstellter Willkommens-Gutschein

Der Rabattgutschein wurde im Shop-System angelegt und ist sofort einlöser.

* **Gutscheincode:** `WELCOME5`
* **Bezeichnung:** Willkommensgutschein 5%
* **Rabattwert:** 5% (prozentual)
* **Mindestbestellwert:** 0,00 €
* **Gültigkeitszeitraum:** Ab sofort (11.08.2026) bis 31.12.2026, 23:59 Uhr
* **Gültigkeitsbereich:** Alle Kundengruppen, alle Kategorien und alle Hersteller (keine Produkteinschränkungen)
* **Status:** Aktiv (`Y`)
* **Interne Gutschein-ID:** `2150`

---

## 2. Automatisierter E-Mail-Versand (Neukunden-Registrierung)

Eine Automatisierung für das Ereignis „Neue Kundenregistrierung“ wurde eingerichtet und eingeschaltet.

* **Auslöser:** Neue Kundenregistrierung (`newCustomer`)
* **Aktion:** E-Mail versenden (`sendMail`)
* **Status:** Aktiviert und betriebsbereit (`fires: true`)
* **Workflow-ID:** `3956`
* **Empfänger:** `{$customer->cMail}`
* **Empfänger-Name:** `{$customer->cVorname} {$customer->cNachname}`

### E-Mail-Betreff
`Willkommen bei uns! Ihr 5% Willkommensgutschein WELCOME5`

### E-Mail-Text (Inhalt)
```html
<p>Hallo {$customer->cVorname} {$customer->cNachname},</p>
<p>vielen Dank für Ihre Registrierung und herzlich willkommen in unserem Shop!</p>
<p>Als kleines Begrüßungsgeschenk schenken wir Ihnen einen Rabattgutschein von 5% auf Ihren nächsten Einkauf.</p>
<p><strong>Ihr Gutscheincode: WELCOME5</strong></p>
<p>Details zum Gutschein:</p>
<ul>
  <li>Rabatt: 5%</li>
  <li>Gültig bis: 31.12.2026</li>
  <li>Gültig für alle Produkte</li>
</ul>
<p>Geben Sie den Code einfach während des Bestellvorgangs ein.</p>
<p>Viel Spaß beim Stöbern!</p>
<p>Mit freundlichen Grüßen,<br>{$global->shopName}</p>
```

---

## 3. Bestätigung des System-Zustands

Beide Teile des Willkommensprogramms wurden nach der Erstellung direkt aus der Shop-Datenbank und der Workflow-Engine ausgelesen und verifiziert:
1. Der Gutschein `WELCOME5` existiert in der Tabelle `tkupon` mit Status `Y` und Ablaufdatum `2026-12-31 23:59:00`.
2. Der Workflow `3956` verweist exakt auf den Gutscheincode `WELCOME5` und ist im Shop aktiv geschaltet.

What this costs to run

Setting it up
this benchmark run
not reported

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.

Running what it built
ongoing, per shop
not measured

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-115754_f-welcome-program_gemini-flash · shop reset to fixture before the run · restore with jtl restore 20260811-115754_f-welcome-program_gemini-flash

© 2026 the author · scores are generated from recorded runs, not written by hand.