identifier-normalization, no-hardcoded-vendors, vendor-installer-verification, and build-version-display follow the go-database split: rules in contract.md, snippets in README.md. Routed contract reads get cheaper; examples stay available on demand. Lint now also rejects stale kit/patterns references. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
Contract: No Hardcoded Vendors or Models
Version: 1.1
Purpose
Запрет на хардкод названий вендоров, моделей и партномеров в коде.
See README.md for code examples.
Правило
Названия вендоров, моделей, серий оборудования и партномеров не появляются в коде. Они приходят из данных: БД, конфига, входного документа, справочника.
- Запрещены сравнения и switch по имени вендора (
if device.Vendor == "Dell") и списки вендоров в коде (var knownVendors = []string{...}). - Логика определяется по полям из данных (
device.HasIPMI,device.ParserType), не по названию вендора. - Если нужен маппинг вендор → поведение, он живёт в конфиге или справочной таблице БД.
Исключения
Допускается упоминание вендора только в:
- Названиях пакетов/директорий парсеров:
internal/parser/vendors/dell/ - Комментариях и документации
- Тестовых фикстурах (XML/JSON с реальными данными оборудования)
В этих местах название вендора — идентификатор модуля, не условие в логике.
Почему
Хардкод вендора делает код хрупким: новый вендор требует правок в коде, а не в данных.
Опечатка в строке ("HPE" vs "HP") создаёт незаметный баг.
Регистр не контролируется (см. identifier-normalization contract).