Journal des changements
Changelog
Toutes les modifications notables de Von Neumann Game seront documentées ici, avec une attention particulière aux changements qui peuvent impacter les frontends et les intégrations API.
2026-08-31
Changed
- Contrôle Others « défense étoile — attente » : les sentinelles réagissent désormais aux activités des Mannys, missiles de sondes, objets éjectés ou récupérés, trajectoires d'astéroïdes motorisés et marqueurs de navigation. Elles appliquent l'ordre de priorité missile/laser demandé, poursuivent le laser dix minutes avant repli et conservent sur place les éclaireurs engagés contre une Manny éjectée ou un astéroïde motorisé.
- API v129 / scans Others : les observations de flotte utilisent désormais la route dédiée
GET /api/others/sector?shipId=…&x=…&y=…&z=….GET /api/sectorredevient exclusivement un scan de sondes et refuseshipId. La précision du nouveau point d’API conserve les règles de distance, de temps de résidence et d’historique privé de la flotte ; les sondes et vaisseaux détectés, accompagnés de leur statut courant, ne sont exposés que lorsqu’un vaisseau actif de cette flotte est physiquement présent dans le secteur interrogé.
2026-08-30
Changed
- Combat Others : lorsqu’une Manny distante est verrouillée par un laser, sa sonde propriétaire reçoit désormais une alerte critique si les deux secteurs communiquent par le même réseau SCUT. L’alerte nomme la Manny, indique son secteur relatif et rappelle sa destruction après dix minutes si le laser ne cesse pas.
- Documentation OpenAPI : ajout de la route sonde
GET /api/probe/{probeId}/sector/autonomous-unitsdans la catégoriesectors, avec son contrat de pagination et la représentation minimale des Mannys et auxiliaires Others détectés localement. - Contrôle Others : ajout de
scripts/others_control/defense_etoile_attente.py, qui maintient jusqu'à douze sentinelles autour d'un vaisseau mère, évite les destinations déjà occupées ou réservées par un mouvement, rappelle progressivement les vaisseaux hors formation et exclut seulement les trous noirs confirmés par un scan détaillé. Sa boucle se cale sur les échéances de mouvement et conserve un contrôle de veille plafonné à cinq minutes. - Outils Others :
create-others-fleet.phpetcreate-others-standard-ship.phpremplissent désormais le réservoir de deutérium du vaisseau créé à sa capacité maximale. Les créations issues du gameplay restent inchangées. - Outils Others : ajout de
scripts/delete_others_fleet.php, qui supprime transactionnellement une flotte désignée par son vaisseau mère, ses vaisseaux, auxiliaires, actions, inventaires, missiles lancés et événements scheduler associés. Les missiles adverses visant la flotte et l'audit opérateur sont conservés.
2026-08-29
Changed
- API v128 / cartographie Others : chaque flotte historise ses secteurs visités dans la table relationnelle dédiée
others_visited_sectors, sans alimenter les statistiques des sondes.GET /api/others/fleets/{fleetId}/visited-sectorsexpose cet historique paginé dans le référentiel relatif au home du propriétaire, et les scans BOB viaGET /api/sector?shipId=…retrouvent immédiatement le niveau de détail précis d'un secteur déjà visité par cette flotte seulement. Migration obligatoire avant redémarrage : exécuterphp scripts/one-shot-scripts/migrate-others-visited-sectors.php --database-config=…. - API v127 / mouvements Others : les représentations de vaisseaux détenus exposent désormais
movement, avec la phase active, la destination relative au home du propriétaire etarrivalAt. Les scans de sondes et les scans génériques ne reçoivent pour leur part que le vecteur directionnel normalisé d'un mouvement détecté, sans destination, distance ni échéance. - API v126 / navigation Others : les coordonnées des vaisseaux sont désormais exposées relativement au secteur home de leur propriétaire, commun à toute la flotte et présenté comme
(0, 0, 0). Les auxiliaires séparés de leur porteur exposent leur secteur dans ce même référentiel ; les auxiliaires embarqués ou présents avec leur porteur ne le dupliquent pas. - Rupture de contrat Others : le champ
targetdePOST /api/others/ships/{shipId}/moveetPOST /api/others/fleets/{fleetId}/movedésigne désormais la destination relativement au home du propriétaire. Il ne représente plus un déplacement depuis la position courante du vaisseau ou de la mère.
2026-08-28
Changed
- API v125 / lancement de missiles par les Mannys : ajout de
POST /api/probe/{probeId}/mannies/{mannyId}/ignite_missile, sansIdempotency-Key. Son payload exigetargetIdet accepte unmissileItemIdfacultatif ; en son absence, le premier missile disponible de l’inventaire est choisi. La Manny reste occupée une minute avant le lancement.POST /api/probe/{probeId}/missilesest désormais déprécié au profit de cette route. - API v124 / impacts d’astéroïdes motorisés : la sonde lanceuse reçoit désormais une alerte persistante récapitulant le résultat uniquement si elle est encore physiquement présente dans le secteur à la résolution. Une sonde ou un vaisseau Others victime reçoit sa propre alerte critique de dégâts, avec le pourcentage d’intégrité perdue lorsque la cible survit. Les effets sur les étoiles, planètes et astéroïdes sont récapitulés au seul lanceur.
- Migration obligatoire avant redémarrage : scheduler arrêté, exécuter
php scripts/one-shot-scripts/migrate-asteroid-impact-alerts.php --database-config=…afin d’ajouter la référence canonique de la sonde lanceuse aux trajectoires. Les trajectoires historiques conservent explicitement un lanceur inconnu et ne peuvent donc produire que l’éventuelle alerte de victime.
2026-08-27
Changed
- API v123 / attente de stockage Manny : l’entrée en
waiting_for_spaceexpose désormaistask.waitingForSpaceSince. Après sept jours continus sans capacité suffisante, la Manny abandonne automatiquement sa cargaison et retente son amarrage ; si son propre emplacement de 0,05 ECE reste indisponible, elle est détachée de sa sonde et devient un objet de secteurabandonedrécupérable. - Migration obligatoire avant redémarrage : scheduler arrêté, exécuter
php scripts/one-shot-scripts/migrate-manny-waiting-for-space-timeouts.php --database-config=…. Comme l’ancien modèle ne conservait pas la date exacte d’entrée en attente, la migration initialise explicitement le délai des tâches existantes à son heure d’exécution. - Mouvements sécurisés SCUT : lorsqu’un trajet relie deux secteurs possédant chacun un relais actif avec balise de transit dans le même réseau, la perte totale d’intégrité à l’arrivée est désormais plafonnée à 9 points de pourcentage, en complément de la protection existante contre la destruction à haute vélocité.
- Minage Manny : la récupération d’un container détaché rappelle désormais toutes les Mannys qui le minent, même si elles appartiennent à une autre sonde. Le déclenchement d’un astéroïde motorisé rappelle de la même manière les Mannys qui minent vers l’un de ses containers attachés, avec la raison
target_container_departed_with_asteroid. La recherche s’appuie sur la projection SQL indexéemanny_tasks.target_container_idet ne parcourt pas les événements du scheduler. - Migration obligatoire avant redémarrage : exécuter
php scripts/one-shot-scripts/migrate-manny-target-container-index.php --database-config=…afin de reconstruire la projection des containers cibles et de créer son index. Le script administratifrecall-failed-container-miners.phppermet en outre de rappeler explicitement, par joueur, les anciennes Mannys restées bloquées après la disparition de leur container cible. - API v122 / détection des missiles : les scans courants de
GET /api/probe/sectoretGET /api/probe/{probeId}/sectorexposent désormais chaque missile en vol depuis l’état canonique indexé deothers_projectiles, sans parcourir les événements du scheduler. Le champtargetsCurrentProbeindique si la sonde observatrice est la cible déclarée./sensorsaffiche alors une alerte rouge vivante avec le compte à rebours d’impact ; les autres missiles restent visibles dans la liste des objets sans déclencher ce panneau. - Interface : la checklist « Préparation » de
/movementindique désormais si l’intégrité minimale de 10 % est atteinte et bloque localement l’ordre de mouvement dans le cas contraire, en complément de la validation autoritaire de l’API. - API v121 / intégrité des sondes : une sonde dont l’intégrité est strictement inférieure à 10 % ne peut plus préparer un déplacement (
probe_integrity_too_low). Les dégâts sont plafonnés à l’intégrité restante et tout passage à 0 % place immédiatement la sonde au statutdead. - API v120 / résolution des missiles : à l’impact, le lanceur reçoit le résultat seulement s’il est encore physiquement présent dans le secteur et la victime reçoit sa propre alerte de dégâts. Pour une sonde ou un vaisseau Others survivant, les dégâts sont exprimés en pourcentage de son intégrité maximale. Les vaisseaux disposent désormais d’alertes persistantes via
GET /api/others/alertset peuvent les acquitter viaPATCH /api/others/alerts/{alertId}. - Migration obligatoire avant redémarrage : exécuter
php scripts/one-shot-scripts/migrate-others-alerts.php --database-config=…afin de créer le stockage canonique des alertes Others. - API v119 / alertes missiles : l’alerte de lancement indique désormais le type et l’identifiant public de la cible supposée (ainsi que son nom pour une sonde ou une Manny). Une sonde directement ciblée reçoit la phase canonique
weapon_targeted, affichée par la WebUI sous forme d’alerte critique rouge clignotante ; les autres observateurs du secteur conservent l’alerte verteweapon. - Interface : le groupe « Secteur » de
/manniespermet désormais de préparer le lancement d’un missile depuis la sonde courante, avec sélection du missile en soute et d’une cible locale détectée. La tâche de préparation d’une minute dispose aussi de son propre état d’avancement dans la carte de la Manny. - Documentation OpenAPI : chaque opération possède désormais une catégorie fonctionnelle explicite, sans reliquat dans le groupe implicite
default. Les 17 catégories sont déclarées dans leur ordre d’affichage Swagger, desystemàdefault probe. Cette dernière explique l’équivalence avec les routes explicites portant unprobeId, utilise automatiquement la sonde par défaut du joueur et reste volontairement isolée des catégories fonctionnelles. Les opérations canoniques transversales apparaissent aussi sous leurs catégories secondaires pertinentes : actions Manny sur les secteurs, inventaires, sondes, missiles, améliorations, SCUT et astéroïdes motorisés, avertissements sousmovement, et partage de plans sousscut. Les opérations taguées sont définies directement, sans$refd’opération susceptible de faire disparaître un endpoint lors de l’ouverture d’un accordéon Swagger. Les catégories Swagger sont repliées par défaut. - API v118 / Others : ajout de la branche opérateur protégée par
can_control_others, de l’idempotence globale au compte et de l’audit des commandes. Les flottes, vaisseaux, auxiliaires, actions, inventaires, transferts, déplacements, moissons, fabrications, lasers et missiles disposent d’identifiants opaques et n’exposent jamais de coordonnées absolues. Son contrat autonome est séparé dansdocs/openapi-others.yamlet dispose de son interface Swagger sur/api-docs-others; l’API principale reste documentée sur/api-docs. - Gameplay Others : ajout des quatorze lots du modèle de faction, dans leur ordre de dépendance : persistance et scripts administratifs, scans BOB et unités autonomes, déplacements individuels/de flotte avec annulation, stocks planétaires canoniques, logistique, tâches auxiliaires et structures dormantes, moisson en essaim, ateliers, visibilité et alertes, laser, missiles partagés avec les sondes, dégâts et dissolution de flotte.
- Missiles : la recette Manny
missileconsomme unbattery_pack, deuxmicro_conductor, 0,20 ECE de métaux et 0,10 ECE de composés carbonés en une heure pour une sortie de 0,05 ECE. Le lancement depuis une sonde réserve une Manny pendant une minute ; le lancement Others est planifié à échéance immédiate. Dans les deux cas, seuls les passages du scheduler créent puis résolvent le projectile. - Secteurs : chaque planète possède désormais des
resourceAmountsdéterministes et le marqueur strictharvestedByOthers. Les API de scan n’en dérivent que des proportions par tranches de dix points. Les auxiliaires Others perdus ou détruits deviennent des structures persistantes inspectables et minables par les Mannys. - Combat : les astéroïdes motorisés acceptent les vaisseaux mère et standards Others physiquement présents comme cibles. Un impact relativiste détruit le vaisseau ; la destruction du vaisseau mère dissout exclusivement sa flotte, retire ses standards et laisse les projectiles déjà lancés achever leur cycle autonome.
- Migration obligatoire avant redémarrage : exécuter
migrate-others-schema.php,migrate-others-integrity.php,migrate-others-combat-schema.phppuisadd-planet-resource-amounts.phpavec le bon--database-config. Les scripts refusent d’inventer un propriétaire ou de convertir implicitement des projectiles historiques. - API v117 / scheduler : les lectures et commandes Manny ne finalisent plus opportunément les tâches échues. Seul le worker scheduler applique désormais les transitions temporelles de toutes les familles de tâches ; les GET exposent le dernier état persisté et conservent leur délai de polling pour laisser le worker se stabiliser.
- Stockage : le container cœur et l’affectation initiale des Mannys sont créés avec la sonde (inscription, réinstanciation, assemblage et outils de création), au lieu d’être initialisés paresseusement par un GET. Les accès ordinaires valident désormais le stockage sans l’écrire ; avant redémarrage sur une base contenant des sondes non initialisées ou incohérentes, exécuter explicitement
php scripts/one-shot-scripts/repair-storage-containers.php --database-config=var/database-prod.json.
2026-08-21
Changed
- Gameplay : l’encombrement d’un
deuterium_enginepasse de 0,06 à 0,05 ECE. Un moteur à la dérive tient désormais dans la capacité d’emport d’une Manny et redevient donc récupérable avec l’actionsalvage. - Stockage : les ressources en métaux, glace et composés carbonés n’ont plus de totaux dupliqués dans
neumann_probes; les lignes des containers sont désormais l’unique source de vérité. Pour déployer sur une base existante : arrêter l’application et le scheduler, déployer ce code, vérifier avecphp scripts/one-shot-scripts/remove-legacy-probe-resource-stocks.php --dry-run --database-config=var/database-prod.json, relancer sans--dry-run, puis seulement redémarrer les services. - Maintenance : ajout de
scripts/audit-deprecated-endpoints.py, sans dépendance externe, pour extraire les opérationsdeprecated: trued’OpenAPI et compter leurs usages dans les journaux d’accès Nginx courants ou compressés, sans afficher les adresses IP. - API v116 : suppression de l’ancien alias
POST /api/probe/mannies/{mannyId}/inspect-asteroidet de sa variante ciblant explicitement une sonde ; utiliserinspect-sector-object. L’audit des 9 817 900 lignes de journaux Nginx disponibles n’a relevé aucun appel à cet alias. - Ressources : suppression de toute compatibilité d’exécution avec l’ancien type
otherdans les compositions, astéroïdes, Mannys de secteur et tâches minières.scripts/one-shot-scripts/cleanup-legacy-resources.php, désormais fonctionnel et testé, réalise explicitement l’audit/migration de SQL, des payloads de tâches et événements, des règles de stockage et des fichiers de secteurs avant déploiement ;SchemaInitializerne convertit plus silencieusementcargo_other. - Secteurs :
SectorFileRepositoryrefuse désormais explicitement les anciennes collections JSON de containers détachés et les objetsdetached_container, au lieu de les ignorer à chaque lecture. Le nouveau script idempotentscripts/one-shot-scripts/cleanup-legacy-detached-container-json.phpretire uniquement ces références des fichiers, sans accès ni écriture SQL ; le filtrage lors des sauvegardes reste en place pour les containers agrégés depuis la base. - Base de données :
SchemaInitializerest recompilé en schéma canonique actuel et ne contient plus l’historique des détections,ALTER TABLEet backfills déjà déployés. Les index jusque-là ajoutés uniquement par ces rattrapages font désormais partie du socle. Les futures évolutions structurelles continueront de passer par l’initializer ; les scripts one-shot sont réservés aux données et aux JSON de secteurs. - Interface : la page des Mannys ne remplace plus silencieusement un échec de
/api/crafting-recipespar une recette de marque-page codée en dur. Les formulaires de fabrication indiquent désormais que les recettes sont indisponibles, restent désactivés et proposent de recharger explicitement le catalogue. - Interface : suppression de l’ancienne vue de discussion du forum, cachée au chargement depuis le passage aux fils intégrés dans les catégories, ainsi que de ses écouteurs JavaScript et styles résiduels.
- Statistiques : suppression de l’ancien alias
topVisitedProbesdu JSON généré et du fallback WebUI associé ; le podium des explorateurs utilise exclusivementtopVisitedPlayers.
2026-08-20
Fixed
- API : l’inspection d’un grand réseau SCUT ne charge plus en mémoire les couvertures détaillées du réseau et de chacun de ses relais. Le nombre de secteurs et les sondes couvertes sont désormais résolus directement en SQL, évitant les erreurs 500 par dépassement de la limite mémoire PHP-FPM.
2026-08-19
Changed
- Outils :
scripts/add-dormant-construct.phpaccepte désormais--type=<type>pour forcer le scénario d’une nouvelle structure et--list-typespour afficher les quatre types disponibles ; les astéroïdes à ancrage distribué et anatiformes reçoivent aussi leur intitulé spécialisé. - API v115 : un nouveau dormant construct « Anatiform asteroid » permet à une Manny de récupérer le blueprint « Anatiform Asteroid Sculpting » ; son rapport illustré utilise
https://neumann-probe.net/images/duck-asteroid.png. Le nouveauPOST /api/probe/{probeId}/mannies/{mannyId}/sculpt-duck-asteroid, réservé aux joueurs qui possèdent ce blueprint, sculpte en deux jours un astéroïde local. Une annulation avant l’échéance ne modifie pas l’astéroïde. - API v115 : les astéroïdes ainsi sculptés exposent le champ optionnel
distinctiveFeature: "Sculpted in the shape of a duck"dans leurs représentations publiques. Ils conservent toutes les propriétés et actions des astéroïdes ordinaires, notamment le minage et la motorisation. - Interface : dans le groupe « Secteur » de
/mannies, le formulaire de sculpture n’apparaît qu’avec le blueprint correspondant. Les scans courant et précis de/sensorsles identifient comme des « Astéroïdes en forme de canard ». - API v114 : chaque alerte retournée par
GET /api/probe/alertset ses variantes ciblant une sonde expose désormaisillustrationImageUrl, URL HTTP(S) absolue nullable. Avant de redémarrer l’application sur une base existante, exécuter puis rejouerphp scripts/one-shot-scripts/migrate-alert-illustration-images.php --database-config=config/database.json; le second passage doit annoncercolumn_added=no. - Interface :
/alertsaffiche l’éventuelle illustration sous le texte de l’alerte, sur toute la largeur intérieure de la carte, en conservant son ratio d’origine. - Interface : la page
/scutpermet désormais de choisir un blueprint connu et une sonde appartenant à un autre joueur dans le réseau sélectionné, puis de partager ce blueprint. Les sondes du joueur émetteur sont exclues des destinataires et l’interface confirme aussi les partages idempotents. - API v113 : ajout de
POST /api/probe/{probeId}/probe-improvement-blueprints/{improvementId}/share. Le joueur authentifié peut copier un blueprint connu vers le propriétaire d’une autre sonde uniquement lorsque les deux sondes sont couvertes par un même réseau SCUT actif ; la simple présence dans un même secteur ne suffit pas. L’opération est idempotente et crée sur la sonde destinataire une alerte persistanteblueprint_shared, dédupliquée lors des rejeux. - API v112 : ajout de
DELETE /api/probe/alerts/{alertId}etDELETE /api/probe/damage-warnings/{damageWarningId}, ainsi que de leurs variantes ciblant explicitement une sonde. Une suppression n’est autorisée que pour une alerte appartenant à la sonde sélectionnée du joueur authentifié ; toute autre ressource répond404. - Interface : les alertes persistantes de
/alertsdisposent désormais d’une icône de suppression ; les avertissements de dégâts utilisent leur endpoint dédié. - Documentation API : Swagger propose désormais un sélecteur d’exemple « System impact / Sector transfer » pour préremplir la commande de lancement d’un astéroïde motorisé, expose explicitement les deux valeurs autorisées de
modeet détaille la probabilité décroissante de capture après la traversée de secteurs vides. - API v111 : ajout des trajectoires persistantes d’astéroïdes motorisés.
POST /api/probe/{probeId}/asteroids/{asteroidId}/trajectorieslance soit un impact local relativiste, soit un transfert vers un voisin FCC, etGET /api/probe/{probeId}/asteroid-trajectories/{trajectoryId}expose uniquement la télémétrie détectable dans le secteur courant, sans coordonnée absolue. Les phases sont exécutées et rejouées de façon idempotente par le scheduler. - API v111 : l’alerte d’allumage d’une trajectoire
system_impactindique désormais l’identifiant opaque de la cible et son type (probe,asteroid,planetoustar). - API v111 : les astéroïdes motorisés ont désormais un réservoir binaire explicite (
motorFuelStatus: full|empty). La motorisation consomme aussi deux plaques d’acier et 0,2 point de deutérium, attribue un nouvel identifiant opaque, etPOST /api/probe/{probeId}/mannies/{mannyId}/refuel-motorized-asteroidpermet à une Manny de refaire le plein avant son retour automatique. - Moteur : les impacts gèrent étoiles, planètes, astéroïdes et sondes avec énergie relativiste, dégâts ou fragmentation déterministes, tandis que les transferts traversent un secteur par 24 heures, tentent une capture pondérée, conservent containers et signets, et disparaissent après une capture par trou noir.
- Migration obligatoire : ajout de
scripts/one-shot-scripts/migrate-asteroid-trajectories.php. Worker arrêté, ce script convertit les anciens astéroïdes motorisés au format strict avec réservoir plein et installe la table SQL des trajectoires ; aucun fallback de lecture de l’ancien format n’est conservé. - Interface :
/manniespropose le ravitaillement et le lancement des astéroïdes motorisés, affiche les prérequis complets et les estimations de durée. - Interface : l’aide du formulaire « Lancer un astéroïde motorisé » s’adapte désormais au mode choisi et explique séparément l’impact dans le système ou le transfert intersectoriel avec sa probabilité décroissante de capture.
- Interface :
/sensorsmet désormais en exergue tout astéroïde motorisé en mouvement détecté par le scan du secteur courant, avec le mode et la phase de trajectoire, la cible, la vitesse ou la progression, ainsi qu’un compte à rebours local jusqu’à l’impact ou au prochain franchissement de secteur. - Correction WebUI : depuis la route canonique
/mannies, les actions de motorisation, de ravitaillement et de lancement ciblent désormais explicitement la sonde courante ; elles ne construisent plus une ancienne URL générique qui répondaitEndpoint not found. - Correction WebUI : le prérequis de motorisation mentionne et vérifie désormais l’intégralité du coût — un moteur au deutérium, quatre barres d’acier, deux plaques d’acier et 0,2 point de deutérium.
- API v110 : les scans détaillés de
GET /api/probe/sector,GET /api/probe/{probeId}/sectoretGET /api/sectorexposent désormaismotorizedsur les astéroïdes présents dans les listes généralesbookmarkTargets, en plus deminableTargets. Ce champ reste absent des autres types d’objets.
- Interface : le détail des corps d’un système dans le scan Sensors affiche désormais « Propulsion : Installée » pour les astéroïdes motorisés.
- Interface : les champs de saisie Swagger de
/api-docsutilisent désormais un texte sombre sur fond blanc, sans hériter de la couleur claire des formulaires généraux de la WebUI.
- API v109 :
GET /api/probe/probe-improvements-availableet sa variante ciblant une sonde exposent désormaisinstallableOnProbepour chaque blueprint. La valeur estfalsepourdistributed_thrust_anchoring, dont l’installation cible les astéroïdes, ettruepour les améliorations de sonde. - Interface : le formulaire d’amélioration de sonde filtre les blueprints selon
installableOnProbe;distributed_thrust_anchoringreste disponible pour la motorisation des astéroïdes sans être proposé comme amélioration de sonde.
- Maintenance :
force-pending-scheduled-events-now.phpavance aussi les échéances métier des tâches Manny et de tous les mouvements encore actifs. Il recrée l’événement terminal d’un mouvement dont les événements ont déjà été consommés, afin que le prochain passage du scheduler termine réellement le transit au lieu de laisser la sonde bloquée.
- API v108 : ajout de
POST /api/probe/{probeId}/mannies/{mannyId}/motorize-asteroid. Après déblocage du blueprint Distributed Thrust Anchoring, une Manny peut consommer un moteur au deutérium et quatre barres d’acier pour motoriser durablement un astéroïde du secteur, sans empêcher son minage, puis revient automatiquement vers la sonde. La WebUI/manniesaffiche alors l’action « Installer une propulsion sur un astéroïde » dans le groupe Secteur.
2026-08-14
Fixed
- API : les réponses Manny exposent de nouveau
task.consumedItemspour les fabrications en cours, notamment dans la réponse dePOST /api/probe/{probeId}/mannies/{mannyId}/craft.
2026-08-13
Changed
- API v107 : ajout de
POST /api/probe/{probeId}/storage-containers/{containerId}/crafting-reservations/reassign, qui réaffecte atomiquement les réservations de sortie des crafts actifs vers d’autres containers compatibles, ou répond409 crafting_reservations_cannot_be_reassignedsans modification si la vidange complète est impossible. - Interface : les conflits de réservation rencontrés en détachant ou larguant un container depuis
/manniesou l’inventaire proposent désormais de réaffecter les réservations de fabrication, avec un message explicite si aucun autre container compatible n’a assez de place. - Interface : l’alerte de stockage fragile affiche désormais le seuil réel de rupture selon le modèle et les améliorations de la sonde (5/10 pour une sonde standard, 2/4 pour une tanker), au lieu d’annoncer systématiquement 5 containers supplémentaires.
- API : les transferts de Manny, de deutérium et de containers entre sondes sont désormais refusés avec
probe_already_movingsi la sonde source ou cible est en mouvement, afin d’éviter qu’une arrivée dans un autre secteur fasse échouer le transfert et laisse la Manny ou le container hors de portée. - Interface : le refus
probe_already_movingd’un transfert inter-sondes affiche désormais un message explicite et traduit, sans requête ni polling supplémentaire.
2026-08-07
Fixed
- Moteur : l’inspection Manny d’un astéroïde découvre désormais tous les containers qui y sont cachés, au lieu de ne révéler que le premier.
2026-08-05
Fixed
- Interface : le champ de quantité du transfert de deutérium dans
/manniesn'est plus prérempli et peut rester vide pendant la saisie. - Interface : dans le détail d’une recette, un astérisque et une note signalent désormais les quantités disponibles déjà diminuées par la préparation d’ingrédients intermédiaires précédents.
2026-08-04
Fixed
- Moteur : lorsqu'un container détaché ciblé par un minage Manny s'est rempli entre l'ordre et son échéance, la Manny dépose seulement la quantité encore admissible, laisse le reliquat dans l'astéroïde et termine son retour au lieu d'être différée indéfiniment par le scheduler.
Changed
- API : les erreurs de
POST /api/probe/{probeId}/mannies/tasksindiquent désormais lemannyIdrejeté en plus de sontaskIndex. - Maintenance : ajout de
scripts/purge-scheduled-events.phppour supprimer quotidiennement, par lots, les événements terminés depuis plus de 30 jours sans toucher aux événements actifs.
2026-08-02
Fixed
- Interface : le rafraîchissement périodique de
/inventoriesne replie plus le formulaire de déplacement ou de détachement d’un container pendant sa saisie. - API/WebUI : les détachements et largages de containers refusent désormais avec
409 storage_container_reservedtout container dont de l’espace est réservé pour le résultat d’un craft actif ;/mannieset l’inventaire affichent un message explicite. - Moteur : la finalisation d’un craft dont la réservation de stockage est devenue invalide termine désormais proprement la tâche Manny, libère la réservation et conserve
invalid_cargo_reservationcomme motif d’échec métier.
- Correction du worker de planification : un renouvellement de lease effectué dans la même seconde n'est plus pris pour une perte de verrou MariaDB, les transitions de lease échouent désormais explicitement, et un script permet de récupérer les événements
runningpendant un arrêt contrôlé.
Changed
- API :
GET /api/probe/{probeId}/manniesetGET /api/probe/{probeId}/mannies/{mannyId}exposent désormaistaskStartTime(ISO-8601, nullable) avec les détails des tâches Manny. - Performance/fiabilité : la sortie d'une fabrication Manny ou imprimante est désormais déposée directement dans le container réservé au lancement ; la réservation n'est libérée qu'après la création réussie, sans recalcul global de placement à l'échéance.
- Performance : la finalisation d'un craft ne verrouille plus toute la sonde, seulement la ligne du Manny propriétaire de la réservation. Les crafts actifs antérieurs doivent être préparés, worker arrêté, avec
scripts/migrate-active-crafts-to-output-reservations.php; le scheduler ne contient aucun chemin de compatibilité implicite. - Performance : chaque placement d'objet ou de ressource calcule désormais une seule fois l'occupation globale et les transferts entrants réservés, puis réutilise cet instantané pour parcourir les containers candidats.
- Fiabilité/performance :
ensureProbeStorage()n'effectue plus de réparation opportuniste lors des lectures et placements. Une sonde neuve et vide reste initialisée normalement ; les containers manquants, inventaires orphelins et migrations de stocks passent désormais par l'opération expliciterepairProbeStorage()du script de maintenance. - Fiabilité scheduler : les événements
runningportent désormais l'identifiant de leur worker et un bail renouvelable. Le worker récupère périodiquement les événements dont le bail a expiré, tandis que les transitionsdone,failedetpendingvérifient encore la propriété du verrou. - Statistiques publiques : ajout d'un podium des joueurs selon la distance de leur sonde la plus éloignée par rapport à leur secteur de départ, sans exposer de coordonnées absolues.
2026-08-01
Changed
- API v106 : le minage Manny ne crée plus d'étapes intermédiaires dans le scheduler. La durée complète (trajets compris) est calculée au lancement, puis l'extraction et le dépôt sont transactionnés à l'échéance finale, après vérification de la place disponible.
- Migration : ajout de
scripts/migrate-mining-to-terminal-events.phppour convertir, worker arrêté, les minages actifs vers leur unique événement terminal et restituer aux astéroïdes les cargaisons encore en vol. - Performance : démarrer une fabrication Manny ou imprimante ne rafraîchit plus toutes les tâches de la sonde ; chaque sortie réserve désormais durablement son volume et son container dès le début de la fabrication, puis le scheduler remplace cette réservation par l’objet produit.
- API v105 : ajout de
DELETE /api/probe/{probeId}/movepour annuler un déplacement encore en préparation, rembourser son deutérium réservé et neutraliser ses événements planifiés. - Interface : les pages
/,/{probeId}et/movementproposent l’annulation d’un déplacement pendant sa préparation ; le bouton disparaît à l’échéance calculée localement sans polling supplémentaire. - API :
GET /api/probe/{probeId}/messages(et sa variante sur la sonde par défaut) accepte désormaisstatus=unreadpour ne retourner que les messages non lus. - Interface : le polling léger du voyant de messagerie ne charge plus que les messages non lus ; la page
/messagingconserve sa liste complète et sa pagination. - API :
GET /api/probe/{probeId}/alerts(et sa variante sur la sonde par défaut) accepte désormaisstatus=unreadpour ne retourner que les alertes non lues. - Interface : le polling léger du voyant d’alertes ne charge plus que les alertes non lues ; la page
/alertsconserve sa liste complète.
2026-07-31
Changed
- Interface :
/inventoriespermet désormais de jeter les balises de transit SCUT ; elles deviennent des objets dérivants récupérables dans le secteur comme les autres composants. - Interface : le sélecteur « Vue inventaire » de
/inventoriesclasse désormais les containers par nom, dans l’ordre alphabétique de la langue affichée. - Maintenance : les scripts d’assistance en deutérium ignorent désormais les astéroïdes épuisés par le minage, y compris leur reliquat d’arrondi de
0,0001container, tout en continuant d’éviter les réserves encore exploitables. - Interface :
/manniesdétaille désormais les détachements de container destinés à une autre sonde en affichant le container et le nom de la sonde cible pendant la tâche. - Scheduler : le worker est désormais seul responsable des trajets, ticks d’extraction, retours et dépôts intermédiaires du minage Manny ; les appels API ne font plus avancer le monde par effet de lecture.
- Migration : ajout de
scripts/migrate-active-mining-to-scheduler-transitions.phppour réveiller une fois les minages déjà actifs lors du déploiement. - Interface :
/manniesborne désormais son polling à une requête groupée toutes les 5 secondes et temporise les transitions scheduler échues, afin d’éviter une boucle rapide menant au statut HTTP 429 lorsque le worker tarde à persister une transition.
2026-07-30
Changed
- Performance API : les inventaires inclus dans
GET /api/probe,GET /api/probe/{probeId},GET /api/probe/sectoretGET /api/probe/{probeId}/sectorutilisent désormais une projection Manny légère qui ne charge ni n’actualise les tâches et ometcurrentTaskettaskProgressPercent. - API v104 : ajout de
GET /api/probe/{probeId}/mannies/{mannyId}pour obtenir et actualiser l’état complet d’une seule Manny. - Interface : l’inventaire laisse demander l’éjection d’une Manny sans précharger son état de tâche ; l’endpoint d’éjection effectue la validation autoritative et signale notamment une Manny occupée.
2026-07-29
Changed
- Déplacement : chaque voyage consomme désormais un coût fixe de 2 points de deutérium, configuré par
movement.fuelCostPoints, et son départ est refusé si le stock ne couvre pas le trajet complet, décélération comprise. - Transfert de deutérium : les crédits vers la cible et les remboursements de surplus utilisent désormais des mises à jour SQL atomiques, afin qu’une livraison minière ou un autre transfert simultané ne puisse plus écraser une réservation déjà débitée.
- Interface : lorsqu'un appel API reçoit une réponse 401, le client vérifie une seule fois la session via
/api/meet recharge la page si elle a expiré afin de revenir à l'authentification, sans multiplier les contrôles lors des rafraîchissements simultanés.
2026-07-28
Changed
- Performance : les inventaires inclus dans
GET /api/probe,GET /api/probe/{probeId}etGET /api/probe/sectorutilisent désormais le hint Manny borné à dix tâches échues, comme la liste des Mannies, au lieu de rafraîchir toutes les tâches actives. - Performance : les réponses API qui préparent les Mannies avant de construire l’inventaire réutilisent désormais cette préparation et n’exécutent plus deux fois
ensureProbeStorage()dans la même requête. - Performance : la réparation automatique du stockage charge désormais les identifiants des conteneurs en une fois et vérifie en mémoire les items
additional_container, supprimant une requête SQL par conteneur à chaque lecture d’inventaire. - Performance : les lectures de la liste des Mannies ne rafraîchissent opportunément que les dix tâches échues les plus anciennes par requête. Le worker scheduler reste responsable du traitement principal, tandis que les polls suivants absorbent progressivement un éventuel retard sans multiplier les verrous de sonde.
- Interface : l’avertissement du forum présente désormais le canal communautaire et recommande le serveur Discord de Neumann Probe dans ses versions française et anglaise.
- Maintenance : ajout d’un audit en lecture seule des conteneurs détachés stockés dans les JSON de secteurs, avec détection des doublons, collisions d’identifiants et snapshots incomplets.
- Stockage : les conteneurs détachés
drifting,hiddenetdropped_on_planetsont désormais conservés dans des tables SQL normalisées plutôt que dans les JSON de secteurs. Ils persistent après la destruction de leur sonde d’origine. Le scriptscripts/migrate-detached-containers-to-database.phpassure la bascule ponctuelle et renomme de façon déterministe les identifiants dupliqués.
2026-07-27
Fixed
- Performance : les requêtes HTTP et le scheduler ouvrent désormais la base sans rejouer l’initialisation complète du schéma. Les migrations restent réservées aux appels explicites, et la migration MySQL des messages ne relance plus de
ALTER TABLElorsque les références de sondes sont déjà nullables. - Performance : l’affectation atomique d’un lot de tâches Manny rafraîchit désormais les tâches existantes une seule fois et réutilise le verrou de la sonde, au lieu de rescanner toutes les Mannies pour chaque ordre.
Changed
- Interface : l’assemblage Manny permet de choisir le modèle
genericoudeuterium_tanker, adapte la recette et sa description au choix, puis transmet le modèle à l’API. La fiche d’une sonde affiche désormais séparément son type et son modèle. - API v103 : ajout du modèle de sonde
deuterium_tankerà l’assemblage Manny. Il possède une capacité de 400 points de deutérium (800 avec compression), consomme en plus 10steel_plate, 2linear_actuatoret 1integrated_circuit, et subit le risque de rupture de container dès le deuxième container additionnel (le quatrième avec les fixations renforcées). Le champmodeldes sondes vautgenericpar défaut. - Statistiques publiques : le podium des activateurs SCUT regroupe désormais les relais par joueur, toutes ses sondes confondues.
- Maintenance : ajout d’un worker scheduler permanent, conçu pour être supervisé par systemd, qui traite les événements à leur échéance avec une veille bornée à cinq secondes.
2026-07-26
Changed
- API v102 : ajout de
POST /api/probe/{probeId}/mannies/taskspour attribuer en une requête plusieurs tâches Manny, avec les mêmes payloads que les endpoints unitaires, des résultats ordonnés et une application atomique (tout le lot ou rien). - API v101 : les routes authentifiées sont limitées par token à 60 requêtes sur toute fenêtre glissante de 60 secondes via Redis et un script Lua atomique ; les réponses exposent les en-têtes de quota, les dépassements renvoient
429avecRetry-After, et une indisponibilité Redis laisse temporairement passer les requêtes. - Interface :
/manniesrafraîchit immédiatement les alertes de la sonde sélectionnée lorsqu’une Manny termine un largage de conteneur sur une planète. - Scénario Oracle : si les archives biologiques sont larguées sur une destination invalide et que la mission échoue, la planète demandeuse perd définitivement son statut de planète habitée.
- Scénario Oracle : une planète dont la mission a été validée peut être consultée par tout joueur présent dans son secteur, avec un unique délai de 24 heures partagé entre tous ses visiteurs.
- Scénario : ajout de la première étape de la mission
oracle; lors du premier contact, la planète envoie directement son message, place deuxbiological_archiverécupérables en dérive et alerte la sonde de leur destination souhaitée, sans énigme préalable. - Scénario Oracle : le largage planétaire d’un conteneur compte désormais les
biological_archiveau niveau du joueur, invite à livrer la seconde archive, suggère un retour vers la planète demandeuse après deux livraisons et fait échouer la mission si la planète cible n’est pas différente et strictement plus habitable que le seuil configurable. - Scénario Oracle : après livraison des deux archives, le retour de l’une des sondes du joueur dans le secteur demandeur termine la mission et déclenche un message planétaire annonçant la future consultation quotidienne de l’Oracle.
- Scénario Oracle : une mission terminée permet désormais d’envoyer à la planète le
usernamed’un joueur pour recevoir la direction approximative normalisée de sa sonde par défaut et sa distance ; une recherche réussie applique un délai partagé de 24 heures, contrairement aux noms inconnus. - Interface :
/inventoriespropose de nouveau les relais SCUT et les balises de transit SCUT dans les éléments filtrables de “Manage storage rules by container”, même lorsqu’aucun exemplaire n’est actuellement en stock.
2026-07-24
Changed
- API v100 : les secteurs visités sont désormais historisés par sonde.
GET /api/probe/{probeId}/visited-sectorset sa variante pour la sonde par défaut ne renvoient que l’historique de cette sonde. - API v100 : ajout de
GET /api/visited-sectors, qui renvoie l’ensemble dédupliqué des secteurs visités par toutes les sondes du joueur. - Maintenance : ajout de
scripts/migrate-visited-sectors-to-probes.phppour reconstruire l’historique par sonde depuis les mouvements lors du déploiement.
2026-07-22
Changed
- API v99 : les observations de secteur exposent
scutCoverageStatus(covered,uncoveredouunknown) et ne révèlent sur un secteur non visité que les réseaux SCUT dont le joueur a déjà visité au moins un secteur couvert. - Interface :
/sensorset/sensors/{probeId}indiquent désormais si le secteur du scan principal, chaque secteur voisin scanné et chaque secteur visité sont couverts ou non par un réseau SCUT. - Interface :
/sensorsne rafraîchit plus automatiquement le scan affiché ; les coordonnées en cours de saisie restent intactes jusqu’à un scan ou un rafraîchissement explicitement demandé.
- API v98 :
GET /api/probe/manniesetGET /api/probe/{probeId}/manniesexposentnextUsefulRefreshDelayMs, le délai recommandé avant le prochain polling utile: prochaine fin de tâche Manny, ou30000ms lorsqu’aucune tâche n’a de fin planifiée. - Interface :
/manniesutilisenextUsefulRefreshDelayMspour espacer automatiquement ses rafraîchissements quand aucune fin de tâche n’est attendue. - Interface : le formulaire de craft
/manniesdétaille désormais les sous-composants automatiquement préparés pour les recettes profondes comme Manny, afin de rendre visibles les barres, plaques et autres pièces nécessaires aux composants intermédiaires. - Interface : quand
/manniesmine uniquement du deutérium, le champ de quantité utilise désormais des points de cuve; la requête garde l’unité moteur en ECE avec la conversion 1 point = 0.01 ECE minée. - API v97 : les astéroïdes nouvellement générés reçoivent désormais un nom public déterministe basé sur leurs réserves par ordre de quantité et un court hash, par exemple
Ice Deut 15ce; ce nom ressort dans/api/probe/sector,/api/sectoret les cibles minables imbriquées des systèmes solaires. - Interface : dans
/mannies, l’actionMine the sectoraffiche le nom public de l’astéroïde dans le sélecteur d’objet à miner dès que le secteur expose ce nom. - Maintenance : ajout de
scripts/name-generated-asteroids.phppour renommer les astéroïdes déjà persistés dans les JSON de secteurs, avec--universe-path,--world-seed,--keep-existinget--dry-run.
2026-07-21
Changed
- Performance : les lectures API de sonde calculent désormais les phases de mouvement en cours sans verrou ni réécriture systématique; seules les arrivées, les checks de destruction et les événements scheduler persistent les transitions.
- Performance : l’authentification par session ou clef API ne réécrit plus
last_used_atà chaque requête; la trace d’usage est désormais rafraîchie au plus toutes les 5 minutes par token.
2026-07-16
Changed
- Performance : l’authentification par session ou clef API ne réécrit plus
last_used_atà chaque requête; la trace d’usage est désormais rafraîchie au plus toutes les 5 minutes par token.
2026-07-21
Changed
- API v96 : ajout de
POST /api/probe/{probeId}/mannies/{mannyId}/install-scut-transit-beaconet de sa variante sonde par défaut pour installer, via une Manny, unscut_transit_beaconsur un relais SCUT actif du secteur courant; l’action dure 5 minutes, consomme le module, et les payloads de relais SCUT exposent désormaisisTransitBeacon. - Gameplay : un trajet entre deux secteurs qui contiennent chacun un relais SCUT actif équipé d’un
scut_transit_beacondans le même réseau SCUT ignore désormais le risque de destruction de la sonde, tout en conservant les risques de détachement des containers. - WebUI : la page
/movementliste désormais les corridors SCUT sécurisés disponibles depuis le secteur courant quand un relais actif équipé d’une balise de transit mène vers d’autres relais équipés du même réseau. - WebUI : dans
/movement, les tuiles de corridors SCUT sécurisés déclenchent désormais directement le saut vers les coordonnées de la tuile viaINITIATE JUMP. - WebUI : la page
/sensorsprécise désormais quand un relais SCUT détecté est équipé d’une balise de transit. - WebUI : la page
/manniesexpose maintenant l’action de secteurBaliser un relais SCUT, avec choix d’un relais actif non équipé et validation conditionnée à la présence d’unscut_transit_beaconen inventaire. - WebUI : la page
/scutindique désormais, dans la liste des relais, si chaque relais possède une balise de transit SCUT. - Gameplay : les coûts de craft en deutérium restent désormais exprimés en ECE fixes même sur les sondes avec réservoir compressé; un réservoir à 100/200% fournit donc 1.0 ECE au craft, et non 0.5 ECE.
- Debug :
scripts/add-inventory-item.phpcible désormais une sonde avec<probe-id>ou--probe-id=<id>;--player-id=<id>reste disponible comme raccourci legacy vers la sonde par défaut. - API v95 : ajout de la recette Manny
scut_transit_beacon, un module SCUT léger destiné à être installé plus tard sur les relais actifs; il consomme 1integrated_circuit, 1battery_pack, 1micro_conductor, 2steel_plateet 0.05 ECE de deutérium, pour une durée directe de 1 heure. - Stats : les métriques publiques
Missions réussiesetMissions échouéessont désormais calculées depuisprobe_missionsau lieu de rester à zéro, en respectant l’exclusion des joueurs sans sonde comptabilisée dans les stats publiques. - API v94 : lorsqu’une sonde secondaire est détruite ou piégée alors que le joueur possède d’autres sondes, elle est supprimée immédiatement et une alerte
probe_destroyedest créée sur la sonde principale sans coordonnées absolues; lorsqu’une sonde principale est détruite, le basculement automatique choisit désormais la sonde survivante la plus proche. Les Mannys déjà hors de la sonde détruite deviennent des objets de secteurabandoned, détachés de leur ancienne sonde et récupérables par une sonde de passage. - Maintenance : ajout de
scripts/delete-probe.phppour supprimer une sonde terminale par id, avec--database-config,--dry-run, refus de supprimer la dernière sonde du joueur, et conservation des données rattachées au joueur. - API v93 : ajout de
POST /api/probe/mannies/{mannyId}/transfer-to-probeet de sa variante avec{probeId}pour transférer une Manny vers une autre sonde possédée du même secteur, ou vers une sonde dans le secteur distant de la Manny via SCUT; la durée est celle d’un détachement de container et les tâches en cours sont annulées avec la logique de recall avant le transfert. - Interface :
/manniesajoute l’ordre “Transférer la Manny vers une sonde” dans le groupe Secteur, avec sélection paresseuse des sondes ou drones possédés disponibles dans le secteur de la Manny. - Interface : les erreurs de craft Manny dues au stockage insuffisant sont affichées comme un problème de place, et non comme un manque générique de ressources.
- API v92 : lorsqu’un assemblage de sonde par Manny est annulé via
POST /api/probe/mannies/{mannyId}/recall, les composants et les deux containers consommés au démarrage sont désormais relâchés comme piles d’items à la dérive dans le secteur d’assemblage. - Maintenance : ajout de
scripts/generate-threejs-point-cloud-sectors.phppour exporter les secteurs générés, visités, occupés par une sonde et couverts par SCUT en nuages de points JSON chargeables par Three.js, dont une scènesector-point-clouds-threejs-editor.jsonimportable dans l’éditeur Three.js.
2026-07-14
Changed
- API v91 :
POST /api/probe/mannies/{mannyId}/detach-storage-containeraccepte le modeattach_to_probeavecobjectIdciblant une autre sonde possédée dans le même secteur; à la fin du délai, le container et son contenu sont réattachés à l’inventaire de cette sonde. - Interface :
/mannieset/inventoriesproposent le mode “Attach to another probe” pour détacher un container puis le rattacher à une autre sonde ou drone possédé dans le même secteur. - Interface :
/inventoriesreconstruit le panneau “Manage storage rules by container” quand les règles reçues changent, tout en conservant l’accordéon ouvert, afin de refléter les modifications faites directement via l’API. - API v90 : ajout du journal de bord rattaché à chaque sonde, avec stockage
probe_logbook_pageset endpointsGET /api/probe/{probeId}/logbook-pages,POST /api/probe/{probeId}/logbook-page,GET/PATCH/DELETE /api/probe/{probeId}/logbook-page/{logbookPageId}. - Interface : la page Sonde affiche le journal de bord de la sonde sélectionnée, chargé à l’ouverture et après création, modification ou suppression, sans polling.
- Interface :
/inventoriesaffiche le nom de chaque Manny directement après le libelléMannydans les cartes d’inventaire. - API v89 :
GET /api/sectorconservesector.distancepour rétrocompatibilité en l’exprimant depuis la sonde par défaut, et ajoutesector.distancesavec la distance du secteur demandé depuis chaque sonde possédée ainsi que la sonde effectivement utilisée pour le scan. - Interface :
/sensorsaffiche désormais la distance du secteur scanné depuis la sonde sélectionnée par l’utilisateur, même quandsector.distancereste exprimé depuis la sonde par défaut pour rétrocompatibilité.
2026-07-13
Changed
- Interface :
/manniesajoute des filtres d’état et de portée, un tri par nom, tâche ou secteur, et une commande de réinitialisation pour organiser la liste des Mannys sans changer le contrat API.
2026-07-09
Changed
- API v88 : les piles d’items à la dérive dont chaque unité dépasse la capacité d’emport d’une Manny ne sont plus exposées avec
salvageable: truedans les scans de secteur; cela masque notamment les anciensdrifting_itemscut_relay, tandis que les vrais relais SCUT éteints restent récupérables. - Interface :
/manniesne propose plus les relais SCUT activés ou les anciens itemsscut_relaytrop volumineux dans “Récupérer un objet à la dérive”; seuls les relais éteints explicitement récupérables restent listés. - Gameplay : une tâche Manny “Assemble a new probe” arrivée à terme se finalise désormais même si la sonde-mère a quitté le secteur entre-temps; le drone est créé dans le secteur où la Manny assemblait la sonde.
- API v87 : les noms API des items et stocks d’inventaire exposés par les endpoints de sonde sont désormais canoniques en anglais; exécuter
php scripts/migrate-probe-item-names.php --database-config=config/database.jsonaprès le déploiement pour normaliser les lignesprobe_itemsexistantes. - Stats : le podium des explorateurs classe désormais les joueurs par nombre de secteurs visités, toutes leurs sondes possédées confondues.
- Stats : la distance entre les deux sondes les plus proches ignore désormais les paires de sondes appartenant au même joueur.
- API v86 :
GET /api/sectorutilise désormais la sonde possédée reachable la plus proche du secteur demandé quand elle fournit un scan valide, en ignorant les candidates encore eninsufficient_scan_data. - API v85 : les entrées
sector.probesde/api/probe/sectorexposent désormaisownedpour distinguer les sondes du joueur authentifié des sondes étrangères dans le secteur courant. - WebUI : l’alerte de sonde détectée dans le secteur ignore désormais les autres sondes possédées par le joueur.
- API v84 : les blueprints d’améliorations de sonde sont désormais connus au niveau joueur et partagés par toutes ses sondes;
GET /api/probe/{probeId}/probe-improvements-availableretourne les améliorations connues du joueur propriétaire de la sonde sélectionnée, avecdonecalculé pour cette sonde précise. La migration de production dédiée estphp scripts/migrate-probe-improvements.php. - API v83 : ajout de
POST /api/probe/mannies/{mannyId}/transfer-deuterium-to-probeet de sa variante/api/probe/{probeId}/mannies/{mannyId}/transfer-deuterium-to-probe; une Manny réserve immédiatement du deutérium de la sonde source, réalise le transfert en 5 minutes vers une sonde ou un drone du même secteur, remplit la cible au maximum et rend le surplus à la source. - Interface :
/manniesajoute l’ordre “Transfer deuterium to a probe or drone” dans le groupe Containers, avec choix de la sonde cible du même secteur et de la quantité; le taux de deutérium de la cible n’est affiché que lorsqu’il est accessible pour la sonde du joueur. - API v82 : lorsqu’une sonde par défaut est détruite par collision de déplacement ou piégée par un trou noir, l’esprit du joueur bascule automatiquement vers une autre sonde opérationnelle du joueur si elle existe; l’ancienne sonde est supprimée sans effacer les données rattachées au joueur, et une alerte
mind_snapshot_transferreden anglais est créée sur la nouvelle sonde. - OpenAPI : les opérations
{probeId}réutilisées pour les déplacements de stock, messages, alertes, warnings, secteurs visités, secteur courant, déplacement, Mannys et impression atomique déclarent maintenantprobeIdau niveau opération pour l’affichage Swagger UI. - Scheduler : les tâches actives des Mannys sont désormais liées à
scheduled_eventsviamannies.task_scheduled_event_id; le cronscripts/scheduler.phppeut les finaliser avec les mêmes handlers que les refresh API. Après déploiement, exécuterphp scripts/migrate-manny-tasks-to-scheduled-events.php --database-config=config/database.json.
2026-07-07
Changed
- API v81 : ajout de
POST /api/probe/mannies/{mannyId}/assemble-probe, une tâche Manny extérieure de 3 heures qui consomme 2 containers vides, 1deuterium_engine, 1scut_relay, 5electric_motor, 2atomic_printer_partet 4solar_panel, puis crée une sondedrone-Nappartenant au joueur et y transfère la Manny. - Interface : l’accordéon Fabrication des Mannys propose “Assemble a new probe”, avec description, liste des composants et sélection de deux containers vides.
- API v80 : ajout des recettes
atomic_printer_partetdeuterium_engine; la pièce d’imprimante atomique se fabrique via l’imprimante atomique en 45 minutes, et le moteur au deutérium s’assemble via Manny en 2 heures avec 0.5 ECE de deutérium direct. - Interface : ajout des libellés et descriptions FR/EN pour les pièces d’imprimante atomique et moteurs au deutérium dans les pages Mannys et Inventaires.
2026-07-06
Changed
- API v79 :
GET /api/probesexposeisReachablepour chaque sonde, vrai quand elle est la sonde par défaut, dans le même secteur, ou joignable via une couverture SCUT partagée. - Interface : la page Sonde affiche le nom et le type de la sonde, permet de la renommer quand elle est joignable, et propose depuis la sonde principale une bascule d’instance vers un drone joignable.
- Interface : les pages ciblant une sonde injoignable harmonisent leur avertissement hors portée et réduisent les pages Capteurs, Mouvement, SCUT, Messagerie et Alertes à leur titre, rafraîchissement et message d’avertissement.
- Interface : le sélecteur de sonde du nav-panel indique les sondes inaccessibles.
- Interface : le libellé
Mannys & printerdu nav-panel anglais n’affiche plus l’entité HTML échappée.
2026-07-04
Changed
- API v78 :
GET /api/probe/{probeId}limite désormais une sonde possédée hors secteur courant et hors réseau SCUT partagé àid,name,status: out_of_scut_rangeetsectorrelatif. - Maintenance : ajout de
scripts/add-drone-probe.phppour créer une sondedroneexclue des stats publiques, avec une Mannymanny-dronedéjà placée dans son stockage. - Interface : les pages principales acceptent un ID de sonde dans l’URL, le nav-panel propose un sélecteur de sonde active, et les liens de navigation conservent cet ID pour les sondes non défaut.
- API v77 : les endpoints opérationnels de sonde acceptent désormais des variantes
/api/probe/{probeId}/...pour agir sur une sonde possédée non défaut, à condition qu’elle soit dans le même secteur que la sonde par défaut ou joignable par le même réseau SCUT. - API v76 : les missions sont désormais rattachées au joueur (
probe_missions.player_id) et restent visibles depuis/api/probe/missionsaprès un changement de sonde par défaut; le scriptscripts/migrate-probe-missions-to-player.phpmigre les bases existantes depuisprobe_id. - API v75 :
PATCH /api/probe/{probeId}permet de définir la sonde par défaut si la sonde par défaut actuelle et la sonde cible sont dans le même secteur ou dans des secteurs couverts par le même réseau SCUT. - API v74 :
GET /api/proberetourne désormais explicitement la sonde par défaut,GET /api/probesliste les sondes du joueur avecdefaultProbeIdetisDefault, etGET /api/probe/{probeId}retourne une sonde possédée ou404sinon. - Base de données : préparation interne du modèle multi-sondes avec
players.default_probe_idet un lien one-to-many deplayersversneumann_probes.
Fixed
- Interface : les liens du nav-panel pour les sondes non défaut ne dupliquent plus l’ID de sonde (
/sensors/537/537). - Interface :
/inventoriesne propose plus l’imprimante atomique ni les containers additionnels dans les items filtrables de “Manage storage rules by container”. - API : le minage Manny vers un container détaché n’exige plus 0,05 ECE de place libre fantôme dans la sonde quand la Manny qui part libère déjà son propre emplacement.
- Debug :
scripts/add-deuterium-asteroid-alert.phpetscripts/add-deuterium-asteroid-alerts-for-low-fuel.phpn’ajoutent plus d’astéroïde ni d’alerte dans les secteurs qui contiennent déjà un astéroïde avec du deutérium, et l’alerte injectée est désormais rédigée en anglais.
2026-07-03
Fixed
- Interface :
/inventoriesconserve désormais l’accordéon “Manage storage rules by container” ouvert pendant les refreshs, qui ne mettent plus à jour que les métriques et les inventaires quand ce panneau est déplié. - Base de données : l’initialisation MySQL ajoute désormais la colonne générée
probe_movements.active_probe_idavant de créer son index unique, ce qui évite de bloquer l’authentification sur les bases existantes après le passage InnoDB. - Interface :
/authbypwdaffiche désormais un message traduit avec un statut 503 quand le stockage d’authentification est indisponible, au lieu d’une erreur 500 vide. - API : les mutateurs critiques de sonde/Manny/stockage passent désormais par le verrou transactionnel
withProbeLock; les complétions Manny ne s’appuient plus sur unflockfichier pour le minage, et la base impose un seul mouvement actif par sonde avec tables MySQL créées explicitement en InnoDB. - API v73 :
POST /api/probe/storage-movesrefuse désormais de déplacer les itemsadditional_container; tant qu’ils ne sont pas détachés ou cachés sur un astéroïde, ils restent liés au stockage interne de la sonde. - Interface :
/inventoriesmasque le bouton “Move” sur les lignes de containers additionnels tout en conservant l’alignement des contrôles. - Maintenance : ajout de
scripts/relink-additional-containers-to-core.phppour remettre lesadditional_containerdéjà stockés dans un container versprobe-coreaprès déploiement, et supprimer les containers orphelins vides dont l’item backing a déjà disparu.
2026-07-01
Changed
- API :
ApiKernelutilise désormais un routeur déclaratif, avec les routes Forum déplacées dans un controller dédié et leur sérialisation dans un presenter, sans changement de contrat public. - API : les routes
/api/probe/mannieset/api/probe/atomic-printer/craftsont déplacées dansProbeManniesApiController, avec leur présentation dansProbeManniesApiPresenter, sans changement de contrat public. - Manny :
MannyServicedélègue désormais la présentation publique des Mannys à un presenter dédié et le rafraîchissement des tâches à des handlers typés par tâche, sans changement de contrat API. - API v67 : ajout du stockage
probe_improvements, deGET /api/probe/probe-improvements-availableet dePOST /api/probe/mannies/{mannyId}/improve-probe; la première amélioration,deuterium_compression, consomme 1electric_motoret 2steel_bar, dure 5 minutes et porte la cuve de deutérium à 200 % une fois terminée. - API v68 :
POST /api/probe/mannies/{mannyId}/inspect-sector-objectaccepte aussi une Manny inactive dans un secteur distant couvert par le même réseau SCUT que la sonde; l’objet inspecté doit se trouver dans le secteur de cette Manny, qui reste oubliée sur place à la fin de l’inspection. - API v69 : ajout de l’amélioration
reinforced_container_couplingsviaGET /api/probe/probe-improvements-availableetPOST /api/probe/mannies/{mannyId}/improve-probe; elle consomme 1integrated_circuitet 0.4 ECE decarbon_compounds, dure 5 minutes et ignore 5 containers supplémentaires dans le calcul du risque de rupture de container au déplacement. - API v70 : terminer
POST /api/probe/mannies/{mannyId}/inspect-sector-objectsur undormant_constructcrée une alertemanny_reportavec un message de rapport en anglais et débloque soitdeuterium_compression, soitreinforced_container_couplings; le scénario choisi est persisté dans le JSON du secteur sans être exposé dans les scans API. - API v71 :
POST /api/probe/mannies/{mannyId}/recover-storage-containerinterrompt les Mannys qui minent vers le container récupéré; elles larguent leur cargo minier éventuel et repassent en tâchereturningavec la raisontarget_container_recovered. - API v64 : ajout des objets de secteur
dormant_construct, exposés uniquement dans les scans détaillés de/api/probe/sectoret/api/sector. - API v65 :
POST /api/probe/mannies/{mannyId}/inspect-sector-objectremplace l’action spécialiséeinspect-asteroid, désormais dépréciée. L’inspection accepte les astéroïdes, lesdormant_constructet les containers détachés visibles ou déjà découverts; les rapports de contenu de containers créent une alertemanny_report. - API v66 : l’arrivée d’une sonde dans un secteur contenant un
dormant_constructcrée une alerte persistantesector_object_detecteden anglais invitant à envoyer une Manny l’inspecter. - Génération : les nouveaux secteurs ont désormais 1 chance sur 200 de contenir un
Dormant construct;scripts/add-dormant-construct.phppermet d’en ajouter un à un secteur, etscripts/backfill-dormant-constructs.phppeut compléter les secteurs JSON non visités déjà générés. - Interface :
/manniespropose l’action générique “Inspecter un objet du secteur” et/alertsmet les rapports de Manny en évidence avec un style dédié. - Interface : une Manny inactive dans un secteur distant joignable via SCUT peut désormais recevoir l’action “Inspect a sector object” depuis
/mannies; la liste des objets inspectables provient du scan/api/sectordu secteur de la Manny. - Interface :
/manniesregroupe les ordres Manny en accordéons Probe/Sector/Containers/Craft et ajoute “Improve the probe”, avec sélection des améliorations disponibles et vérification des ressources nécessaires.
Fixed
- API v72 :
POST /api/probe/storage-movessoustrait désormais le volume déjà réservé par les autres déplacements Manny vers le même container avant d’accepter un ordre, afin d’éviter de dépasser sa capacité. - Interface : la page Probe affiche désormais une métrique
Améliorations installées, chargée une seule fois depuis/api/probe/probe-improvements-available, avec un résumé des deux premières améliorations et un+Nsi la liste est plus longue. - Interface : la métrique Deuterium de la page Probe affiche désormais en petit le plafond amélioré, par exemple
max 200, quandfuel.maxDeuteriumdépasse la valeur standard. - API : les rapports d’inspection Manny sont idempotents pour une même fin de tâche, afin d’éviter plusieurs alertes
manny_reportidentiques quand la complétion est rafraîchie simultanément. - API : les rapports d’inspection Manny créés hors déplacement ne provoquent plus d’erreur 500 sur
/api/probe/sector,/api/probe/manniesou/api/probe/alerts;probe_damage_warnings.movement_idaccepte désormaisNULLpour ces alertes autonomes. - API : les nouveaux rapports Manny de contenu de container sont désormais générés en anglais, y compris quand aucun contenu n’est détecté.
2026-06-28
Changed
- Stockage : les couvertures SCUT ne sont plus stockées dans des colonnes JSON
covered_sectors_json; elles passent par la table relationnellescut_covered_sectors. Après déploiement sur une base existante, exécuterphp scripts/migrate-scut-coverage.php. - API v58 :
GET /api/probe/manniesexpose les détails de tâche d’une Manny éloignée seulement si son secteur et celui de la sonde sont couverts par le même réseau SCUT; sinoncurrentTaskvautunknown_too_faret le payload/progrès de tâche est masqué. - API v59 :
POST /api/probe/mannies/{mannyId}/recallaccepte désormais l’arrêt distant d’une Manny active située dans un secteur couvert par le même réseau SCUT que la sonde; la Manny ne revient pas, sa tâche est annulée et elle est enregistrée commeforgottendans son secteur. - API v60 :
POST /api/probe/mannies/{mannyId}/mineaccepte désormais l’ordre pour une Manny oubliée située dans un secteur distant couvert par le même réseau SCUT que la sonde, à condition de déposer le minage dans un container détaché du secteur de la Manny. - API v61 : les messages publics
ProbeDamageWarning.messagedes alertes de rupture de container pendant un mouvement utilisent désormais les coordonnées relatives du joueur et ne divulguent plus les coordonnées absolues du secteur. - API v62 : les containers détachés cachés sur astéroïde ne sont plus exposés comme récupérables via
POST /api/probe/mannies/{mannyId}/salvage; ils restent récupérables viaPOST /api/probe/mannies/{mannyId}/recover-storage-container. - API v63 :
docs/openapi.yamldocumente explicitement les champs SCUT relay-only desSectorObject, dontstatus,coverageRadiusSectors,network,createdByProbeId,createdByProbeNameet la conventionidstring versrelayIdentier. - Interface :
/manniesaffiche les tâches distantes joignables via SCUT avec la progression habituelle et une mention courte de liaison SCUT, tout en conservant “Trop éloignée” hors portée. - Interface : la mention de tâche distante via SCUT est maintenant visible directement dans le bouton d’accordéon Manny, et l’action de rappel distante est libellée comme un abandon de tâche.
- Interface : une Manny oubliée mais encore dans un secteur couvert par le même réseau SCUT s’affiche maintenant comme inactive avec la mention “Secteur distant via SCUT”, au lieu de “Trop éloignée”.
- Interface : une Manny oubliée joignable via SCUT propose désormais uniquement l’action “Mine the sector”, alimentée par
/api/sectorpour cibler le secteur de la Manny et limiter “Store in” aux containers détachés de ce secteur. - Interface :
/sensorsaffiche maintenant le joueur et l’âge de pose des marque-pages de navigation dans le scan courant, les tuiles de secteurs voisins et les scans détaillés des secteurs visités. - Interface :
/manniesne propose plus les containers détachés cachés dans “Récupérer un objet à la dérive”; ils restent listés dans “Récupérer un container détaché”.
Fixed
- Manny : les livraisons de minage parallèles incrémentent désormais les stocks de la sonde sans écraser les apports d’une autre Manny, y compris pour le deutérium stocké dans la cuve dédiée.
- Interface :
/manniesne propose plus de récupérer un container détaché caché uniquement connu via une ancienne détection Manny; le formulaire suit les containers présents dans le scan du secteur courant. - Authentification : les sessions créées avec
Se souvenir de moiprolongent désormais automatiquement leur expiration à chaque nouvelle requête WebUI/API portant le cookie.
2026-06-27
Changed
- Interface : ajout de la page
/scut“SCUT Network”, avec LED de couverture dans le nav-panel, synthèse du réseau courant, sondes détectées et relais listés avec coordonnées relatives. - Statistiques publiques : ajout des podiums SCUT des activateurs de relais allumés et des réseaux les plus étendus, ainsi que du nombre de secteurs couverts par au moins un réseau SCUT.
- API v57 : les endpoints de messages peuvent exposer
type: unknownpour les émetteurs inconnus;scripts/add-origin-anomaly-alerts.phpdiffuse maintenant le message des plans SCUT après 60 s, puis une seconde alerte d’intégration des plans. - API v56 : ajout des alertes persistantes
anomaly_detectedet du script CLIscripts/add-origin-anomaly-alerts.php, qui injecte une alerte d’anomalie vers l’origine absolue pour chaque sonde avec une direction approximative relative à sa position courante. - API v55 : les relais SCUT conservent l'id historique de leur sonde créatrice sans clé étrangère bloquante; les payloads de relais exposent
createdByProbeName, avec le fallbackdeath probequand cet id ne correspond plus à une sonde existante. - Interface :
/messagingpropose aussi les sondes joignables via les réseaux SCUT couvrant le secteur courant. - Interface :
/manniespropose l’action Manny d’activation d’un relais SCUT éteint, avec sélection du relais et nom de réseau facultatif, en vérifiant la présence d’un circuit intégré en stock. - API v54 :
POST /api/probe/inventory/{itemId}/jettisondéploie désormais un itemscut_relaycomme relais SCUT éteint dans le secteur courant, exposé comme récupérable par les Mannys. - API v53 :
POST /api/probe/mannies/{mannyId}/turn-on-relayexige désormais une étoile dans le secteur courant (scut_relay_requires_star) etPOST /api/probe/mannies/{mannyId}/salvagepeut récupérer un relais SCUT éteint présent dans le secteur.
Fixed
- Interface : un item
scut_relayen inventaire peut de nouveau être jetisonné depuis la WebUI pour déployer un relais SCUT éteint dans le secteur. - Manny : deux Mannys ne peuvent plus démarrer simultanément la récupération du même relais SCUT éteint.
2026-06-26
Added
- API v52 : ajout des recettes craftables
solar_paneletscut_relay; un relais SCUT complet demande environ 72 h de craft cumulé par une Manny et l'imprimante atomique, hors temps de minage.
2026-06-25
Added
- API v51 : ajout des relais SCUT persistés en base, de l'action Manny
POST /api/probe/mannies/{mannyId}/turn-on-relay, deGET /api/probe/scut-network/{scutNetworkId}, de la couverturescutNetworksdans les scans et de la messagerie entre sondes couvertes par un même réseau SCUT. - Debug : ajout de
scripts/create-scut-relay.phppour créer un relais SCUT éteint dans un secteur absolu donné.
Changed
- Interface :
/manniesexclut les détails deprobe.inventorydes hashes de cartes pour éviter les reconstructions inutiles pendant le polling; les formulaires dépendants de l'inventaire sont construits à l'ouverture de leur accordéon après rafraîchissement de/api/probe.
Fixed
- API : la restauration d'un snapshot d'esprit supprime maintenant les alertes de dégâts avant les mouvements, purge les missions de l'ancienne sonde et conserve les relais SCUT en retirant seulement leur référence à la sonde détruite, évitant un
internal_errorsur les sondes mortes avec historique riche. - API v50 : les payloads publics de taches Manny n'exposent plus les objets internes de reservation de container detache ni les secteurs cibles absolus.
- Stockage : la récupération d'un container détaché est désormais idempotente, afin qu'un refresh concurrent ou répété ne recrée pas plusieurs containers portant le même libellé dans l'inventaire.
2026-06-24
Added
- API v49 : ajout de
POST /api/probe/mannies/{mannyId}/refill-deuterium-tank, une tache Manny d'une minute qui remplit le reservoir de deuterium de la sonde quand une station de recharge est presente dans le secteur courant. - API v48 : le scenario
return_to_space_programattend maintenant 48 heures apres les dons de materiaux avant de faire apparaitre une station de recharge en deuterium dans les scans detailles du secteur; la reussite est persistee pour le joueur et les contributeurs. - Interface :
/manniespropose l'action de recharge du reservoir de deuterium uniquement lorsqu'une station de recharge en deuterium est detectee dans le secteur courant. - Interface :
/sensorsmet en exergue les stations de recharge en deuterium detectees dans les tuiles des secteurs deja visites, avant le scan detaille.
Changed
- Interface :
/manniesrafraichit les informations des Mannys toutes les 5 secondes et apres validation d'une tache, sans reconstruire les cartes dont le hash d'etat n'a pas change; les pourcentages de progression et le temps restant a la minute defilent localement sans polling additionnel. - Interface :
/sensorsmet en exergue les waypoint bookmarks detectes dans les tuiles des secteurs deja visites, avant le scan detaille.
Fixed
- Stockage : les collections de containers détachés d'un secteur dedoublonnent les entrées par identifiant, y compris au chargement, pour éviter la multiplication des containers cachés sur astéroïde et leur remplissage en double par les Mannys.
2026-06-23
Added
- Ops : ajout de
scripts/migrate-sqlite-to-mysql.phppour migrer la base SQLite active vers une base MySQL/MariaDB future, verrouiller la source pendant la copie et basculerconfig/database.jsonaprès succès. - Scénario :
return_to_space_programenvoie un message planétaire final quand les dons atteignent 5 ECE de métaux et 1 ECE de composés carbonés, avec diffusion aux contributeurs présents dans le secteur.
Fixed
- Stockage : récupérer un container détaché ne bloque plus si un container reconstruit a repris le même identifiant technique; la récupération recrée alors un identifiant libre en conservant le contenu.
- Interface : les vues Inventaires et Mannys affichent désormais le nom personnalisé du container interne de la sonde au lieu de le remplacer systématiquement par le libellé traduit par défaut.
- Base de donnees : les index MariaDB des endpoints de messagerie utilisent des longueurs de préfixe compatibles avec la limite de clé InnoDB en
utf8mb4. - Base de donnees :
players.usernameutilise une collation binaire sous MariaDB, afin de conserver l'unicite sensible a la casse de la base SQLite pendant la migration.
2026-06-18
Added
- API v40 :
/api/probe/alertspeut exposer des alertessector_object_detectedavec un objet detecte dans le secteur relatif. - Debug : ajout de
scripts/add-deuterium-asteroid-alert.phpetscripts/add-deuterium-asteroid-alerts-for-low-fuel.phppour injecter des asteroides de deuterium et avertir les joueurs concernes. - Debug : ajout de
scripts/add-inventory-item.phppour injecter des objets, containers additionnels ou Mannys dans l'inventaire d'un joueur de developpement. - API v38 :
/api/probe/missionset les reponses de mission n'exposent plus de coordonnees absolues dans les descriptions,metadataoucreatedByEvent; les secteurs publics y sont convertis ensector.relative. - API v37 : les arrivees dans un secteur jamais visite contenant une planete habitee peuvent declencher un scenario de premier contact pondere par
gameplay.intelligentLife.scenarios; le premier scenario implemente,return_to_space_program, cree une missionPremier contactet un message planetaire en nombres premiers. - Debug : ajout de
scripts/force-inhabited-planet.phppour injecter en CLI une planete habitee dans un secteur donne. - API v42 : le premier contact
return_to_space_programdemande maintenant 5 ECE de métaux et 1 ECE de composés carbonés, puis comptabilise les matériaux largués par container sur la planète avec le joueur donateur. - API v43 : ajout de
POST /api/probe/mannies/{mannyId}/drop-manny-cargopour larguer immédiatement la cargaison d’une Manny en attente de place et retenter son retour à bord. - API v44 : ajout de
PATCH /api/probe/storage-containers/{containerId}pour renommer un container de stockage via son champlabel. - API v45 :
POST /api/probe/mannies/{mannyId}/mineacceptetargetContainerIdpour déposer les ressources minées dans un container détaché visible ou caché sur astéroïde. - API v46 :
POST /api/probe/mannies/{mannyId}/detach-storage-containerexposeartificialObjectDetectedlors d’un détachementhidden_on_asteroid, avec l’id du container caché et l’astéroïde cible. - API v47 : les containers cachés sur astéroïde persistent leurs découvreurs dans
discoveredByPlayerIdset remontent dans/api/probe/sectoruniquement pour ces joueurs. - Scénario : chaque largage de matériaux demandé par
return_to_space_programdéclenche un message de remerciement planétaire indiquant les matériaux restant à envoyer. - Interface : dans
/inventories, le filtre par container propose une action de renommage quand un container précis est sélectionné. - Interface : dans
/mannies, une Mannywaiting_for_spacepropose de rentrer sans sa cargaison. - Interface : dans
/mannies, le formulaire de minage peut envoyer les ressources vers un container détaché visible ou détecté sur l’astéroïde ciblé. - Interface : ajout d’une vraie page 404 avec retour vers l’accueil, utilisée comme route frontend par défaut quand aucune route ne correspond.
- Stats : ajout du podium des découvreurs de mondes habités par une espèce intelligente sur
/stats. - Stats : les trois podiums de
/statsproposent un bouton pour afficher les 9 premiers du classement.
Fixed
- API v41 : le rappel d'une Manny sortie depuis moins d'un temps de trajet la fait maintenant faire demi-tour; la duree de retour correspond au temps deja passe sur la tache annulee.
- API v39 :
/api/probe/sector, la messagerie, les alertes de vie intelligente et les reponses de mission remplacent les noms publics de planetes habitees qui contiendraient les coordonnees absolues du secteur par un libelle public sans coordonnees absolues; la messagerie n'utilise plus l'identifiant technique d'une planete comme libelle de destinataire. - Debug :
scripts/force-inhabited-planet.phpgenere maintenant un id opaque et stable par secteur pour ses planetes forcees, et retire l'ancien objet debug du meme secteur lorsqu'il est relance. - Debug :
scripts/teleport-probe.phpfinalise désormais les téléportations viaProbeMovementService, afin de déclencher les effets d'arrivée comme les scénarios de premier contact. - Scénarios : observer un secteur courant contenant une planète habitée lance désormais le premier contact manquant, même si l'arrivée normale a été contournée par un outil de debug.
- Stockage : les synchronisations d'inventaire ne reconstruisent plus les ressources des containers depuis des totaux historiques potentiellement périmés, ce qui pouvait effacer des matériaux lors de requêtes concurrentes de minage ou de craft.
- Interface : la carte de l'imprimante atomique dans
Mannys & imprimanteutilise maintenant le libelle traduit en anglais. - Interface : les rafraîchissements automatiques de la page Inventaires ne réinitialisent plus les règles de stockage en cours de modification.
- Interface : la page
/movementpropose désormais par défaut les coordonnées courantes de la sonde et garde le bouton de saut désactivé tant qu'une autre destination valide n'est pas saisie; les destinations ouvertes depuisSensors and radars>Prepare jumprestent préremplies. - Interface : la page
/movementaffiche un avertissement discret lorsqu'une destination atteint la distance où un risque de destruction en croisière apparaît. - Interface : la page
/sensorsaffiche un journal repliable des secteurs précédemment visités, chargé par lots de 9 avec les scans détaillés disponibles. - Debug : ajout de
scripts/sector-json.phppour afficher en CLI le JSON brut d'un secteur à partir de ses coordonnées absolues.
2026-06-17
Added
- API v36 : ajout de
POST /api/probe/mind-snapshot/reassignpour réassigner le snapshot d'esprit d'une sonde morte ou piégée par un trou noir vers une nouvelle sonde, avec reset du référentiel local à0,0,0. - API v35 : ajout du socle générique des missions de sonde avec persistance
probe_missions/probe_mission_steps, objetsMission/MissionStep,GET /api/probe/missions(/api/probe/missionen alias) etPOST /api/probe/missions/{missionId}/abandon. - API v34 : la messagerie
/api/probe/messagesaccepte des destinataires typés viarecipient.type(probepar défaut, ouplanet) etrecipient.id. - Messagerie : les messages exposent désormais
sender.typeetrecipient.type; les endpoints peuvent être une sonde (probeId) ou une planète habitée (planetId). - Interface : la page
/messagingpermet d’envoyer un message aux sondes du secteur courant et aux planètes habitées détectées dans ce secteur. - API v32 : ajout de
POST /api/probe/mind-snapshot/reassignpour réassigner le snapshot d'esprit d'une sonde morte ou piégée par un trou noir vers une nouvelle sonde, avec reset du référentiel local à0,0,0. - Interface : les sondes mortes ou piégées par un trou noir affichent maintenant une alerte explicite avec une action de réattribution du snapshot d'esprit.
- Debug : ajout de
scripts/userinfos.phppour auditer en CLI l'état complet d'une sonde, dont position absolue/relative, inventaire brut, secteurs visités, mouvements et événements planifiés.
Fixed
- Base de donnees : l'initialisation d'une ancienne table
probe_messagesmigre maintenant les colonnessender_type/recipient_typeavant de creer leurs index, evitant un crash au demarrage apres changement de branche. - Craft : un craft terminé alors que le cargo est plein ne casse plus
GET /api/probeouGET /api/probe/mannies; il reste en attente de place et se finalise après libération de stockage. - Stockage :
GET /api/probe/manniesinitialise/répare désormais le container interne de la sonde, réattache les items/Mannys à bord dont le container a disparu et libère les Mannys coincés sur un déplacement de stockage expiré devenu impossible. - Interface : le container interne de la sonde est traduit en anglais dans les vues d'inventaire.
2026-06-15
Added
- API v31 : les observations détaillées de secteur exposent
habitabilityScoresur les planètes des secteurs courants ou déjà visités. - API v30 : ajout des recettes
thermal_protection_shell,parachute_pack,descent_guidance_moduleetatmospheric_drop_kit. - API : ajout de
POST /api/probe/mannies/{mannyId}/drop-storage-containerpour larguer un container additionnel sur une planète avec consommation d’un kit de largage atmosphérique. - Secteurs : les containers largués sur planète sont persistés dans le JSON du secteur avec
originProbeId, sans être exposés dans les observations API pour le moment. - Interface : ajout du formulaire Manny “Larguer un container sur une planète”.
- Stats : ajout du nombre de planètes habitables dans les secteurs générés et dans les secteurs visités.
- Interface : la page
/sensorsaffiche le score d’habitabilité des planètes et documente ce score avec les unités.
Fixed
- Craft : la complétion d’une fabrication est idempotente, évitant qu’un double rafraîchissement concurrent crée deux containers, items ou Mannys pour une seule tâche.
2026-06-14
Added
- Stats : ajout du nombre de waypoints installés dans l'univers et d'un podium des joueurs en ayant installé le plus.
- Stats : ajout d'un podium des sondes ayant visité le plus de secteurs sur la page publique des statistiques.
- Stats : ajout du champ
neumann_probes.exclude_from_statspour retirer des sondes des statistiques publiques.
Fixed
- Interface : le panneau de navigation utilise désormais le même fond que l'espace de travail.
- Interface : dans
Inventaires, les compteurs de total sont alignés avec les compteurs des lignes par container. - Interface : la case
Se souvenir de moiest de nouveau transmise lors d'une connexion OAuth, afin de poser un cookie de session persistant.
2026-06-13
Added
- API v28 : les posts du forum exposent désormais
firstMessageIdet les réponses de détail de post incluentfirstMessage. - API v27 : les messages du forum exposent
editedAt, renseigné lorsqu’un message a été modifié. - API v26 : ajout d’un forum léger sous
/api/forum/*, avec catégories ordonnées, posts et messages/réponses. - Forum : ajout des endpoints
GET|POST /api/forum/categories,GET|PATCH|DELETE /api/forum/categories/{categoryId},GET|POST /api/forum/posts,GET|PATCH|DELETE /api/forum/posts/{postId},GET|POST /api/forum/posts/{postId}/messagesetPATCH|DELETE /api/forum/messages/{messageId}. - Forum : les catégories sont réservées aux joueurs
forumAdmin; les joueursforumModeratorouforumAdminpeuvent épingler, modifier et supprimer tous les posts et messages. - Joueurs : ajout des flags persistants
forumAdminetforumModerator, exposés dans/api/me.
Changed
- Craft : clarification de la description du marque-page de navigation dans l’interface et les exemples API.
- Forum :
GET /api/forum/posts/{postId}sépare le message initial dansfirstMessage; le tableaumessagescontient uniquement les réponses paginées. - Forum : l’auteur d’un message peut désormais modifier son propre message via
PATCH /api/forum/messages/{messageId}; les modérateurs et admins conservent le droit de modifier tous les messages. - Les clients typés doivent accepter
apiVersion: 28et les nouveaux schémasForumCategory*,ForumPost*,ForumMessage*, les champsForumPost.firstMessageId,ForumMessage.editedAt,firstMessagesur les réponses de détail/création de post, ainsi que les champsforumAdminetforumModeratorsurPlayer.
Fixed
- Interface : la recette sélectionnée dans
Mannys & imprimante > Fabriquerreste conservée après les rafraîchissements automatiques.
2026-06-12
Added
- API v25 : ajout des warnings persistants de dégâts de mouvement avec
GET /api/probe/damage-warningsetPATCH /api/probe/damage-warnings/{damageWarningId}pour marquer un warning comme lu. - Mouvement : à partir de 5 containers additionnels, un saut peut casser un lien de container avec 10% de risque, puis +10 points par container supplémentaire jusqu’à 100%.
- Mouvement : le container perdu est tiré au sort dès l’initiation du saut, puis devient un container dérivant avec son contenu dans le secteur de départ en fin d’accélération ou dans le secteur d’arrivée en début de décélération.
- API v24 : ajout des recettes
electric_motor,battery_pack,linear_actuatoretmanny. - Craft : la fabrication d’une Manny crée désormais une vraie entité Manny stockée dans la sonde, avec l’encombrement et la capacité cargo standards.
Changed
- Craft : le calcul des composants manquants est désormais récursif, afin qu’une recette puisse embarquer plusieurs niveaux de sous-recettes dans son coût et sa durée.
- Interface : les écrans
Mannys & imprimanteetInventairesaffichent les nouveaux composants et calculent récursivement la disponibilité des ingrédients. - Interface : les warnings de dégâts non lus mettent l’onglet
Alertesen style warning et s’acquittent via l’API au lieu du stockage local. - Déploiement : le schéma initialise automatiquement la table
probe_damage_warningset ses index. - Les clients typés doivent accepter
apiVersion: 25, les nouveaux types d’itemselectric_motor,battery_packetlinear_actuator, la recette/sortiemanny, ainsi que les schémasProbeDamageWarning*.
Fixed
- Interface : les panneaux interactifs ouverts dans les listes de métriques conservent maintenant leur état lors des rafraîchissements automatiques.
2026-06-11
Changed
- Réécriture complète de la Web UI : l’ancien template monolithique a été remplacé par un shell commun
templates/main.html, des templates dédiés par page et des scripts JavaScript spécifiques par écran. - Les anciens panneaux console sont désormais accessibles comme pages web autonomes :
/,/sensors,/movement,/inventories,/mannies,/messaginget/alerts. - Les pages publiques
/about,/changelog,/statset/api-docsont été intégrées au même système de routes frontend, avec Swagger UI sur/api-docs. - Le sélecteur de langue persiste maintenant le choix dans un cookie, reste sur la route courante et recharge le dictionnaire i18n avec une URL versionnée.
- Le menu tutoriel du header ouvre les tutoriels intégrés; après une première connexion OAuth et le choix du pseudonyme, le joueur est redirigé vers
/?tutorial=context.
Removed
- Suppression de l’ancien template
templates/home.html, qui n’était plus utilisé depuis la migration vers les routes frontend dédiées.
2026-06-09
Added
- Ajout de la page publique
/stats, accessible depuis le pied de page, qui affiche les statistiques agrégées de l’univers depuisvar/stats.json. - Ajout du script
scripts/generate-stats.phppour générer le JSON de statistiques destiné à une tâche CRON quotidienne. - Les statistiques couvrent notamment les sondes, secteurs générés et visités, trous noirs, astéroïdes par ressource minable, Mannys perdus ou oubliés, containers détachés et distances extrêmes entre sondes.
2026-06-08
Added
- API v23 : ajout du détachement de containers additionnels par Manny, en mode dérivant (
drifting) ou caché sur astéroïde (hidden_on_asteroid), avec conservation du contenu et des règles de routing. - API : ajout de
POST /api/probe/mannies/{mannyId}/detach-storage-container,POST /api/probe/mannies/{mannyId}/inspect-asteroidetPOST /api/probe/mannies/{mannyId}/recover-storage-container; le salvage existant peut aussi récupérer un container détaché dérivant. - API : les containers cachés sur astéroïde peuvent être détectés lors du minage ou d’une inspection Manny via
artificialObjectDetected, sans exposer leur contenu.
Changed
- Interface : le temps restant d’un déplacement dans l’onglet
Sondese met maintenant à jour localement et rafraîchit les données à l’arrivée. - Interface : amélioration de l’onglet
Capteurs et radars, qui désactive désormais le boutonScannerquand la somme des coordonnées relatives est impaire. - Interface : dans
Mannys & imprimante, une Manny située dans un autre secteur afficheTrop éloignéedans son accordéon et ne conserve que la métriquePositionau dépliage. - Les clients typés doivent accepter
apiVersion: 23, les tâches Mannydetaching_storage_containeretinspecting_asteroid, ainsi que le type de secteurdetached_container.
Fixed
- API : lorsqu’une sonde revient dans le secteur d’une Manny
forgottenqui lui appartient encore, la Manny inactive est automatiquement remise à bord si une place de stockage est disponible, et l’objet de secteurforgottenest supprimé. - JS : une tentative de scan avec des coordonnées relatives invalides efface maintenant le résultat du scan précédent tout en conservant le message d’erreur existant.
- JS : la liste des Mannys est resynchronisée après le chargement du secteur courant de la sonde afin d’afficher correctement les Mannys trop éloignées.
2026-06-06
Added
- API v16 : ajout de la messagerie inter-sondes avec
POST /api/probe/messages,GET /api/probe/messagesetPATCH /api/probe/messages/{messageId}/read. - Un message peut être envoyé uniquement à une autre sonde présente dans le même secteur que la sonde émettrice.
- Les messages reçus exposent l’émetteur, le destinataire, le secteur relatif, le corps du message, le statut
unread/read,readAt,createdAtetupdatedAt. - API v18 : ajout de
GET /api/probe/messages/sentpour consulter les messages envoyés par la sonde courante avec la même pagination que les messages reçus. - Interface : ajout de l’onglet
MessagerieentreMouvementetAlertes, avec envoi à une sonde du secteur, liste des messages reçus et passage des messages non lus au statutread.
Changed
- API v17 :
GET /api/probe/messagesretourne par défaut les 50 derniers messages reçus et accepte les paramètres optionnelslimitetoffsetpour consulter l’historique. - La réponse de
GET /api/probe/messagesexpose désormais un objetpaginationaveclimit,offset,count,totalethasMore. - API v19 :
GET /api/probe/messages/sentn’expose plus l’état de lecture du message (status,readAt,updatedAt). - Interface : la vue
Messageriesépare maintenantMessages reçusetMessages envoyésen onglets de classeur. - Interface : l’onglet
Messages envoyésn’affiche plus de statutLu/Non lu. - Interface : les règles de stockage par container utilisent des listes à sélection multiple avec une aide contextualisée et empêchent un même type d’être choisi dans plusieurs règles du même container.
- API v20 : les objets détaillés de
/api/sectoret/api/probe/sectorexposent désormaismassUnitetradiusUnitquandmass/radiussont présents. - Interface : les masses et rayons des corps détectés affichent leur unité (
M☉,R☉,M🜨,R🜨,km,AU) et l’ongletCapteurs et radarsexplique ces unités. - Interface : le dictionnaire de traduction JS est désormais servi via un JSON versionné et cacheable au lieu d’être injecté inline dans le HTML.
- API v21 : ajout des recettes
micro_conductor,ceramic_insulator,crystal_substrate,dopant_matrixetintegrated_circuit, fabriquées via l’imprimante atomique. - Interface : l’
Imprimante 3D atomiqueest renomméeImprimante atomique, et les nouveaux composants de circuit sont affichés dans les inventaires, recettes et règles de stockage. - Craft : les coûts de deutérium des recettes sont vérifiés et consommés en ECE de cuve, afin que
0.13 ECEcorresponde à 13% d’une cuve pleine. - API v22 : ajout de
POST /api/probe/atomic-printer/craftpour lancer les recettes de l’imprimante atomique avec réservation automatique d’une Manny assistante. - Interface : l’onglet
MannysdevientMannys & imprimante; l’imprimante atomique y apparaît comme poste de fabrication et les Mannys réservées affichentAssistance à l’imprimante.
Breaking Changes
- Les clients typés doivent accepter
apiVersion: 22, les nouveaux schémasProbeMessage*, le champpaginationsurProbeMessagesResponseet les nouveaux types d’items de craft électronique. - Les recettes
atomic_3d_printerdoivent être lancées viaPOST /api/probe/atomic-printer/craft;POST /api/probe/mannies/{mannyId}/craftest réservé aux recettes fabriquées directement par une Manny. - Les clients de
GET /api/probe/messages/sentdoivent utiliserProbeSentMessagesResponse: les champsstatus,readAtetupdatedAtne sont plus présents sur les messages envoyés.
2026-06-05
Added
- Rédaction et intégration des tutoriels de premiers pas : contexte de la sonde, déplacement et utilisation des Mannys, avec illustrations agrandissables.
Changed
- API v15 : l’installation d’un waypoint-bookmark passe par
POST /api/probe/mannies/{mannyId}/install-bookmarket crée une tâche Mannyinstalling_waypoint_bookmarkde 10 secondes. - L’ancien endpoint instantané
/api/probe/waypoint-bookmarks/{itemId}/deployn’est plus exposé dans l’API publique. - L’interface Actions ne contient plus le formulaire “Poser un marque-page”; l’action est disponible dans Mannys > Attribuer une tâche à la Manny.
- L’ordre consomme un waypoint-bookmark en stock au lancement de la tâche, puis conserve la persistance existante des
waypointBookmarkssur l’objet ciblé.
Breaking Changes
- Les clients typés doivent accepter
apiVersion: 15et la nouvelle tâche Mannyinstalling_waypoint_bookmark.
2026-06-04
Added
- API v14 : ajout de la gestion des stocks par container (
probe-core+ containers supplémentaires individuels). - Ajout des endpoints
/api/probe/storage-containers,/api/probe/storage-containers/{containerId},/api/probe/storage-containers/{containerId}/ruleset/api/probe/storage-moves. - Ajout du script
scripts/migrate-storage-containers.phppour répartir les stocks existants selon la règle par défaut. - L’interface des sous-systèmes affiche les lignes d’inventaire par container et permet de filtrer l’inventaire par container.
- Ajout de l’accordéon “Gérer les règles de stockage par container”.
- L’interface d’inventaire ajoute des actions par ligne de container pour déplacer le stock via une Manny ou le jeter dans l’espace avec confirmation.
- Ajout de
CHANGELOG.mdcomme source de vérité versionnée pour les changements du projet. - Ajout de la route
/changelog, qui affiche ce changelog en HTML depuis le site. - Ajout de
config/gameplay.jsonetconfig/universe.jsonpour centraliser les curseurs de gameplay et de génération procédurale.
Changed
/api/probeconserve l’inventaire global, mais les items exposent maintenant leurcontaineret les ressources exposent leurs lignescontainers.- Le déplacement de stock entre containers passe par une tâche Manny
moving_stockage. /api/probe/storage-movesaccepte des lotsitemIds/targetMannyIds, et le jettison de ressources peut cibler uncontainerId.- L’imprimante 3D atomique reste dans la sonde et ne peut pas être déplacée; le deutérium reste dans sa cuve dédiée.
- Les fichiers
config/*-local.jsonsurchargent les configurations versionnées sans être suivis par Git.
Breaking Changes
- Les clients typés doivent accepter
apiVersion: 14, le champinventory.containers, les placements de stock par container et la nouvelle tâche Mannymoving_stockage. - Stockage Manny : suppression de
mannies.task_payload_json; les payloads canoniques sont joints depuisscheduled_events, les champs opérationnels sont projetés dansmanny_taskset les items consommés sont stockés dansmanny_task_consumed_items. Exécuterphp scripts/one-shot-scripts/migrate-manny-task-storage.php --database-config=var/database-prod.jsonavant de déployer le nouveau code. - Scheduler : le claim d’un événement réutilise désormais l’objet déjà hydraté et ne relit plus la ligne ni son JSON après l’acquisition du verrou.
- Stockage des items : remplacement de
probe_items.metadata_jsonetdetached_storage_container_items.metadata_jsonpar des colonnes relationnelles pour la fabrication, le bonus de capacité et la source de restauration; seules les métadonnées administratives rares restent dansaudit_metadata_json. Exécuterphp scripts/one-shot-scripts/migrate-item-metadata-storage.php --database-config=var/database-prod.jsonavant de déployer le nouveau code.