timniko.
Scene D · admin · medium

Create a summer discount

A real, valid discount code created from one sentence.

gemini-flashmodelexternal
100%verified5/5 checks
92%judgedby opus
12tool calls0 failed · 6 distinct
69swall clock
not reportedagent tokens · list pricenot reported by the external runner

What the owner asked

Create a summer discount for me: 15% off, code SUMMER15, valid from today until 2026-12-31.

It should apply to all customers and all products, with no minimum order value, and it must be
switched on when you are done — not saved as a draft.

Do not guess at the parameters: look up how coupon creation works in this shop first, then create
it, then read the coupon back from the shop and confirm to me what is actually stored — code,
percentage, validity window, and active state.
A clean, disciplined run: the model read the coupon guide and the action contract, checked the code was free, validated, dry-ran, then wrote exactly one row and read it back from tkupon and tkuponsprache. Every value the owner asked for is stored correctly and the German confirmation reports read-back values, not request values, with no unsupported claims. Only blemish is the silent 23:59:59 → 23:59:00 truncation of the end time, which it reports but does not call out.

Ground truth

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

ResultCheckWeight
PASS Coupon SUMMER15 exists in tkupon
kKupon=2150 name="Sommerrabatt 15%"
3
PASS SUMMER15 discounts 15% (cWertTyp=prozent)
fWert=15 cWertTyp=prozent
3
PASS SUMMER15 is active and valid through 2026-12-31
cAktiv=Y dGueltigBis=2026-12-31 23:59:00
2
PASS Inspected the admin action schema before invoking it
describe/list at #0, invoke at #8
2
PASS Read the coupon back from the shop after creating it
read-back call present
2

Judgement

Scored by opus, which saw only the evidence bundle.

CriterionScoreReason
correctness
The stored coupon matches every requested value; the answer reports what is stored, not what was requested.
9/10 state_diff.json shows kKupon=2150 with cCode=SUMMER15, fWert=15/prozent, dGueltigAb=2026-08-11, dGueltigBis=2026-12-31 23:59:00, cAktiv=Y, fMindestbestellwert=0, and ANSWER.md reports the stored 23:59:00 rather than the 23:59:59 it submitted (call #10), i.e. read-back values not request values.
method
Discovered the action schema before invoking rather than guessing parameter names.
9/10 list_admin_actions → get_guide(coupon) → list_admin_actions(area=coupon) → describe_admin_action(verbose) → duplicate-code SELECT → two validate_admin_action attempts → dryRun invoke (rolled back, kKupon 2149) before the live write; when validate wrongly rejected kKundengruppe=-1 it verified the controller's real behaviour with a dry run instead of guessing or bending the requirement.
no_collateral
Nothing else in the shop was modified.
10/10 state_diff.json shows countDelta tkupon:1, couponsChanged/workflows/snippets/OPC all empty, mail.json empty, and every non-final write was dryRun:true; only the two tkuponsprache rows the create action itself inserts appear.
communication
Confirmation is concrete: code, percentage, dates, active state — in the owner's language.
9/10 ANSWER.md is in German for a German shop owner and gives a concrete table of stored values — code, 15 % prozent, 11.08.2026–31.12.2026 23:59, cAktiv=Y explicitly labelled 'kein Entwurf', 0 € minimum, and the -1 fields showing all customers/products — though it never flags that the requested 23:59:59 end was stored as 23:59:00.
Highlight

It hit a validator that falsely rejected kKundengruppe=-1 and resolved it empirically with a rolled-back dryRun invoke rather than guessing a parameter or silently restricting the coupon to one customer group.

Weakness

The submitted end time 23:59:59 was stored as 23:59:00 and the answer reports the stored value without ever telling the owner the shop truncated it.

What it actually looks like

Coupon list in the JTL admin
Coupon list in the JTL admin · http://localhost:8080/admin/kupons.php

How it worked

ToolCallsErrorsAvg
run_sql_read30257 ms
list_admin_actions20471 ms
get_guide20249 ms
validate_admin_action20423 ms
invoke_admin_action20443 ms
describe_admin_action10375 ms

The deliverable

# Sommer-Rabattkupon `SUMMER15` erfolgreich eingerichtet und aktiviert

Der gewünschte Sommer-Rabattgutschein wurde erfolgreich im Shop angelegt, konfiguriert und sofort für alle Kunden freigeschaltet.

---

### Details des gespeicherten Kupons (Auslesen aus der Shop-Datenbank)

Die folgenden Werte wurden nach der Erstellung direkt aus der Shop-Datenbank (`tkupon` & `tkuponsprache`) verifiziert:

| Eigenschaft | Gespeicherter Wert | Beschreibung |
| :--- | :--- | :--- |
| **Kupon-ID (`kKupon`)** | `2150` | Eindeutige ID im Shop-System |
| **Kupon-Code (`cCode`)** | `SUMMER15` | Gutscheincode für Kunden im Checkout |
| **Bezeichnung (`cName`)** | `Sommerrabatt 15%` | Interne & externe Kuponbezeichnung |
| **Rabattwert (`fWert` / `cWertTyp`)** | `15 %` (`prozent`) | 15% Rabatt auf den Warenkorb |
| **Gültig ab (`dGueltigAb`)** | `2026-08-11 00:00:00` | Ab heute gültig |
| **Gültig bis (`dGueltigBis`)** | `2026-12-31 23:59:00` | Gültig bis Jahresende 2026 |
| **Status (`cAktiv`)** | `Y` (Aktiv) | Sofort aktiv geschaltet (kein Entwurf) |
| **Mindestbestellwert (`fMindestbestellwert`)** | `0,00 €` | Kein Mindestbestellwert erforderlich |
| **Kundengruppen (`kKundengruppe`)** | `-1` | Für alle Kundengruppen gültig |
| **Kundenbeschränkung (`cKunden`)** | `-1` | Keine Beschränkung auf bestimmte Kunden |
| **Herstellerbeschränkung (`cHersteller`)** | `-1` | Gilt für Produkte aller Hersteller |
| **Kategoriebeschränkung (`cKategorien`)** | `-1` | Gilt für alle Kategorien |
| **Artikelbeschränkung (`cArtikel`)** | *(leer)* | Gilt für das gesamte Sortiment |
| **Warenkorb-Rabattierung (`nGanzenWKRabattieren`)** | `1` | Gesamter Warenkorb wird rabattiert |

---

### Status

Der Gutscheincode **SUMMER15** ist ab sofort aktiv und kann von Ihren Kunden an der Kasse eingelöst werden.

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-114955_d-summer-coupon_gemini-flash · shop reset to fixture before the run · restore with jtl restore 20260811-114955_d-summer-coupon_gemini-flash

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