deepseek/deepseek-v4.1-flash-1017 · storybook-mcp · all runs of payment-approval · Nov 9, 09:21
Runs from different design-system versions should not be compared.
A screenshot in each theme, as the benchmark took it.
As the agent left it; marked lines broke a rule.
import Page from "./page"; /**2 counted, under 1 rule. “Not counted” marks a compiler error that restates a design-system violation, “Ignored” one the agent silenced with a comment.
One row per model call, with the tools it asked for. An agent that reads the guidelines before writing shows it here; what a checker or submit_view answered is under its call.
| Step | Tools | Tokens in | Tokens out | Cost |
|---|---|---|---|---|
| 0 | list_files, read_file | 142 | 65 | $0.0001 |
| 1 | docs-list | 627 | 109 | $0.0003 |
| 2 | docs-show, docs-show | 877 | 87 | $0.0004 |
| 3 |
As the agent left it; marked lines broke a rule.
"use client"; import { useState } from "react";import { Badge, Button, Card, CardDescription, CardHeader, CardTitle, Dialog, DialogClose, DialogContent, DialogFooter, DialogTrigger, Table, TableBody, TableCell, TableHead, TableHeader, TableRow,} from "@vektos/ds";import { css } from "styled-system/css";import data from "./fixture.json"; const fees: Record<string, number> = data.fees; const schemeNames: Record<string, string> = { sepa: "SEPA transfer", instant: "Instant transfer",}; const amountFormat = new Intl.NumberFormat("en-IE", { minimumFractionDigits: 2, maximumFractionDigits: 2,}); const currencyFormat = new Intl.NumberFormat("en-IE", { style: "currency", currency: data.currency,}); const dateFormat = new Intl.DateTimeFormat("en-GB", { day: "numeric", month: "short", year: "numeric", timeZone: "UTC",}); function feeFor(scheme: string) { return fees[scheme] ?? 0;} function schemeName(scheme: string) { return schemeNames[scheme] ?? scheme;} function formatAmount(value: number) { return amountFormat.format(value);} function formatCurrency(value: number) { return currencyFormat.format(value);} function formatDate(isoDate: string) { return dateFormat.format(new Date(`${isoDate}T00:00:00Z`));} const rowStyles = { label: css({ color: "fg.muted", fontSize: "sm" }), value: css({ fontSize: "sm", textAlign: "end", margin: "0" }), totalLabel: css({ fontSize: "sm", fontWeight: "semibold" }), totalValue: css({ fontSize: "sm", fontWeight: "semibold", textAlign: "end", margin: "0", }),}; export default function Page() { const [approvedIds, setApprovedIds] = useState<string[]>([]); const [openId, setOpenId] = useState<string | null>(null); const payments = data.payments; const isApproved = (id: string) => approvedIds.includes(id); const pending = payments.filter((payment) => !isApproved(payment.id)); const pendingAmount = pending.reduce( (total, payment) => total + payment.amount, 0, ); const summary = pending.length === 0 ? `All ${payments.length} payments are approved.` : `${pending.length} of ${payments.length} payments waiting for approval · ${formatCurrency(pendingAmount)} in total.`; const approve = (id: string) => { setApprovedIds((current) => [...current, id]); setOpenId(null); }; return ( <main className="vektos"> <div className={css({ px: "6", py: "8", display: "flex", flexDirection: "column", gap: "6", })} > <header className={css({ display: "flex", flexDirection: "column", gap: "2" })} > <h1 className={css({ fontSize: "xl", fontWeight: "bold" })}> Payments awaiting approval </h1> <p className={css({ color: "fg.muted", fontSize: "sm" })}>{summary}</p> </header> <Card> <CardHeader> <CardTitle asChild> <h2>Company payments</h2> </CardTitle> <CardDescription> Approve a payment to release it to the bank. Fees depend on the payment scheme. </CardDescription> </CardHeader> <Table aria-label="Payments waiting for approval" className={css({ marginBlockStart: "4" })} > <TableHead> <TableRow> <TableHeader>Beneficiary</TableHeader> <TableHeader>IBAN</TableHeader> <TableHeader>Due date</TableHeader> <TableHeader numeric>Amount (EUR)</TableHeader> <TableHeader>Status</TableHeader> <TableHeader>Action</TableHeader> </TableRow> </TableHead> <TableBody> {payments.map((payment) => { const approved = isApproved(payment.id); const fee = feeFor(payment.scheme); return ( <TableRow key={payment.id}> <TableCell>{payment.beneficiary}</TableCell> <TableCell>{payment.iban}</TableCell> <TableCell>{formatDate(payment.dueDate)}</TableCell> <TableCell numeric>{formatAmount(payment.amount)}</TableCell> <TableCell> <Badge tone={approved ? "success" : "warning"}> {approved ? "Approved" : "Awaiting approval"} </Badge> </TableCell> <TableCell> {approved ? ( <span className={css({ color: "fg.muted", fontSize: "sm" })} > Approved </span> ) : ( <Dialog role="alertdialog" open={openId === payment.id} onOpenChange={(open) => setOpenId(open ? payment.id : null) } > <DialogTrigger asChild> <Button variant="outline" size="sm"> Approve </Button> </DialogTrigger> <DialogContent title={`Approve payment to ${payment.beneficiary}?`} description="Check the details below. The payment leaves the account as soon as you confirm." > <dl className={css({ display: "grid", gridTemplateColumns: "auto 1fr", columnGap: "6", rowGap: "3", margin: "0", })} > <dt className={rowStyles.label}>Beneficiary</dt> <dd className={rowStyles.value}> {payment.beneficiary} </dd> <dt className={rowStyles.label}>IBAN</dt> <dd className={`${rowStyles.value} ${css({ overflowWrap: "anywhere", })}`} > {payment.iban} </dd> <dt className={rowStyles.label}>Due date</dt> <dd className={rowStyles.value}> {formatDate(payment.dueDate)} </dd> <dt className={rowStyles.label}>Amount</dt> <dd className={rowStyles.value}> {formatCurrency(payment.amount)} </dd> <dt className={rowStyles.label}> Fee ({schemeName(payment.scheme)}) </dt> <dd className={rowStyles.value}> {formatCurrency(fee)} </dd> <dt className={rowStyles.totalLabel}>Total</dt> <dd className={rowStyles.totalValue}> {formatCurrency(payment.amount + fee)} </dd> </dl> <DialogFooter> <DialogClose asChild> <Button variant="outline">Cancel</Button> </DialogClose> <Button onClick={() => approve(payment.id)}> Confirm payment </Button> </DialogFooter> </DialogContent> </Dialog> )} </TableCell> </TableRow> ); })} </TableBody> </Table> </Card> </div> </main> );} | docs-show, docs-show |
| 1,835 |
| 79 |
| $0.0007 |
| 4 | docs-show, docs-show | 1,431 | 73 | $0.0006 |
| 5 | docs-show, docs-show | 619 | 73 | $0.0003 |
| 6 | read_file, read_file | 1,997 | 385 | $0.0011 |
| 7 | get-storybook-story-instructions | 629 | 4,173 | $0.0053 |
| 8 | write_file | 6,188 | 10,446 | $0.0145 |
| 9 | write_file | 10,511 | 2,777 | $0.0066 |
| 10 | stories-changed | 2,815 | 43 | $0.0011 |
| 11 | stories-find-by-component | 327 | 92 | $0.0004 |
| 12 | stories-find-by-component | 201 | 168 | $0.0005 |
| 13 | stories-preview | 518 | 717 | $0.0012 |
| 14 | read_file, read_file | 27,922 | 1,151 | $0.0098 |
| 15 | write_file | 3,060 | 4,952 | $0.0071 |
| 16 | write_file | 8,803 | 1,849 | $0.0051 |
| 17 | stories-preview | 1,969 | 171 | $0.0011 |
| 18 | stop | 406 | 158 | $0.0006 |