# lawref.conformance

*module*

Conformance descriptor [§266.3](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/35-part-xxxiii-a-language-versioning.ru.md#2663-feature-negotiation) — заявка реализации и её проверка (WP-27-срез).

Дескриптор здесь не пишется руками: он **собирается** из того, что уже
проверено — реестра версий и features (WP-32), слоевой разметки векторов
(WP-24) и фактического набора артефактов. Заявка, которую никто не сверяет,
хуже её отсутствия: она выглядит как обещание, а является текстом.

Правила проверки (`verify`) отражают нормативные требования:

- заявленная версия языка обязана иметь статус `supported` в реестре;
- заявленная feature обязана существовать и быть `active`: заявить
  зарезервированную — ложное утверждение ([§26](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/06-part-vi-package-and-module-system.ru.md#26-feature-gates));
- заявка слоя `Li` означает «все векторы слоёв L0…Li проходят» (LAYERS A1.7).
  `xfail` на таком векторе **опровергает** заявку: требование заведомо не
  выполняется. `pending` (артефактов ещё нет) заявку не опровергает, но обязан
  быть раскрыт в `deferred` — иначе заявка прячет пробел вместо того, чтобы
  его назвать ([§197](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/27-part-xxvi-static-semantics-and-diagnostics.ru.md#197-gapdeadredundancy-analysis) + WP-27: «дескриптор с отложенными блоками»);
- `core-production` ([§8.6](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/03-part-iii-architecture-and-conformance.ru.md#86-core-production)) требует объявленных resource limits — профиль без
  них не заявляется.

Частично реализованные возможности НЕ заявляются. Схема не различает «есть» и
«есть наполовину», поэтому половина — это «нет»; чем именно она половина,
сказано в STATUS, а не в дескрипторе.

## lawref.conformance.LAYER_ORDER

*attribute* · *module attribute*

```python
LAYER_ORDER = {'L0': 0, 'L1': 1, 'L2': 2, 'L3': 3}
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/conformance.py#L34-L34)

## lawref.conformance.PROFILES

*attribute* · *module attribute*

```python
PROFILES = ('core-syntax', 'core-static', 'core-representation', 'core-executable', 'core-auditable', 'core-production')
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/conformance.py#L37-L44)

## lawref.conformance.build

*function*

```python
def build(implementation: str, profiles: list[str], features: list[str], semantic_layer: str, resource_limits: dict[str, Any], proof_capabilities: list[str], registry: dict, deferred: list[dict] | None = None, interop_adapters: list[dict] | None = None) -> dict
```

Сборка дескриптора. Версии языка берутся из реестра, а не задаются.

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/conformance.py#L53-L82)

## lawref.conformance.descriptor_hash

*function*

```python
def descriptor_hash(descriptor: dict) -> str
```

sha256 канонических байтов дескриптора без самого поля хэша.

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/conformance.py#L47-L50)

## lawref.conformance.load_registry

*function*

```python
def load_registry(root: Path) -> dict
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/conformance.py#L160-L161)

## lawref.conformance.load_vectors

*function*

```python
def load_vectors(root: Path) -> list[dict]
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/conformance.py#L164-L166)

## lawref.conformance.verify

*function*

```python
def verify(descriptor: dict, registry: dict, vectors: list[dict]) -> list[str]
```

Список опровержений заявки; пустой — заявка подтверждена данными.

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/conformance.py#L85-L157)

## lawref.conformance.write

*function*

```python
def write(path: Path, descriptor: dict) -> None
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/conformance.py#L169-L172)
