MIDDLEDAO · EBIN

ebin-core — Hub famille eBin : 6 lois INVIO-LABLES + 20 patterns. — docs

ebin-core — Écosystème eBin + Design Laws

> **Reprise à froid → `ebin-state` EN PREMIER**. Ce hub = doctrine (lois, patterns) + routage

> (ebin-build, ebin-setup, ebin-cli, ebin-crud, ebin-platform, ebin-bench, ebin-offer-pipeline).

1. Écosystème — Vue d'ensemble

→ **Détail complet** : `references/ecosysteme.md` (workspace evo/ MOE, DOCTRINE.md / GATE.md /

evoAgent.md, architecture MOE 100-900, 3 preuves, doc 001-docs, skills connexes, doctrine 09-28 :

seal Zstd→ChaCha20 header 128B, sémantique déclarée StrateLayout).

- **130-ebin** (OFFICIEL 09-28) : `/Users/leblondx/MIDDLEDAO/10000-middleDAO/_toReclass/1-MIDDLEDAO/2000-miniTools/130-ebin`

- **forge 1000-dev-evo** (VIVANTE) : `/Users/leblondx/MIDDLEDAO/1000-dev-evo`

- Benchmarks par station : `references/station-mac-air-m3.md` (station → `references/station-<nom>.md`)

2. Les 6 lois eBin — INVIO-LABLES (toute violation = régression)

> Détail complet (tables interdit/imposé/gain + exemples Rust) : `references/lois-6.md`.

- **LOI 1 — ZÉRO SYSCALL** (après mmap initial) : tout accès = lecture/écriture directe atomique

(OsSasRing, AtomicU64). Pas de `read()`/`write()`/`ioctl()`/`Mutex::lock()`.

Exception : `mmap()` au démarrage, `kill -0` PID check.

- **LOI 2 — ZÉRO ALLOCATION (heap)** : stack ou mmap only. Pas de `Vec`/`String`/`Box`/`HashMap`

en hot-path → `[u8; 128]`, `heapless::String<128>`, SEG10 addressing.

Exception : `mmap` au démarrage, `Vec` dans les tests.

- **LOI 3 — ZÉRO BRANCHEMENT (hot-path)** : pas de `if/else` ni `match` dynamique dans

`alwaysVibe`/dispatch → `branchless_select`, masques, `match` sur constante (opcode).

Exception : match sur opcode constant (LLVM → jump table).

- **LOI 4 — ZÉRO SÉRIALISATION** : les données SONT au bon format. `bytemuck::from_bytes` = 0 cycle,

le bytes EST la struct. Pas de serde/json/parse/`format!` en hot-path.

Exception : `format!` dans les messages d'erreur (hors hot-path).

- **LOI 5 — ZÉRO CALCUL LOURD** : RULE 01 interdit `f32`/`f64`. Entiers only : modulo → masque

`& (N-1)`, division/multiplication → shifts, similarité → XOR `a ^ b == 0`, temps → RDTSC,

sentinel → `EQUATOR = 0xFFFF...FFFE` (jamais None/null/-1).

- **LOI 6 — ZÉRO MONOLITHE** : limite **300 lignes** `.rs`/`.js`/`.mdao` source (400 hard, données

pures `#[repr(C)]`/tables opcodes uniquement). Au seuil → `*-main` orchestrateur + subdivision ;

nom de fichier = fonctionnalité (jamais `utils.rs`). Exception : fichiers générés ; cohésion

forte > coupe mécanique (pièges E0583/E0425 → app-structure).

3. Les 20 patterns eBin

→ **Tableau complet des 20 patterns** : `references/patterns-20.md` (INFORMATION 100, STRUCTURING

200-300, COUPLING 400-600, BALANCING 700-900, CROSS-CUTTING).

Ancres : 1 l'adresse EST le routage (`body << 7`) · 4 128B = loi universelle · 5 bytemuck zéro

désérialisation · 7 OsSasRing zéro syscall · 8 XOR = cosine similarity · 13 EQUATOR sentinel ·

18 Seg10 routage mathématique (`head << 60 | body`).

4. Benchmarks

→ `references/bench-current.md` (benchMacro, benchStress, seuils anti-régression) +

