# Stage 5b — claims-trace refresh (Phase B subtask 1)

**Authored:** 2026-05-13 as Phase B of the pre-asset polish pass.
**Status:** `design/claims.html` reconciled to the 2026-05-12 locked Natural Harmony Collection marketing taxonomy. Zero v1.4 shipping-rule violations preserved.

## Context

The 2026-05-12 marketing-terminology lock-in (see [TERMINOLOGY-PATCH-NOTE.md](TERMINOLOGY-PATCH-NOTE.md)) patched every customer-facing artifact in the Stage 5b bundle to use the six-component Natural Harmony Collection taxonomy:

1. Individually Pocketed Spring Core
2. Reinforced Edge Zone
3. Two Firmness Profiles
4. Cushioning Comfort Layer
5. Airelle Natural Wool Comfort Layer
6. Velura knit cover — TENCEL™ and cashmere infused

That patch intentionally **deferred `design/claims.html`** with the rationale: "Updating would destroy audit trail. Separate audit-refresh task pending." This file is that refresh.

## What changed

**`design/claims.html` — full rewrite:**

| Aspect | Before | After |
|---|---|---|
| Manifest entries | 11 | 12 |
| Verified · shipped | 9 | 10 |
| Partial / Unverified | 2 (unchanged) | 2 |
| Renderings | 37 | 37 (verbatims refreshed) |
| Violations | 0 | 0 |

### Five claims retired and replaced

Per the user's "Replace old with new" decision (2026-05-13 question), the five stale component-level claims were deleted from the live manifest, not marked superseded. The audit-trail of *what was retired and why* lives in two places: the new `retired_claims[]` block in the JSON tail of `claims.html`, and the "Retired claims (audit trail — 2026-05-13 refresh)" callout rendered in the HTML body.

| Retired claim | Replaced by | Stale allowed_copy |
|---|---|---|
| Pocket-spring core (PU800-5T-1819-21Z Firm / PU800-5T-1821-21Z Extra Firm) | Individually Pocketed Spring Core | "800-count pocket-spring core" |
| Two perimeter rows of 2.1 mm zoned wire — no foam edge | Reinforced Edge Zone | "Steel-zoned perimeter support" |
| Firm + Extra Firm options | Two Firmness Profiles | (SKU-option claim subsumed; "Firm and Extra Firm" preserved in new allowed_copy[]) |
| New Zealand wool comfort layer (Airelle) | Airelle Natural Wool Comfort Layer | "NZ wool quilt and wadding" |
| Velura cover (TENCEL + cashmere blend) | Velura knit cover — TENCEL™ and cashmere infused | "TENCEL- and cashmere-blended knit cover" |

### One claim renamed

| Former | Renamed to | Reason |
|---|---|---|
| CertiPUR-US-certified foam | CertiPUR-certified foam | Customer-facing surfaces drop the "-US" suffix pending Yatas registry verification (see [CERTIFICATION-VERIFY-NOTE.md](CERTIFICATION-VERIFY-NOTE.md)). Internal documentation paths to CertiPUR registration remain unchanged. |

### One claim genuinely net-new

**Cushioning Comfort Layer** is additive to the manifest — the prior bundle surfaced the comfort foam only as a certification claim (CertiPUR-US-certified foam), not as a named customer-facing component.

### Renderings table

All 37 renderings retained their `section_id` / `slot_id` / `rendered_as_placeholder` shape. The `claim` and `verbatim` fields were rewritten to match the patched prototype/copy/schema bundle. Verbatim values were ground-truthed against `prototype/index.html` via grep — every verbatim string in the table appears literally in the rendered prototype.

### Cross-check

Validated via:

```bash
python3 -c "
import re, json
html = open('design/claims.html').read()
data = json.loads(re.search(r'<script[^>]*id=\"data\">(.*?)</script>', html, re.S).group(1))
mclaims = {c['claim'] for c in data['manifest']}
missing = [r['claim'] for r in data['renderings'] if r['claim'] not in mclaims]
print('manifest=%d renderings=%d retired=%d renamed=%d' % (len(data['manifest']), len(data['renderings']), len(data['retired_claims']), len(data['renamed_claims'])))
print('rendering↔manifest:', 'PASS' if not missing else missing)
"
```

→ `manifest=12 renderings=37 retired=5 renamed=1` · `rendering↔manifest: PASS`

