tasteHQ  ·  The Fidelity Protocol  ·  Demo

From 47 to 91 in one judge call.

An AI agent generated a pricing card. It looked fine. Then we judged it against Stripe — and the score said otherwise. Here's what the agent saw, what it changed, and why the protocol matters.

SCENE 1

The AI default — beautiful, bland, undifferentiated.

0:00 – 0:08
generic-card.vercel.app
Pro Plan
$29/mo
★★★★★
Start free trial
Loved by 10,000+ creators worldwide
~/agent · zsh
$ curl -s tastehq.dev/.well-known/taste/stripe | jq .grammar.surface
{
  "ground":    "white",
  "radius":    "4-6px",
  "borders":   "hairline",
  "shadows":   "subtle",
  "texture":   "flat",
  "dark_mode": "inversion"
}
// Stripe's canonical .taste file. The target.
SCENE 2

Judge it. The protocol gives a number.

0:08 – 0:18
~/agent · zsh
$ tastehq judge https://generic-card.vercel.app --target stripe
╭─────────────────────────────────────────────╮
│  FIDELITY SCORE                             │
│                                             │
│  ████░░░░░░░░░░░░░░░░░░  47 / 100            │
│                                             │
│  Verdict: REVISE                            │
│  11 of 30 axes failing                      │
│  Grammar: v2.0.0  ·  Conformance: L2        │
╰─────────────────────────────────────────────╯
47
REVISE
11 of 30 axes failing · Stripe is hairline-bordered, near-zero radius, deep violet accent. This card is pillow-soft, gradient-warm, sales-y.
AxisGotWantΔ
surface.radius16px (soft)4-6px−28
palette.warmthwarmcool−34
palette.strategyduotone gradientmono+1−22
voice.archetypesalesengineer−41
voice.formalityconversationalprofessional−18
surface.shadowsdramaticsubtle−15
surface.texturegradientflat−19
type.heading_weightextraboldbold−8
SCENE 3

The agent reads the vector. Fixes the code. Redeploys.

0:18 – 0:36
claude-code · agent loop
// Claude reads the per-axis breakdown via MCP and patches the component. diff --git a/components/PricingCard.tsx
- borderRadius: 16,
+ borderRadius: 4,
- background: 'linear-gradient(135deg, #667eea, #764ba2)',
+ background: '#ffffff',
- color: '#ffffff',
+ color: '#0a2540',
- boxShadow: '0 10px 30px rgba(0,0,0,0.3)',
+ boxShadow: '0 1px 0 rgba(0,0,0,0.04), 0 4px 12px rgba(13,27,62,0.06)',
- fontFamily: 'Inter, sans-serif',
+ fontFamily: '-apple-system, "SF Pro Text", sans-serif',

- "Loved by 10,000+ creators worldwide"
+ "Online payments for internet businesses."
// One pass over the failing axes. No mood board. No design review. ✓ Deployed to https://generic-card.vercel.app
SCENE 4

Re-judge. The protocol approves.

0:36 – 0:45
generic-card.vercel.app — rev2
Pro Plan
$29/mo
Online payments for internet businesses. Built for developers, scaled by usage.
Start integrating →
~/agent · zsh
$ tastehq judge https://generic-card.vercel.app --target stripe
╭─────────────────────────────────────────────╮
│  FIDELITY SCORE                             │
│                                             │
│  ██████████████████░░  91 / 100            │
│                                             │
│  Verdict: PASS                              │
│  27 of 30 axes within tolerance             │
│  Grammar: v2.0.0  ·  Conformance: L2        │
╰─────────────────────────────────────────────╯
// Audit-trail: schema/audit-trail.json // judge_model: tastehq-deterministic-v2 // weights_version: v2.0.0 // timestamp: 2026-05-19T21:42:18Z // input_fingerprint: sha256:9f8a...
91
PASS
27 of 30 axes within tolerance. Cool palette, hairline borders, subtle shadows, professional register. Reads as Stripe — because it was measured against Stripe.

This wasn't an art critique. It was a protocol.

The agent fetched a canonical Brand Vector from /.well-known/taste/stripe, ran the judge, read the per-axis deltas, and patched the failing axes. No prompting tricks, no mood-board attachments. Brand fidelity as machine-readable as HTTPS.

Numbers shown are illustrative. The deterministic judge is a Level-2 (Judge) implementation per schema/conformance.json. Every /api/score call emits a record conforming to schema/audit-trail.json.