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:08generic-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
| Axis | Got | Want | Δ |
|---|---|---|---|
| surface.radius | 16px (soft) | 4-6px | −28 |
| palette.warmth | warm | cool | −34 |
| palette.strategy | duotone gradient | mono+1 | −22 |
| voice.archetype | sales | engineer | −41 |
| voice.formality | conversational | professional | −18 |
| surface.shadows | dramatic | subtle | −15 |
| surface.texture | gradient | flat | −19 |
| type.heading_weight | extrabold | bold | −8 |
SCENE 3
The agent reads the vector. Fixes the code. Redeploys.
0:18 – 0:36claude-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:45generic-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
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.