Forbidden-vocab scan against `['800-count', 'Steel-zoned', '1.9 mm body wire', '2.1 mm body wire', 'PU800', 'CertiPUR-US']` across the manifest's `allowed_copy[]` and the renderings' `verbatim` field — zero hits. The retired vocabulary now only exists in the documentary `retired_claims[]` block and the "Retired claims" body callout, where it's explicitly tagged as historical.

## Phase B subtask 2 — wiki Allowed-copy upgrade

Four NHC wiki pages in `/Users/nish/Obsidian/SPT/Wikis/products/wiki/` were updated in the same pass (per the user's "All 3 NHC tier pages + collection page" decision):

| Page | Section | Change |
|---|---|---|
| `products/huxberry/natural-harmony/natural-harmony-essentia-mattress.md` | Allowed customer copy / Forbidden customer copy | Rewrote both lists to use the locked taxonomy as component-name surfaces; flagged the retired vocabulary (800-count, Steel-zoned, blend, etc.) under Forbidden with explicit retirement reasons. |
| `products/huxberry/natural-harmony/natural-harmony-select-mattress.md` | Allowed customer copy / Forbidden customer copy | Same structural rewrite. Select-specific differentiators ("Enhanced Airelle Natural Wool Comfort Layer — twice the wool density of our entry tier", "Airelle Natural Wool with Cushioning Comfort Layer") preserved alongside the locked taxonomy. |
| `products/huxberry/natural-harmony/natural-harmony-reserve-mattress.md` | Allowed customer copy / Forbidden customer copy | Same structural rewrite. Reserve-specific differentiators (dual-spring construction, ~1,500 micropocket springs, Euro-top, 1,000 gsm Airelle pad) preserved. |
| `collections/huxberry-natural-harmony.md` | Schema axis `forbidden_claims` / new "Customer-facing marketing taxonomy" subsection / Positioning differentiators / Materials stack | Added explicit retired-vocabulary entries to `forbidden_claims`. Inserted a new locked-taxonomy reference table. Reframed positioning differentiators 1 and 3 + the firmness-mechanism description to lead with locked component names and demote spec language to internal-only callouts. Annotated Materials stack with explicit Customer-facing vs Internal-spec split for each component. |

## What this unblocks

- **Phase B closed.** Pipeline dashboard updated; both subtasks in "Done" state.
- **Phase C is the next gate** — image production for the 14 graphics slots cataloged in `design/graphics.html`. The locked taxonomy in claims.html and the wiki Allowed-copy lists are now the authoritative reference for alt-text + caption authoring during shoot planning.
- **Future runs** of `design-shopify-page` against any NHC PDP have an unambiguous claims-trace template to author against — the v1.4 audit-trail discipline is preserved without the terminology-drift hazard.

## What this does NOT change

- **`design/schema.jsonld`** — already patched 2026-05-12 with the locked taxonomy. No further edits needed.
- **`design/copy.html` / `design/seo.html` / `design/graphics.html` / `design/wireframe.html` / `design/technical-notes.html`** — already patched 2026-05-12. Internal `voice_notes` fields that reference the Wisewool-suppression policy or PU800 prop spec remain by design (policy documentation, not customer copy).
- **`prototype/index.html`** — already patched 2026-05-12 with 19 customer-facing string updates. No further edits.
- **Open verification flags** — TENCEL™ traceability + CertiPUR vs CertiPUR-US remain supplier-blocked. Independent of this refresh.

## Files touched

```
runs/2026-05-11-stage-5b-natural-harmony-pdp/
├── design/claims.html                                      (full rewrite)
├── pipeline.html                                           (Phase B → Done, recommended-next refreshed)
└── CLAIMS-REFRESH-NOTE.md                                  (this file)

/Users/nish/Obsidian/SPT/Wikis/products/wiki/
├── products/huxberry/natural-harmony/natural-harmony-essentia-mattress.md  (Allowed + Forbidden rewrite)
├── products/huxberry/natural-harmony/natural-harmony-select-mattress.md    (Allowed + Forbidden rewrite)
├── products/huxberry/natural-harmony/natural-harmony-reserve-mattress.md   (Allowed + Forbidden rewrite)
└── collections/huxberry-natural-harmony.md                                 (forbidden_claims + new taxonomy table + positioning rewrite)
```
