feat(switch-compat): hard verification gate — only manufacturer-verified switches show compatibility

A switch presents transceiver compatibility ONLY if ports_verified=true (its port
config confirmed against the manufacturer datasheet). Unverified switches return
NO suggestions rather than potentially-wrong data. New columns: ports_verified,
ports_verified_source, ports_verified_at. Verified so far against datasheets:
HPE Aruba CX 10000-48Y6C, NVIDIA SN3700 (corrected 100G->200G QSFP56), SN4700,
SN5400, SN5600. 262 switches still pending datasheet verification.
This commit is contained in:
Rene Fichtmueller 2026-06-11 08:59:01 +00:00
parent 00a5ac8e8b
commit de40c65b01

View File

@ -346,6 +346,12 @@ export async function getFlexoptixSuggestions(switchId: string) {
END AS vpat END AS vpat
FROM switches s JOIN vendors v ON v.id = s.vendor_id WHERE s.id = $1 FROM switches s JOIN vendors v ON v.id = s.vendor_id WHERE s.id = $1
), ),
gate AS (
-- Hard gate: a switch only presents compatibility if its port config has
-- been verified against the manufacturer datasheet/source. Unverified =
-- no claim (return nothing) rather than show potentially-wrong data.
SELECT ports_verified FROM switches WHERE id = $1
),
switch_ports AS ( switch_ports AS (
-- Parse each ports_config key 'SPEED_FORMFACTOR' (e.g. '100G_QSFP28') into -- Parse each ports_config key 'SPEED_FORMFACTOR' (e.g. '100G_QSFP28') into
-- a numeric port speed (Gbps) + a cage family. Real transceivers are then -- a numeric port speed (Gbps) + a cage family. Real transceivers are then
@ -415,6 +421,7 @@ export async function getFlexoptixSuggestions(switchId: string) {
LIMIT 1 LIMIT 1
) so ON true ) so ON true
WHERE LOWER(v.name) = 'flexoptix' WHERE LOWER(v.name) = 'flexoptix'
AND (SELECT ports_verified FROM gate) IS TRUE
-- Only parts confirmed in Flexoptix's live API catalog (have authoritative -- Only parts confirmed in Flexoptix's live API catalog (have authoritative
-- datasheet specs). Excludes phantom/misattributed parts not actually -- datasheet specs). Excludes phantom/misattributed parts not actually
-- orderable from Flexoptix, and parts with no source-of-truth specs. -- orderable from Flexoptix, and parts with no source-of-truth specs.