# FS.com / Fiberstore Targeted Verification Push

Date: 2026-05-09

## Intent

Continue TIP data completion for FS.com/Fiberstore after Flexoptix. The operator requested price, image and product information to be researched deeply enough to avoid manual validation, while keeping Erik safe and writing every crawler/scraper/robot learning into the TIPLLM training pool.

## Code Changed

- `packages/scraper/src/scrapers/fs-com.ts`
  - added `FS_DB_DETAIL_ONLY=1`
  - targets existing FS.COM DB product URLs with missing verification signals
  - avoids broad category discovery while known product URLs still need work
  - improved reach parsing for comma/decimal values
  - added deterministic fiber type fallback from product name, part number and specs
  - writes product URL to `transceivers.product_page_url`
  - stores the real FS.com product URL as detail verification source

## Live Runs

All runs were on Erik with:

- Playwright concurrency `1`
- `nice -n 10`
- no broad category crawl
- DB-detail-only mode

Batch results:

- Batch 1: target `80`, scraped `80`, failed `0`, new prices `17`, stock `18`, specs `24`
- Batch 2: target `80`, scraped `79`, failed `0`, new prices `6`, stock `8`, specs `23`
- Batch 3: target `90`, scraped `89`, failed `0`, new prices `21`, stock `24`, specs `47`
- Batch 4 closure: target `42`, scraped `42`, failed `0`, new prices `5`, stock `3`, specs `25`

`pnpm -C packages/scraper build` passed on Erik after the scraper change.

## FS.com Counters

Before:

- total rows: `383`
- price verified: `379`
- image verified: `299`
- details verified: `108`
- price+image+details: `108`
- fully verified: `3`
- missing URL: `76`
- missing image URL: `84`
- missing reach label: `9`
- missing fiber type: `323`
- HTML product-like complete: `106`

After closure:

- total rows: `383`
- price verified: `379`
- image verified: `299`
- details verified: `260`
- price+image+details: `260`
- fully verified: `205`
- missing URL: `76`
- missing image URL: `84`
- missing reach label: `9`
- missing fiber type: `123`
- HTML product-like rows: `299`
- HTML product-like complete: `258`
- no-url rows: `76`
- category rows: `4`

TIP health after closure:

- status: `healthy`
- load status: `ok`
- memory used: `13%`
- transceivers: `17647`
- vendors: `478`
- switches: `680`
- fully verified globally: `8522`

## Training Pool

FS.com batches were written to `/tmp/tip-training-data` and pushed to Gitea.

Training pool commits:

- `28cac05 crawl: add fscom db detail batch learning record`
- `a0a6be3 crawl: add fscom db detail batch 2 learning record`
- `38736ae crawl: add fscom db detail batch 3 learning record`
- `2c25bf3 crawl: add fscom db detail closure learning record`

## Next

Do not repeat the same DB-detail-only FS.com crawler on Erik. The fourth clean closure batch did not increase `details_verified`, so the remaining gaps need a different strategy:

- source-discovery/classification for `76` no-url rows
- parser/source diagnostics for the remaining `41` HTML product-like rows missing details or fiber/image signals
- explicit classification for `4` category rows
- likely cleanup of historical/malformed `/de/de/products/...` URLs and no-text pages

Truth rule: do not claim FS.com is complete. Current honest status is `258/299` HTML product-like rows complete and `205/383` fully verified overall.
