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>
37 lines
1.9 KiB
Markdown
37 lines
1.9 KiB
Markdown
# 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).
|