← back to CelebritySignatures
WEAR-LEGAL-NOTE.md
51 lines
# /wear — legal & go-live notes
The `/wear` feature offers a historic signature printed at the **left chest** of a
garment, made to order. It is built **one switch from live** and is **not linked in
the public nav for sale** until Steve approves go-live.
## Eligibility gate — "only legally clear" (Steve, 2026-08-06)
A signature is offered **only if all** hold:
1. `usable_in_commercial_collage === 'yes'`
2. `risk_level !== 'high'` (safe + medium)
3. **Trademark screen `CLEAR`** against a **complete** USPTO register index
(`data/tm-clearance.json` verdict `CLEAR` **and** `indexComplete === true`).
`MARK_FOUND` (a live Class-25 / apparel wordmark on the name) and `NEEDS_REVIEW`
(a live mark in another class, or a fuzzy match) are **both excluded**. Until the
full register is screened, **nothing is sellable** — the store shows an empty,
disclosed state rather than guessing.
## The trademark screen is a SCREEN, not legal clearance
`scripts/build-tm-clearance.mjs` matches each name against `data/tm-index.json`
(live US marks from the USPTO bulk register). It is an automated risk screen to keep
obvious infringements out — **not legal advice and not a substitute for counsel**.
The register index seed (`data/tm-index-seed.json`) is a bootstrap sample; run
`scripts/fetch-tm-register.mjs` + `build-tm-index.mjs` to index the real register
before go-live.
## What is NOT wired (Steve-gated)
- **Live Stripe / real charges** — checkout uses the TEST key only (`STRIPE_DOWNLOAD_KEY`).
- **POD submission** — a paid TEST order appends a `DRAFT_UNSENT` payload to
`data/pod-order-drafts.jsonl`; `scripts/submit-pod-draft.mjs` is a dry-run stub that
refuses to send without `--apply` + a `POD_API_KEY` and a wired provider client.
- **Publishing `/wear` for sale / linking it in nav** — Steve's call.
## Build the real screen (before go-live)
> NOTE (2026-08-10): the legacy host `bulkdata.uspto.gov` is **RETIRED**. Trademark bulk
> data now lives on the USPTO Open Data Portal (`data.uspto.gov`), behind an AWS WAF +
> an ID.me-linked API key. Use `--file` (a file you downloaded in a real browser) or
> `--odp` (the keyed BSD download); the old `--url bulkdata.uspto.gov` path dead-ends.
> See `WEAR-READY-FOR-KEY.md` for the full keyed runbook.
```
# (A) $0, no key — ingest a register file downloaded in a real browser / openclaw:
node scripts/fetch-tm-register.mjs --file /path/to/downloaded-trtdxf.zip
# (B) keyed — pull the full annual register once USPTO_ODP_API_KEY (ID.me-linked) is set:
node scripts/fetch-tm-register.mjs --odp <fileName>
node scripts/build-tm-index.mjs # complete flips true ONLY once a plausibly-FULL register is parsed (>= completeness floor)
node scripts/build-tm-clearance.mjs # re-screens the catalog; cleared names appear in /wear
```
A **partial** register never counts as complete: `build-tm-index.mjs` requires at least
`TM_MIN_MARKS` (default 500,000) parsed live marks before it writes `complete:true`, so an
interrupted/truncated ingest keeps the store safely empty rather than false-clearing names.