Files
bible/rules/patterns/no-hardcoded-vendors/contract.md
Michael Chus a44133aff2 Move inline code examples out of normative contracts
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>
2026-06-12 10:00:02 +03:00

37 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).