Sourcing
This skill exists because past sessions failed at sourcing two different ways:
- Quoting prices from memory, trusting URLs without fetching them, mixing supplier tiers as if they were interchangeable.
- Surveying a narrow set of boutique suppliers, finding nothing, and bailing out into "let's email them" or "let's commission a custom" — when the part existed on a marketplace listing the survey never looked at.
The methodology below addresses both. The hard rule: search wide, verify hard, email only when justified.
Rule zero: trust nothing you didn't verify in the current session. Prior verification by past Claude is hearsay. Re-verify URLs, prices, stock, and spec match every session before any order recommendation.
Rule one: email is a last resort. If a spec field is missing from a listing, look at another listing, another seller, another search angle, public Q&A, or forum measurements before drafting an email. Email is only acceptable when (a) the information is private to one party (a case maker's exact crystal seat ID where no public mirror or measurement exists), and (b) steps 1–4 below have been exhausted and produced no listing that publishes the missing value. When email is the output, the skill must state why none of the public alternatives worked.
Procedure — apply to every part, every time
1. Build the search-key set
Read builds/watch_NNN/spec.md first. Extract the spec values that constrain the search:
- Case: dial seat ID, lug width, lug-to-lug, crystal seat ID, crown position, material, crystal type, crown/back screw-down
- Movement: model number, regulated vs unregulated, jewel count, beat rate, hand pinion sizes, crown position, power reserve
- Dial: diameter, thickness, foot positions (and whether trimmable), lume color, date/no-date, applied vs printed indices, color/finish
- Hands: style, lume color, tube sizes H/M/S (must match movement pinions exactly)
- Crystal: type, OD, AR coating (interior/exterior/both), dome profile
- Strap: width, material, length, buckle type/material
Generate 4–6 query variants. Mix English with maker terminology (e.g., "Dauphine hands NH35 C1 lume", "explorer 39 case 28.5 dial seat", "domed sapphire double dome AR coated"). For Taobao or Chinese-marketplace queries, include transliterations when useful.
2. Search-first across the full viable supplier set
Suppliers in scope (no categorical exclusions):
- Authorized retailers — Cousins UK (Seiko TMI, parts), Esslinger (tools and movements), Worn & Wound / Windup (straps)
- Direct from maker — Tandorio, DSWatch, NamokiMODS, AmScope, etc.
- Modder boutiques — Lucius Atelier, Watch and Style, Crystaltimes, etc.
- Marketplaces — AliExpress, Taobao, eBay, Etsy
Tool selection:
- WebFetch for boutiques, makers, and authorized retailers — works fine on most.
- Chrome MCP (
mcp__Claude_in_Chrome__*) for AliExpress, Taobao, and any site that JS-renders or bot-blocks WebFetch. AliExpress in particular is hostile to WebFetch — default to Chrome MCP there. - If WebFetch fails on a site that should work, retry once, then escalate to Chrome MCP. Do not fabricate substitute content.
Cast wide before narrowing. Pull at least 5–8 candidates into a working list before scoring, more if the field is broad. A four-shop survey is not a market signal.
3. Verify each candidate
For each candidate that survives a first-glance match:
URL verification. Fetched live, not from memory. 404 / wrong variant / wrong product → reject the URL but keep the candidate alive if the supplier homepage carries an equivalent.
Price verification. Extract from the live page. Currency must be explicit ($44 USD, £89 GBP, ¥150 CNY, never bare $). For cross-border purchases, output list price AND an estimated landed cost (list + shipping + ~3% US import duty for AliExpress / Cousins UK / Taobao). Label landed as "estimated". Account-gated pricing → state "account-gated, requires Rob to log in and report price"; do not estimate.
Spec match. Confirm each compatibility-chain item is on the product page. Mark each ✓ confirmed / ✗ not stated / ⚠ partial. Critical fields cannot be ✗ — see "Critical fields" below.
Variant specificity. Confirm the exact variant being verified. The variant name and any visible SKU goes in the output.
4. Trust check (tier-appropriate, listing-level)
Tier is a property of a listing, not a gate. The deeper the trust gap, the deeper the check.
- Authorized retailer / established maker / modder boutique: standard verification (URL + price + spec) is enough.
- AliExpress / Taobao / Etsy seller: additional checks before recommending —
- Store reputation: review count ≥ ~100, store age ≥ ~1 year, positive feedback rate ≥ ~95%. Numbers below this are not auto-reject but require explicit risk callout.
- Image authenticity: reverse-image-search the main product photo (Google Lens via Chrome MCP). Stolen photos from known makers (NamokiMODS, DSWatch, Lucius) are a red flag — drop the listing or note "image appears stolen from
". - Price-anomaly: sanity-check against a reasonable floor. A $4 "sapphire" crystal is mineral glass mislabeled. A $12 "NH35" movement is a clone. State the anomaly and reject.
- Listing language hygiene: "fits NH35/36/38/39/70" with no tube IDs is generic copy-paste, not a verified spec. Critical fields not stated explicitly → reject the listing (per "Critical fields").
- eBay: seller feedback ≥ 99%, ≥ 100 transactions, no boilerplate "fits all" descriptions. Used-watch lots are still not in scope for parts — eBay is OK for new-old-stock parts from established parts sellers, not for parted-out donor watches unless explicitly chosen.
Critical fields — non-negotiable
A listing missing any of these for its part type is rejected, full stop. Do not draft an email asking the seller; move to the next listing.
- Hands: tube IDs (H/M/S) and lume color (C1 / C3 / BGW9 / etc., not "luminous"). NH3x-family compatibility on the page is only acceptable evidence if accompanied by the explicit tube ID numbers.
- Dial: diameter, foot positions, lume color, date/no-date.
- Crystal: OD, type (sapphire / mineral), dome profile, AR coating side(s).
- Case: dial seat ID, lug width, crown position, crystal type. Crystal seat ID is frequently missing — if it's missing across all candidates of the same OEM clone case, that's the rare case where email may be justified.
- Movement: model number, regulated/unregulated, beat rate.
5. Email only as a justified last resort
Email is acceptable when both are true:
- (a) The information lives privately with one party — e.g., a maker's exact internal dimension that no mirror/competitor publishes.
- (b) Steps 1–4 have been done. The output must state which alternatives were tried and what they returned.
Anti-pattern: emailing before searching marketplace mirrors. Anti-pattern: concluding "no C1 Dauphine exists" from a four-shop survey. Anti-pattern: emailing the original supplier for a stock or color question when the same product is in stock elsewhere.
When email is justified, draft it under builds/watch_NNN/emails/<topic>.md and reference the draft in parts.md.
Output — fixed format, one block per candidate
### <Part type> — Candidate <N> of <total>
- **Product:** <exact name as on the page>
- **Variant/SKU:** <specific variant; SKU if visible>
- **Supplier:** <name> (tier: authorized | maker | modder | marketplace-seller)
- **URL:** <verified live URL>
- **URL verified:** YYYY-MM-DD (this session)
- **Price (list):** <amount + currency> (verified YYYY-MM-DD) | `account-gated — pending Rob login` | `verification failed — see notes`
- **Price (estimated landed):** <amount + USD> (omit for same-country)
- **Stock:** in stock | out of stock | unknown | account-gated
- **Spec match (vs `builds/watch_NNN/spec.md`):**
- <item 1>: ✓ | ✗ | ⚠ — <brief detail>
- <item 2>: ✓ | ✗ | ⚠ — <brief detail>
- **Trust check (marketplace listings only):**
- Store reputation: <reviews / age / feedback rate>
- Image authenticity: <clean | appears stolen from X | unverified>
- Price anomaly: <none | suspect — reason>
- **Verdict:** ✅ recommend order | ⚠ verify with supplier first | ❌ do not order | ⛔ blocked on <dependency>
- **Reasoning:** <one or two sentences>
- **Risks accepted (if any):** <e.g., "no QC guarantee; lume color stated but no batch reference; 21-day shipping">
After producing candidate blocks, finish with a Recommendation section: one or two sentences naming the top candidate and the trade-off, or naming the genuine two-way decision if there is one. Never present a menu and walk away.
Failure modes
- URL dead or wrong variant: state it; navigate supplier homepage; present an equivalent with full verification block, or say "no equivalent found".
- WebFetch technical failure: retry once; escalate to Chrome MCP; if both fail, state the failure and ask Rob to fetch the page. Do not invent content.
- Price account-gated: state it; do not estimate; suggest Rob log in.
- Critical field missing from a marketplace listing: reject the listing. Move on. Do not email the seller.
- Critical field missing across all listings of the same OEM part (e.g., crystal seat ID): this is the email-justified case. Draft the email, state which alternatives were exhausted.
- Two genuinely viable candidates with different trade-offs: present both as a single decision question with the trade-off named. Don't dump a menu.
Override mechanism
If Rob explicitly asks for an unverified estimate ("just give me your best guess on the strap price") OR a verification shortcut ("skip re-verifying the dial, trust the prior session"), comply — but label the output [UNVERIFIED — guess only] or [UNVERIFIED — shortcut at Rob's request] and state which verification step was skipped. The label must be visible. Default behavior remains full verification; override only on explicit Rob request.
Anti-patterns
- Never quote a price from memory or training data.
- Never present a URL you haven't fetched in the current session.
- Never recommend a product without confirming each critical spec item.
- Never substitute a guess when verification fails — say "verification failed" and propose the next step.
- Never default to email when the information is on a competing listing.
- Never conclude "X doesn't exist" from a narrow-shop survey. Marketplace mirrors carry parts the boutiques don't.
- Never categorically reject AliExpress / Taobao / eBay / Etsy. Reject specific listings for specific reasons (missing critical fields, stolen images, price anomaly), not the platform.
- Never present a menu of options without committing or naming the trade-off.
- Never use weasel words ("around $X", "should be", "I think it's", "probably").
- Never editorialize about prices ("OMG it's $100!"). Report the verified number and move on.
After every sourcing pass
- Update the relevant row in
builds/watch_NNN/parts.md— verified URL, verified price (list + landed), status, supplier tier (includingmarketplace-sellerwhen applicable). - Add an entry to
sourcing/parts_database.md— even for parts that didn't make the cut. "Avoid" entries with reasoning are often more valuable than "good" ones. - Append
## [YYYY-MM-DD] research | <part> sourcing pass: <verdict>toLOG.md.