---
description: Opa, Rego — інструментарій (VS Code, opa/regal)
version: '1.1'
globs: "**/*.rego"
alwaysApply: false
---

# Rego (opa)

Синтаксичні правила (`rego.v1`, `import rego.v1`, заборона legacy v0) — у `conftest.mdc` (alwaysApply). Цей файл — про **інструментарій**: VS Code, лінтери, форматування.

## Лінт-пайплайн (opa → regal → conftest)

```bash
n-rules lint rego
```

Цілі — `npm/rules/` (рекурсивно знаходить `.rego` у `<rule>/<concern>/`). Три незалежні per-file-детектори (кожен свій concern), у такому порядку:

1. **`opa check --strict`** (`npm/rules/rego/opa_check/`) — компіляція з типами і строгим режимом: ловить мертвий код, неоднозначні правила, незадекларовані змінні. Зупиняє відповідний крок при помилці.
2. **`regal lint`** (`npm/rules/rego/regal/`) — статичний лінтер: v0-синтаксис, неявні set-rules, відхилення від `rego.v1`, bugs/idiomatic/performance-правила.
3. **`conftest verify`** (`npm/rules/rego/conftest_verify/`) — виконує `test_*` правила у `*_test.rego`. Крос-package (`import data.<pkg>`), тож коректний лише на всьому `npm/rules`; не входить у delta-план — спрацьовує лише через `n-rules lint --full` або scoped `n-rules lint rego`. Якщо `conftest` відсутній у `PATH` — пропускається без помилки.

`opa` і `regal` — лише у `PATH`, **не** додавай у `dependencies` / `devDependencies` (toolchain-інструменти, як і в інших мовних правилах цього репо). Це механічно перевіряється Rego-gate'ом `rego.package_json` (`npm/rules/rego/package_json/`) — deny, якщо `opa` чи `regal` з'являються у будь-якій секції залежностей `package.json`.

## Швидкий gate через conftest

| Пакет | Ціль | Що перевіряє |
|---|---|---|
| `rego.vscode_extensions` | `.vscode/extensions.json` | `recommendations` містить `tsandall.opa` |
| `rego.vscode_settings` | `.vscode/settings.json` | `[rego]`-блок з `defaultFormatter` + `formatOnSave` |

- [settings.json.snippet.json](./vscode_settings/template/settings.json.snippet.json)
- [extensions.json.snippet.json](./vscode_extensions/template/extensions.json.snippet.json)
