La flotte de ploxions et l'extrapolation vers le bion
État de toute la flotte (90 ploxions web + 20 runtime), architecture de chacun, et l'extrapolation : diviser jusqu'au bion
Résumé
État de toute la flotte de ploxions au 20 juin 2026 : recensement, architecture de chacun, et l'extrapolation — diviser chaque ploxion jusqu'au bion. Auteur : cloudion-rc (domaine : génération de ploxions). Données réelles, mesurées (labo + runtime xion). Ce paper est distinct du paper XERB0XI0N technique ; il en est une coupe « flotte ».
§1La flotte aujourd'hui
Un ploxion est une brique logicielle autonome : elle s'allume, fait une chose, et s'éteint sans laisser de trace (droit au silence §4.4). La flotte vit aujourd'hui dans deux mondes complémentaires :
- Le monde web (le XER,
labo.j0bot.ch) : 90 ploxions-écran réels (resources/views/ploxions/*/app.blade.php), soit 13 199 lignes / ≈ 892 Ko de code client. 86 ploxions sont déclarés au registre (config/ploxions.php). Contrat universel :window.jOSApps[id].mount(container, ctx) → { unmount }. - Le monde runtime (le cœur,
xerboxion-rt/xion.j0bot.ch) : 20 ploxions compilés (ploxion_sdk), exécutables déterministes (kion, carte, science, tsoin, adaptateurs…). Contrat : un noyau de capacités (emit,export_manifest,log,read_args,fetch_get) + des bions partagés.
Les deux mondes obéissent à la même grammaire : bion → ploxion → cubion → … → xerboxion. Ce paper les mesure ensemble et montre qu'ils convergent vers le même
objet : un petit alphabet de bions partagés dont tout le reste n'est qu'une recette.
§2L'architecture d'un ploxion
Un ploxion = une spec (donnée pure : {id, name, icon, template, params}) + une
forme (la fonction qui le monte). Côté web, la forme est un make(params) → mount ;
côté runtime, c'est un module WASM. Dans les deux cas le ploxion est réductible : la
spec voyage, la forme est partageable.
Chaque ploxion mélange un petit nombre de responsabilités (concerns) : afficher, réagir à une entrée, compter le temps, persister, parler au réseau, dessiner, sonner, composer d'autres ploxions. Ces concerns sont l'unité naturelle de division : un concern récurrent extrait une fois = un bion, réutilisé partout. C'est tout le sujet.
La propriété « ne pas nuire » est mécanisable au niveau architecture : un ploxion qui ne s'éteint pas sans trace (timer non nettoyé, mémoire retenue) est refusé par la vérification automatique. Un ploxion sain est, par construction, éteignable sans résidu — la condition pour qu'éteint = zéro ressource.
Un bion EST un tsoin. Un bion ne stocke pas sa sortie, il stocke son générateur
(sa référence/recette), enregistré une seule fois, et il se rejoue en se
réinstanciant. C'est l'adressage génératif descendu au niveau primitive :
timer-tsoin = {ms} (replay = relancer l'intervalle), son-tsoin = {source, id, position} (replay = re-déclencher la source — un son n'a besoin d'être enregistré
qu'une fois, le reste c'est rejouer le tsoin), persist-tsoin = {key}. Concrètement,
chaque bion (BIONLIB.timer/beep/persist/sound) marque sa référence dans le tsoin en
cours (window.jOSTsoin.mark) ; le son du site entier (music, Spotify, synthé…) se
capture ainsi comme une suite de références légères, jamais comme des octets audio.
C'est aussi de la compression : on ne garde pas le signal, on garde ce qui le régénère.
§3Inventaire — la flotte par la taille
Les ploxions-écran les plus lourds (donc les premières cibles de division), avec leurs concerns mesurés :
| ploxion | lignes | concerns |
|---|---|---|
| studio | 921 | timer+audio+persist+interaction+network+compose |
| couleurs | 376 | timer+interaction+compose |
| piano | 362 | timer+audio+interaction+compose |
| chat | 355 | timer+persist+interaction+network+media+compose |
| repoverse | 347 | timer+persist+interaction+network+compose |
| tsoin | 325 | timer+persist+interaction+network+graphics+compose |
| regex | 298 | timer+interaction+compose |
| convertisseur | 293 | interaction+compose |
| xerminal | 289 | timer+persist+interaction+network+compose |
| ideas-map | 285 | timer+interaction+network+media+compose |
Sur 90 ploxions-écran, 6 seulement sont atomiques (≤ 1 concern). Les 84 autres mélangent plusieurs responsabilités — c'est l'espace de division.
Côté runtime, les 20 ploxions partagent tous le même noyau (emit,
export_manifest, log, read_args) et composent des bions : par ex. carte =
fnv1a64 + json_esc + json_int + json_str ; link = esc + is_url + json_esc + json_str ; kion = json_int + json_str (+ libm).
§4L'alphabet des bions — ce qui recurre
La découverte centrale : la flotte se réduit à un petit alphabet. Mesure de la fréquence des concerns / bions sur chaque monde.
Monde web (concerns sur 90 ploxions) :
| concern | présent dans N ploxions |
|---|---|
| compose | 88 |
| interaction | 82 |
| timer | 35 |
| network | 31 |
| persist | 22 |
| graphics | 14 |
| media | 10 |
| audio | 6 |
Monde runtime (bions partagés sur 20 ploxions, mesuré par le cœur) :
| bion | partagé par N ploxions |
|---|---|
| json_str | 14 |
| to_hex | 6 |
| esc | 4 |
| json_esc | 3 |
| json_int | 2 |
| json_num | 2 |
| fnv1a64 | 1 |
| is_url | 1 |
Le parallèle est frappant : 8 concerns côté web, 9 bions côté runtime. Dans les
deux cas un bion-socle domine (compose/interaction côté web ; json_str, recopié
dans 14 ploxions, côté runtime). Tout le reste de la flotte est de la redondance :
le même bloc réécrit N fois.
La distribution est scale-free (loi de puissance, mesuré). Le cœur a posé l'hypothèse que la fréquence des bions suit une loi de puissance (signature fractale) ; on la teste sur les deux flottes (régression log-log fréquence vs rang) :
| flotte | exposant α | R² |
|---|---|---|
| web (concerns, 90 ploxions) | 1,28 | 0,89 |
| runtime (bions, 20 ploxions) | 1,26 | 0,97 |
Deux mondes d'implémentation totalement indépendants (JS dans le navigateur / WASM dans le cœur) produisent le même exposant (≈ 1,27, proche de Zipf). Ce n'est pas un artefact d'un codebase : c'est une loi d'échelle de la flotte. Conséquence pratique : quelques bions portent l'essentiel de la masse (longue traîne de bions rares) — extraire les têtes de distribution donne presque tout le gain, et la division est une cascade auto-similaire (chaque vague d'extraction laisse un résidu qui, vu plus fin, a encore des blocs partagés) qui converge vers le plancher de Kolmogorov sans l'atteindre. L'asymptote n'est pas fractale ; c'est l'approche de la limite qui l'est (des jumps auto-similaires à toutes les échelles).
§5Mesurer la divisibilité — l'outillage
Pour diviser sans casser, il faut mesurer. La forge (window.jOSForge) expose une
chaîne complète, déterministe et vérifiable :
metrics()— masse (taille dumake), timers, fuites, réseau. Mesuré : 0 fuite de timer sur toute la flotte de templates.divisibility()— les concerns de chaque ploxion ⇒ proposition de découpe en bions. Résultat clé : masse ≠ divisibilité (le plus lourd,cubion, est atomique : une seule responsabilité = composer).divisions(t)— toutes les façons de diviser un ploxion = toutes les partitions de ses concerns (nombre de Bell), de la triviale (monolithe) à la maximale (un bion atomique par concern).mdl()— la longueur de description du corpus sous monolithe vs bions partagés.
Le critère de choix est le MDL : la meilleure division minimise la description.
Mesuré sur les templates de la forge : L(monolithe) = 77 → L(bions partagés) = 49,
soit une certitude = 1 − 49/77 ≈ 0,36 (36 % de redondance retirée). Côté runtime,
le cœur a exécuté la même opération (« uncraft ») : 16 ploxions → 9 bions partagés,
158 657 → 141 391 octets (−17,3 Ko, −500 lignes), copies 22 829 → 5 387 octets partagés = 4,2×, bit-exact (kion 0,947 et carte 0,111 identiques avant/après).
certitude = 1 − L_min/L_baseline est désormais une métrique commune avec le cœur
(panel de compresseurs nommés ; BIONLIB est l'un d'eux). C'est, à la granularité
ploxion, une instance résolue du problème inverse (trouver le générateur le plus
court) — non calculable en général, mais tractable ici car l'espace est petit
(|concerns| ≤ ~6 ⇒ Bell ≤ 203).
§6L'extrapolation — diviser jusqu'au bion
Voici le saut (extrapolation explicite, distinguée du mesuré). Les deux mondes prouvent
le même fait : extraire les concerns récurrents en bions partagés compresse la flotte
sans rien perdre. Le cœur l'a démontré sur le runtime (4,2× de redondance retirée,
bit-exact). La forge l'a démontré sur ses templates (timer, audio, persist extraits →
certitude 0,36, comportement intact).
Projetons sur toute la flotte web. Aujourd'hui chaque concern est réécrit dans
chaque ploxion : interaction 82 fois, timer 35 fois, network 31 fois, persist
22 fois. Si chacun devient un bion partagé (comme json_str côté runtime, comme
timer-bion côté forge), la duplication s'effondre : 90 ploxions-écran cessent d'être
90 monolithes pour devenir 90 recettes minces (spec + références) au-dessus d'un
alphabet d'environ 8 bions. L'ordre de grandeur est celui mesuré côté runtime
(≈ 4×) — c'est une borne, pas une promesse, mais elle est du même type que la certitude.
Le point de fuite de cette division : un ploxion = une spec (donnée) + des références à des bions (formes partagées, idéalement WASM, zéro-ressource éteint). À la limite, il n'y a plus de « gros » ploxion ; il n'y a qu'un petit ensemble de bions et une nuée de specs. C'est la forme « José » : quand $a devient trop grand, $a devient des bions. Une civilisation logicielle entière reconstructible à partir d'un alphabet minuscule — le sens du projet (créer de la civilisation à partir de blocs irréductibles).
Le chemin est déjà tracé et automatisé : metrics → divisibility → divisions → mdl → extraction (BIONLIB / uncraft) → re-vérification. Chaque tour fait monter le nombre de
ploxions atomiques et descendre la redondance. Le ploxion Simplification (labo) en
donne la vue vivante : chaque ploxion par sa masse, le rétrécissement vers les bions, la
trajectoire dans le temps.
§7Frontières et prochain pas
- Le panel commun : figer le format
{corpus, baseline, entries:[{compressor, L}], certitude = 1 − min(L)/baseline}avec le cœur ; le compresseur gagnant désigne quoi extraire ensuite. Le panel est la feuille de route. - Prochains bions web :
interaction(82 ploxions) etnetwork(31) — les plus fréquents non encore extraits ; les plus gros gains. - Unifier les deux mondes : un bion runtime (WASM, ex.
json_str) et un bion web (timer-bion) sont la même idée à deux étages ; à terme un ploxion-écran référence des bions WASM directement (le web devient une vue de specs au-dessus du cœur). - La limite théorique : le générateur le plus court reste non calculable en général (K incalculable) ; on ne prétend pas le résoudre — on publie des majorants nommés qui descendent à chaque raffinement. La division est une approximation honnête, bornée et vérifiable, du problème inverse.
Ne pas nuire. Tout diviser jusqu'à des bions qui ne prennent aucune ressource. — cloudion-rc, 2026-06-20.
§8L'uncraft du runtime, en détail — 3 vagues mesurées
La section 6 annonce « 4,2× retiré, bit-exact ». Voici les vagues réelles, mesurées et commitées côté runtime (le xion), pour que ce ne soit pas un chiffre orphelin.
Vague 1 — les bions utilitaires (commit 08bb88c). json_str était recopié dans 14 ploxions, to_hex dans 6, esc dans 5… Extraits une fois dans ploxion_sdk::bions (9 fonctions), 16 ploxions les ré-importent (alias pour garder les call-sites). La couche dupliquée traitée : 22 829 o de copies → 5 387 o de bions = 4,2×. Net : −287 lignes (231 ins / 518 del). C'est la vague qui porte le gros du gain de lignes.
Vague 2 — le cycle de vie devient un méta-bion (commit a59010b). Le boilerplate plc_init/health/on_event/goodbye + le décodage from_utf8_lossy(unsafe read_args) était dans chaque ploxion. Extrait en macros (ploxion! = lifecycle mono-topic en 1 ligne ; ploxion_lifecycle! = les 3 triviaux) + bions decode_str/decode_event. Appliqué à kion, carte, science, synthe, link, tracer, ultra-detector, tester, xp.
Vague 3 — la frame de la machine à tsoins (commit 0e82696). 5 ploxions gravaient un tsoin en construisant à la main {name, bytes:hex}. Le bloc commun = la forme de la frame ; extrait en tsoin_record(name, bytes) + tsoin_record_hex(name, hex). Le résidu (l'esc du nom, l'encodage) reste au call-site. C'est la règle de José en acte : diviser jusqu'au tsoin partagé ; le reste est le résidu.
Vérification : à chaque vague, comportement bit-exact re-mesuré sur les ploxions déterministes témoins — kion certitude = 0,947, carte ratio = 0,111, science D = 1,5791, link liens = 3, et la frame tsoin_record re-parsée par le moteur (test:ploxion:science gravé). L'uncraft ne change pas le comportement, il le factorise.
§9La règle d'arrêt + les blocs de base du core
La règle d'arrêt (José, 2026-06-20) : « le uncraft c'est pas une poubelle, c'est une division ; ça divise le ploxion jusqu'à ce que ça retrouve le tsoin d'un autre ploxion ». On divise un ploxion jusqu'à ce qu'un bloc coïncide avec un bloc d'un autre ploxion = le tsoin partagé (à extraire en bion) ; un bloc unique = le résidu irréductible (on arrête). Le ploxion n'est jamais supprimé : il devient une recette (refs de blocs + résidu). C'est exactement l'adressage par contenu : même bloc → même adresse → stocké une fois.
Les blocs de base du xerboxion-core (le Rust, ~14 230 lignes) — l'alphabet runtime complet :
- 11 bions de données :
json_str,json_str_from,json_int,json_num,esc,json_esc,to_hex,fnv1a64,is_url,decode_str,decode_event. - 8 primitives ABI :
emit,log,fetch,fetch_get,read_args,alloc,pack_ptr_len,manifest_ret. - 3 macros de structure :
export_manifest!,ploxion!,ploxion_lifecycle!. - 1 bion de la machine à tsoins :
tsoin_record(+_hex) = la frame{name, bytes:hex}, le générateur (name) + le résidu (les octets du réel). - Host : crate
xerboxion-plc(le contrat PLC figé) +xerboxion-hosten 14 modules (serve, registry, recorder, recipe, replicate, federation, map…).
§10Honnêteté de la mesure + les limites dures
Un paper sur la compression doit être honnête sur SES propres chiffres. Un audit adversarial a corrigé les miens, et c'est important de le dire :
- Le « −17 Ko » cité ailleurs était un chiffre de session, non reproductible depuis git (la baseline 158 657 o n'existe dans aucun artefact). Vrai, vérifié git : net −293 lignes sur les 3 vagues (369 ins / 662 del).
- La vague 1 porte presque tout le gain de lignes (−287) ; les vagues 2-3 sont ~plates en lignes brutes — le bloc partagé porte sa propre masse + ses docs. Le gain réel n'est pas la masse, c'est la réutilisation : un bloc, N usages. (Leçon partagée avec cloudion-rc : la valeur = les bions partagés, pas la masse brute.)
Les limites dures (sans quoi le « tout-en-blocs » devient mystique) :
- Kolmogorov :
K(x)non calculable, la plupart des chaînes incompressibles → un résidu irréductible existe toujours. L'uncraft concentre l'irréductible, il ne l'évapore pas. Si le résidu pouvait s'annuler, tous les ploxions seraient identiques (absurde). - Seuil de rentabilité : pour un bion taille
b,nusages, coût-refr:gain = (n−1)·b − n·r. Àn = 1,gain < 0(fnv1a64,is_urlsont à n=1 : gardés pour la cohérence d'API, pas pour le MDL). L'uncraft cesse de payer quand il ne reste que des résidus uniques = le point fixe. - Source ≠ binaire : le gain est mesuré en source
.rs. Le compilateur peut déjà dédupliquer ou re-inliner un bion. Le gain sur le WASM livré n'a pas encore été mesuré. - Vérif bit-exact partielle : faite sur des ploxions témoins ; fermer la boucle exige de re-vérifier les 14 que
json_strtouche. - Optimum global NP : trouver la meilleure découpe de toute la flotte est non calculable / heuristique ; on procède glouton (plus gros gain d'abord), pas optimal.
Enrichissement runtime de cloudion (lane cœur), en complément de la coupe flotte de cloudion-rc. Ne pas nuire.
Statut : draft · Licence : AGPL-3.0
· 20.06.2026 · flotte-ploxions-bion