feature/fleur-v2 #15

Merged
Nora merged 78 commits from feature/fleur-v2 into develop 2026-10-30 12:17:40 +00:00
Owner
No description provided.
Nora added 78 commits 2026-10-30 12:05:27 +00:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Test test/fleur/v1-fige.test.js : empreintes SHA-256 des 18 fichiers de
fleur/engines/nonflowers/ ; retouche, ajout ou retrait fait échouer la suite.
Aucun code modifié.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Registre fermé fleur/engines/registry.js : engineFor, ENGINES gelé, v1 seul
(generatePlant, plantForm, acceptsSeed, parseParams sans paramètre).
Commentaire du champ engine de fleur/engine.js : liste fermée des noms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nonflowers-v2 entre au registre : generatePlant délègue à v1 et renomme le moteur,
parseParams minimal ({} -> density 100). plantDigest dans test-kit/fleur.
Test neutre = v1 sur a0 à a9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
parseV2Params et V2_BOUNDS (density entière 50 à 300, form en liste fermée,
clé inconnue refusée) ; le registre branche parseParams de v2 dessus.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
plantKey (moteur|graine|params canoniques) et option keyOf du cache (identité par défaut).
v1 et v2 de même graine, ou deux densités, font deux entrées.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le worker génère par le registre (engineFor), le pool reçoit des specs { engine, seed, params } et
le cache est clé par plantKey. Routes Fleur provisoirement en nonflowers-v1 sans params.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
acceptsPlantSeed par défaut passe par le registre (moteur en second argument, v1 par défaut) ; import de prng-nf retiré de render-common.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TOP_KEYS gagne engine, GERBE_KEYS gagne params ; engine absent = DEFAULT_GERBE_ENGINE, params validés par le registre (RangeError -> InvalidShot params).
La réponse du tir Fleur répète désormais gerbe.params ({} pour v1), test de route ajusté.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
L'aperçu et le tir lisent engine et gerbe.params de parseFleurShot, les passent
au pool et à acceptsPlantSeed(seed, engine). Sans engine : v1 et params {}.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fleurSource lit engine (validé par engineFor, RangeError sinon) et copie gerbe.params
seulement hors nonflowers-v1 ; la source v1 est inchangée. La route de tir passe engine.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fleurOut recopie gerbe.params (après engine) quand c'est un objet ; sortie v1 inchangée.
Pire cas v2 mesuré à 1 244 octets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nouveau test d architecture : hors registre, nonflowers-v2 et v1, aucun module n importe engines/nonflowers/. scripts/fleur-gpu-print.mjs et la page /fleur passent par engineFor. Test de service du registre ajouté.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
openV2Session ouvre le flux principal de v1 et un second flux (graine + /v2).
index.js de v2 utilise cette session ; acceptsSeed du registre = acceptsV2Seed.
Neutre = v1 inchangé.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
woody et herbal forkés dans nonflowers-v2 : la boucle des pétales passe par un crochet flower(at).
radialFlower reproduit la rosace de v1 (mêmes tirages, même ordre) ; index.js le branche.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
species.js : pickWeighted et drawSpecies (2 tirages du flux v2, forme forcée sans décalage).
index.js tire l'espèce après genParams et choisit le crochet de fleur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cinq palettes (v1, bleus, jaunes, blancs, franches) tirées dans le flux v2, PALETTE_DRAWS tirages chacune.
index.js applique la surcharge hors v1 ; clé interne palette pour les tests de neutralité.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
applyDensity (density.js) multiplie flowerChance et shootCount par density/100 sans tirage ; growV2 rend { plant, stats: { flowers } }, generatePlant = growV2(...).plant. À 100, mêmes doubles ; monotonie jugée sur la somme d un lot de 20 graines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cappedFlower : au-delà du plafond (320, soit 2 x le maximum v1 mesuré, 159), la fleur est tirée dans un enregistreur muet, sans décaler aucun flux. Appliqué à toute forme dans growV2. Mesure notée dans l index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
drawCount (ruban = 2 draws) et scripts/fleur-budget.mjs (outil de mesure hors npm test).
Reference v1 a0..a49 notee dans la section Mesures de l index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
L état du panneau porte moteur, densité et forme ; withEngine, withDensity, withForm.
requestBody v1 inchangé, v2 ajoute engine et gerbe.params.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Liste du moteur, curseur de densité et liste de forme (désactivés en v1) branchés sur les vues pures d'O419.
Graines affichées selon le moteur choisi (acceptsSeed du registre), aperçu par requestBody.
Bulles d'aide non faites (entrée du backlog encore ouverte).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Organe capituleFlower dans le flux v2 : 12 à 34 ligules, cœur de 20 à 60 florets en spirale à l angle d or. Forme ajoutée à FLOWER_FORMS et FORM_WEIGHTS (3 pour 1), crochet à quatre arguments (nf2). Budget mesuré dans l index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Organe clochetteFlower dans le flux v2 : pédicelle courbé vers le bas, 3 à 5 pétales leaf serrés (ventre, resserrement, lèvre évasée, courbure nette négative). Forme ajoutée à FLOWER_FORMS, FORM_WEIGHTS (1) et au crochet. Budget mesuré dans l index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Organe ombelleFlower dans le flux v2 : 6 à 14 rayons (stem fin) multipliés par la densité (plancher 3, passée par nf2.density), fleurette de 4 à 6 pétales quads au bout de chacun. Forme ajoutée à FLOWER_FORMS, FORM_WEIGHTS (1) et au crochet. Budget mesuré dans l index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Organe grappeFlower dans le flux v2 : épi (stem de 1 segment) prolongeant la pousse, 8 à 20 fleurettes (plancher 4) multipliées par la densité (nf2.density), pétale quad plus petit vers le haut. Forme ajoutée à FLOWER_FORMS, FORM_WEIGHTS (1) et au crochet. Budget mesuré dans l index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tableau forme x type x densité (draws, génération) à 100 et 300 pour les 5 formes, face à v1, mesuré sur la VM cloud le 2026-10-29. Dépassements listés dans l index, moteur inchangé.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZnMP3nF8YFd1R1pw9Q
Les tiges et feuilles (couche 0) d'une forme sont comparées en entier à celles des autres formes de v2 sur des graines woody et herbal. Coquille corrigée dans flower-cap.test.js.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Moteur inconnu et params refusés par parseParams deviennent InvalidSource. Sortie inchangée pour les sources v1 et v2 valides.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZkFvLF3mH5JRvTRmaY
Garde : ni Math.pow ni ** dans fleur/ hors moteurs nonflowers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Même contrôle de plants et de frame sur le chemin de la gerbe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ordre depth prouvé sans tirage et écrit à la main, types sans liste figée,
offsets en octets de HUE et VALUE.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le test passe d'emblée (O433 était juste). RED montré par mutation locale non commitée : table: instance dans painter.js fait échouer 'passes et tables par espèce', uploaded.layers[instance] fait échouer 'espèce partagée = espèce dupliquée'.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Empreintes identiques pour les 4 rendus aux arbres 0009d385, e3877dd2^ et après O433.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Peintre fleur-gpu.2 (décision Q4). Branche de teinte seulement au calque 1 avec teinte non neutre ; teinte neutre : mêmes octets, relevé d'O437 refait à l'identique.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
quincunxGrid(count, ratio) : grille pure sans tirage, rangées paires à (c + 0.25) / cols, impaires à (c + 0.75) / cols, y = bas de la cellule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZnYhCYzYoKmvgcjnu7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Type mille-fleurs : un pied par cellule du quinconce (6 tirages par pied), peint par profondeur ; count borné à 30..60. Constantes de style proposées, [À CONFIRMER à l'œil].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZnYhCYzYoKmvgcjnu7
prairieRows : rangées du fond vers l'avant, échelle croissante, pieds répartis en 1/scale, reste au fond. pow de src/prep/power.js à la place de **.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZnYhCYzYoKmvgcjnu7
Type prairie : pieds posés rangée par rangée (O457), 6 tirages par pied, lointain éclairci par farLight ; borne count 30 à 60, ordre par profondeur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Q4YZnYhCYzYoKmvgcjnu7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
O478 — Mille-fleurs et prairie : jusqu'à 1 000 pieds
All checks were successful
CI / OceanPrint - tests + lint JS (pull_request) Successful in 3m57s
df6b39c8dc
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nora merged commit 783c532c27 into develop 2026-10-30 12:17:40 +00:00
Nora deleted branch feature/fleur-v2 2026-10-30 12:17:40 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Nora/OceanPrint!15
No description provided.