← back to CelebritySignatures

WEAR-READY-FOR-KEY.md

42 lines

# /wear — wired and ready for the USPTO ODP API key

The `/wear` signature-apparel feature is **built, tested, committed, and safely gated**
(store shows 0 sellable until a real trademark screen runs). The ONLY remaining input is
the USPTO Open Data Portal **API key**, which is gated behind ID.me identity verification
(see `WEAR-LEGAL-NOTE.md`). Every route to the trademark register — real-time API, bulk
API, and even the web file download — goes through this same key (USPTO's June 18 2026
"registration to curb AI scraping" policy).

## When ID.me finally shows "verified" on data.uspto.gov → Manage API Key

1. **Copy the API key** shown on the My ODP / Manage API Key page.
2. **Paste it to Claude.** Per Steve's standing API-key rule it auto-routes via the
   `secrets` skill to `USPTO_ODP_API_KEY` (master `.env` + this project's `.env`), last-4
   confirmation only. (Manual equivalent: add `USPTO_ODP_API_KEY=<key>` to
   `~/Projects/CelebritySignatures/.env`.)
3. **Run the real screen** (one paste of commands):
   ```sh
   cd ~/Projects/CelebritySignatures
   # pull the full annual register (product trtyrap ≈ 91 parts) with the key:
   for f in $(seq -w 1 91); do \
     node scripts/fetch-tm-register.mjs --odp "apc18840407-20251231-$f.zip"; done
   node scripts/build-tm-index.mjs        # complete flips true ONLY if >= TM_MIN_MARKS (default 500k) real marks parsed — so a truncated loop stays complete:false
   node scripts/build-tm-clearance.mjs    # re-screens the catalog
   ```
   Run the **whole** loop — `build-tm-index.mjs` refuses to declare the register
   complete on a partial ingest (fewer than ~500k parsed marks), which keeps the store
   safely empty if the loop is interrupted. The daily product `trtdxfap` is a
   current-window file (not the full register), so a daily-only screen will **not**
   reach `complete:true` by design — nothing sells off a daily-only screen. Use the
   full annual register for go-live.
4. **Restart the app** (pm2 restart celebrity-signatures) and open `/wear` — it flips from
   empty to a populated, trademark-cleared store automatically. Nothing else to change.

## What "done" looks like
- `data/tm-clearance.json` → `indexComplete: true`
- `GET /api/wear/signatures` → `count > 0`, only CLEAR + safe/medium-risk names
- Names with a live Class-25 (apparel) wordmark are excluded (MARK_FOUND); fuzzy matches
  are held (NEEDS_REVIEW). All still Steve-gated for live Stripe + live POD submit.

## Status: BLOCKED on ID.me identity verification (USPTO-side, human-only). TK-10286.