> **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).
→ **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`)
> 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).
→ **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`).
→ `references/bench-current.md` (benchMacro, benchStress, seuils anti-régression) +
`references/station-*.md` + `references/cross-arch-timer.md`. Méthodologie : `ebin-bench`.
→ `references/mcp-thresholds.md` (config externe, jamais de contenu embarqué).
→ 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%.
- [ ] `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
- **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.
> **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).