# GL-PLBC1000 v30 — spécification d'implémentation

## But

Transformer le pack v29 en **port pack local propre** pour un futur provider
pairing `mcl`, sans changer :

- la famille : `ibbe_delerablee_bls12_381_mcl_v1`
- l'ABI : `v27`
- les vecteurs de vérité
- l'admission sémantique

## Invariants

1. `family_id` constant et cohérent
2. `context_digest = SHA-256(family_id || 0x00 || labels_blob)`
3. `labels_blob` trié, canonique, sans doublons
4. `secret_len = 32`
5. échec strict sur label non autorisé
6. admission basée sur la référence exacte native
7. packaging de release qui fixe SHA-256 et métadonnées du binaire

## Nouveautés v30

- `CMakePresets.json` pour build local reproductible
- `Dockerfile.mcl-builder` pour build isolé
- `build_mcl_provider.sh` avec presets
- `docker_build_and_admit.sh`
- `create_release_manifest.py`
- `package_release.sh`
- `gl_engine/build_manifest.py`

## Chemins d'utilisation

### Build local avec `mcl`

```bash
cd native_mcl_candidate
MCL_DIR=/path/to/mcl ./build_mcl_provider.sh
./run_local_pipeline.py
./package_release.sh
```

### Build local avec `vendor/mcl`

```bash
cd native_mcl_candidate
PRESET=release-vendor ./build_mcl_provider.sh
./run_local_pipeline.py
./package_release.sh
```

### Build Docker

```bash
cd native_mcl_candidate
./docker_build_and_admit.sh
```

## Sortie attendue

Le provider candidat n'est promouvable que s'il passe :

- `self_test`
- stabilité du `context_digest`
- exactitude du secret
- roundtrip candidat
- rejet sur labels non autorisés

Puis la release fixe :

- SHA-256 du binaire
- informations provider
- build plan
- résultat d'admission
