← 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.