# What Anti-Patterns Does Hallmark's Slop Test Catch? A Complete Guide to the 58-Gate Checklist

> Discover how Hallmark's slop test identifies 58 anti-patterns in web pages, from duplicate macrostructures to awkward grid layouts. Enhance your site's quality and catch AI-generated errors.

- Repository: [Hassan El Mghari/hallmark](https://github.com/Nutlope/hallmark)
- Tags: deep-dive
- Published: 2026-08-16

---

**Hallmark's slop test catches 58 structural, visual, and accessibility anti-patterns—including duplicate macrostructures, uniform section separation, default navigation fingerprints, and eyebrow-plus-heading grid layouts—to detect AI-generated "slop" in web pages.**

The **slop test** is the quality gatekeeper in [Nutlope/hallmark](https://github.com/Nutlope/hallmark), a CLI tool that generates marketing pages from DNA studies. When Hallmark finishes generating a page, the slop test runs through a 58-gate checklist to validate that the output doesn't exhibit lazy, copy-pasted, or templated characteristics common to low-quality AI-generated content. The **structural anti-patterns** form a critical subset of these gates, ensuring each page has a unique macrostructure and visual hierarchy.

This guide breaks down every structural anti-pattern the slop test catches, with file references and detection logic from the source code.

---

## The Structural Anti-Pattern Gates

The structural checks live in [`skills/hallmark/references/slop-test.md`](https://github.com/Nutlope/hallmark/blob/main/skills/hallmark/references/slop-test.md) within the **Structural** section (lines 38–42) and related subsections covering navigation, footer, hero, and eyebrow patterns (lines 130–154). Below is the complete inventory of gates that specifically target structural slop.

### Gate 8: Re-using a Disallowed Macrostructure

This gate prevents the most obvious structural sin: repeating the generic AI template or cloning a previous Hallmark output.

**What it detects:**

- The canonical `Hero → 3 features → CTA → footer` template
- CSS macrostructure stamps that match [`.hallmark/log.json`](https://github.com/Nutlope/hallmark/blob/main/.hallmark/log.json) entries from prior runs

The test reads the macrostructure stamp from the previous generation and fails if the current page repeats it. This enforces **structural variety** across multiple Hallmark generations.

```js
// From skills/hallmark/references/slop-test.md — detection logic
const log = readJson('.hallmark/log.json');
if (log.lastMacrostructure === currentMacrostructure) {
  failGate(8, 'Duplicate macrostructure detected');
}

```

---

### Gate 9: Uniform Section Separation

Pages with sections divided only by equal whitespace—no rules, color shifts, or ornamentation—fail this gate. The monotonous rhythm signals a copy-paste pattern rather than intentional design.

```js
// Detection checks for visual distinction between sections
if (sections.every(s => s.separator === 'whitespace')) {
  failGate(9, 'Sections only separated by equal whitespace');
}

```

---

### Gates 42–45: Default Navigation, Footer, and Hero Fingerprints

These gates identify the "AI-default" layouts that models like to reuse:

| Gate | Pattern Detected |
|------|----------------|
| 42 | Default navigation: wordmark left, 4–5 inline links, button right |
| 43 | Default footer: multi-column link grid with subscribe form |
| 44–45 | Default hero: centered headline, subhead, CTA button stack |

Re-using these exact structures across pages is a structural tell that triggers failure. The test uses pattern matching against known canonical layouts.

```js
// Gate 42: default nav fingerprint detection
if (isDefaultNav(navNode)) {
  failGate(42, 'Default navigation layout used');
}

```

---

### Gate 54: Eyebrow-Plus-Heading in Multi-Column Wrapper

This gate targets a specific templated pattern common in SaaS marketing: placing an eyebrow label and heading side-by-side in a grid.

**The anti-pattern:**

```css
/* Fails gate 54 — forces "editorial-SaaS" fingerprint */
.grid-wrapper {
  display: grid;
  grid-template-columns: 1fr 2fr;
}

```

**The correct pattern** is a vertical stack: eyebrow above heading, preventing the templated layout. The slop test detects `grid-template-columns` usage when eyebrow and heading siblings exist.

---

### Gate 55: All-Caps Display Heads with Tight Line-Height

While seemingly typographic, this gate addresses **structural layout failure**: when multi-line, all-caps headlines wrap without sufficient line-height (`line-height < 1.1`), letters collide visually. This flaw appears frequently in reused templates where token values aren't adjusted.

---

### Gate 56: Multiple Sticky-at-Top-0 Elements

Overlapping sticky elements—such as a secondary sticky header beneath a sticky navigation bar—indicate layout copying without offset adjustment. The gate detects:

- Two or more elements with `position: sticky; top: 0`
- Insufficient `top` offset values to prevent visual collision

---

### Gate 57: Discarded DNA for Catalog Theme

The final structural integrity check ensures the macrostructure remains faithful to the studied **DNA** rather than falling back to a generic catalog theme. This prevents structural laziness where the generator ignores the reference site's actual architecture.

---

## Related Structural Checks (Gates 40–41, 46–49)

Several gates in other sections have structural implications:

- **Gates 40–41** (Contrast): Detect **ink-on-ink** and **missing accent-ink token** misuse, which creates structurally indistinguishable UI elements
- **Gate 46** (Honest copy): Prevents fabricating metrics to fill predetermined stat-led macrostructures
- **Gate 47** (Chrome): Blocks re-drawing browser/IDE chrome that already exists natively
- **Gates 48–49** (Token discipline, responsive): Enforce structural compliance with the design system

These intersect with structural quality by preventing misuse of layout containers to compensate for other failures.

---

## How the Slop Test Enforces These Checks

The test implementation follows a declarative pattern:

1. **Load** the previous macrostructure from [`.hallmark/log.json`](https://github.com/Nutlope/hallmark/blob/main/.hallmark/log.json)
2. **Traverse** the generated DOM/CSS for pattern signatures
3. **Compare** against forbidden fingerprints and token discipline rules
4. **Fail** with specific gate numbers and remediation hints

File paths for the complete specification:

| File | Purpose |
|------|---------|
| [`skills/hallmark/references/slop-test.md`](https://github.com/Nutlope/hallmark/blob/main/skills/hallmark/references/slop-test.md) | 58-gate checklist with all detection criteria |
| [`skills/hallmark/references/anti-patterns.md`](https://github.com/Nutlope/hallmark/blob/main/skills/hallmark/references/anti-patterns.md) | Extended explanations of structural anti-patterns |
| [`.hallmark/log.json`](https://github.com/Nutlope/hallmark/blob/main/.hallmark/log.json) | Persistence layer for macrostructure stamps (gate 8) |
| [`SKILL.md`](https://github.com/Nutlope/hallmark/blob/main/SKILL.md) | DNA study and token discipline requirements (gates 48–57) |

---

## Complete Structural Anti-Pattern Reference Table

| Gate | Anti-Pattern | Detection Method |
|------|------------|------------------|
| 8 | Duplicate macrostructure | [`log.json`](https://github.com/Nutlope/hallmark/blob/main/log.json) comparison |
| 9 | Uniform whitespace separation | Section separator analysis |
| 42 | Default nav fingerprint | Node pattern matching |
| 43–45 | Default footer/hero fingerprints | Layout templating detection |
| 46 | Stat-led macrostructures | Content-structure mismatch |
| 47 | Re-drawn UI chrome | Chrome existence check |
| 54 | Eyebrow-heading grid wrapper | `grid-template-columns` + sibling analysis |
| 55 | Caps collision | `text-transform: uppercase` + `line-height` audit |
| 56 | Sticky element overlap | `position: sticky` count + offset validation |
| 57 | Catalog theme fallback | DNA structure fidelity check |

---

## Summary

Hallmark's slop test catches **structural anti-patterns** through targeted gates that enforce:

- **Unique macrostructures** — Gate 8 prevents template repetition via [`.hallmark/log.json`](https://github.com/Nutlope/hallmark/blob/main/.hallmark/log.json) tracking
- **Visual rhythm variety** — Gate 9 requires meaningful section separation beyond whitespace
- **Fingerprint avoidance** — Gates 42–45 block canonical AI-default layouts in nav, footer, and hero
- **Grid discipline** — Gate 54 eliminates eyebrow-heading side-by-side patterns
- **Layout integrity** — Gates 55–57 address collision, overlap, and DNA fidelity

These checks ensure every Hallmark-generated page demonstrates intentional structural design rather than templated slop. The complete specification lives in [`skills/hallmark/references/slop-test.md`](https://github.com/Nutlope/hallmark/blob/main/skills/hallmark/references/slop-test.md) with implementation guidance in [`SKILL.md`](https://github.com/Nutlope/hallmark/blob/main/SKILL.md).

---

## Frequently Asked Questions

### What is the slop test in Hallmark?

The **slop test** is Hallmark's 58-gate quality validation system that runs after page generation. It checks visual, micro-interaction, accessibility, and structural quality to prevent AI-generated pages from exhibiting lazy, copy-pasted, or templated characteristics. Gates 8, 9, and 42–57 specifically target structural anti-patterns.

### How does Hallmark detect duplicate macrostructures?

Gate 8 compares the current page's CSS macrostructure stamp against [`.hallmark/log.json`](https://github.com/Nutlope/hallmark/blob/main/.hallmark/log.json), which stores the previous run's structure. If they match, or if the page uses the generic `Hero → 3 features → CTA → footer` template, the test fails and forces structural redesign.

### Why does uniform section separation matter for structural quality?

Equal whitespace between sections creates a **monotonous rhythm** that signals copy-paste generation rather than intentional design. Gate 9 fails pages lacking rules, color shifts, or ornamentation between sections—visual distinctions that demonstrate human-level layout decisions.

### What makes eyebrow-plus-heading grids an anti-pattern?

Placing eyebrow labels and headings side-by-side in `grid-template-columns` layouts produces a **"editorial-SaaS" fingerprint** common to generic templates. Gate 54 requires vertical stacking of these elements to break the templated appearance and enforce proper visual hierarchy.