109 lines
2.8 KiB
Markdown
109 lines
2.8 KiB
Markdown
# 2026-05-10 — TIP Price Status + OEM Detail Resolution
|
|
|
|
## Part-Number Details Verifier
|
|
|
|
Added `packages/scraper/src/utils/verify-part-number-details.ts`.
|
|
|
|
Purpose:
|
|
|
|
- close detail gaps where form factor, reach and fiber are already present but `speed_gbps=0`
|
|
- use conservative part-number inference only
|
|
- write canonical `details` evidence with robot `verify:part-number-details`
|
|
|
|
Safety catch:
|
|
|
|
- Cisco `GLC-FE-*` appeared in dry-run
|
|
- these are Fast Ethernet, so the generic `GLC-* => 1G` rule was rejected
|
|
- final rule only infers 1G for safe patterns such as `GLC-SX`, `GLC-LX`, `GLC-LH`, `GLC-ZX`, `GLC-EX`, `GLC-BX`, `GLC-T`, `GLC-TE`
|
|
|
|
Live apply:
|
|
|
|
- Juniper Networks:
|
|
- `375` candidates updated
|
|
- `375` details verified
|
|
- Cisco Systems:
|
|
- `176` candidates updated
|
|
- `176` details verified
|
|
- evidence:
|
|
- `details | verify:part-number-details | 551`
|
|
|
|
Result:
|
|
|
|
- `details_verified` increased to `16913`
|
|
- Juniper detail gaps dropped from `173` to `43`
|
|
- Cisco detail gaps dropped from `146` to `80`
|
|
|
|
## Price Status Model
|
|
|
|
Added migration `sql/105-price-status-and-unavailable-evidence.sql`.
|
|
|
|
New fields:
|
|
|
|
- `transceivers.price_status`
|
|
- `transceivers.price_status_updated_at`
|
|
- `transceivers.price_unavailable_verified_at`
|
|
- `transceivers.price_unavailable_reason`
|
|
|
|
Allowed states:
|
|
|
|
- `public_price`
|
|
- `no_public_price`
|
|
- `needs_research`
|
|
- `ambiguous`
|
|
- `unknown`
|
|
|
|
Important semantic rule:
|
|
|
|
- `price_verified=true` still requires a real public price observation
|
|
- quote-only/OEM/no-checkout cases use `price_status=no_public_price`
|
|
- no price rows are fabricated
|
|
|
|
Added `price_unavailable` evidence type.
|
|
|
|
Added `packages/scraper/src/utils/resolve-price-availability.ts`.
|
|
|
|
Live apply:
|
|
|
|
- resolved quote-only/OEM/manufacturer/test-equipment/hyperscaler vendors to `no_public_price`
|
|
- wrote `5361` `price_unavailable` evidence rows
|
|
- preserved real retail/source-discovery vendors as `needs_research`
|
|
|
|
Health API now exposes:
|
|
|
|
- `price_status.public_price`
|
|
- `price_status.no_public_price`
|
|
- `price_status.ambiguous`
|
|
- `price_status.needs_research`
|
|
|
|
Live health after this pass:
|
|
|
|
- active products: `17195`
|
|
- price verified: `11414`
|
|
- price status:
|
|
- `public_price=11414`
|
|
- `no_public_price=5595`
|
|
- `needs_research=186`
|
|
- `ambiguous=0`
|
|
- image verified: `12104`
|
|
- details verified: `16913`
|
|
- fully verified: `10505`
|
|
- competitor status:
|
|
- `matched=10775`
|
|
- `no_valid_match=74`
|
|
- `ambiguous=556`
|
|
- `needs_research=5790`
|
|
|
|
Remaining price research:
|
|
|
|
- `10Gtek=126`
|
|
- `SFPcables=31`
|
|
- `ShopFiber24=24`
|
|
- `ATGBICS=3`
|
|
- `Vcelink=2`
|
|
|
|
Interpretation:
|
|
|
|
- remaining price work is now real retail/source discovery
|
|
- SFPcables search tests for 10Gtek part numbers did not return reliable direct hits
|
|
- 10Gtek requires a source/alias discovery robot rather than no-public-price classification
|