`references/station-*.md` + `references/cross-arch-timer.md`. Méthodologie : `ebin-bench`.

Config MCP — seuils par station

→ `references/mcp-thresholds.md` (config externe, jamais de contenu embarqué).

5. Erreurs type si violation

→ Tableau complet : `references/erreurs-type.md`. Essentiels : HashMap→SEG10 +100 cycles ·

Mutex→futex/deadlock · serde→+1000 cycles · f64→RULE 01 Blocker · if/else→+15 cycles mispredict ·

`Vec<u8>`/`String`→heap+fragmentation · `x % N`→+30 cycles · `format!` hot-path→+100 cycles ·

`sleep`→CPU 100% vs `poll`→1-2%.

6. Vérifications avant de livrer

- [ ] `COLD_FORGE_BOOTSTRAP=1` préfixe tout `cargo build/check/test` (RULE 12)

- [ ] Chemins absolus cités vérifiés contre le disque (`ls`)

- [ ] Fichiers source ≤300l (400 max données pures — LOI 6)

- [ ] Tests verts + chiffre conforme au skill (pas de régression silencieuse)

- [ ] Références croisées à jour si renommage/absorption (grep post-modif)

- [ ] **LOI 1** — pas de `read()`/`write()`/`ioctl()` après mmap initial

- [ ] **LOI 2** — pas de `Vec`/`String`/`HashMap`/`Box` en hot-path

- [ ] **LOI 3** — pas d'`if/else` ni match dynamique dans `alwaysVibe`

- [ ] **LOI 4** — pas de serde/json/parse sur données mmapées

- [ ] **LOI 5** — pas de f32/f64 ; modulo→masque, division→shift, comparaison→XOR

- [ ] 128B aligné (`#[repr(C)]` + `bytemuck::Pod`) ; ring : `wrapping_add` + masque, sentinel `EQUATOR`

- [ ] Bench comparatif : A/B alterné (biais thermique) — cf `ebin-bench` ; seuils vs `bench-current.md` + station

Définitions révisées (user 09-28 05:12 — fait foi, remplace toute définition antérieure)

- **ebin = LE FORMAT binaire 128B** — la strate : mmap, écriture en place, le bytes

EST la struct (LOI 128, patterns 4/5). La définition du mot.

Définition LA DÉFINITION CANONIQUE (user 09-28 ~06:15 — fait foi, AU-DESSUS de tout)

> **Un .ebin est un binaire modifiable après compilation permettant d'éviter de

> recompiler et assurant un dev et une exécution fulgurante. Il s'opère via des

> commandes CLI.**

Alignement (le définition canonique explique le POURQUOI des définitions ci-dessus) :

- **.ebin (avec le point) = l'ARTEFACT** binaire patchable post-compilation —

pas de cycle recompile pour changer contenu/comportement.

- **Le mécanisme = le format 128B** : les strates vivent DANS le binaire, mmapées,

le bytes EST la struct → écriture en place = le binaire évolue sans rebuild

(dev fulgurant : pas de compile-test ; exécution fulgurante : zéro parse,

zéro syscall au hot-path).

- **Il s'opère via CLI** : ebin-cli (crud add/ls/rm, strat set, nash…) — le CLI

constate/refuse, ne juge jamais, encapsule les leçons gravées.

- Hiérarchie : ebin (FORMAT, le moyen) < .ebin (ARTEFACT, le produit, opéré par

CLI) < 08-ebin/ (sa maison) ; .ebin-api = contrat d'usage ; .mdao = modèle gguf.

- **08-ebin/** = l'étage d'app OFFICIALISÉ (sans majuscule) qui détient l'artefact

eBin COMPOSITE : binaire + volume + déclaratif à la fois — l'unité utile est

l'artefact entier, on ne le découpe pas par nature.

- **.ebin-api = le CONTRAT d'usage** d'un composant (usager du format, PAS la

définition d'eBin) — vit au dossier du composant + 07-apiServer.

- **.mdao = LE format modèle** (gguf maison) — jamais renommé au sens modèle.

- La règle « par nature » de app-structure reste valable pour les objets simples ;

elle s'arrête devant les composites (eBin en est un).