Carte des règles de Corals 2Comment Claude et Codex travaillent sur le jeu : où sont les règles, qui fait quoi, comment on publie.

Générée le 23 octobre 2026 à 10:17
depuis les fichiers du dossier partagé

Vue d'ensemble

9applications *.playcorals.online
9règles permanentes d'Antoine
30règles du jeu et de développement
121fonctions décrites dans la carte du code
128publications par tools/publish.sh (+ 137 avant)
104 Kode règles chargées d'office (≈ 31300 tokens)
Codecommit 96c5102a = branche prod (96c5102a)
Ce qui a changéPeinture des visages d’origine depuis une photo, avancement et erreurs visibles dans l’atelier
Serveurinstantané /var/lib/corals-2/server-releases/20261023T075038Z-96c5102a-face-paint-fix (server/, src/, blender/ d'un même commit, drop-in 90)
Pages en ligne sans source dans prodaucune

Sources des règles

Du plus général au plus précis. En cas de conflit, le plus précis gagne : le CLAUDE.md de Corals 2 passe avant le socle Archonse, qui passe avant les règles globales.

Global
Règles de tout le serveur (MCP par CMCP, hub, DNS, modèles OpenAI, /tmp…) et le vocabulaire Corals : /root/.claude/CLAUDE.md (Claude), /root/.codex/AGENTS.md (Codex).
Socle Archonse
Commun à tous les projets : où tourne l'agent, livrer un site, navigateur, archonse-ctx, publication générale.
Corals 2
CLAUDE.md du dossier partagé (avec docs/ETAT.md importé), AGENTS.md pour Codex, LEXIQUE.md, docs/CHANTIERS.md. Dans prod et les copies, ce ne sont qu'un renvoi.
Détail sur demande
docs/carte/ (le code, domaine par domaine), docs/RELEASES.md (historique), docs/publication.md (pièges).

Fichiers

FichierRôleLu parChargementTaille
/root/.claude/CLAUDE.mdRègles globales Claudetous les chats Claude du serveurd'office37 Ko
/root/.codex/AGENTS.mdRègles globales Codextous les chats Codexd'office18 Ko
/root/archonse/ProjectList/CLAUDE.mdSocle Archonsetous les chats projet Clauded'office20 Ko
CLAUDE.mdRègles de Corals 2Claude (auto) ; Codex (lu sur consigne)d'office45 Ko
docs/ETAT.mdCe qui est en ligneimporté par CLAUDE.md ; Codex le litd'office940 o
AGENTS.mdRésumé pour CodexCodexd'office2,8 Ko
LEXIQUE.mdLexique (le vocabulaire d’Antoine)lu avant chaque tâcheà lire71 Ko
docs/CHANTIERS.mdQui travaille sur quoi, restes à fairelu avant de commencerà lire6,6 Ko
docs/carteCarte du code, par domainelue avant de toucher un domainesur demande339 Ko
docs/RELEASES.mdHistorique des publicationsécrit par tools/publish.shsur demande279 Ko
docs/publication.mdPublier à la main, piègesen cas de besoinsur demande3,1 Ko

Mémoire des comptes Claude (Codex ne la lit pas : rien d'important ne doit vivre seulement ici)

MémoireCe qu'elle ditComptes
adminsCorals 2 — seuls les admins changent le monde (21/10/2026) ; page admin.playcorals.online, droits dans admin/rights.ts, garde serveuraccount-2
app-androidL'app Android Play Corals (com.antoinecarle.corals) est une coque WebView dans le projet corals (Corals 1), pointée sur Corals 2 depuis la 1.0.6, langue du téléphone depuis la 1.0.7account-2
betaCorals 2 est présenté comme une bêta / démo avant lancement (21/10/2026) : fenêtre au 1er lancement + badge, src/standalone/beta.tsaccount-2
bourse-serveurBourse (21/10) : or, cristaux et doublon gardés sur le serveur (wallet-api) ; « l'or c'est le plus important » ; doublon d'or à cours indexé sur l'inflation (22/10) ; le sac a suivi avec le personnage lié au compteaccount-2
comptes-connexionComptes Corals 2 (21/10/2026) : connect.playcorals.online, e-mails Resend, admin par compte ; antoine83680@gmail.com propriétaireaccount-2
couts-iaCoûts IA du jeu (20/10/2026) : compteur serveur ai-costs.mjs, page couts.playcorals.online par joueur/jour/fonctionaccount-2
dialogues-en-bullesCorals — dans les scènes, Antoine préfère les bulles au-dessus des personnages à une fenêtre de conversationaccount-2, account-3
joueurs-en-ligneMultijoueur de Corals 2 — WebSocket world-api/live, salon par île, avatars, groupe avec créatures partagées par l'hôte (party.ts) ; détail dans docs/carte/socle.mdaccount-2
lab-stuffLab Stuff (atelier des vêtements) : stuff.playcorals.online depuis le 21/10/2026, habillage pièce par pièce ; API = service à part corals-2-stuff, publiée à la mainaccount-2
langue-du-jeuCorals 2 traduit à l'écran (21/10/2026) ; anglais par défaut, globe en haut à droite pour changer ; i18n/live.ts, server/i18n.mjs, tools/i18n/account-2
personnage-comptePersonnage lié au compte (21/10) : le héros (sac, niveau, compétences, corps…) vit sur le serveur avec la bourse ; un compte connecté le retrouve partout, un appareil à la foisaccount-2
proprietesPropriétés (21/10) : le héros achète un bâtiment génératif (une maison d'abord) qui lui rapporte de l'or ou du stuff ; stratégie en discussion, décision du modèle de propriété en attenteaccount-2
qui-est-quiCorals 2 — les sept sortes de personnages (héros, joueur en ligne, Player, habitant, ennemi, créature, PNJ du vrai jeu) : une seule source beings.ts, section illustrée du lexique, camps de Players posables dans Corals World (21/10)account-2
regles-coralsCorals 2 — où sont les règles (CLAUDE.md léger, docs/, tools/publish.sh, branche prod) et pourquoi ne pas les regonfleraccount-2, account-3
sauvegarde-githubCorals 2 sauvegardé sur GitHub privé (21/10/2026) : remote github + clé de déploiement, minuteries, branche data, kit tools/portableaccount-2
signalements-captureSignaler › ⏱️ Capture (FPS) : sonde de perf toujours active, captures données/vidéo, analyse, et règle 9 « optimiser systématiquement d'après les captures »account-2
signalementsCorals 2 — bouton Signaler (F8) → diagnostic IA → Archonse (Phases bug) ; lire avec tools/reports.mjs avant de corrigeraccount-2
skins-assemblageSkins d'assemblage des habitants (21/10) — looks/assembly.ts, 12 styles, tout PNJ généré doit passer par là ; roadmap dans Phasesaccount-2
sol-texturesSol des îles : une vraie texture peinte par matière, dans le style de l'herbe du jeu, jamais l'herbe recolorée (21/10/2026)account-2
synchro-builder-worldBuilder du jeu ↔ World Lab synchronisés dans les deux sens, y compris sur les îles du monde (Port-Brise) account-2
world-lab-unifierWorld Lab : Antoine veut un seul endroit par fonction (pas de doublons), le meilleur de chaque version fusionné, et l'habillage du labo partoutaccount-2, account-3

Branches et copies

Trois endroits, trois rôles. 138 branches et 27 copies de travail aujourd'hui.

📜 main · le dossier partagé

/root/archonse/ProjectList/corals-2

Les règles, docs/, LEXIQUE.md, les outils de publication. On n'y change jamais de branche ; on n'y commite que ses propres fichiers (git commit -- <fichiers>).

🚀 prod · le code en ligne

Commit 96c5102a

Toujours égale à ce qui tourne. Avancée seulement par tools/publish.sh, reculée par --rollback. Ses CLAUDE.md / AGENTS.md renvoient vers main.

🛠️ une copie par tâche

git worktree add /var/tmp/corals2-<nom> -b <nom> prod

On y code, on y commite, on publie depuis elle, puis on la retire. Le sujet est réservé dans docs/CHANTIERS.md.

Publier : tools/publish.sh

Une seule commande pour Claude et Codex, sans demander (règle 3), à la fin de chaque tâche ; un bug bloquant part aussitôt.

🔒Verrouune publication à la fois
🔀Fusionrelease en ligne + prod ; conflit = arrêt
🛡️Garde-fousrègles et docs jamais modifiées dans la copie
🧪Contrôlestypecheck, tous les tests, échecs connus listés
🏗️Release légèrepages construites, ressources changées copiées, le reste lié
🖥️Serveurinstantané essayé sur un port libre, puis drop-in 90
🔁Basculecurrent → nouvelle release
🌐Vérificationcorals2, world, lexique servent la nouvelle version
📝Notesprod avancée, RELEASES, ETAT, LEXIQUE, cette carte
✨Joueursmise à jour en direct au premier moment calme

tools/publish.sh --dir <copie> --name <nom> --what "…" · --rollback (site et serveur) · --status · --no-switch (tout préparer sans mettre en ligne). Ce qu'il ne fait pas : DNS, nginx, certificats, données du monde, clés.

Applications 9

Chaque outil qui se donne a son domaine, servi à la racine ; même service et même release pour tous ; les données sont sur le serveur, communes à toutes les adresses.

Antoine ditC'estAdresse
« le jeu », « Corals », « Corals 2 »le jeu (combat-sandbox.html)https://corals2.playcorals.online/?lang=en (&intro=1 rejoue l'arrivée)
« le world », « le World Lab », « le labo du monde », « le laboratoire du monde »Corals World, l'éditeur des îles (world-design-lab.html)https://world.playcorals.online/
« le lexique », « le glossaire », « le vocabulaire »le lexique du jeu (lexique.html)https://lexique.playcorals.online/
« signaler », « les signalements »ce qui ne va pas, signalé en jouant (signalements.html)https://signalements.playcorals.online/
« admin », « la page admin »les admins (seuls à changer le monde) et ce que les joueurs peuvent changer (admin.html)https://admin.playcorals.online/
« se connecter », « la page de connexion », « connect », « l'inscription »les comptes : inscription, connexion, mot de passe oublié (connect.html)https://connect.playcorals.online/
« les coûts », « les coûts IA », « combien ça coûte »ce que coûtent les modèles d'IA, par joueur, par jour et par fonction (couts.html, admins seulement)https://couts.playcorals.online/
« les règles », « la carte des règles », « la cartographie »la carte des règles et de l'organisation (Claude, Codex, branches, publication, chantiers), générée depuis ce dossier par tools/rules-map.mjs (page statique /var/www/corals-2-regles/, minuterie corals2-regles.timer)https://regles.playcorals.online/
« le Lab Stuff », « le stuff lab », « l'atelier des vêtements »l'atelier des vêtements et armures (stuff-lab.html, API à part : service corals-2-stuff)https://stuff.playcorals.online/

Règles permanentes d'Antoine 9

1. Vocabulaire (20/10).

Lire la règle

Avant de travailler, lire LEXIQUE.md : une expression d'Antoine mène à un seul terme ; en cas de doute, le lexique tranche. Un mot fixé ou précisé par Antoine s'ajoute dans src/standalone/lexicon/terms.ts (une expression = un terme, vérifié par tests/lexicon.test.ts), puis node tools/lexicon-md.ts refait LEXIQUE.md, puis on publie.

2. Pas de navigateur (14/10, règle absolue).

Lire la règle

Ni Playwright, ni Chromium, ni Puppeteer, ni capture : la scène tourne en WebGL logiciel et cinq navigateurs ont saturé le serveur (charge 41 sur 8 cœurs). Valider par tsc, tests, build, curl et journaux ; Antoine vérifie le rendu sur l'adresse publique : dire à la fin quoi regarder et où. Le panneau Navigateur ouvert dans Archonse ne suffit pas. Exception : demande explicite d'Antoine dans son message, alors un seul navigateur sur tout le serveur (flock -w 300 /var/tmp/corals-browser.lock timeout 120 node script.mjs, browser.close() dans un finally).

3. Publier directement (20/10 : « me demande plus jamais pour pousser les modifs »).

Lire la règle

Toute modification terminée et vérifiée part en production aussitôt par tools/publish.sh, sans demander ni mise en garde. Cette règle prime sur la règle générale « on ne publie que sur demande ». Une publication = une ligne dans docs/RELEASES.md, écrite par le script.

4. Une application par outil, données connectées (20/10 : « il faut toujours faire ça »).

Lire la règle

Chaque outil qui se donne a son domaine <nom>.playcorals.online servi à la racine : DNS Hostinger (A <nom> → 72.62.237.177, MCP hostinger-api, ne toucher que cet enregistrement), vhost sur le modèle de /etc/nginx/sites-available/world.playcorals.online (racine → sa page, ancienne adresse en 301, Service-Worker-Allowed: /, navigation vers la page d'un autre outil renvoyée sur le domaine de cet outil), certbot, origine ajoutée au drop-in 70-origins.conf, entrée dans APPS de src/standalone/app-root.ts, manifeste et icônes propres. Tout ce qui est partagé vit sur le serveur, commun à toutes les adresses ; les liens d'un outil à l'autre passent par appUrl (jamais la page d'un autre outil sur le domaine courant : stockage séparé) ; ce qu'un outil passe à un autre voyage par l'adresse ou le serveur (« Tester l'île » : LabOnline.settled, puis launch/sx/sz) ; une clé d'une autre application se lit par le pont en lecture seule public/app-bridge.html (bridgeGet, clés de ALLOWED). Garde-fous : tests/app-root.test.ts. Limite connue : la partie jouée sur le hub (autre site) n'est pas celle des applications.

5. Mise à jour en direct (20/10 ; « le système de refresh doit fonctionner, que toutes les conversations le sachent »).

Lire la règle

Une publication arrive seule chez les joueurs : live-update.ts lit publication.json toutes les 20 s, précharge, attend un moment calme, garde l'image de l'écran et repart sur la nouvelle version (partie, sac, Village et position conservés) ; ne jamais dire aux joueurs de recharger. Vraies retenues : combat, cinématique (body.dataset.c2Cinema), saisie de texte, héros à terre, bateau, expédition ; retenues douces (conversation, outil, panneau, fenêtre) : 6 min au plus ; pastille « ✨ Nouvelle version · Mettre à jour » au bout de 15 s. Toute nouvelle fenêtre qui ne doit pas être coupée pose data-c2-modal. Corals World pareil, jamais avant que tout soit en ligne. Après une publication, la suivre : journalctl -u corals-2-web | grep maj-direct. Conséquences : chaque release a un publication.json neuf (le script s'en charge) ; toute release recharge les joueurs, donc on ne publie pas pour rien. Garde-fous : tests/live-update.test.ts.

6. Signalements (20/10 : « on clique Signaler… pour systématiquement fixer les bugs »).

Lire la règle

Le bouton « Signaler » (F8) du jeu, des labos et de Corals World envoie l'écran, l'état de la partie et la phrase du joueur ; l'IA en fait un diagnostic, rangé dans Archonse (Phases › 🐞 Signalements du jeu, Knowledge). Dans une conversation : node tools/reports.mjs list (ce qui reste), show <n> (fiche, puis regarder l'image indiquée), et une fois corrigé et publié done <n> --commit <c> --note "…". Détail : docs/carte/socle.md.

7. Option ou permanent.

Lire la règle

Avant d'importer une fonctionnalité (DS2, DS3, Corals…), demander à Antoine si elle doit être une option (interrupteur dans Réglages, mémorisé, et en OFF plus aucun traitement) ou permanente.

8. Qui est qui (21/10 : « vraiment différencier ça… systématiquement dans les règles Claude et Codex, qu'on sache bien ça »).

Lire la règle

Sept sortes de personnages au même corps (un vrai personnage du jeu : classe, niveau, tenue) mais au fonctionnement différent : héros (vous), joueur en ligne (un autre humain), joueur automatique ou Player (IA des clans de DS2 : clans Tideborn, Ironwake, Emberfang, escouade, pillards ; ni mémoire ni conversation), habitant (le Village : il parle, se souvient, donne des quêtes), ennemi (personnage hostile : le combat seul), créature (bestiaire ; faune si elle n'est pas hostile), PNJ du vrai jeu (sa boutique d'origine). Toujours nommer la bonne sorte et savoir qui fait agir un personnage avant d'y toucher ; « escouade » = les Tideborn des Players, « groupe » = les habitants qui suivent le héros, « groupe de joueurs » = de vrais joueurs. Une seule source : src/standalone/beings.ts (section « Qui est qui » du lexique avec ses illustrations, étiquettes et anneaux des repères de Corals World, camps de Players posés dans le world) ; une nouvelle sorte, un nouveau repère ou une nouvelle étiquette s'y ajoute, jamais en copie. Garde-fous : tests/beings.test.ts. Détail : https://lexique.playcorals.online/#qui-est-qui

9. Signalements capture et optimisation (22/10 : « tu pourras venir fetch automatiquement depuis les signalements capture… et derrière tu feras systématiquement de l'optimisation »).

Lire la règle

Dans Signaler (F8), l'onglet « ⏱️ Capture (FPS) » envoie un moment de jeu mesuré, en données ou en vidéo (sonde perf/probe.ts, analyse perf/capture-core.ts, vidéo découpée en images par le serveur). Toute conversation qui touche aux performances commence par node tools/reports.mjs captures, puis show <n> (regarder la planche et les images d'à-coups indiquées). On optimise d'après les mesures, jamais à l'aveugle, la cause la plus rentable d'abord ; une optimisation qui change l'image se dit (option si Antoine le veut). Après publication : done <n> --note "<gain mesuré>" et demander une nouvelle capture au même endroit. Un nouveau système du moteur ou une nouvelle sorte d'objet dessiné entre dans la sonde (sections de hookEngine, noms de perf/categories.ts). Garde-fous : tests/perf-capture.test.ts. Détail : docs/carte/socle.md.

Méthode : travailler sans se marcher dessus 9

Plusieurs sessions Claude et Codex travaillent et publient en même temps. **Le code de…

Plusieurs sessions Claude et Codex travaillent et publient en même temps. Le code de production est la branche prod (= le commit en ligne, avancée par tools/publish.sh). Partir d'elle : git worktree add /var/tmp/corals2-<nom> -b <nom> prod, travailler et commiter dans cette copie, publier depuis elle.

Le dossier partagé

(/root/archonse/ProjectList/corals-2, branche main) ne porte que les règles, docs/ et les outils de publication ; il a souvent des fichiers modifiés par d'autres sessions : ne jamais y changer de branche, ni commiter autre chose que ses propres fichiers (git commit -- <fichiers>).

Copies

Copies : dans /var/tmp, jamais /tmp ; node_modules est un lien déjà présent dans l'arbre (pas de npm install) ; git avec -c safe.directory='*' ; retirer sa copie (git worktree remove) quand le travail est publié.

Les règles s'écrivent dans le dossier partagé seulement

(CLAUDE.md, AGENTS.md, docs/ sur main, commit -- <fichiers>), jamais dans une copie : dans prod et les copies, CLAUDE.md et AGENTS.md ne sont qu'un renvoi ici, et tools/publish.sh refuse une branche qui les modifie. Le lexique est du code (src/standalone/lexicon/terms.ts, dans la copie) ; LEXIQUE.md du dossier partagé est remis à jour par le script.

Réserver son chantier

avant de commencer, regarder docs/CHANTIERS.md et y inscrire son sujet (conversation, branche) ; si un autre l'a déjà, travailler avec lui (fusionner sa branche) au lieu de refaire. Retirer la ligne une fois publié. Les restes à faire y vont aussi.

Une preuve avant de dire « ça marche »

Annoncer une fonction faite seulement après l'avoir vue s'exécuter (test qui la joue, journal du serveur, relevé envoyé par la page, instance d'essai, route appelée) ; dire clairement ce qui n'a pas été vu (le rendu, que seul Antoine voit). Diagnostiquer sans navigateur : relevé d'état de la page, __client-error du journal nginx, glslangValidator pour les shaders, vraies connexions pour le temps réel.

Publier par tâche terminée

une publication à la fin de ce qu'Antoine a demandé (un signalement, une fonction, un audit), jamais au milieu ; un bug qui bloque les joueurs part aussitôt. Toujours sans demander (règle 3).

Toujours répondre en français

, même quand le code ou un outil parle anglais.

Tests lourds

Tests lourds : archonse-compute run --dir <copie> -- npm test peut les envoyer sur le PC d'Antoine (voir /root/.archonse/compute/agent-instructions.md).

Règles du jeu et de développement 30

📖 Histoire, scènes et personnages (7)

Scènes, quêtes et personnages scénarisés (règles systématiques, 20/10/2026, Antoine)

19 points

— toute arrivée, cinématique, chapitre d'histoire, événement ou quête qui met en scène des habitants :

  1. Le personnage appartient à la scène. Dès qu'il entre en scène : corals2Village.hold(clé, 'nom-de-la-scène') (ou ctx.hold dans builder/story.ts). Tant qu'il est tenu (owned / mode scene de village.ts), release() le ramène à la scène : ni la fin d'une question (askChoice), ni la fermeture d'une conversation, ni la fin d'une étape, ni une réplique du modèle (leave, lead, follow), ni une approche du serveur ne le rendent à sa journée ; il reste à deux pas du héros, tourné vers lui. Il est rendu seulement quand la trame le libère (unhold : la quête qui le mène commence, ou la scène se termine). Jamais de stay à durée courte ni de setTimeout qui le relâche.
  2. Pas de scène sans ses acteurs. Avant de montrer une scène, attendre sous le rideau que chaque personnage qui y joue existe et soit chargé (member(clé) + entité non preparing de actors.diagnostics) ; sur une île du monde, le Village démarre après la scène (monde envoyé au serveur, puis personnages chargés). Jamais un plan vide, jamais un personnage qui apparaît au milieu.
  3. Le joueur a une voix. Dans une conversation écrite, chaque réplique du héros est un choix (boutons + touches 1 à 3, heroSays de barrel-arrival.ts, options des répliques hero de story.arrival.talk), jamais une phrase jouée à sa place.
  4. Les enchaînements suivent la trame. Ce qui doit s'enchaîner sans pause (nom donné → « Viens, suis-moi » → on le suit) est un chapitre auto (sans carte de quête : le donneur dit sa demande, part, la quête le mène) ; {hero} dans une réplique = le nom du héros.
  5. Les trames vivent dans l'île (Island.story, World Lab), pas dans le code : une retouche de l'histoire se fait à partir de la version publiée et ne change que les champs concernés (tools/start-island/patch-story.ts puis publish.mjs), car l'auteur retouche l'île en direct dans le World Lab.
  6. Chaque règle a son garde-fou dans tests/arrival.test.ts (« règle des scènes ») : le garder vert, et en ajouter un pour toute nouvelle scène.
  7. En cinématique, seulement ce que la scène propose (20/10, Antoine). Toute cinématique pose body.dataset.c2Cinema='<nom>' au début et le retire à la fin (l'arrivée pose aussi data-c2-arrival). Pendant ce temps (cinema() de village.ts) : aucune invite « Parler / Répondre », ni cercle des interactions (clic droit, E), ni nom, jauge, message, cadre du groupe ; les habitants qui ne jouent pas (non tenus) n'ont rien à l'écran ; dans une conversation de la scène, seules ses réponses en boutons (champ libre, réponses prêtes, « Interactions », jauges masqués). Les répliques et choix viennent de la scène, jamais du Village.
  8. La caméra montre ce qui se dit. Un plan de dialogue cadre les personnages qui parlent et leurs bulles avec de l'air autour : meetShot (jamais à moins de 11 m) puis fitShot (zone de confort de 7 % sur chaque bord, place des bulles bubble / bubbleW, bandes, répliques à choisir et conversation déduites de l'écran). Jamais de gros plan sur un personnage qui parle.
  9. Lisibilité des bulles (partout) : nom et jauges d'un habitant retirés au-delà de 22 m, sa bulle au-delà de 32 m (sauf cri), le plus proche passe devant les autres (z-index selon la distance), le héros devant tous.
  10. Un choix du joueur se confirme à l'écran : ce qu'il a choisi est montré clairement juste après (ex. « Vous êtes Phyllis · Herboriste » à la sortie du tonneau).
  11. Un trajet scénarisé ne coupe jamais sa logique. Pendant « Suis-moi », le guide compare sa progression vers la destination à celle du héros : si le héros le dépasse dans la bonne direction, il accélère (course puis sprint) et ne s'arrête pas pour lui faire face ; il attend ou revient seulement si le héros est réellement derrière. À l'arrivée, le guide reste tenu, s'arrête face au héros et joue l'échange écrit du lieu (réplique, choix du héros, réponse, consigne suivante) avant que le suivi passe au prochain objectif. Moteur commun : followGuide et Step.arrival.
  12. Un combat scénarisé commence par une scène complète. Les adversaires, le héros et le personnage défendu sont chargés et cadrés ensemble ; l'adversaire annonce sa menace en bulle, le héros choisit sa réponse, le personnage concerné réagit, puis seulement les commandes et l'IA de combat reprennent. Le lieu peut être techniquement intérieur ou extérieur : cette classification ne doit jamais empêcher la scène écrite.
  13. Aucun ennemi de quête ne reste inerte. Une introduction attend au plus six secondes une autre lecture ou un chargement ; passé ce délai, le combat prend le relais avec une annonce de secours. Si le héros frappe avant la fin, tous les adversaires vivants ripostent immédiatement. À la sortie de la scène, chaque adversaire reçoit une cible et engage réellement (approche, arme, attaque), sans dépendre de l'ouverture de l'outil Players.
  14. Les morts priment sur la mise en scène. Chaque adversaire porte l'identité stable de son groupe de quête ; sa mort est comptée une seule fois, même si une bulle ou une caméra était encore active. La mort du dernier ferme la scène, enregistre l'étape puis affiche aussitôt l'objectif suivant. Le personnage protégé reste tenu jusqu'à la vraie fin de sa trame, pas seulement jusqu'à la fin de la mêlée.
  15. Critère d'acceptation d'une quête de combat. Un test avec les vrais moteurs joue obligatoirement : apparition de tous les acteurs → menace et cadrage → réponse choisie du héros → réaction du personnage défendu → passage à l'IA hostile → approche et au moins une attaque → mort de tous les ennemis → quest/step persisté → objectif suivant visible. Tester aussi la fermeture de la réponse, un chargement lent, une attaque anticipée et le dernier ennemi mort pendant l'introduction.
  16. Une partie se sauvegarde en série. Combat, équipage, conversation et quête peuvent répondre en parallèle, mais leurs écritures d'une même partie passent par une file unique et des fichiers temporaires distincts. Une étape validée ne peut jamais être écrasée par une sauvegarde de combat plus ancienne ; un test concurrent relit le fichier depuis une nouvelle instance.
  17. Chaque objectif accompli laisse une preuve durable. Avant de retirer un acteur, un groupe, un objet ou une balise, le serveur écrit un fait idempotent identifié par l'histoire, le chapitre et la sémantique de l'étape (server/quest-progress.mjs). L'historique d'une quête échouée ou abandonnée conserve aussi l'étape atteinte. Un simple numéro de quête en mémoire, une bulle vue ou l'absence actuelle d'un acteur ne sont jamais une preuve suffisante.
  18. La reprise réconcilie, elle ne recommence pas. Au chargement, à l'acceptation et lorsqu'un chapitre est reproposé, le moteur repart du premier objectif qui n'est pas prouvé. Un adversaire déjà vaincu ne réapparaît jamais ; si sa disparition a emporté un butin indispensable, un reçu unique restaure seulement la quantité manquante dans le Sac. Un objectif n'avance jamais par simple délai : il avance par une preuve, sinon seul l'élément manquant de l'étape courante est réparé.
  19. Une fin interrompue se termine seule. Si toutes les étapes sont prouvées mais que la requête de fin a été coupée, la reprise envoie la fin et applique une seule fois chapitre, récompenses et suite. Les tests obligatoires couvrent : double requête, sauvegarde concurrente, fermeture/rechargement après chaque étape, échec après une victoire, changement de texte ou de lieu publié, reprise sans respawn et restitution idempotente du butin.

Architecture narrative canonique des îles et des arcs (20/10/2026, Antoine)

Lire la règle

histoire globale du monde → arcs narratifs → îles et leur lore → mini-trame insulaire obligatoire → quêtes annexes. Un arc narratif, au sens des arcs de manga, réunit une ou plusieurs îles autour d'un enjeu majeur, de personnages ou factions récurrents et d'une progression commune (mise en place, montée des enjeux, point culminant, conséquences ou résolution). Chaque île possède systématiquement une quête principale obligatoire, qui forme sa mini-trame locale (éventuellement découpée en chapitres) avec une situation, un enjeu, une progression et une résolution propres. Cette mini-trame doit faire avancer, révéler ou faire résonner l'arc auquel l'île appartient, sans devoir résoudre l'arc à elle seule. Les quêtes annexes se rangent sous cette mini-trame et approfondissent ses habitants, lieux, factions, secrets ou conséquences. Aucune quête générique ou déconnectée : toute quête obligatoire ou annexe naît du lore de son île ; le lore de l'île sert son arc narratif, et chaque arc constitue une partie cohérente de l'histoire globale du monde. Les futurs outils, générateurs et ateliers d'histoire doivent conserver et rendre visible cette filiation ainsi que l'arc courant.

Conversations de quête et conversations libres (règle du 20/10/2026, Antoine)

6 points

une conversation est de quête quand le personnage est lié à ce qui fait avancer le jeu — il porte une décision en attente de l'histoire, l'étape en cours est de lui parler (message, rapport), il confie le chapitre suivant, l'étape est de faire équipe et il peut venir, ou il a donné la quête en cours ; sinon elle est libre. La quête prime toujours :

  1. Une seule règle pour tout le jeu, bonds/quest-talk.ts (questTalk, ordre decision > deliver > chapter > party > giver), lue telle quelle par le serveur (questLinkOf). Toute nouvelle quête, étape ou scène qui fait parler quelqu'un passe par elle, jamais par un texte en dur.
  2. On le voit dans la conversation : bandeau doré (quête, étape), réponses prêtes de la quête d'abord, dorées et marquées ❗, puis au moins une réponse libre ; une décision ou une proposition de quête porte son étiquette (« ❗ Décision », « ❗ Quête »).
  3. On le voit avant de parler : ❗ au-dessus de la tête de celui qu'il faut aller voir, invite « ❗ Quête · Parler », centre du cercle « ❗ Parler » ; à portée égale, l'invite et les appels vont au personnage de quête ; une approche libre attend la fin d'une conversation ou d'un appel de quête.
  4. Le personnage répond d'abord sur la quête (le serveur l'écrit avant les mots du héros) et propose des suites sur la quête (quest_suggestions) ; il ne change jamais la quête et ne dit pas qu'elle est faite : c'est le jeu qui la vérifie.
  5. Une conversation de quête fait avancer la quête : la décision s'ouvre dès qu'on lui parle, « Je t'écoute » lance le chapitre, le message est remis quand le héros le dit ; quand cette remise termine la quête, la réplique de fin écrite répond, sans réplique du modèle avant elle.
  6. Garde-fous : tests/quest-talk.test.ts (règle, rendu, serveur, route talk) ; en ajouter un pour tout nouveau lien de quête.

Deux systèmes d'interaction : « système d'interaction par quête » et « système basique » (règle du 20/10/2026, Antoine)

4 points

Ce vocabulaire est à employer tel quel.

  1. Système d'interaction par quête : dès qu'un personnage est lié à une quête ou à une mission (quête principale, chapitre de l'histoire, quête obligatoire de l'île ou quête annexe qu'il porte : la règle questTalk / questOf, rôles decision, deliver, chapter, party, giver), le clic droit, la touche E, l'invite et l'appel depuis le bateau n'ouvrent pas le cercle des interactions : le héros va jusqu'à lui et la conversation s'ouvre directement, réduite à la quête, sur le modèle de l'arrivée avec l'hôte (Maëlle sur Port-Brise) : les échanges, le bandeau doré, les réponses de la quête et ses décisions en boutons ; ni champ libre, ni jauges, ni avis. Un bouton discret « Autre chose » mène au système basique.
  2. Système basique : tout personnage sans interaction importante liée à une quête garde le cercle des interactions (gestes, cadeaux, romance, équipage, histoire, méchant) et la conversation complète.
  3. Toute quête, mission ou chapitre conçu dans le World Lab ou ailleurs passe automatiquement par le système d'interaction par quête : il suffit que le personnage soit relié à la quête par la règle commune. Jamais d'interface de quête à part.
  4. Code : openPieFor(v, at, full) de village.ts (sans full, un personnage de quête ouvre openTalk), data-quest-mode de la conversation (renderTalk, styles dans bonds/dialog.ts) ; garde-fou dans tests/quest-talk.test.ts.

La scène se lit sur les personnages (15 et 20/10 : « ça brise un peu le mur… bulles sur les perso plutôt »)

Lire la règle

Répliques, questions et choix en bulles au-dessus de ceux qui parlent ; une fenêtre seulement pour une vraie saisie (nom). Pas de narrateur ni de texte d'histoire plaqué à l'écran ; les bandeaux de suivi (« Chapitre accompli », pastille de l'acte) sont de l'interface, à garder discrets.

Une réplique appartient à son locuteur

Lire la règle

Chaque réplique est rangée et rechargée sous la clé de celui qui la dit, jamais sous celle du donneur de quête ; closer dit la réplique finale, et si cet acteur manque, la ligne attend. {hero} est résolu côté serveur. Une correction de provenance migre aussi les journaux déjà enregistrés.

Un objet remis par une histoire est un vrai objet

Lire la règle

L'icône va du donneur vers le Sac, une fiche montre le vrai objet (nom, niveau, classe), il entre dans l'inventaire et s'équipe si la trame le prévoit ; don idempotent, sac plein refusé proprement, testé avec les vraies règles du sac. Un choix d'arme ne propose que les armes du corps et décide de la classe.

🏗️ Architecture du jeu (7)

Données sur le serveur, jamais dans le navigateur (20/10 : « partagée en base de données et jamais dans le navigateur… systématiquement en ligne » ; 21/10 : « bien penser à la partie serveur MMO »)

Lire la règle

Tout ce qui compte pour la partie ou le monde (île, constructions, Village, histoire, progression, or, objets, propriétés) vit sur le serveur ; le navigateur ne garde qu'une boîte d'envoi, un cache ou des réglages d'affichage. Une économie (or, échanges, maisons, boutiques) se conçoit d'abord pour plusieurs joueurs en même temps. L'or, les cristaux et les doublons vivent dans la bourse du serveur depuis le 21/10 (server/wallet.mjs, docs/carte/socle.md) : tout gain ou dépense passe par elle, avec une raison que le serveur sait refaire. Le personnage aussi (sac et équipement, niveau, compétences, corps…), lié au compte depuis le 21/10 (server/character.mjs, PARTS de character-sync/core.ts) : une nouvelle sauvegarde du héros s'y ajoute, jamais en stockage local seul. Reste à faire : les règles des objets côté serveur, voir docs/CHANTIERS.md.

Tout ce qui s'édite circule dans les deux sens, en direct (20/10 : « tout synchronisé en temps réel… des deux côtés »)

Lire la règle

Une retouche faite dans le jeu (Builder, outils admin) revient dans l'île de Corals World en ligne et dans sa version publiée, et inversement, sans rechargement. Ce qui dépend d'un objet le suit quand il bouge (« si je déplace, il faut que ça déplace la quête ») : quêtes, scènes, lieux, repaires. Chemin commun : live-builder.ts, island-api/lab/patch, world-live.ts.

Un seul moteur (19/10 : « vraiment le même moteur que le jeu »)

Lire la règle

« Tester l'île » et les labos lancent le jeu lui-même (game-entry.ts, mémoire isolée par playtest-session.ts) ; jamais un moteur de test construit à part. Familles de créatures et boss communes (mobs/families.ts).

Labos (19/10)

Lire la règle

Une fonctionnalité de gameplay se travaille dans le labo de son domaine mais s'écrit dans le module du jeu qui la gardera, déclarée dans FEATURES et branchée par feature(id) ; le jeu ne l'allume qu'une fois promue. Les outils de travail (téléporter, invincible…) restent au labo. Données qui changent de forme : une migration dans labs/migrations.ts. Procédure : knowledge/labos/README.md.

Une mécanique de combat née au Labo de combat va dans le jeu par le registre

Lire la règle

(labs/registry.ts, étape jeu), jamais en copie (19/10, « tout doit être unifié »).

Un seul endroit par fonction

Lire la règle

une fonction du jeu utilisée par un outil (World Lab, labos) est la même, importée, jamais une seconde version (fiche des personnages, conversation, cercle des interactions, Atelier des îles…).

Le jeu est reconnu par isGamePage() d'app-root.ts

Lire la règle

Le jeu est reconnu par isGamePage() d'app-root.ts (combat-sandbox.html sur le hub, « / » sur corals2.playcorals.online) : preview.ts en déduit le HUD minimal et la barre Desktop/Mobile/HUD. Ne pas renommer la page.

⚔️ Combat et niveaux (3)

Combat (20 et 21/10 : « donne leur leur intelligence de combat comme dans DS2 », « en zone de fight… mode attaque »)

Lire la règle

Un seul cerveau de combat pour tous les combattants (héros assisté, compagnons, habitants en rixe, Players, pillards, boss : combat/crew-brain.ts, IA DS2, boss-brain.ts), jamais une IA à part. En phase de combat : armes sorties puis rengainées après, frappe et compétence dès que la cible est à portée, même en courant ; aucune interaction (cercle, conversation, appel) tant que dure le combat. Les mécaniques viennent de Tales of Pirates (fiches et formules d'origine), pas d'une invention.

Chaque boss est original (19/10)

Lire la règle

Son kit est tiré de sa graine parmi les vraies compétences de monstres (buildBossKit) : au moins une grosse zone annoncée, un contrôle, une attaque à distance, un rapprochement, des phases. Un nouveau boss passe par ce cerveau (mob.boss) et un nouveau rôle se teste dans tests/boss-brain.test.ts.

Niveaux d'une ville et équipement (21/10)

Lire la règle

Chaque ville de Corals World porte un averageLevel : habitants, ennemis humains et Players naissent dans une petite tranche autour. Aucun personnage humain n'apparaît, ne garde ni ne donne une pièce au-dessus de son niveau (tenue calculée avant le premier affichage, atelier filtré, fouille contrôlée). Les créatures gardent leur fiche d'origine ; on choisit une espèce proche du niveau, on ne falsifie jamais sa fiche. Une exception se règle dans la trame.

📱 Écrans et rendu (3)

Réglages du joueur et du laboratoire (22/10, Antoine)

Lire la règle

Dans le jeu, Réglages contient les accès du compte et le confort du joueur : Compte, Interface, Sons, Image, En ligne et Application. La liste positive de settings/audience.ts fait foi ; une nouvelle option de moteur n'entre pas automatiquement dans le jeu. Les paramètres qui changent le monde, la progression, les personnages, le combat ou les données restent dans les laboratoires et les outils d'auteur, avec leurs droits existants. Les contrôles communs restent ceux de settings/ui.ts, avec remise à zéro par section. Ne pas réintroduire le choix technique du corps du héros ni les réglages artistiques du moteur dans les préférences du joueur.

Le mobile se joue comme l'ordinateur (20/10)

Lire la règle

Toute interaction existe au doigt ; une interface nouvelle est vérifiée en quatre formats, 320 × 480, 360 × 320, 480 × 320 et 667 × 375 (tests de responsive.ts), sans rien de coupé ni de masqué.

Le sol (21/10 : « je veux pas que tu fasses ça »)

Lire la règle

Une texture peinte par matière, dans le style de l'herbe du jeu, liée aux biomes ; jamais l'herbe recolorée. Rien n'est posé par défaut qu'Antoine n'a pas choisi (« enlève les pierres que tu mets par défaut »).

✅ Ce que tout ajout doit respecter (2)

Ce que tout ajout doit respecter

Lire la règle

une route qui écrit dans le monde passe par les droits d'admin (src/standalone/admin/rights.ts, tests/admin.test.ts) ; un texte affiché passe par la traduction (translate="no" pour ce qui ne se traduit pas, puis tools/i18n/extract.mjs et warm.mjs) ; un appel à un modèle est compté (featureOf, règle Coûts IA) ; un nouveau type de donnée du monde entre dans la sauvegarde GitHub (SOURCES de tools/github-backup-data.mjs, dossier partagé) ; un nouveau mot d'Antoine entre dans le lexique.

Coûts IA (20/10, « traquer tous les coûts IA du jeu »)

Lire la règle

Un modèle (OpenAI, JEV) s'appelle depuis le serveur, jamais depuis le navigateur : le fetch du serveur est compté (server/ai-costs.mjs), chaque appel est chiffré et rattaché au joueur (save de l'adresse ou tag du corps), au jour et à la fonction. Une nouvelle fonction qui appelle l'IA ajoute sa clé dans src/standalone/costs/features.ts (featureOf), ou within({feature}) si elle tourne en arrière-plan ; un nouveau modèle ajoute son tarif dans PRICES. Garde-fous : tests/ai-costs.test.ts.

• Divers (8)

HUD maritime commun (22/10, Antoine)

Lire la règle

Les nouvelles interfaces de jeu reprennent les cadres et ornements SVG de src/standalone/hud-art/ et les valeurs communes de hud-atlas.css. Leur décoration ne recouvre jamais les zones de clic. Vérifier l'accès aux commandes en portrait et paysage, y compris sur un écran court : cibles tactiles d'au moins 44 px, contenu défilable, fermeture accessible, marges des encoches et retour du focus. responsive.ts garde la responsabilité du placement ; ne pas créer une nouvelle rangée de boutons ou un panneau fixe sans l'y intégrer. Le rendu en jeu reste à distinguer explicitement des planches de conception et des tests de géométrie.

Skins des Players (22/10, reprise d’Antoine)

Lire la règle

Même à bas niveau, les Players et les adversaires de quête portent des skins assortis adaptés à leur classe et à leur faction, dès le premier affichage : looks/player-skins.ts réutilise l’assembleur commun. Les pillards du phare prennent leurs apparences dans une sélection de corsaires. Les skins restent des pièces décoratives sans niveau requis ; la vraie tenue, les armes et les statistiques suivent toujours le niveau. Un habitant garde son habillage propre et un choix explicite d’apparence reste prioritaire. Garde-fous : tests/player-skins.test.ts.

Génération des skins et tenues de métier (23/10, Antoine, après les défauts du restaurant)

6 points

Avant de créer ou corriger une tenue portée, suivre docs/generation-tenues.md. Méthode commune à Claude et Codex, pour tous les métiers et tous les corps :

  1. Le vrai corps et le même chargeur. Mesurer le mannequin natif concerné ; conserver l’ordre des os, les matrices de liaison et des poids normalisés. Passer par la garde-robe, les emplacements cosmétiques et NativeOutfit, identiques dans le jeu et le World. Le skin conserve les statistiques et les choix explicites du personnage.
  2. Préserver la silhouette et les transparences. Inspecter la tenue complète avec ses matières avant de réutiliser un maillage. Ne jamais repeindre en matière opaque des panneaux découpés par une texture alpha : les rubans et dentelles deviennent des rectangles. Garder les masques nécessaires ou construire une géométrie fermée adaptée au mannequin avec les patrons communs.
  3. Attacher chaque détail au bon endroit. Toque et moustache suivent la tête ; manches et pantalon suivent leurs membres ; tablier et boutons épousent la veste et ses poids de peau. Un tablier demande des rangées de sommets qui se déforment avec le tronc : pas un rectangle rigide attaché au seul bassin. Contrôler les intersections au repos et pendant les gestes réellement utilisés.
  4. Le métier libère les mains sans supprimer l’équipement. Masquer les armes dès l’installation au poste, même si le clip charge encore ; reprendre le geste quand il est prêt sans le relancer à chaque battement. Restaurer les armes à la sortie ou au combat. Scènes, quêtes et conversations gardent la priorité ; vérifier le vrai type de poste (stand en cuisine, craft à l’établi).
  5. Une tenue complète exécutée avant validation. Monter les vrais GLB sur les corps livrés avec le vrai NativeOutfit, avec couvre-chef, veste, mains et chaussures ; contrôler articulations, poids, déformations, contact des détails et silhouette. Inspecter aussi un rendu Blender de la tenue complète ; cela ne remplace pas le contrôle du rendu en jeu. Références : tests/galley-uniforms.test.ts, tests/professions.test.ts et tools/looks/galley-uniforms.ts.
  6. Livrer la bonne version. Toute modification de géométrie ou de matière change l’adresse ou l’empreinte du GLB, en gardant l’identifiant cosmétique quand le même objet est corrigé. Garder les fichiers nécessaires aux clients encore sur l’ancienne version. Après publication, vérifier les GLB et leurs empreintes sur le jeu et le World, puis la mise à jour en direct ; annoncer ce qui a été exécuté et ce qui reste à voir en jeu.

Bâtiments PNJ (22/10, Antoine)

Lire la règle

Une catégorie de bâtiments qui réunissent un lieu, un ou plusieurs personnages liés et une interaction spécifique. Registre commun builder/npc-building-types.ts, population persistante world-lab/npc-buildings.ts : poser crée les personnages, déplacer/refaire conserve leurs identifiants et leurs fiches, copier crée de nouvelles identités ; le serveur applique la même règle aux poses du Builder du jeu. Chaque nouveau type (atelier naval et restaurant aujourd’hui ; casino, magasins spécialisés, église ensuite) ajoute sa règle et son interaction au registre commun. Ce n’est pas une nouvelle sorte de personnages : le maître charpentier est un habitant, les PNJ du vrai jeu conservent leur nature. Voir docs/batiments-pnj.md et le lexique « Bâtiments PNJ ».

Modularité et dimensions des bâtiments PNJ (22/10, reprise d’Antoine)

Lire la règle

Les bâtiments PNJ sont des recettes réutilisables, configurables dans le World avant pose et après sélection : surface, proportions largeur/profondeur (plan allongé à surface conservée), forme et angles plus ou moins arrondis ; l’emprise en mètres comprend toit et perron. Chaque métier définit ses pièces, son mobilier, ses postes et ses personnages dans les modules communs, sans seconde version dans l’éditeur. Exemple : restaurant, grande salle, cuisine équipée, environ trente couverts et musiciens ; magasins spécialisés par armes et autres ateliers suivent ce contrat. La capacité réelle vient des places meublées accessibles, jamais d’un nombre affiché sans preuve. Changer les dimensions ou la forme conserve les identités et fiches ; copier crée de nouvelles identités. Les possibilités futures (joueur propriétaire, vente de repas, commerce spécialisé) se documentent séparément des fonctions réellement exécutées.

Métiers, travail et temps libre des habitants (22/10, Antoine)

Lire la règle

Dans le World Lab, chaque habitant peut avoir un métier, un lieu de travail et des créneaux travaillés parmi les six moments de la journée. Pendant son service, il rejoint le poste correspondant ; hors service, il suit les lieux et activités de sa journée. Le métier est distinct de la classe de combat (job) et du poste d’équipage. Un travail dans un bâtiment ne signifie pas y rester en permanence : « Où il vit » est un choix séparé, conservé pour Gustave et les personnages explicitement confinés. Scènes, quêtes, combats et conversations gardent la priorité. Registre partagé builder/professions.ts, édition world-lab/profession-editor.ts, exécution dans le Village et Inhabitants, sans second moteur dans le World. Conserver en base les horaires et les vrais lieux choisis, y compris pour les moments libres. Guide : docs/metiers-habitants.md.

Métiers des joueurs et lieux de travail (23/10, Antoine)

Lire la règle

Cuisinier, charpentier, serveur et musicien doivent mener à des lieux et à des postes que les joueurs pourront utiliser dans le jeu : cuisine et service d’un restaurant, chantier naval, scène de musique. Les habitants font vivre ces mêmes bâtiments avec leurs métiers et horaires. Réutiliser les modules communs, les vrais postes accessibles et le sac du héros ; documenter les boucles proposées séparément des services déjà exécutés. Le Grand Pavois sur l’île d’arrivée est le premier exemple de restaurant ; propositions et limites dans docs/restaurant-grand-pavois.md.

Retour en arrière

Lire la règle

Retour en arrière : un commit par étape, tools/publish.sh --rollback pour la production.

Carte du code

Le détail de chaque domaine est dans docs/carte/ : à lire avant d'y toucher.

DomainePoints d'entréeDétail
Socle : page, moteur, écrans, HUD, Réglages, application, sauvegarde, serveurcombat-sandbox.html → src/standalone/main.ts → src/director/preview.ts ; app-root.ts, responsive.ts, settings/, live-update.ts, server/server.mjsdocs/carte/socle.md
Construire : Builder, bâtiment génératif, terrain, routes, ports, lieuxsrc/standalone/builder/ (world.ts, panel.ts, generative.ts, archi/, terrain.ts, roads.ts, harbor.ts, places.ts)docs/carte/construire.md
Biomes : outil, studio, herbe, sol peint, Sketchfabbuilder/biomes/, studio/, server/biomes.mjsdocs/carte/biomes.md
Combat : monstres, joueurs, Labo de combat, au doigtmobs/, combat/, builder/players.ts, lab/, labs/registry.tsdocs/carte/combat.md
Personnages : Village, liens, équipage, fiche, quêtes, histoire, lorebuilder/village.ts, builder/bonds/, builder/crew.ts, builder/quests.ts, builder/story.ts ; server/village.mjs, bonds.mjs, story.mjs, crew.mjsdocs/carte/personnages.md
Monde : World Lab, îles partagées, carte du monde, île de départ, arrivéesrc/standalone/world-lab/, islands/ ; server/islands.mjs, island-world.mjsdocs/carte/monde.md
Bateauxbuilder/boats/docs/carte/bateaux.md
Lab Stuff : vêtements, panoplies, patrons 3D, essayages (API à part, publiée à la main)stuff-lab.html → src/standalone/stuff/ ; server/stuff.mjs, stuff-service.mjs, tools/stuff-textures.pydocs/carte/stuff.md

Bateaux

docs/carte/bateaux.md · 3 entrées · 13 Ko

Voir les entrées
  1. Bateaux (option)
  2. Atelier naval · la table des plans (22/10, option)
  3. Premier bateau de Port-Brise (23/10/2026)

Biomes : outil, studio, herbe, sol peint

docs/carte/biomes.md · 5 entrées · 15 Ko

Voir les entrées
  1. Biomes (outil)
  2. Studio des biomes (page)
  3. Studio des biomes dans Corals World (21/10)
  4. Biomes · placement, sol, herbe, assistant (18/10)
  5. Bibliothèque Sketchfab (18/10)

Combat : monstres, joueurs, Labo de combat, au doigt

docs/carte/combat.md · 23 entrées · 64 Ko

Voir les entrées
  1. Habitants de l'équipage contre les Players (22/10)
  2. Défis entre joueurs en ligne (22/10)
  3. Équipement sans restriction de classe (23/10)
  4. Mobs
  5. Retour visuel des coups
  6. Monstres d'origine (option)
  7. Players (option)
  8. Mobile · combat au doigt, phase de combat (20/10)
  9. Labo de combat (page)
  10. Mécaniques du Labo de combat passées dans le jeu
  11. Adversaires de quête · IA commune (21/10)
  12. Mêlée pendant les poursuites (21/10)
  13. Compétences en mouvement (21/10)
  14. Rivaux · relance, états natifs, XP et fouille (21/10)
  15. Players recrutés · cerveau commun (21/10)
  16. Visée des compétences au doigt (21/10)
  17. Combat de Corals online (options)
  18. Boss intelligents (19/10)
  19. Personnage (fenêtre)
  20. Compétences au doigt et PM (19/10)
  21. Tenue selon le niveau (19/10)
  22. Garde-robe complète (19/10)
  23. Notes de conception reprises de la branche prod (21/10/2026)

Construire : Builder, bâtiment génératif, terrain, routes, ports, lieux

docs/carte/construire.md · 12 entrées · 26 Ko

Voir les entrées
  1. Builder
  2. Bâtiment génératif
  3. Atelier naval · programme du bâtiment génératif (22/10)
  4. Bâtiments PNJ (22/10)
  5. Restaurant et dimensions des bâtiments PNJ (22/10, reprise)
  6. Terrain
  7. Routes & ports
  8. Port d'Argent (procédural)
  9. Sol Pelouse V8 (option)
  10. Lieux (outil)
  11. Lumières et effets des modèles (18/10)
  12. Importés dans le Builder (branche islands-props)

Effets de sol et Tornado — 21/10/2026

docs/carte/effets-sol.md · 0 entrées · 2,4 Ko

Voir les entrées

    Monde : World Lab, îles partagées, carte du monde, île de départ, arrivée

    docs/carte/monde.md · 18 entrées · 70 Ko

    Voir les entrées
    1. Drapeau d’arrivée déplaçable (23/10, Codex)
    2. PNJ du vrai jeu : poste, bâtiment et boutique (22/10, Codex)
    3. Composition de Port-Brise (20/10, Codex)
    4. Relief et matières de Port-Brise (21/10, Codex)
    5. Atelier naval de Port-Brise (22/10)
    6. Restaurant de Port-Brise · Le Grand Pavois (23/10)
    7. Sol des îles · une texture par matière (21/10)
    8. Sol des îles · haute définition et lien aux biomes (21/10)
    9. Carte du monde · îles voisines (20/10)
    10. Repères Players et étiquettes de type (21/10)
    11. Atelier du personnage (World Lab)
    12. World Lab · côtes, relief, construction (20/10)
    13. Monde partagé · île de départ (20/10)
    14. Story V2 · prologue de l'île de départ (20/10)
    15. Arrivée dans le tonneau (20/10)
    16. Îles partagées (Atelier des îles)
    17. Notes de conception reprises de la branche prod (21/10/2026)
    18. Studio visuel des voix (22/10/2026, Codex)

    Personnages : Village, liens, équipage, fiche, quêtes, histoire, lore

    docs/carte/personnages.md · 14 entrées · 48 Ko

    Voir les entrées
    1. Qui est qui · les sortes de personnages (21/10)
    2. Village · Histoire (option)
    3. Clans et rixes du Village
    4. Équipage (page)
    5. Équipage · Mugiwara (cartes, postes)
    6. Liens entre les personnages (20/10)
    7. Cris de combat de l'équipage (20/10)
    8. Fiche des personnages (20/10)
    9. Conversations de quête (20/10)
    10. Lore (outil)
    11. Habitant qui vit dans un bâtiment (22/10)
    12. Fiabilité de l’équipage (15/10/2026)
    13. Notes de conception reprises de la branche prod (21/10/2026)
    14. Sons des habitants · configuration dans Corals World (22/10)

    Socle : page, moteur, écrans, HUD, Réglages, application, serveur

    docs/carte/socle.md · 41 entrées · 83 Ko

    Voir les entrées
    1. Page
    2. Code Corals
    3. Cale sous-chemin
    4. Releases figées
    5. Ressources
    6. Réglages
    7. Compte dans les Réglages (22/10)
    8. Écrans (responsive)
    9. Priorité de lecture des interactions (22/10)
    10. HUD · Atlas des marées (22/10)
    11. Outils du HUD
    12. Application (installer)
    13. Remise à zéro
    14. Sauvegarde
    15. Gomme d'origine
    16. Île agrandie
    17. Côte DS3
    18. Mer stylisée et ciel d'été
    19. Mise à l'échelle (option)
    20. Ciel et shaders DS2
    21. Banc de mesure (recherche)
    22. Serveur
    23. Service
    24. Accroches et écarts avec Corals
    25. Applications et domaines
    26. Signalements (20/10)
    27. Signalements capture (22/10)
    28. Admins (21/10)
    29. Coûts IA (20/10)
    30. Langue du jeu (21/10)
    31. Bêta (21/10)
    32. Tout traduire, chargé intelligemment (21/10)
    33. Comptes et connexion (21/10)
    34. Le compte du joueur dans le jeu (21/10)
    35. Bourse : or, cristaux et doublons sur le serveur (21/10)
    36. Personnage lié au compte (21/10)
    37. Sons DS2
    38. Grandes îles (secteur de 512 m)
    39. Labos (mécanisme, 19/10)
    40. Notes de conception reprises de la branche prod (21/10/2026)
    41. Fenêtre bêta et langue du compte (22/10)

    Lab Stuff

    docs/carte/stuff.md · 5 entrées · 6,4 Ko

    Voir les entrées
    1. Application
    2. Habillage : changer une pièce portée (21/10/2026)
    3. Code
    4. API : un service à part
    5. Tests

    Les boucles qui font avancer le jeu

    🐞 Signalements

    Antoine ou un joueur clique « Signaler » (F8)➜écran + état de la partie + sa phrase➜diagnostic par l'IA, rangé dans Archonse➜node tools/reports.mjs list / show➜correction dans une copie➜publication➜done <n> --commit

    ✨ Mise à jour en direct

    tools/publish.sh➜publication.json neuf➜le jeu le voit en 20 s➜moment calme (pas de combat, cinématique, saisie…)➜image gardée, nouvelle version, partie conservée➜journalctl … | grep maj-direct

    🗺️ Jeu ↔ Corals World

    retouche dans le world ou au Builder du jeu➜île en ligne sur le serveur➜version publiée➜chez tous les joueurs, sans recharger➜quêtes et scènes suivent ce qui a bougé

    📚 Vocabulaire

    Antoine fixe un mot➜lexicon/terms.ts (un mot = un terme, testé)➜node tools/lexicon-md.ts➜publication➜LEXIQUE.md partagé remis à jour➜lu par toutes les sessions

    🧭 Chantiers

    lire docs/CHANTIERS.md➜sujet libre ? l'inscrire➜pris ? fusionner sa branche➜publier➜retirer la ligne ; noter les restes à faire

    Chantiers

    En cours (0)

    Aucun sujet réservé.

    À faire (18)

    QuoiSourceNote
    Localiser l'artefact intermittent autour de l'arbre (signalement 32)Codex 1bc49ffe, reprise des signalements, 23/10La capture fixe ne permet pas de distinguer liseré, ombre ou feuillage ; l'écran annoncé en message privé manque à l'historique. Question en attente. [Preuves et limite](signalements-30-42.md).
    Capture 45 : mesurer le gain du lot caméra publié et isoler les compilations tardivesCodex OPTIMISATION 3e7bc288, publication f6f9070f, 23/10Reprendre le même village sur le même téléphone (départ : 11 i/s). Additionner les quatre nouvelles sous-sections et le reste « caméra du jeu » pour comparer aux 11,69 ms. Surfaces proches indexées, pontons préparés, 1 681 tests réussis ; gain FPS réel non mesuré. [Preuves et protocole](performance-capture-45.md).
    Métiers exercés par les joueurs : boucle cuisine puis service, charpente et musique dans les lieux du mondeAntoine, vocal du 23/10, Codex 1a014972[Propositions et limites](restaurant-grand-pavois.md). Le Grand Pavois et sa brigade sont posés (île v169) ; ingrédients → plat → vraie table → récompense est la première boucle proposée. Les services payants, l’économie et la propriété restent à concevoir.
    Mesurer le gain des optimisations mobiles de la capture 40, sur le même téléphone pendant le même combat SquiddyCodex 5f771801, publication 205a9715, 22/10[Mesures, corrections et preuves](performance-capture-40.md) : HUD et boutons sans mutations répétées, lectures du canevas et des bulles réduites, trois modèles rétablis et relances espacées. 1 548 tests réussis ; gain FPS réel non mesuré. Les nouvelles sections de la sonde distinguent combat, caméra, son et interface. Restent terrain/horizon, mer et shaders tardifs à mesurer sans réduire l'image à l'aveugle.
    Mise à l’eau et navigation des bateaux dessinés dans l’atelier navalReprise de Claude c6dbe6dc, 22/10Les esquisses et modèles 3D sont gardés sur le serveur et visibles dans « Mes bateaux ». Le moteur commun navigue désormais sur les îles de Corals World pour les deux petits modèles de la quête du premier bateau. Reste à raccorder la mise à l’eau des bateaux dessinés librement.
    Suite fonctionnelle du HUD : Journal classé (principale, annexes, partagées), regroupement des étiquettes et placement général des bulles ; validation visuelle sur appareilCodex, reprise de Claude e2f28a62, conversation a5957be1, 22/10Atlas sculpté publié en 1b7243d8 : dix SVG communs, fenêtres et combat assortis, accès mobile défilable/repliable, options joueur épurées. Ces fonctionnalités narratives supplémentaires restent distinctes du nouvel habillage. [État et critères](conception-hud.md), [compositions](https://corals2.playcorals.online/corals-2/design/hud/sculpte.html). Rendu réel non vu : pas de navigateur ouvert.
    Mesurer les gains après optimisation de la capture 31, au même endroit après combat. Première correction publiée : repère de quête, pion caché, préparation des textures et shaders du décor. Restent à mesurer : buffers de géométrie et variantes des ombres au premier dessin ; parcours DS2 chaque seconde ; classement des ombres ; personnages derrière la caméra ; mer.OPTIMISATION, reprise Codex, 22/10 ; publication 8cccd346[Mesures et limites](performance-capture-31.md). node tools/reports.mjs captures (règle 9) ; gain FPS réel encore à confirmer.
    Signalements capture dans Corals World (autre moteur : la sonde ne s'y pose pas encore)conversation OPTIMISATION af3e50a3, 22/10à faire quand le world rame
    Champion et Croisé inversés dans cinq fichiersconversation STUFF LAB 3e501c3e, 21/10 13 h 53relevé, non corrigé
    Règles des objets côté serveur : le sac est gardé par le serveur depuis le 21/10 (personnage lié au compte), mais c'est le jeu qui crée les objets (butin, boutique, atelier) et le serveur ne vérifie pas encore qu'un objet vendu ou acheté est bien dans le sac ; une dépense refusée par la bourse laisse l'objet achetérègle « Données sur le serveur » ; conversation PEOPLE OWN WORLD 33485bd8avant les propriétés et les échanges entre joueurs
    Parties du Village des îles du monde : leur identifiant se calcule à partir de l'île et de l'identifiant du joueur (villageSaveOf), que reçoivent les membres d'un groupe en ligne ; village-api (conversations, reset) n'a pas d'autre clérelevé en écrivant la bourse, conversation PEOPLE OWN WORLD 33485bd8, 21/10à protéger par une clé secrète, comme la bourse
    Données des joueurs (comptes, parties du Village, bourse) sans copie hors du serveur : la bourse a sa copie quotidienne, mais sur le même disqueconversation PEOPLE OWN WORLD 33485bd8, 21/10sauvegarde hors du VPS, chiffrée
    Propriétés : le héros achète une maison qui rapporte (où vivent les maisons, modèle de propriété)conversation PEOPLE OWN WORLD 33485bd8, 21/10 15 h 17décision d'Antoine en attente
    Test du World Lab « le pont réel instancie les apparences Lore… » en échec, toléré par tools/publish-known-failures.txt depuis le 20/10tools/publish.shà réparer, puis retirer de la liste
    Tests instables sous la charge : équipage à bord, deck-life, délai du test des routes en lacets relâché de 1,5 à 4 sconversations PLAYERS a639aecc, APP ANDROID & ADMIN 6fba48dd, WORLD COMPOSER 6b2ebeaerendre déterministes
    API du Lab Stuff (corals-2-stuff) publiée à la main, appels IA non comptés dans les coûtsconversation STUFF LAB 3e501c3e, 21/10 13 h 30l'intégrer à tools/publish.sh et à ai-costs.mjs
    Skins d'assemblage : faire valider le rendu par Antoine, puis aperçu habillé de l'Atelier des îles ; style d'un équipier selon son poste (à trancher)conversation « skins d'assemblage », 21/10roadmap : Phases › 🎭 Skins d’assemblage des habitants
    Mot de passe de la base Railway d'Archonse à changer (il a été chargé dans tous les chats jusqu'au 20/10)conversation ORGANISATION f71660f6pour Antoine : demande un redémarrage d'Archonse

    Dernières publications 128

    QuandNomCe qui change
    23/10/2026 09 h 55face-paint-fix
    96c5102a · face-paint-fix
    Peinture des visages d’origine depuis une photo, avancement et erreurs visibles dans l’atelier
    23/10/2026 09 h 47legacy-interactions
    9c879ce6 · fix-legacy-interactions-20261023
    23 modèles 3D manquants rétablis, miroir natif réparé et touche E des interactions joueurs débloquée
    23/10/2026 04 h 03quest-reprise
    52803621 · interaction-carlito-hotfix
    Progression des quêtes persistante, reprise sans respawn et réparation automatique du butin
    23/10/2026 03 h 58admin-lab-network-loop
    8357a058 · admin-lab-network-loop
    arrête la boucle 403 des constructions sans droit et transforme la saturation de stratégie en repli local sans 429
    23/10/2026 03 h 47interaction-carlito-hotfix
    72a0dade · interaction-carlito-hotfix
    répare les interactions de tous les personnages quand le suivi de quête est ouvert et ajoute le suivi des clics de Carlito
    23/10/2026 03 h 39quest-combat-story
    a371b120 · quest-combat-story
    Pillards scénarisés actifs, fin de défense fiable et migration des quêtes déjà acceptées
    23/10/2026 03 h 35world-faces
    7c83fe95 · world-faces
    Habitants du World : huit visages par corps, photo dans Apparence et tenue, peinture du visage 3D avec aperçu à valider et synchronisation dans le jeu. Référence du portrait fidèle aux vrais emplacements de tête et de coiffure.
    23/10/2026 03 h 30perf-camera-45
    f6f9070f · perf-camera-45
    Caméra : recherches de sol limitées aux constructions proches, pontons préparés lors des retouches, calculs répétés réduits et coûts détaillés dans les captures FPS.
    23/10/2026 03 h 26equipment-no-class-lock
    c50a0b6f · equipment-no-class-lock
    Équipement sans restriction de classe : armes, armures et accessoires mélangeables ; fiches, garde-robe et inventaire des équipiers alignés. La classe continue de suivre l’arme portée.
    23/10/2026 03 h 20quest-combat-story
    042f094e · quest-combat-story
    Attaque de Gustave scénarisée : menace cadrée, riposte des pillards, fin garantie après le dernier ennemi et sauvegarde concurrente fiable
    23/10/2026 03 h 16signalement-52
    053f2d1e · signalement-52
    Les monstres ciblés à distance sont provoqués dès l’ordre d’attaque, poursuivent jusqu’à leur vraie limite et sortent/contournent les bâtiments pour rejoindre le héros.
    23/10/2026 03 h 09signalements-48-50
    dcc7d1f8 · signalements-45-46
    Signalements 48–49 : contrôle continu partagé des murs et meubles, sortie des anciennes positions invalides, tests avec vrais bâtiments tournés et locomotion. Signalement 50 : cercle fermé ou refusé pendant le combat, sous le menu, les Réglages, les outils et les autres fenêtres ; observateurs libérés. Changements p…
    23/10/2026 03 h 03online-player-cursor-fix
    e226ec0e · online-player-cursor-fix
    Corrige le curseur interdit et fiabilise le clic droit sur les joueurs en ligne
    23/10/2026 02 h 52restaurant-skins
    d46874cf · galley-skins-fix
    Tenues du restaurant corrigées : veste des commis sans panneaux opaques, tabliers articulés et boutons fixés au tissu. En cuisine, les armes sont masquées même avant le chargement de l'animation, puis rendues à la sortie ou au combat. Les scènes et les quêtes gardent la priorité. Fichiers de tenue versionnés pour éc…
    23/10/2026 02 h 47first-boat-place-fix
    4e083bf0 · first-boat-place-fix
    Port-Brise : Pip déclenche réellement la suite après la carte. Les lieux d’histoire liés à un bâtiment sont convertis du repère du World Lab vers le repère jouable de l’île ; l’atelier naval n’est plus refusé comme hors du sol.
    23/10/2026 02 h 36signalement-51
    42d35e19 · signalement-51
    Le héros et les autres personnages restent entièrement sur le terrain au bord de l’eau ; les anciennes positions sauvegardées trop près de la rive sont replacées au point sûr voisin.
    23/10/2026 02 h 30arrival-pin
    131c6cfc · arrival-pin
    World : petit drapeau d’arrivée déplaçable directement à la souris ou au doigt ; le récit s’ouvre seulement au clic. Le trajet du tonneau suit le rivage choisi, avec contrôle de la terre, des bâtiments et de la mer ; enregistrement en ligne et annulation conservés.
    23/10/2026 02 h 25first-boat-story
    7c649d57 · first-boat-story
    Port-Brise continue jusqu’au premier bateau : visite simplifiée de l’atelier, choix de deux petits modèles existants sans génération, défense de Gustave, fouille des matériaux, vrai titre dans le sac, vieux ponton et embarquement par tyrolienne. Navigation, retour et second embarquement testés ; histoire et retrait …
    23/10/2026 02 h 21signalements-48-50
    d4b4d7d4 · signalements-48-50
    collisions continues des murs et meubles, sortie des anciennes collisions, roue d’interaction fermée en combat et sous les fenêtres
    23/10/2026 02 h 17signalement-46
    f55f3dc0 · signalements-45-46
    Signalement 46 : le groupe replié conserve une petite ligne par habitant avec icône, nom et vie ; détail toujours accessible. Retouches HUD portrait intégrées. Géométrie vérifiée dans 61 cas, en français, anglais et allemand, dont le paysage 914 × 411 de la capture.
    23/10/2026 02 h 13portrait-hud-fit
    233ef7b4 · portrait-hud-fit
    HUD portrait : quatre accès en bloc 2 × 2 de 104 px, suivi aligné à gauche dès 320 px, icônes réduites et zones tactiles de 44 px. Pastilles de chapitre et de fin d’acte avec texte sur toute la largeur et actions séparées, résumé limité à deux lignes. Groupe compact avec compteur fixe et accès Liens en icône. Suivi …
    23/10/2026 02 h 05crew-player-defense
    aa8e1bb1 · crew-player-defense
    Les habitants de l’equipage actif defendent le capitaine contre les Players : cibles partagees avec l’escouade, vrais degats, soins et buffs de classe, PM et recharges natifs. Competences sans effet ecartees, armes sorties en combat, KO et relevement du Village preserves face aux coups et au poison. Dix classes test…
    23/10/2026 01 h 59android-language
    089ee8a4 · android-language
    Correction de la langue dans l’app Android existante : l’ancienne adresse de lancement ?lang=en ne masque plus le choix mémorisé ni la langue du compte. Régressions exécutées sur trois réouvertures avec cette adresse fixe, sans session et avec compte français sur appareil neuf. Aucun nouvel APK nécessaire.
    23/10/2026 01 h 45signalement-44
    de53be6e · signalements-30-42
    Signalement 44 : arcs et épées passent en main pendant les attaques mobiles, puis se rangent ; changer d'arme annule le tir en préparation.
    23/10/2026 01 h 41duel-invite-fix
    4b196b12 · duel-invite-fix
    Correction urgente des défis JcJ annulés immédiatement : une conversation ou une cinématique ne refuse plus l’invitation à la place du joueur ; la proposition attend la fin de la scène et le choix Accepter ou Refuser. Un compagnon occupé ne fait plus annuler le duel. Une préparation attend la fin d’un combat déjà co…

    Historique complet, avec les 137 publications faites à la main avant le script : docs/RELEASES.md.

    Où changer quoi

    Je veux…Où
    Ajouter ou changer une règleCLAUDE.md (et AGENTS.md si Codex doit la voir tout de suite) du dossier partagé, commit -- CLAUDE.md ; jamais dans une copie
    Fixer un mot d'Antoinesrc/standalone/lexicon/terms.ts dans la copie, puis node tools/lexicon-md.ts et publier
    Décrire une fonction du jeudocs/carte/<domaine>.md du dossier partagé
    Dire sur quoi je travailledocs/CHANTIERS.md, ligne « En cours »
    Publiertools/publish.sh --dir <copie> --name <nom> --what "…"
    Revenir en arrièretools/publish.sh --rollback
    Savoir ce qui est en lignedocs/ETAT.md ou tools/publish.sh --status
    Ajouter un outil donné à quelqu'unrègle 4 : domaine <nom>.playcorals.online, vhost, certificat, APPS d'app-root.ts
    Corriger un signalementnode tools/reports.mjs show <n>, puis done <n> --commit après publication